Exemple #1
0
            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]);
            }
Exemple #2
0
            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]);
            }
Exemple #3
0
            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]);
            }
Exemple #4
0
        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);
        }
Exemple #5
0
            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);
            }
Exemple #6
0
            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]);
            }
Exemple #7
0
            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]);
            }
Exemple #8
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]);
            }
Exemple #9
0
            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]);
            }