public void CanTranslateExpressionWithUnaryAndBinaryOperators() { // Prepare var x = new FakeEvaluableExpression(); var y = new FakeEvaluableExpression(); var z = new FakeEvaluableExpression(); var not = new NotExpression(); var and1 = new AndExpression(); var and2 = new AndExpression(); Tokens.Add(x); Tokens.Add(and1); Tokens.Add(not); Tokens.Add(y); Tokens.Add(and2); Tokens.Add(z); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.AreSame(x, result[0]); Assert.AreSame(y, result[1]); Assert.AreSame(not, result[2]); Assert.AreSame(and1, result[3]); Assert.AreSame(z, result[4]); Assert.AreSame(and2, result[5]); }
public void CanTranslateExpressionUsingParenthesisPrecedence() { // Prepare (x OR y) AND z var x = new FakeEvaluableExpression(); var y = new FakeEvaluableExpression(); var z = new FakeEvaluableExpression(); var and = new AndExpression(); var or = new OrExpression(); var lp = new OpenParenthesis(); var rp = new CloseParenthesis(); Tokens.Add(lp); Tokens.Add(x); Tokens.Add(or); Tokens.Add(y); Tokens.Add(rp); Tokens.Add(and); Tokens.Add(z); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.IsTrue(result.Count == 5); Assert.AreSame(x, result[0]); Assert.AreSame(y, result[1]); Assert.AreSame(or, result[2]); Assert.AreSame(z, result[3]); Assert.AreSame(and, result[4]); }
public void CanTranslateExpressionWithManyBinaryOperatorsThatHaveDifferentPrecendence() { // Prepare (x OR y AND z) var x = new FakeEvaluableExpression(); var y = new FakeEvaluableExpression(); var z = new FakeEvaluableExpression(); var or = new OrExpression(); var and = new AndExpression(); Tokens.Add(x); Tokens.Add(or); Tokens.Add(y); Tokens.Add(and); Tokens.Add(z); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.AreSame(x, result[0]); Assert.AreSame(y, result[1]); Assert.AreSame(z, result[2]); Assert.AreSame(and, result[3]); Assert.AreSame(or, result[4]); }
public void CanEvaluateAsynchronously() { // Prepare var leaf1 = new FakeEvaluableExpression(true, TimeSpan.FromSeconds(1)); var leaf2 = new FakeEvaluableExpression(true); var leaf3 = new FakeEvaluableExpression(false); var notOp = new NotExpression { Left = leaf1 }; var andOp = new AndExpression { Left = notOp, Right = leaf2 }; var ast = new OrExpression { Left = andOp, Right = leaf3 }; var taskResult = ast.Evaluate(new CancellationToken()); // Act taskResult.RunSynchronously(); // Verify Assert.IsFalse(taskResult.Result); }
public void CanTranslateExpressionWithSingleOperand() { // Prepare var x = new FakeEvaluableExpression(); Tokens.Add(x); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.IsNotNull(result); Assert.IsTrue(result.Count() == 1); Assert.IsTrue(result.First() == x); }
public void CanTranslateExpressionWithUnaryOperator() { // Prepare (NOT x) var x = new FakeEvaluableExpression(); var not = new NotExpression(); Tokens.Add(not); Tokens.Add(x); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.AreSame(x, result[0]); Assert.AreSame(not, result[1]); }
public void CanTranslateExpressionWithParenthesis() { // Prepare (x) var x = new FakeEvaluableExpression(); var lp = new OpenParenthesis(); var rp = new CloseParenthesis(); Tokens.Add(lp); Tokens.Add(x); Tokens.Add(rp); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.IsTrue(result.Count == 1); Assert.AreSame(x, result[0]); }
public void CanTranslateExpressionWithBinaryOperator() { // Prepare (x AND y) var x = new FakeEvaluableExpression(); var y = new FakeEvaluableExpression(); var and = new AndExpression(); Tokens.Add(x); Tokens.Add(and); Tokens.Add(y); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.AreSame(x, result[0]); Assert.AreSame(y, result[1]); Assert.AreSame(and, result[2]); }
public void CanTranslateExpressionWithParenthesisAndBinaryOperator() { // Prepare (x AND y) var x = new FakeEvaluableExpression(); var y = new FakeEvaluableExpression(); var and = new AndExpression(); var lp = new OpenParenthesis(); var rp = new CloseParenthesis(); Tokens.Add(lp); Tokens.Add(x); Tokens.Add(and); Tokens.Add(y); Tokens.Add(rp); // Act var result = Parser.TransformInfixToPostfix(Tokens).ToList(); // Verify Assert.IsTrue(result.Count == 3); Assert.AreSame(x, result[0]); Assert.AreSame(y, result[1]); Assert.AreSame(and, result[2]); }