From 838adbf4133228c35bc487aa4d202be59b623447 Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Wed, 12 Jun 2024 00:13:22 +0200 Subject: [PATCH] Fix tests --- .../sema/AtomicExpressionNodeTest.java | 57 +++++++------------ .../sema/LogicalExpressionNodeTest.java | 36 ++++++------ 2 files changed, 36 insertions(+), 57 deletions(-) diff --git a/src/test/java/com/auberer/compilerdesignlectureproject/sema/AtomicExpressionNodeTest.java b/src/test/java/com/auberer/compilerdesignlectureproject/sema/AtomicExpressionNodeTest.java index 83e9ac8..de4143b 100644 --- a/src/test/java/com/auberer/compilerdesignlectureproject/sema/AtomicExpressionNodeTest.java +++ b/src/test/java/com/auberer/compilerdesignlectureproject/sema/AtomicExpressionNodeTest.java @@ -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 @@ -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); @@ -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); @@ -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); @@ -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()); } } diff --git a/src/test/java/com/auberer/compilerdesignlectureproject/sema/LogicalExpressionNodeTest.java b/src/test/java/com/auberer/compilerdesignlectureproject/sema/LogicalExpressionNodeTest.java index cf00149..bfe393d 100644 --- a/src/test/java/com/auberer/compilerdesignlectureproject/sema/LogicalExpressionNodeTest.java +++ b/src/test/java/com/auberer/compilerdesignlectureproject/sema/LogicalExpressionNodeTest.java @@ -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 @@ -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"));