aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-26 22:40:20 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-26 22:40:20 +0100
commit028ef9e1b1502b5380f6110f1870808262129623 (patch)
treec3b8df203e238a6a3db675b6f1cc2ea3ad3d8f69 /src/test/java
parent17bcdbfef0e40bedd8e8c16e3b6eb6d134635d49 (diff)
Generate WASM functions for Shed functions
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenCallTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDefineFunctionTests.java58
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenDiscardTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalLoadTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenLocalStoreTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushIntTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushStringTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushUnitTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenReturnTests.java5
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTesting.java15
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);
+ }
+}