public void FunctionsTest()
        {
            var mkParser = new MockParser();

            Assert.IsFalse(mkParser.EvaluateExpression("min(1,2) == 2"));
            Assert.IsTrue(mkParser.EvaluateExpression("min(1,2) == 1"));
        }
        public void BasicTest()
        {
            var mkParser = new MockParser();

            Assert.IsFalse(mkParser.EvaluateExpression("1>2"));
            Assert.IsTrue(mkParser.EvaluateExpression("2>1"));

            Assert.IsFalse(mkParser.EvaluateExpression("0"));
            Assert.IsTrue(mkParser.EvaluateExpression("1"));
            Assert.IsTrue(mkParser.EvaluateExpression("2"));
            Assert.IsTrue(mkParser.EvaluateExpression("-1"));

            //!: //定义为<=0的数为真, >0的为假
            Assert.IsFalse(mkParser.EvaluateExpression("!1"));
            Assert.IsFalse(mkParser.EvaluateExpression("!-1"));//表达式无效
            Assert.IsTrue(mkParser.EvaluateExpression("!(-1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("!0"));

            //字符串不解析
            Assert.IsFalse(mkParser.EvaluateExpression("true"));
            Assert.IsFalse(mkParser.EvaluateExpression("True"));

            Assert.IsTrue(mkParser.EvaluateExpression("1&&1"));
            Assert.IsTrue(mkParser.EvaluateExpression("1||0"));
            Assert.IsFalse(mkParser.EvaluateExpression("0||0"));
            Assert.IsTrue(mkParser.EvaluateExpression("!0||0"));

            Assert.IsTrue(mkParser.EvaluateExpression("2>1.1*1.5"));

            Assert.IsTrue(mkParser.EvaluateExpression("1&&0||1"));
            Assert.IsFalse(mkParser.EvaluateExpression("0||0&&1"));
            Assert.IsTrue(mkParser.EvaluateExpression("1&&1||1"));

            //问题出在! not 后面跟 || 的时候必须大括号, 否则先计算||
            Assert.IsTrue(mkParser.EvaluateExpression("0||1"));

            //错误写法
            Assert.IsFalse(mkParser.EvaluateExpression("!(1)||1"));

            //错误写法!!!
            Assert.IsFalse(mkParser.EvaluateExpression("!1||1"));

            //正确写法
            Assert.IsTrue(mkParser.EvaluateExpression("(!1)||1"));
            Assert.IsTrue(mkParser.EvaluateExpression("1&&(!1)||1"));

            Assert.IsTrue(mkParser.EvaluateExpression("(!1&&1) || (1&&1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1&&!1) || (1&&1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1&&1) || (!1&&1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1&&1) || (1&&!1)"));

            Assert.IsTrue(mkParser.EvaluateExpression("((!1)||1) && (1||1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1||!1) && (1||1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1||!1) && ((!1)||1)"));
            Assert.IsTrue(mkParser.EvaluateExpression("(1||!1) && (1||!1)"));

            //实际遇到问题, 应该是false的
            Assert.IsTrue(mkParser.EvaluateExpression("!0&&!0&&0&&!0"));
            //问题应该还是!表达式, 加上括号试试
            Assert.IsFalse(mkParser.EvaluateExpression("(!0)&&(!0)&&0&&(!0)"));
            //可以了,!表达式最好都加上括号吧
        }