public void ExpressionDifferenceTest1() { ASTNode ast1 = new ArithmExprNode( 1, new ArithmExprNode( 2, new LitExprNode(2, 3), ArithmOpNode.FromSymbol(2, "+"), new LitExprNode(2, 3) ), ArithmOpNode.FromSymbol(2, "-"), new LitExprNode(2, 6) ); ASTNode ast2 = new ArithmExprNode( 1, new ArithmExprNode( 1, new LitExprNode(1, 3), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 3) ), ArithmOpNode.FromSymbol(1, "-"), new ArithmExprNode( 1, new LitExprNode(1, 3), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 3) ) ); AssertNodes(ast1, ast2, eq: false); }
public void SelfReferenceSubstituteTest() { var ast1 = new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new ArithmExprNode(1, new IdNode(1, "y"), ArithmOpNode.FromSymbol(1, "+"), new IdNode(1, "x") ) ); var repl = new ArithmExprNode(1, new IdNode(1, "y"), new ArithmOpNode(1, "-", BinaryOperations.ArithmeticFromSymbol("-")), new IdNode(1, "x") ); var ast2 = new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new ArithmExprNode(1, repl, ArithmOpNode.FromSymbol(1, "+"), new IdNode(1, "x") ) ); Assert.That(ast1.Substitute(new IdNode(2, "y"), repl), Is.EqualTo(ast2)); }
public void ExpressionSubstituteTest() { var ast1 = new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new IdNode(1, "x") ); var ast2 = new ArithmExprNode(1, new LitExprNode(1, 1), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 1) ); Assert.That(ast1.Substitute(new IdNode(2, "x"), new LitExprNode(2, 1)), Is.EqualTo(ast2)); }
public void ArithmeticExpressionTests() { this.AssertParse( new ArithmExprNode(1, new LitExprNode(1, 3), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 1) ), Expr.Parse("4") ); this.AssertParse( new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 1) ), Expr.Parse("1 + x") ); this.AssertParse( new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "-"), new LitExprNode(1, 1) ) ), Expr.Parse("-1 + 2*x") ); this.AssertWildcardParse( new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromBitwiseSymbol(1, "<<"), new LitExprNode(1, 1) ) ), "? + x" ); }
public void VariableDeclarationDifferenceTest1() { ASTNode ast1 = new DeclStatNode( 1, new DeclSpecsNode(1, "public static", "int"), new DeclListNode( 1, new VarDeclNode( 2, new IdNode(2, "x"), new ArithmExprNode( 3, new LitExprNode(4, 2), ArithmOpNode.FromSymbol(4, "+"), new LitExprNode(4, 1) ) ) ) ); ASTNode ast2 = new DeclStatNode( 2, new DeclSpecsNode(2, "public static", "int"), new DeclListNode( 2, new VarDeclNode( 2, new IdNode(2, "x"), new ArithmExprNode( 3, new LitExprNode(4, 1), ArithmOpNode.FromSymbol(4, "+"), new LitExprNode(4, 1) ) ) ) ); AssertNodes(ast1, ast2, eq: false); }
public void ExpressionEqualityTest() { ASTNode ast1 = new ArithmExprNode( 1, new ArithmExprNode( 2, new LitExprNode(2, 3), ArithmOpNode.FromSymbol(2, "+"), new LitExprNode(2, 3) ), ArithmOpNode.FromSymbol(2, "-"), new ArithmExprNode( 2, new LitExprNode(2, 3), ArithmOpNode.FromSymbol(2, "+"), new LitExprNode(2, 3) ) ); ASTNode ast2 = new ArithmExprNode( 1, new ArithmExprNode( 1, new LitExprNode(1, 3), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 3) ), ArithmOpNode.FromSymbol(1, "-"), new ArithmExprNode( 1, new LitExprNode(1, 3), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 3) ) ); AssertNodes(ast1, ast2, eq: true); }
public virtual TResult Visit(ArithmOpNode node) => this.VisitChildren(node);
public void ComplexAssignmentTests() { this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new ExprListNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new LitExprNode(1, 2) ), new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new LitExprNode(1, 3) ) ) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 4) ) ) ) ) ); this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new IdNode(1, "y") ) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "-="), new UnaryExprNode(1, UnaryOpNode.FromSymbol(1, "-"), new IdNode(1, "y") ) ) ) ) ); this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new IdNode(1, "y") ) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new ExprListNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "+="), new UnaryExprNode(1, UnaryOpNode.FromSymbol(1, "-"), new IdNode(1, "y") ) ), new AssignExprNode(1, new IdNode(1, "y"), AssignOpNode.FromSymbol(1, "+="), new LitExprNode(1, 1) ) ) ) ), new MatchIssues() .AddError(new BlockEndValueMismatchError("x", 1, "2", "0")) .AddError(new BlockEndValueMismatchError("y", 1, "1", "2")) ); }
public void MultipleVariableAssignmentTests() { this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new ExprListNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 2) ), new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 3) ) ) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 2) ) ) ) ) ); this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new ExprListNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 2) ), new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 3) ) ) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new ExprStatNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new ArithmExprNode(1, new IdNode(1, "x"), ArithmOpNode.FromSymbol(1, "+"), new LitExprNode(1, 1) ) ) ) ), new MatchIssues() .AddError(new BlockEndValueMismatchError("x", 1, "3", "2")) ); this.Compare( new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 2))) ) ), new SourceNode( new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1))) ), new DeclStatNode(1, new DeclSpecsNode(1, "int"), new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 2))) ), new ExprStatNode(1, new ExprListNode(1, new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 2) ), new AssignExprNode(1, new IdNode(1, "x"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 1) ), new AssignExprNode(1, new IdNode(1, "y"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 1) ), new AssignExprNode(1, new IdNode(1, "y"), AssignOpNode.FromSymbol(1, "="), new LitExprNode(1, 2) ) ) ) ) ); }