summaryrefslogtreecommitdiff
path: root/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-19 01:16:24 +0200
committerElias Haugsbakk <[email protected]>2026-09-19 01:59:23 +0200
commitf83be7809a5c9b4dcedcc184da59872552c97bb4 (patch)
treeaa687c353cb9b3034b47aba4127dbcbc331e9e62 /src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java
parentebdcb13d3a55e898a38b92e103b82fa44d822ddc (diff)
Implement IR generator
Diffstat (limited to 'src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java')
-rw-r--r--src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java
new file mode 100644
index 0000000..16ebc73
--- /dev/null
+++ b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java
@@ -0,0 +1,55 @@
+package no.eliashaugsbakk.kompilator.IRGeneration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.List;
+import no.eliashaugsbakk.kompilator.parsing.AST;
+import no.eliashaugsbakk.kompilator.parsing.node.Program;
+import no.eliashaugsbakk.kompilator.parsing.node.expression.FunctionCall;
+import no.eliashaugsbakk.kompilator.parsing.node.expression.StringLiteral;
+import no.eliashaugsbakk.kompilator.parsing.node.statement.ExpressionStatement;
+import org.junit.jupiter.api.Test;
+
+class IRGeneratorTest {
+
+ @Test
+ void singlePrintStatementGeneratesCorrectIR() {
+ AST ast = buildAST("skriv", "hello");
+ List<String> ir = new IRGenerator(ast).generate();
+
+ assertEquals(2, ir.size());
+ assertEquals("t0: string = \"hello\"", ir.get(0));
+ assertEquals("print(t0)", ir.get(1));
+ }
+
+ @Test
+ void multiplePrintStatementsGenerateSequentialTempVars() {
+ Program program = new Program();
+ program.addStatement(buildStatement("skriv", "hello"));
+ program.addStatement(buildStatement("skriv", "world"));
+
+ AST ast = new AST(program);
+ List<String> ir = new IRGenerator(ast).generate();
+
+ assertEquals(4, ir.size());
+ assertEquals("t0: string = \"hello\"", ir.get(0));
+ assertEquals("print(t0)", ir.get(1));
+ assertEquals("t1: string = \"world\"", ir.get(2));
+ assertEquals("print(t1)", ir.get(3));
+ }
+
+ private AST buildAST(String functionName, String argument) {
+ return new AST(buildProgram(functionName, argument));
+ }
+
+ private Program buildProgram(String functionName, String argument) {
+ Program program = new Program();
+ program.addStatement(buildStatement(functionName, argument));
+ return program;
+ }
+
+ private ExpressionStatement buildStatement(String functionName, String argument) {
+ FunctionCall call = new FunctionCall(functionName, List.of(new StringLiteral(argument)));
+ return new ExpressionStatement(call);
+ }
+}