aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-25 15:44:21 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-25 15:44:21 +0100
commitb91f3ecbba9954f7f46d954918d87266d1518af7 (patch)
tree541dbbe5dee2f65e2e22350e0c3d290de8b85f77 /src/test/java
parent9a60f58e4ba7889f87561945fa474adfcdbd46a5 (diff)
Add WASM code gen for push-bool instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java36
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormatModuleTests.java6
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmObjdump.java28
3 files changed, 66 insertions, 4 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java
new file mode 100644
index 00000000..e7b2f57c
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenPushBoolTests.java
@@ -0,0 +1,36 @@
+package org.shedlang.compiler.backends.wasm;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+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 static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump;
+
+@ExtendWith({SnapshotResolver.class})
+public class WasmCodeGenPushBoolTests {
+ @Test
+ public void pushFalseIsCompiledToOperandInStack(Snapshotter snapshotter) throws IOException, InterruptedException {
+ var instruction = Instructions.pushBool(false);
+ var context = WasmCodeGenContext.EMPTY;
+
+ var result = WasmCodeGen.generateInstruction(instruction, context);
+
+ var module = result.toFunction().toModule();
+ snapshotter.assertSnapshot(objdump(module));
+ }
+
+ @Test
+ public void pushTrueIsCompiledToOperandInStack(Snapshotter snapshotter) throws IOException, InterruptedException {
+ var instruction = Instructions.pushBool(true);
+ var context = WasmCodeGenContext.EMPTY;
+
+ var result = WasmCodeGen.generateInstruction(instruction, context);
+
+ var module = result.toFunction().toModule();
+ snapshotter.assertSnapshot(objdump(module));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormatModuleTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormatModuleTests.java
index 8f36def5..a5998e10 100644
--- a/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormatModuleTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormatModuleTests.java
@@ -20,6 +20,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import static org.shedlang.compiler.backends.wasm.structure.WasmObjdump.objdump;
+
@ExtendWith({SnapshotResolver.class})
public class WasmBinaryFormatModuleTests {
@Test
@@ -367,8 +369,4 @@ public class WasmBinaryFormatModuleTests {
ProcessRunner.run(List.of("wasm-validate", "--enable-exceptions", path.toString()))
.throwOnError();
}
-
- private String objdump(Path path) throws IOException, InterruptedException {
- return ProcessRunner.run(List.of("wasm-objdump", "-dx", path.toString())).throwOnError().stdout();
- }
}
diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmObjdump.java b/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmObjdump.java
new file mode 100644
index 00000000..8caadd1a
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/wasm/structure/WasmObjdump.java
@@ -0,0 +1,28 @@
+package org.shedlang.compiler.backends.wasm.structure;
+
+import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmModule;
+import org.shedlang.compiler.testing.ProcessRunner;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+public class WasmObjdump {
+ public static String objdump(WasmModule module) throws IOException, InterruptedException {
+ Files.createDirectories(Path.of("tests-tmp"));
+ var temporaryDirectory = Files.createTempDirectory(Path.of("tests-tmp"), "WasmObjdump");
+ var modulePath = temporaryDirectory.resolve("module.wasm");
+
+ try (var outputStream = new FileOutputStream(modulePath.toFile())) {
+ WasmBinaryFormat.serializeModule(module, outputStream);
+ }
+
+ return objdump(modulePath);
+ }
+
+ public static String objdump(Path path) throws IOException, InterruptedException {
+ return ProcessRunner.run(List.of("wasm-objdump", "-dx", path.toString())).throwOnError().stdout();
+ }
+}