aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-14 21:57:23 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-14 21:57:23 +0100
commit3ac85303c51e4130bc2b8000cd46e12646c7e7d9 (patch)
tree0528f3a5b3f53e92f48ddc68cb9caf74106ab135 /src/test/java/org
parentc68c9a8f05e840292d39917df9fa32d9e166edc9 (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.java84
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));
}
}