public void VisitIntegerConstantExpr() { var target = new TypeCheckingVisitor(); var expression = new ConstantExpr(1234); var actual = target.Visit(expression, scope); Assert.AreEqual(ValueType.Int, actual); }
public void VisitBooleanConstantExpr(bool value) { var target = new TypeCheckingVisitor(); var expression = new ConstantExpr(value); var actual = target.Visit(expression, scope); Assert.AreEqual(ValueType.Boolean, actual); }
public void NegationExpressionTest(object value, object expected) { var target = new TypeCheckingVisitor(); var expr = new NegationExpr(new ConstantExpr(value)); var actual = target.Visit(expr, scope); Assert.AreEqual(expected, actual); }
public void AndOrTest() { var target = new TypeCheckingVisitor(); var expr = new AndExpr(new ConstantExpr(true), new OrExpr(new ConstantExpr(true), new ConstantExpr(false))); var actual = target.Visit(expr, scope); Assert.AreEqual(ValueType.Boolean, actual); }
public void VisitConditionMustBeBooleanType(object condition) { var target = new TypeCheckingVisitor(); var conditionExpression = new ConstantExpr(condition); var expr = new ConditionalExpr(conditionExpression, new ConstantExpr(0), new ConstantExpr(0)); target.Visit(expr, scope); }
public void VisitNoOpExpr() { var target = new TypeCheckingVisitor(); var expression = new NoOpStatement(); var actual = target.Visit(expression, scope); Assert.AreEqual(ValueType.Unit, actual); }
public void AssignmentTest() { var target = new TypeCheckingVisitor(); var expr = new AssignmentExpr(new IdentifierExpr("a"), new ConstantExpr(1)); var actual = target.Visit(expr, scope); Assert.AreEqual(ValueType.Int, actual); }
public void VisitBooleanNotExpr(bool a, ValueType expected) { var target = new TypeCheckingVisitor(); var aExpression = new ConstantExpr(a); var expr = new NotExpr(aExpression); var actual = target.Visit(expr, scope); Assert.AreEqual(expected, actual); }
public void VisitPlusWithDoubleAndIntExpr() { var target = new TypeCheckingVisitor(); var lhs = new ConstantExpr(1.1); var rhs = new ConstantExpr(2); var expression = new PlusExpr(lhs, rhs); var actual = target.Visit(expression, scope); Assert.AreEqual(ValueType.Float, actual); }
public void VisitDivExpr() { var target = new TypeCheckingVisitor(); var lhs = new ConstantExpr(10); var rhs = new ConstantExpr(2); var expression = new DivExpr(lhs, rhs); var actual = target.Visit(expression, scope); Assert.AreEqual(ValueType.Int, actual); }
public void VisitConditionalExpr(bool condition, object thenValue, object elseValue, ValueType expected) { var target = new TypeCheckingVisitor(); var conditionExpression = new ConstantExpr(condition); var thenExpression = new ConstantExpr(thenValue); var elseExpression = new ConstantExpr(elseValue); var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression); var actual = target.Visit(expr, scope); Assert.AreEqual(expected, actual); }
public void VisitMathExpressionTree() { var target = new TypeCheckingVisitor(); var one = new ConstantExpr(1); var two = new ConstantExpr(2); var three = new ConstantExpr(3); var four = new ConstantExpr(4); var five = new ConstantExpr(5); var six = new ConstantExpr(6); var expr = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two))); var actual = target.Visit(expr, scope); Assert.AreEqual(ValueType.Int, actual); }
public void InvalidLValueAssignmentTest() { var target = new TypeCheckingVisitor(); var expr = new AssignmentExpr(new ConstantExpr("a"), new ConstantExpr(1)); target.Visit(expr, scope); }