示例#1
0
        public void EvaluationVisit(string input, int value)
        {
            var   lexer   = new Lexer(input);
            var   parser  = new Parser(lexer);
            INode tree    = parser.Parse();
            var   visitor = new EvaluationVisitor();
            int   result  = visitor.Visit(tree);

            Assert.That(result, Is.EqualTo(value));
        }
示例#2
0
        public void LogicalExpressionShouldHandlePrecedence()
        {
            BinaryExpresssion expression = LogicalExpression.Create(Parse("3 * (5 + 2)")) as BinaryExpresssion;

            EvaluationVisitor visitor = new EvaluationVisitor();

            visitor.Visit(expression);
            Assert.AreEqual(21, visitor.Result);

            Assert.AreEqual(40, new Expression("5 * 2 ^ 3").Evaluate());
        }
示例#3
0
        public void LogicalExpressionShouldCreateTimes()
        {
            BinaryExpresssion expression = LogicalExpression.Create(Parse("3 * 2")) as BinaryExpresssion;

            Assert.IsNotNull(expression);
            Assert.AreEqual(BinaryExpressionType.Times, expression.Type);

            EvaluationVisitor visitor = new EvaluationVisitor();

            visitor.Visit(expression);
            Assert.AreEqual(6, visitor.Result);
        }
示例#4
0
        public void LogicalExpressionShouldCreateNot()
        {
            UnaryExpression expression = LogicalExpression.Create(Parse("not true")) as UnaryExpression;

            Assert.IsNotNull(expression);
            Assert.AreEqual(typeof(Value), expression.Expression.GetType());

            EvaluationVisitor visitor = new EvaluationVisitor();

            visitor.Visit(expression);
            Assert.AreEqual(false, visitor.Result);
        }
示例#5
0
        public void LogicalExpressionShouldCreateInteger()
        {
            Value expression = LogicalExpression.Create(Parse("2")) as Value;

            Assert.IsNotNull(expression);
            Assert.AreEqual("2", expression.Text);

            EvaluationVisitor visitor = new EvaluationVisitor();

            visitor.Visit(expression);
            Assert.AreEqual(2, visitor.Result);
        }