public bool PassesFilterPre(object[] rowResult) { if (IsBasedOnAggregation) { return(true); // let it thru and catch it in PassesFilterPost instead } return(_formula.Eval(rowResult).Numeric > 0); }
public void TestNotEqualOpStr() { var rpn = new Rpn("''hej'!='då'"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(1, value.Numeric); }
public void TestNotEqualOp2() { var rpn = new Rpn("85!=85"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(0, value.Numeric); }
public void TestFirstFunction() { var rpn = new Rpn("(12)/(first(0?1,0?2,0?3,1?4,1?5))"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(3, value.Numeric); }
public void TestOrderEvaluation() { var rpn = new Rpn("12/2/3"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(2, value.Numeric); }
public void TestBasicAddition() { var rpn = new Rpn("3+4"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(7, value.Numeric); }
public void TestThatNullIsFalse() { var rpn = new Rpn("null?1"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(null, value.String); }
public void TestSubtraction() { var rpn = new Rpn("100-10-10-10"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(70, value.Numeric); }
public void TestEqLtParsing() { var rpn = new Rpn("5<=2+3"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(1, value.Numeric); }
public void TestNullParsing() { var rpn = new Rpn("null"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(null, value.String); }
public void TestDivision3() { var rpn = new Rpn("1000/10*2/10"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(20, value.Numeric); }
public void TestStringAddition() { var rpn = new Rpn("\"3\"+\"3\""); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual("33", value.String); }
public void TestDivision() { var rpn = new Rpn("3+4/2"); var eval = new EvaluateRpn(rpn); var value = eval.Eval(); Assert.AreEqual(5, value.Numeric); }
public override void AssignResult(object[] result, object obj) { var itm = Evaluator.Eval(result); result[ResultSetIndex] = FieldType == typeof(double) ? (object)itm.Numeric : itm.String; }
public void CanWorkWithGuids() { var id = Guid.NewGuid(); var rpn = new Rpn($"id=='{id}'"); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("id", typeof(Guid)) }); var value = eval.Eval(new object[] { id }); Assert.AreEqual(1, value.Numeric); }
public void TestNullCoalescing(string var1, string var2, string expected) { var rpn = new Rpn("var1??var2"); Assert.AreEqual("var1 var2 ??", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("var1", typeof(string)), new NameAndType("var2", typeof(string)) }); var value = eval.Eval(new object[] { var1, var2 }); Assert.AreEqual(expected, value.String); }
public void TestThatNullabelsWorks1() { var rpn = new Rpn("var1??-1"); Assert.AreEqual("var1 -1 ??", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("var1", typeof(double)) }); var value = eval.Eval(new object[] { null }); Assert.AreEqual(-1, value.Numeric); }
public void TestThatStringIsAutomaticallyConvertedToNumber() { var rpn = new Rpn("var1*2"); Assert.AreEqual("var1 2 *", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("var1", typeof(string)) }); var value = eval.Eval(new object[] { -1 }); Assert.AreEqual(-2, value.Numeric); }
public void TestEquality(object var1, object var2, int expected) { var rpn = new Rpn("var1==var2"); Assert.AreEqual("var1 var2 ==", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("var1", typeof(string)), new NameAndType("var2", typeof(string)) }); var value = eval.Eval(new object[] { var1, var2 }); Assert.AreEqual(expected, value.Numeric); }
public void TestEqualOp(double variableValue, double expected) { var rpn = new Rpn("Url==42"); Assert.AreEqual("Url 42 ==", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("Url", typeof(double)) }); var value = eval.Eval(new object[] { variableValue }); Assert.AreEqual(expected, value.Numeric); }
public void TestVariables() { var rpn = new Rpn("3+(a+q)/(2+2)+3"); Assert.AreEqual("3 a q + 2 2 + / + 3 +", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("a", typeof(double)), new NameAndType("q", typeof(double)) }); var variables = new object[] { 3.0, 5.0 }; var value = eval.Eval(variables); Assert.AreEqual(8, value.Numeric); }
public void TestNotEqualOp2Str(string variableValue, double expected) { var rpn = new Rpn("Url!='www'"); Assert.AreEqual("Url \"www\" !=", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("Url", typeof(string)) }); var value = eval.Eval(new object[] { variableValue }); Assert.AreEqual(expected, value.Numeric); }
public void Test() { var rpn = new Rpn("3+(dbl+len(str))/7.0"); Assert.AreEqual("3 dbl str len( + 7 / +", rpn.ToString()); var eval = new EvaluateRpn(rpn, new List <NameAndType> { new NameAndType("dbl", typeof(double)), new NameAndType("str", typeof(string)) }); var rnd = new Random(); Enumerable.Range(0, 10000).AsParallel().ForAll(_ => { var vars = new object[] { rnd.NextDouble() * 100, new string(' ', rnd.Next(10)) }; var expected = 3 + ((double)vars[0] + ((string)vars[1]).Length) / 7.0; Assert.AreEqual(expected, eval.Eval(vars).Numeric); }); }
public object Evaluate(object obj) { return(_evaluator?.Eval(new[] { obj }).Numeric ?? obj); }