public void MathExpression_Arithmetic_Division_Throws_If_Denominator_Is_Zero()
 {
     var expression = MathExpressionBuilder.CreateArithmetic(ArithmeticOperator.Division, 42, 0);
     var visitor = new EvaluationVisitor();
     var message = Assert.Throws<MathExpressionException>(() => visitor.Evaluate(expression, new MathExpressionContext())).Message;
     Assert.AreEqual("Cannot divide by zero.", message);
 }
 public void MathExpression_Arithmetic_Expression_Throws_When_Evaluated_If_Operator_Is_Unknown()
 {
     var op = ((ArithmeticOperator)int.MaxValue);
     var expression = MathExpressionBuilder.CreateArithmetic(op, 42, 0);
     var visitor = new EvaluationVisitor();
     var exception = Assert.Throws<MathExpressionException>(() => visitor.Evaluate(expression, new MathExpressionContext()));
     Assert.AreEqual("Encountered unknown arithmetic operator.", exception.Details);
 }
 public void MathExpression_Can_Evaluate_Arithmetic_Multiplication_Expression()
 {
     var expression = MathExpressionBuilder.CreateArithmetic(ArithmeticOperator.Multiplication, 21, 2);
     var visitor = new EvaluationVisitor();
     Assert.AreEqual(42, visitor.Evaluate(expression, new MathExpressionContext()));
 }
 public void MathExpression_Can_Evaluate_Variable_Expression()
 {
     var expression = new VariableExpression("x");
     var visitor = new EvaluationVisitor();
     var context = new MathExpressionContext();
     context.Define("x", 42D);
     Assert.AreEqual(42, visitor.Evaluate(expression, context));
 }
 public void MathExpression_Can_Evaluate_Numeric_Expression()
 {
     var expression = new NumericExpression(42);
     var visitor = new EvaluationVisitor();
     Assert.AreEqual(42, visitor.Evaluate(expression, new MathExpressionContext()));
 }
 public void MathExpression_Can_Evaluate_Constant_Expression()
 {
     var expression = new ConstantExpression("pi", Math.PI);
     var visitor = new EvaluationVisitor();
     Assert.AreEqual(Math.PI, visitor.Evaluate(expression, new MathExpressionContext()));
 }