diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-26 22:40:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-26 22:40:20 +0100 |
| commit | 028ef9e1b1502b5380f6110f1870808262129623 (patch) | |
| tree | c3b8df203e238a6a3db675b6f1cc2ea3ad3d8f69 /src/test/java | |
| parent | 17bcdbfef0e40bedd8e8c16e3b6eb6d134635d49 (diff) | |
Generate WASM functions for Shed functions
Diffstat (limited to 'src/test/java')
11 files changed, 94 insertions, 33 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenCallTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenCallTests.java index 5c89e0df..0048b22f 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenCallTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenCallTests.java @@ -9,7 +9,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; import java.util.List; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenCallTests { @@ -20,8 +20,7 @@ public class WasmCodeGenCallTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } @Test @@ -31,7 +30,6 @@ public class WasmCodeGenCallTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDefineFunctionTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDefineFunctionTests.java new file mode 100644 index 00000000..39d1c46e --- /dev/null +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDefineFunctionTests.java @@ -0,0 +1,58 @@ +package org.shedlang.compiler.backends.wasm; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.shedlang.compiler.ast.typed.FreeVariables; +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 java.io.IOException; +import java.util.List; + +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; + +@ExtendWith({SnapshotResolver.class}) +public class WasmCodeGenDefineFunctionTests { + @Test + public void canDefineMinimalFunction(Snapshotter snapshotter) throws IOException, InterruptedException { + var instruction = new DefineFunctionInstruction( + "f", + List.of(), + List.of(), + FreeVariables.empty(), + List.of( + Instructions.pushUnit(), + Instructions.return_() + ), + Sources.NULL + ); + var context = WasmCodeGenContext.EMPTY; + + var result = WasmCodeGen.generateInstruction(instruction, context); + + snapshotter.assertSnapshot(objdumpContext(result)); + } + + @Test + public void freeVariablesAreStoredInAndLoadedFromEnvironment(Snapshotter snapshotter) throws IOException, InterruptedException { + var instruction = new DefineFunctionInstruction( + "f", + List.of(), + List.of(), + FreeVariables.of("a", "b"), + List.of( + Instructions.localLoad("a"), + Instructions.return_() + ), + Sources.NULL + ); + var context = WasmCodeGenContext.EMPTY; + + var result = WasmCodeGen.generateInstruction(instruction, context); + + snapshotter.assertSnapshot(objdumpContext(result)); + } +} diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDiscardTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDiscardTests.java index 2b1d84d3..7e42276e 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDiscardTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDiscardTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenDiscardTests { @@ -19,7 +19,6 @@ public class WasmCodeGenDiscardTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalLoadTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalLoadTests.java index 3a07ffd8..62aefa1d 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalLoadTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalLoadTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenLocalLoadTests { @@ -25,7 +25,6 @@ public class WasmCodeGenLocalLoadTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalStoreTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalStoreTests.java index ea82a5cb..35a7931e 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalStoreTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalStoreTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenLocalStoreTests { @@ -19,7 +19,6 @@ public class WasmCodeGenLocalStoreTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java index e7b2f57c..1b61badf 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenPushBoolTests { @@ -19,8 +19,7 @@ public class WasmCodeGenPushBoolTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } @Test @@ -30,7 +29,6 @@ public class WasmCodeGenPushBoolTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushIntTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushIntTests.java index e461f5f6..8b356372 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushIntTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushIntTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenPushIntTests { @@ -21,7 +21,6 @@ public class WasmCodeGenPushIntTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushStringTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushStringTests.java index 79dd78d1..34d69178 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushStringTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushStringTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenPushStringTests { @@ -19,8 +19,7 @@ public class WasmCodeGenPushStringTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } @Test @@ -30,7 +29,6 @@ public class WasmCodeGenPushStringTests { var result = WasmCodeGen.generateInstruction(Instructions.pushString("hello"), context); result = WasmCodeGen.generateInstruction(Instructions.pushString("world"), result); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushUnitTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushUnitTests.java index a58eb091..8c534c40 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushUnitTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushUnitTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenPushUnitTests { @@ -19,7 +19,6 @@ public class WasmCodeGenPushUnitTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenReturnTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenReturnTests.java index 01c26402..b5bf5898 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenReturnTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenReturnTests.java @@ -8,7 +8,7 @@ import org.shedlang.compiler.testing.snapshots.Snapshotter; import java.io.IOException; -import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; +import static org.shedlang.compiler.backends.wasm.WasmCodeGenTesting.objdumpContext; @ExtendWith({SnapshotResolver.class}) public class WasmCodeGenReturnTests { @@ -19,7 +19,6 @@ public class WasmCodeGenReturnTests { var result = WasmCodeGen.generateInstruction(instruction, context); - var module = result.toFunction().toModule(); - snapshotter.assertSnapshot(objdump(module)); + snapshotter.assertSnapshot(objdumpContext(result)); } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTesting.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTesting.java new file mode 100644 index 00000000..d281684b --- /dev/null +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTesting.java @@ -0,0 +1,15 @@ +package org.shedlang.compiler.backends.wasm; + +import java.io.IOException; + +import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump; + +public class WasmCodeGenTesting { + private WasmCodeGenTesting() { + } + + public static String objdumpContext(WasmCodeGenContext context) throws IOException, InterruptedException { + var module = context.toFunction("f").toModule(); + return objdump(module); + } +} |
