diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java | 7 | ||||
| -rw-r--r-- | src/test/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilderTest.java | 78 |
2 files changed, 47 insertions, 38 deletions
diff --git a/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java index 232b8f3..844782f 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java @@ -3,6 +3,9 @@ package no.eliashaugsbakk.kompilator.IRGeneration; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.List; +import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Alloc; +import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Call; +import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Instruction; import no.eliashaugsbakk.kompilator.parsing.AST; import no.eliashaugsbakk.kompilator.parsing.node.Program; import no.eliashaugsbakk.kompilator.parsing.node.expression.FunctionCall; @@ -15,7 +18,7 @@ class IRGeneratorTest { @Test void singlePrintStatementGeneratesCorrectIR() { AST ast = buildAST("skriv", "hello"); - List<Instr> ir = new IRGenerator(ast).generate(); + List<Instruction> ir = new IRGenerator(ast).generate(); assertEquals(2, ir.size()); assertEquals(new Alloc("t0", "string", false, "hello"), ir.get(0)); @@ -28,7 +31,7 @@ class IRGeneratorTest { program.addStatement(buildStatement("skriv", "hello")); program.addStatement(buildStatement("skriv", "world")); - List<Instr> ir = new IRGenerator(new AST(program)).generate(); + List<Instruction> ir = new IRGenerator(new AST(program)).generate(); assertEquals(4, ir.size()); assertEquals(new Alloc("t0", "string", false, "hello"), ir.get(0)); diff --git a/src/test/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilderTest.java b/src/test/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilderTest.java index 4c124fc..9707ef3 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilderTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/asmGeneration/AssemblyBuilderTest.java @@ -1,65 +1,71 @@ package no.eliashaugsbakk.kompilator.asmGeneration; +import static org.junit.jupiter.api.Assertions.assertTrue; + import java.util.List; +import no.eliashaugsbakk.kompilator.IRGeneration.Instructions.Call; import org.junit.jupiter.api.Test; class AssemblyBuilderTest { @Test void boilerplateGetsGenerated() { - // Setup AssemblyBuilder builder = new AssemblyBuilder(); - // Act - - // Assert String result = builder.createAssembly(List.of()); - assert result.contains(""" - .intel_syntax noprefix - .global _start - .text - _start: - """); - - assert result.contains(""" - mov rax, 60 - xor rdi, rdi - syscall - """); - assert result.contains(".data"); + + assertTrue(result.contains(".intel_syntax noprefix\n.global _start")); + assertTrue(result.contains("mov rax, 60\nxor rdi, rdi\nsyscall")); + assertTrue(result.contains(".data")); + } + + @Test + void handlePrintGeneratesCorrectAssemblyForImmutableVariable() { + AssemblyBuilder builder = new AssemblyBuilder(); + builder.stringVariables.put("greeting", new AssemblyBuilder.StringVar("Hello", false)); + + builder.handlePrint(new Call("skriv", List.of("greeting"))); + + String result = builder.text.toString(); + assertTrue(result.contains("lea rsi, greeting")); + assertTrue(result.contains("mov rdx, 5")); } @Test - void handlePrintGeneratesCorrectAssemblyForSingleStatement() { - // Setup + void handlePrintGeneratesCorrectAssemblyForMutableVariable() { AssemblyBuilder builder = new AssemblyBuilder(); - builder.stringVariables.put("greeting", "Hello"); + builder.stringVariables.put("greeting", new AssemblyBuilder.StringVar("Hello", true)); - // Act - builder.handlePrint("skriv(greeting)"); + builder.handlePrint(new Call("skriv", List.of("greeting"))); - // Assert String result = builder.text.toString(); - assert result.contains("lea rsi, greeting"); - assert result.contains("mov rdx, 5"); // "Hello" + assertTrue(result.contains("mov rsi, [rip + greeting]")); + assertTrue(result.contains("mov rdx, 5")); + } + + @Test + void handlePrintCorrectlyCountsNewlineAsOneByte() { + AssemblyBuilder builder = new AssemblyBuilder(); + builder.stringVariables.put("msg", new AssemblyBuilder.StringVar("Hello\n", false)); + + builder.handlePrint(new Call("skriv", List.of("msg"))); + + assertTrue(builder.text.toString().contains("mov rdx, 6")); } @Test void handlePrintWorksCorrectlyWithMultiplePrintStatements() { - // Setup AssemblyBuilder builder = new AssemblyBuilder(); - builder.stringVariables.put("msg1", "Hi"); - builder.stringVariables.put("msg2", "World"); + builder.stringVariables.put("msg1", new AssemblyBuilder.StringVar("Hi", false)); + builder.stringVariables.put("msg2", new AssemblyBuilder.StringVar("World", false)); - // Act - builder.handlePrint("skriv(msg1)"); - builder.handlePrint("skriv(msg2)"); + builder.handlePrint(new Call("skriv", List.of("msg1"))); + builder.handlePrint(new Call("skriv", List.of("msg2"))); - // Assert String result = builder.text.toString(); - assert (result).contains("lea rsi, msg1"); - assert (result).contains("lea rsi, msg2"); - assert (result).contains("mov rdx, 2"); // "Hi" - assert (result).contains("mov rdx, 5"); // "World" + assertTrue(result.contains("lea rsi, msg1")); + assertTrue(result.contains("lea rsi, msg2")); + assertTrue(result.contains("mov rdx, 2")); + assertTrue(result.contains("mov rdx, 5")); } } |
