aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-11 23:01:47 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-11 23:01:47 +0100
commit594488a5ac0edef9074ed8957c65137cee453e37 (patch)
tree0993364f84748b5c14bb639fb47b01c5e7b4bca5 /src/test/java
parentf1fcbace22b971efe9234152ae677081b127e7cc (diff)
Compile push-bool instruction to LLVM IR
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerPushBoolTests.java32
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIrMatchers.java19
2 files changed, 51 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerPushBoolTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerPushBoolTests.java
new file mode 100644
index 00000000..b677704a
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmCompilerPushBoolTests.java
@@ -0,0 +1,32 @@
+package org.shedlang.compiler.backends.llvm;
+
+import org.junit.jupiter.api.Test;
+import org.shedlang.compiler.stackir.instructions.Instructions;
+
+import static org.shedlang.compiler.backends.llvm.ir.ast.LlvmIrMatchers.isLlvmOperandInt;
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.isSequence;
+
+public class LlvmCompilerPushBoolTests {
+ @Test
+ public void pushFalseIsCompiledToOperandInStack() {
+ var instruction = Instructions.pushBool(false);
+ var context = LlvmCompilerContext.EMPTY;
+
+ var result = LlvmCompiler.compileInstruction(instruction, context);
+
+ assertThat(result.instructions(), isSequence());
+ assertThat(result.stack(), isSequence(isLlvmOperandInt(0)));
+ }
+
+ @Test
+ public void pushTrueIsCompiledToOperandInStack() {
+ var instruction = Instructions.pushBool(true);
+ var context = LlvmCompilerContext.EMPTY;
+
+ var result = LlvmCompiler.compileInstruction(instruction, context);
+
+ assertThat(result.instructions(), isSequence());
+ assertThat(result.stack(), isSequence(isLlvmOperandInt(1)));
+ }
+}
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIrMatchers.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIrMatchers.java
new file mode 100644
index 00000000..7250778b
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIrMatchers.java
@@ -0,0 +1,19 @@
+package org.shedlang.compiler.backends.llvm.ir.ast;
+
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperand;
+import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmOperandInt;
+import org.zwobble.precisely.Matcher;
+
+import static org.zwobble.precisely.Matchers.*;
+
+public class LlvmIrMatchers {
+ private LlvmIrMatchers() {
+ }
+
+ public static Matcher<LlvmOperand> isLlvmOperandInt(long value) {
+ return instanceOf(
+ LlvmOperandInt.class,
+ has("value", x -> x.value(), equalTo(value))
+ );
+ }
+}