aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 18:28:32 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 18:28:32 +0100
commit74764070e84869fe8e2480350a76cb8fc58c1aeb (patch)
tree47295e75c274e8f6bff5be6af165c494e06bb1ae /src/test/java
parentcfe6cf895550d85699ac933021cf9f8f0c468dd4 (diff)
Add if instruction to Patio
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java27
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java13
2 files changed, 40 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index 864095c2..67227c7b 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -128,6 +128,33 @@ public class PatioSerializerTests {
}
@Test
+ public void canSerializeIf() {
+ var instruction = Patio.if_(
+ "condition",
+ List.of(
+ Patio.intGet("x", 1)
+ ),
+ List.of(
+ Patio.intGet("y", 2)
+ )
+ );
+
+ var string = PatioTesting.serializeInstruction(instruction);
+
+ assertThat(string, equalTo("""
+ (
+ if
+ "condition"
+ (
+ (int-get "x" 1)
+ )
+ (
+ (int-get "y" 2)
+ )
+ )"""));
+ }
+
+ @Test
public void canSerializeIntAdd() {
var instruction = Patio.intAdd("target", "left", "right");
diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
index 48b458c7..0f434cd5 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -52,6 +52,19 @@ public class Patio {
return new PatioFunctionPointerGet(new PatioLocalRef(target), name, Sources.NULL);
}
+ public static PatioInstruction if_(
+ String condition,
+ List<PatioInstruction> trueBody,
+ List<PatioInstruction> falseBody
+ ) {
+ return new PatioIf(
+ new PatioLocalRef(condition),
+ trueBody,
+ falseBody,
+ Sources.NULL
+ );
+ }
+
public static PatioInstruction intAdd(String target, String left, String right) {
return new PatioIntAdd(
new PatioLocalRef(target),