aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-06 18:24:47 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-06 18:24:47 +0100
commitdf888d6cce6a31e55eac4e21ccd496ce6023dfeb (patch)
treec8c62f9307aa737c8d2289449422e4e31314b916 /src/test/java
parent163460c063814f659713ceed417e5f0be4a800d0 (diff)
Add int-equals instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenIntEqualsTests.java28
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java30
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java19
-rw-r--r--src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenIntEqualsTests.java24
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java4
6 files changed, 113 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenIntEqualsTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenIntEqualsTests.java
new file mode 100644
index 00000000..be97752d
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenIntEqualsTests.java
@@ -0,0 +1,28 @@
+package org.shedlang.compiler.backends.llvm;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.shedlang.compiler.backends.llvm.ir.ast.LlvmIr;
+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.llvm.LlvmCodeGenTesting.serializeContext;
+
+@ExtendWith({SnapshotResolver.class})
+public class LlvmCodeGenIntEqualsTests {
+ @Test
+ public void intEqualsIsCompiledToComparison(Snapshotter snapshotter) throws IOException {
+ var instruction = Instructions.intEquals();
+ var context = LlvmCodeGenContext.EMPTY
+ .push(LlvmIr.variableLocal("a"))
+ .push(LlvmIr.variableLocal("b"))
+ .push(LlvmIr.variableLocal("c"));
+
+ var result = LlvmCodeGen.generateInstruction(instruction, context);
+
+ snapshotter.assertSnapshot(serializeContext(result));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java
index ee2be2d4..86a5b0d7 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerInstructionTests.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.backends.llvm.ir;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.backends.llvm.ir.ast.LlvmIr;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmConditionCode;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
import java.io.IOException;
@@ -115,6 +116,21 @@ public class LlvmIrSerializerInstructionTests {
}
@Test
+ public void icmpIsSerialized() throws IOException {
+ var instruction = LlvmIr.icmp(
+ LlvmIr.variableLocal("target"),
+ LlvmConditionCode.EQ,
+ LlvmTypes.INT_32,
+ LlvmIr.variableLocal("left"),
+ LlvmIr.variableLocal("right")
+ );
+
+ var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction);
+
+ assertThat(result, equalTo("%target = icmp eq i32 %left, %right"));
+ }
+
+ @Test
public void intToPtrIsSerialized() throws IOException {
var instruction = LlvmIr.intToPtr(
LlvmIr.variableLocal("x"),
@@ -165,4 +181,18 @@ public class LlvmIrSerializerInstructionTests {
assertThat(result, equalTo("store i64 42, ptr %target"));
}
+
+ @Test
+ public void zextIsSerialized() throws IOException {
+ var instruction = LlvmIr.zext(
+ LlvmIr.variableLocal("target"),
+ LlvmTypes.INT_32,
+ LlvmIr.variableLocal("source"),
+ LlvmTypes.INT_64
+ );
+
+ var result = serializeToString(instruction, LlvmIrSerializer::serializeInstruction);
+
+ assertThat(result, equalTo("%target = zext i32 %source to i64"));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java
index a8023c35..59c16bb6 100644
--- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java
@@ -71,6 +71,16 @@ public class LlvmIr {
return new LlvmGetElementPtr(target, pointerType, pointer, indexes);
}
+ public static LlvmIcmp icmp(
+ LlvmVariable target,
+ LlvmConditionCode conditionCode,
+ LlvmType type,
+ LlvmOperand left,
+ LlvmOperand right
+ ) {
+ return new LlvmIcmp(target, conditionCode, type, left, right);
+ }
+
public static LlvmIntToPtr intToPtr(
LlvmVariable target,
LlvmTypeScalar sourceType,
@@ -159,4 +169,13 @@ public class LlvmIr {
public static LlvmVariableLocal variableLocal(String name) {
return new LlvmVariableLocal(name);
}
+
+ public static LlvmZext zext(
+ LlvmVariable target,
+ LlvmType sourceType,
+ LlvmOperand value,
+ LlvmType targetType
+ ) {
+ return new LlvmZext(target, sourceType, value, targetType);
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenIntEqualsTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenIntEqualsTests.java
new file mode 100644
index 00000000..4e6eb0ff
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmCodeGenIntEqualsTests.java
@@ -0,0 +1,24 @@
+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.WasmCodeGenTesting.objdumpContext;
+
+@ExtendWith({SnapshotResolver.class})
+public class WasmCodeGenIntEqualsTests {
+ @Test
+ public void intEqualsIsCompiledToI32Eq(Snapshotter snapshotter) throws IOException, InterruptedException {
+ var instruction = Instructions.intEquals();
+ var context = WasmCodeGenContext.EMPTY;
+
+ var result = WasmCodeGen.generateInstruction(instruction, context);
+
+ snapshotter.assertSnapshot(objdumpContext(result));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
index 74e018f3..10588ec1 100644
--- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
@@ -74,6 +74,14 @@ public class InstructionSerializerTests {
assertThat(string, equalTo("(field-load \"Example/Lib\" \"x\")"));
}
+ @Test
+ public void canSerializeIntEquals() {
+ var instruction = Instructions.intEquals();
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(int-equals)"));
+ }
@Test
public void canSerializeLocalLoad() {
diff --git a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
index adc0731b..a1630727 100644
--- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
+++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
@@ -61,4 +61,8 @@ public class Instructions {
public static Instruction return_() {
return new ReturnInstruction(Sources.NULL);
}
+
+ public static Instruction intEquals() {
+ return new IntEqualsInstruction(Sources.NULL);
+ }
}