Skip to content
This repository has been archived by the owner on Jul 10, 2024. It is now read-only.

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
marcauberer committed Jun 11, 2024
1 parent 179f87d commit 838adbf
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,39 +113,34 @@ public void checkLogicalExprResult() {
Lexer lexer = new Lexer(reader, false);
Parser parser = new Parser(lexer);

ASTAtomicExprNode astAtomicExprNode = parser.parseAtomicExpression();
ASTStmtLstNode stmtLstNode = parser.parseStmtLst();
SymbolTableBuilder symbolTableBuilder = new SymbolTableBuilder();


TypeChecker typeChecker = new TypeChecker();

// Fake the symbol table entry for a,b,c
Scope scope = symbolTableBuilder.getCurrentScopes().peek();
symbolTableBuilder.currentScopes.peek().insertSymbol("a", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("b", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("c", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("a", stmtLstNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("b", stmtLstNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("c", stmtLstNode);

symbolTableBuilder.visitAtomicExpr(astAtomicExprNode);
symbolTableBuilder.visitStmtLst(stmtLstNode);

// Set type for a,b,c
SymbolTableEntry entryA = scope.lookupSymbolStrict("a", astAtomicExprNode);
SymbolTableEntry entryA = scope.lookupSymbolStrict("a", stmtLstNode);
entryA.updateType(new Type(SuperType.TY_BOOL));
SymbolTableEntry entryB = scope.lookupSymbolStrict("b", astAtomicExprNode);
SymbolTableEntry entryB = scope.lookupSymbolStrict("b", stmtLstNode);
entryB.updateType(new Type(SuperType.TY_BOOL));
SymbolTableEntry entryC = scope.lookupSymbolStrict("c", astAtomicExprNode);
SymbolTableEntry entryC = scope.lookupSymbolStrict("c", stmtLstNode);
entryC.updateType(new Type(SuperType.TY_BOOL));

ExprResult result = typeChecker.visitAtomicExpr(astAtomicExprNode);
assertTrue(result.getType().is(SuperType.TY_BOOL));
assertNotNull(astAtomicExprNode);
assertInstanceOf(ASTAtomicExprNode.class, astAtomicExprNode);
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astAtomicExprNode.getLogicalExpr().operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("a", astAtomicExprNode.getLogicalExpr().operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astAtomicExprNode.getLogicalExpr().operands().getLast().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("b", astAtomicExprNode.getLogicalExpr().operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astAtomicExprNode.getLogicalExpr().operands().getLast().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("c", astAtomicExprNode.getLogicalExpr().operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTLogicalExprNode.LogicalOperator.AND, astAtomicExprNode.getLogicalExpr().operatorList.get(0));
typeChecker.visitStmtLst(stmtLstNode);
assertNotNull(stmtLstNode);
assertInstanceOf(ASTStmtLstNode.class, stmtLstNode);
assertEquals(3, stmtLstNode.getChildren(ASTStmtNode.class).size());
ASTAssignStmtNode assignStmtNode = stmtLstNode.getChildren(ASTStmtNode.class).get(2).getChild(ASTAssignStmtNode.class, 0);
assertInstanceOf(ASTLogicalExprNode.class, assignStmtNode.getLogicalExpr());
assertTrue(assignStmtNode.getLogicalExpr().getType().is(SuperType.TY_BOOL));
}

@Test
Expand Down Expand Up @@ -177,7 +172,7 @@ public void checkIdentifierResult() {
public void checkFunctionCallResult() {
// Create a new Reader object with the given file path
String code = """
counter.getNumber()
call getNumber()
""";
Reader reader = new Reader(code);
Lexer lexer = new Lexer(reader, false);
Expand All @@ -187,14 +182,11 @@ public void checkFunctionCallResult() {
ASTAtomicExprNode astAtomicExprNode = parser.parseAtomicExpression();

Scope scope = symbolTableBuilder.getCurrentScopes().peek();
symbolTableBuilder.currentScopes.peek().insertSymbol("counter", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("getNumber()", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("getNumber", astAtomicExprNode);

symbolTableBuilder.visitAtomicExpr(astAtomicExprNode);

SymbolTableEntry entryIdentifier = scope.lookupSymbolStrict("counter", astAtomicExprNode);
entryIdentifier.updateType(new Type(SuperType.TY_INVALID));
SymbolTableEntry entryFunction = scope.lookupSymbolStrict("getNumber()", astAtomicExprNode);
SymbolTableEntry entryFunction = scope.lookupSymbolStrict("getNumber", astAtomicExprNode);
entryFunction.updateType(new Type(SuperType.TY_FUNCTION));

assertNotNull(astAtomicExprNode);
Expand All @@ -206,7 +198,7 @@ public void checkFunctionCallResult() {
public void checkPrintBuiltInCallResult() {
// Create a new Reader object with the given file path
String code = """
System.Println("Hello World");
print("Hello World");
""";
Reader reader = new Reader(code);
Lexer lexer = new Lexer(reader, false);
Expand All @@ -215,20 +207,11 @@ public void checkPrintBuiltInCallResult() {
SymbolTableBuilder symbolTableBuilder = new SymbolTableBuilder();
ASTAtomicExprNode astAtomicExprNode = parser.parseAtomicExpression();

Scope scope = symbolTableBuilder.getCurrentScopes().peek();
symbolTableBuilder.currentScopes.peek().insertSymbol("System", astAtomicExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("Println()", astAtomicExprNode);

symbolTableBuilder.visitAtomicExpr(astAtomicExprNode);

SymbolTableEntry entryIdentifier = scope.lookupSymbolStrict("System", astAtomicExprNode);
entryIdentifier.updateType(new Type(SuperType.TY_INVALID));
SymbolTableEntry entryFunction = scope.lookupSymbolStrict("Println()", astAtomicExprNode);
entryFunction.updateType(new Type(SuperType.TY_FUNCTION));

assertNotNull(astAtomicExprNode);
assertInstanceOf(ASTAtomicExprNode.class, astAtomicExprNode);
assertInstanceOf(ASTPrintBuiltinCallNode.class , astAtomicExprNode.getPrintCall());
assertInstanceOf(ASTPrintBuiltinCallNode.class, astAtomicExprNode.getPrintCall());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -23,38 +23,34 @@ void logicalExprIntegrationTest() {
Lexer lexer = new Lexer(reader, false);
Parser parser = new Parser(lexer);

ASTLogicalExprNode astLogicalExprNode = parser.parseLogicalExpression();
ASTStmtLstNode astStmtLstNode = parser.parseStmtLst();

SymbolTableBuilder symbolTableBuilder = new SymbolTableBuilder();
TypeChecker typeChecker = new TypeChecker();

// Fake the symbol table entry for a,b,c
Scope scope = symbolTableBuilder.getCurrentScopes().peek();
symbolTableBuilder.currentScopes.peek().insertSymbol("a", astLogicalExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("b", astLogicalExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("c", astLogicalExprNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("a", astStmtLstNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("b", astStmtLstNode);
symbolTableBuilder.currentScopes.peek().insertSymbol("c", astStmtLstNode);

symbolTableBuilder.visitLogicalExpr(astLogicalExprNode);
symbolTableBuilder.visitStmtLst(astStmtLstNode);

// Set type for a,b,c
SymbolTableEntry entryA = scope.lookupSymbolStrict("a", astLogicalExprNode);
SymbolTableEntry entryA = scope.lookupSymbolStrict("a", astStmtLstNode);
entryA.updateType(new Type(SuperType.TY_BOOL));
SymbolTableEntry entryB = scope.lookupSymbolStrict("b", astLogicalExprNode);
SymbolTableEntry entryB = scope.lookupSymbolStrict("b", astStmtLstNode);
entryB.updateType(new Type(SuperType.TY_BOOL));
SymbolTableEntry entryC = scope.lookupSymbolStrict("c", astLogicalExprNode);
SymbolTableEntry entryC = scope.lookupSymbolStrict("c", astStmtLstNode);
entryC.updateType(new Type(SuperType.TY_BOOL));

ExprResult result = typeChecker.visitLogicalExpr(astLogicalExprNode);
assertTrue(result.getType().is(SuperType.TY_BOOL));
assertNotNull(astLogicalExprNode);
assertInstanceOf(ASTLogicalExprNode.class, astLogicalExprNode);
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astLogicalExprNode.operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("a", astLogicalExprNode.operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astLogicalExprNode.operands().getLast().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("b", astLogicalExprNode.operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTAtomicExprNode.AtomicType.IDENTIFIER, astLogicalExprNode.operands().getLast().operands().getFirst().operands().getFirst().operands().getFirst().operand().getExprType());
assertEquals("c", astLogicalExprNode.operands().getFirst().operands().getFirst().operands().getFirst().operands().getFirst().operand().getIdentifier());
assertEquals(ASTLogicalExprNode.LogicalOperator.AND, astLogicalExprNode.operatorList.getFirst());
typeChecker.visitStmtLst(astStmtLstNode);
assertNotNull(astStmtLstNode);
assertInstanceOf(ASTStmtLstNode.class, astStmtLstNode);
assertEquals(3, astStmtLstNode.getChildren(ASTStmtNode.class).size());
ASTAssignStmtNode assignStmtNode = astStmtLstNode.getChild(ASTStmtNode.class, 2).getChild(ASTAssignStmtNode.class, 0);
assertInstanceOf(ASTLogicalExprNode.class, assignStmtNode.getLogicalExpr());
assertTrue(assignStmtNode.getLogicalExpr().getType().is(SuperType.TY_BOOL));
}

@Test
Expand All @@ -75,7 +71,7 @@ void logicalExprIntegrationTestWrongType() {

assertNotNull(astLogicalExprNode);
assertInstanceOf(ASTLogicalExprNode.class, astLogicalExprNode);
assertEquals(ASTLogicalExprNode.LogicalOperator.AND, astLogicalExprNode.operatorList.getFirst());
assertEquals(ASTLogicalExprNode.LogicalOperator.AND, astLogicalExprNode.getOperatorList().getFirst());

SemaError exception = Assertions.assertThrows(SemaError.class, () -> typeChecker.visitLogicalExpr(astLogicalExprNode));
assertTrue(exception.getMessage().contains("Type mismatch in logical expression"));
Expand Down

0 comments on commit 838adbf

Please sign in to comment.