예제 #1
0
        public void TestFuncWithManyArguments()
        {
            var rpn = new Rpn("threesum(3+4,sqrt(9),6)");

            Assert.AreEqual("3 4 + 9 sqrt( 6 threesum(", rpn.ToString());
            Assert.AreEqual(3, ((RpnItemFunction)rpn.Result.Last()).ArgumentCount);
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
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);
        }
        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 CompileRpn(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.Evaluate(variables);

            Assert.AreEqual(8, value);
        }
        public void TestEqualOp(double variableValue, double expected)
        {
            var rpn = new Rpn("Url==42");

            Assert.AreEqual("Url 42 ==", rpn.ToString());

            var eval = new CompileRpn(rpn, new List <NameAndType>
            {
                new NameAndType("Url", typeof(double))
            });
            var value = eval.Evaluate(new object[] { variableValue });

            Assert.AreEqual(expected, value);
        }
        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);
            });
        }
예제 #10
0
        public void TestEqualOp()
        {
            var rpn = new Rpn("2+5==3+7");

            Assert.AreEqual("2 5 + 3 7 + ==", rpn.ToString());
        }
예제 #11
0
        public void TestNotFuncNot()
        {
            var rpn = new Rpn("!x(!y)");

            Assert.AreEqual("y ! x( !", rpn.ToString());
        }
예제 #12
0
        public void TestAndOr2()
        {
            var rpn = new Rpn("a&(b|c)&d");

            Assert.AreEqual("a b c | & d &", rpn.ToString());
        }
예제 #13
0
        public void TestParentesis2()
        {
            var rpn = new Rpn("((Y))");

            Assert.AreEqual("Y", rpn.ToString());
        }
예제 #14
0
        public void TestJimmysExpression()
        {
            var rpn = new Rpn("first(i1==0 ? a1, i1==1 ? tail(a2,\",\"))");

            Assert.AreEqual("i1 0 == a1 ? i1 1 == a2 \",\" tail( ? first(", rpn.ToString());
        }
예제 #15
0
        public void TestAndOr1()
        {
            var rpn = new Rpn("a&b|c&d");

            Assert.AreEqual("a b & c d & |", rpn.ToString());
        }
예제 #16
0
        public void TestMulPlus()
        {
            var rpn = new Rpn("3*4+5");

            Assert.AreEqual("3 4 * 5 +", rpn.ToString());
        }
예제 #17
0
        public void TestMinus()
        {
            var rpn = new Rpn("3 - 4");

            Assert.AreEqual("3 4 -", rpn.ToString());
        }
예제 #18
0
        public void TestQuestionOp()
        {
            var rpn = new Rpn("i==2 ? nisse");

            Assert.AreEqual("i 2 == nisse ?", rpn.ToString());
        }
예제 #19
0
        public void TestNot2()
        {
            var rpn = new Rpn("!!true");

            Assert.AreEqual("true ! !", rpn.ToString());
        }
예제 #20
0
        public void TestMultiplication()
        {
            var rpn = new Rpn(" 3*4 ");

            Assert.AreEqual("3 4 *", rpn.ToString());
        }
예제 #21
0
        public void TestFancyVariableName2()
        {
            var rpn = new Rpn("#index+1");

            Assert.AreEqual("#index 1 +", rpn.ToString());
        }
예제 #22
0
        public void TestFancyVariableName()
        {
            var rpn = new Rpn("0@a3$_+@");

            Assert.AreEqual("0@a3$_ @ +", rpn.ToString());
        }
예제 #23
0
        public void TestNot4()
        {
            var rpn = new Rpn("!(3+4)");

            Assert.AreEqual("3 4 + !", rpn.ToString());
        }
예제 #24
0
        public void TestPlusMul()
        {
            var rpn = new Rpn("3+4*5");

            Assert.AreEqual("3 4 5 * +", rpn.ToString());
        }
예제 #25
0
        public void TestNot3()
        {
            var rpn = new Rpn("!3+4");

            Assert.AreEqual("3 ! 4 +", rpn.ToString());
        }
예제 #26
0
        public void TestDivMulDiv()
        {
            var rpn = new Rpn("3/4*5/6");

            Assert.AreEqual("3 4 / 5 6 / *", rpn.ToString());
        }
예제 #27
0
        public void TestDivision()
        {
            var rpn = new Rpn("3/4");

            Assert.AreEqual("3 4 /", rpn.ToString());
        }
예제 #28
0
        public void TestStringConstant()
        {
            var rpn = new Rpn("len(\"nisse\")==5");

            Assert.AreEqual("\"nisse\" len( 5 ==", rpn.ToString());
        }
예제 #29
0
        public void TestPlusMany()
        {
            var rpn = new Rpn("3+4+5+6");

            Assert.AreEqual("3 4 + 5 + 6 +", rpn.ToString());
        }
예제 #30
0
        public void TestFunction1()
        {
            var rpn = new Rpn("sin(pi)");

            Assert.AreEqual("pi sin(", rpn.ToString());
        }