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)")); //可以了,!表达式最好都加上括号吧 }