Esempio n. 1
0
 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);
        }
Esempio n. 10
0
        public void TestNullParsing()
        {
            var rpn   = new Rpn("null");
            var eval  = new EvaluateRpn(rpn);
            var value = eval.Eval();

            Assert.AreEqual(null, value.String);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        public void TestStringAddition()
        {
            var rpn   = new Rpn("\"3\"+\"3\"");
            var eval  = new EvaluateRpn(rpn);
            var value = eval.Eval();

            Assert.AreEqual("33", value.String);
        }
Esempio n. 13
0
        public void TestDivision()
        {
            var rpn   = new Rpn("3+4/2");
            var eval  = new EvaluateRpn(rpn);
            var value = eval.Eval();

            Assert.AreEqual(5, value.Numeric);
        }
Esempio n. 14
0
        public override void AssignResult(object[] result, object obj)
        {
            var itm = Evaluator.Eval(result);

            result[ResultSetIndex] = FieldType == typeof(double)
                ? (object)itm.Numeric
                : itm.String;
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
        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);
 }