diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-14 21:57:23 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-14 21:57:23 +0100 |
| commit | 3ac85303c51e4130bc2b8000cd46e12646c7e7d9 (patch) | |
| tree | 0528f3a5b3f53e92f48ddc68cb9caf74106ab135 /src/test/java/org | |
| parent | c68c9a8f05e840292d39917df9fa32d9e166edc9 (diff) | |
Convert LlvmCodeGenDefineFunctionTests to use snapshots
Diffstat (limited to 'src/test/java/org')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenDefineFunctionTests.java | 84 |
1 files changed, 8 insertions, 76 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenDefineFunctionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenDefineFunctionTests.java index fdebce5f..1baf847c 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenDefineFunctionTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenDefineFunctionTests.java @@ -1,6 +1,7 @@ package org.shedlang.compiler.backends.llvm; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.shedlang.compiler.ast.typed.FreeVariables; import org.shedlang.compiler.backends.llvm.ir.LlvmIrSerializer; import org.shedlang.compiler.backends.llvm.ir.ast.LlvmIr; @@ -8,6 +9,8 @@ import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction; import org.shedlang.compiler.stackir.instructions.Instructions; +import org.shedlang.compiler.testing.snapshots.SnapshotResolver; +import org.shedlang.compiler.testing.snapshots.Snapshotter; import org.zwobble.precisely.Matcher; import java.io.IOException; @@ -19,9 +22,10 @@ import static org.shedlang.compiler.util.Iterables.forEachInterspersed; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.*; +@ExtendWith({SnapshotResolver.class}) public class LlvmCodeGenDefineFunctionTests { @Test - public void canDefineMinimalFunction() throws IOException { + public void canDefineMinimalFunction(Snapshotter snapshotter) throws IOException { var instruction = new DefineFunctionInstruction( "f", List.of(), @@ -37,40 +41,11 @@ public class LlvmCodeGenDefineFunctionTests { var result = LlvmCodeGen.generateInstruction(instruction, context); - var topLevelEntities = new StringBuilder(); - forEachInterspersed( - result.topLevelEntities(), - topLevelEntity -> LlvmIrSerializer.serializeTopLevelEntity(topLevelEntity, topLevelEntities), - () -> topLevelEntities.append("\n") - ); - assertThat(topLevelEntities.toString(), equalTo(""" - define i64 @shed__fun__f__0(ptr %closurePointer__0) { - ret i64 0 - } - """)); - - var instructions = new StringBuilder(); - forEachInterspersed( - result.instructions(), - x -> LlvmIrSerializer.serializeInstruction(x, instructions), - () -> instructions.append("\n") - ); - assertThat(instructions.toString(), equalTo(""" - %sizePtr__0 = getelementptr {ptr, [0 x i64]}, ptr null, i64 0 - %size__0 = ptrtoint ptr %sizePtr__0 to i64 - %closurePointer__0 = call ptr @shed__runtime__alloc(i64 %size__0) - %closureFunctionPointerPointer__0 = getelementptr {ptr, [0 x i64]}, ptr %closurePointer__0, i64 0, i32 0 - store ptr @shed__fun__f__0, ptr %closureFunctionPointerPointer__0 - %closureValue__0 = ptrtoint ptr %closurePointer__0 to i64""")); - - assertThat(result.stack(), isSequence( - isLlvmVariableLocal("closureValue__0") - )); - assertThat(result.shedLocalNameToOperand().entrySet(), isSequence()); + snapshotter.assertSnapshot(LlvmCodeGenTesting.serializeContext(result)); } @Test - public void freeVariablesAreStoredInAndLoadedFromEnvironment() throws IOException { + public void freeVariablesAreStoredInAndLoadedFromEnvironment(Snapshotter snapshotter) throws IOException { var instruction = new DefineFunctionInstruction( "f", List.of(), @@ -88,49 +63,6 @@ public class LlvmCodeGenDefineFunctionTests { var result = LlvmCodeGen.generateInstruction(instruction, context); - var topLevelEntities = new StringBuilder(); - forEachInterspersed( - result.topLevelEntities(), - topLevelEntity -> LlvmIrSerializer.serializeTopLevelEntity(topLevelEntity, topLevelEntities), - () -> topLevelEntities.append("\n") - ); - assertThat(topLevelEntities.toString(), equalTo(""" - define i64 @shed__fun__f__0(ptr %closurePointer__0) { - %closureFreeVariablePointer__a__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 0 - %closureFreeVariable__a__0 = load i64, ptr %closureFreeVariablePointer__a__0 - %closureFreeVariablePointer__b__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 1 - %closureFreeVariable__b__0 = load i64, ptr %closureFreeVariablePointer__b__0 - ret i64 %closureFreeVariable__a__0 - } - """)); - - var instructions = new StringBuilder(); - forEachInterspersed( - result.instructions(), - x -> LlvmIrSerializer.serializeInstruction(x, instructions), - () -> instructions.append("\n") - ); - assertThat(instructions.toString(), equalTo(""" - %sizePtr__0 = getelementptr {ptr, [2 x i64]}, ptr null, i64 0 - %size__0 = ptrtoint ptr %sizePtr__0 to i64 - %closurePointer__0 = call ptr @shed__runtime__alloc(i64 %size__0) - %closureFunctionPointerPointer__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 0 - store ptr @shed__fun__f__0, ptr %closureFunctionPointerPointer__0 - %closureFreeVariablePointer__a__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 0 - store i64 1, ptr %closureFreeVariablePointer__a__0 - %closureFreeVariablePointer__b__0 = getelementptr {ptr, [2 x i64]}, ptr %closurePointer__0, i64 0, i32 1, i64 1 - store i64 2, ptr %closureFreeVariablePointer__b__0 - %closureValue__0 = ptrtoint ptr %closurePointer__0 to i64""")); - - assertThat(result.stack(), isSequence( - isLlvmVariableLocal("closureValue__0") - )); - } - - private static Matcher<Map.Entry<String, LlvmOperand>> isLocal(String name, Matcher<LlvmOperand> operand) { - return allOf( - has("name", x -> x.getKey(), equalTo(name)), - has("operand", x -> x.getValue(), operand) - ); + snapshotter.assertSnapshot(LlvmCodeGenTesting.serializeContext(result)); } } |
