aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-22 19:57:29 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-25 18:20:57 +0000
commitd51fb33b030447682d47087be59cd8925516ec24 (patch)
treee3752025e08b2d5d5816ba18d5a8117113507c1b /src/test/java
parent2fad94a05e879072af65ed1a995939d3249c2443 (diff)
Serialize Patio instructions to flatbuffers
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java511
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java16
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java522
3 files changed, 544 insertions, 505 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
index 432be5c3..2c6c3a4d 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
@@ -2,17 +2,528 @@ package org.shedlang.compiler.patio.serialization;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.patio.instructions.Patio;
+import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
import org.shedlang.compiler.patio.types.*;
import org.shedlang.compiler.patio.values.PatioDataPtrValue;
import org.shedlang.compiler.patio.values.PatioIntValue;
+import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.sources.Sources;
import java.util.List;
+import java.util.Optional;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public abstract class PatioSerializationTests {
+ // == Instructions ==
+
+ protected abstract PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource);
+ protected abstract byte[] serializeInstruction(PatioInstruction value, Source parentSource);
+
+ @Test
+ public void canSerializeBlock() {
+ var instruction = Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x1"), Patio.intConst(1)),
+ Patio.localStore(Patio.localRef("y1"), Patio.intConst(2))
+ ),
+ List.of(
+ Patio.localRef("x1"),
+ Patio.localRef("y1")
+ )
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeBoolToInt() {
+ var instruction = Patio.boolToInt(Patio.localRef("destination"), Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeCallWithoutDestination() {
+ var instruction = Patio.call(
+ Optional.empty(),
+ "f",
+ List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeCallWithDestination() {
+ var instruction = Patio.call(
+ Optional.of(Patio.localRef("destination")),
+ "f",
+ List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeCallPointer() {
+ var instruction = Patio.callPointer(
+ Patio.localRef("destination"),
+ Patio.localRef("f"),
+ List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeDataPtrToInt() {
+ var instruction = Patio.dataPtrToInt(Patio.localRef("destination"), Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIf() {
+ var instruction = Patio.if_(
+ List.of(
+ Patio.localRef("x"),
+ Patio.localRef("y")
+ ),
+ Patio.localRef("condition"),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x1"), Patio.intConst(1)),
+ Patio.localStore(Patio.localRef("y1"), Patio.intConst(2))
+ ),
+ List.of(
+ Patio.localRef("x1"),
+ Patio.localRef("y1")
+ )
+ ),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x2"), Patio.intConst(11)),
+ Patio.localStore(Patio.localRef("y2"), Patio.intConst(12))
+ ),
+ List.of(
+ Patio.localRef("x2"),
+ Patio.localRef("y2")
+ )
+ )
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntAdd() {
+ var instruction = Patio.intAdd(
+ Patio.localRef("destination"),
+ Patio.localRef("left"),
+ Patio.localRef("right")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntEquals() {
+ var instruction = Patio.intEquals(
+ Patio.localRef("destination"),
+ Patio.localRef("left"),
+ Patio.localRef("right")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntNotEqual() {
+ var instruction = Patio.intNotEqual(
+ Patio.localRef("destination"),
+ Patio.localRef("left"),
+ Patio.localRef("right")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntSub() {
+ var instruction = Patio.intSub(
+ Patio.localRef("destination"),
+ Patio.localRef("left"),
+ Patio.localRef("right")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntToBool() {
+ var instruction = Patio.intToBool(Patio.localRef("destination"), Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeIntToDataPtr() {
+ var instruction = Patio.intToDataPtr(
+ Patio.localRef("destination"),
+ Patio.localRef("value")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeLocalStore() {
+ var instruction = Patio.localStore(
+ Patio.localRef("destination"),
+ Patio.localRef("x")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeLoop() {
+ var instruction = Patio.loop(
+ List.of(
+ Patio.localStore(Patio.localRef("x"), Patio.intConst(1))
+ )
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeLoopBreak() {
+ var instruction = Patio.loopBreak();
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeLoopContinue() {
+ var instruction = Patio.loopContinue();
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeMemoryLoad() {
+ var instruction = Patio.memoryLoad(
+ Patio.localRef("destination"),
+ Patio.localRef("pointer"),
+ PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE)),
+ List.of(1)
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeMemoryStore() {
+ var instruction = Patio.memoryStore(
+ Patio.localRef("pointer"),
+ PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE)),
+ List.of(1),
+ Patio.localRef("value")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeResume() {
+ var instruction = Patio.resume(Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeReturn() {
+ var instruction = Patio.return_(Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeReturnVoid() {
+ var instruction = Patio.returnVoid();
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeSwitch() {
+ var instruction = Patio.switch_(
+ List.of(
+ Patio.localRef("x"),
+ Patio.localRef("y")
+ ),
+ Patio.localRef("value"),
+ List.of(
+ Patio.switchCase(
+ 1,
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x1"), Patio.intConst(11)),
+ Patio.localStore(Patio.localRef("y1"), Patio.intConst(12))
+ ),
+ List.of(
+ Patio.localRef("x1"),
+ Patio.localRef("y1")
+ )
+ )
+ ),
+ Patio.switchCase(
+ 2,
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x2"), Patio.intConst(21)),
+ Patio.localStore(Patio.localRef("y2"), Patio.intConst(22))
+ ),
+ List.of(
+ Patio.localRef("x2"),
+ Patio.localRef("y2")
+ )
+ )
+ )
+ ),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("x3"), Patio.intConst(31)),
+ Patio.localStore(Patio.localRef("y3"), Patio.intConst(32))
+ ),
+ List.of(
+ Patio.localRef("x3"),
+ Patio.localRef("y3")
+ )
+ )
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeThrow() {
+ var instruction = Patio.throw_("Error", Patio.localRef("value"));
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeTry() {
+ var instruction = Patio.try_(
+ List.of(Patio.localRef("x"), Patio.localRef("y")),
+ List.of(
+ Patio.catchClause(
+ "Error1",
+ Patio.localRef("a1"),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("xCatch1"), Patio.intConst(11)),
+ Patio.localStore(Patio.localRef("yCatch1"), Patio.intConst(12))
+ ),
+ List.of(Patio.localRef("xCatch1"), Patio.localRef("yCatch1"))
+ )
+ ),
+ Patio.catchClause(
+ "Error2",
+ Patio.localRef("a2"),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("xCatch2"), Patio.intConst(21)),
+ Patio.localStore(Patio.localRef("yCatch2"), Patio.intConst(22))
+ ),
+ List.of(Patio.localRef("xCatch2"), Patio.localRef("yCatch2"))
+ )
+ )
+ ),
+ Patio.block(
+ List.of(
+ Patio.localStore(Patio.localRef("xTry"), Patio.intConst(31)),
+ Patio.localStore(Patio.localRef("yTry"), Patio.intConst(32))
+ ),
+ List.of(Patio.localRef("xTry"), Patio.localRef("yTry"))
+ )
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeUnreachable() {
+ var instruction = Patio.unreachable();
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeVarLoad() {
+ var instruction = Patio.varLoad(
+ Patio.localRef("destination"),
+ Patio.localRef("v")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
+ @Test
+ public void canSerializeVarStore() {
+ var instruction = Patio.varStore(
+ Patio.localRef("destination"),
+ Patio.localRef("value")
+ );
+
+ var deserializedInstruction = deserializeInstruction(
+ serializeInstruction(instruction, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedInstruction, equalTo(instruction));
+ }
+
// == Operands ==
protected abstract PatioOperand deserializeOperand(byte[] buffer);
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
index b175f1da..a430ee8b 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
@@ -2,17 +2,33 @@ package org.shedlang.compiler.patio.serialization;
import com.google.flatbuffers.FlatBufferBuilder;
import org.shedlang.compiler.patio.flatbuffers.*;
+import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
import org.shedlang.compiler.patio.types.PatioDataLayout;
import org.shedlang.compiler.patio.types.PatioDataValue;
import org.shedlang.compiler.patio.types.PatioType;
import org.shedlang.compiler.patio.values.PatioDataPtrValue;
import org.shedlang.compiler.patio.values.PatioIntValue;
+import org.shedlang.compiler.sources.Source;
import java.nio.ByteBuffer;
public class PatioToFlatbuffersTests extends PatioSerializationTests {
@Override
+ protected byte[] serializeInstruction(PatioInstruction value, Source parentSource) {
+ var builder = new FlatBufferBuilder();
+ var valueFbs = PatioToFlatbuffers.serializeInstruction(builder, value, parentSource);
+ builder.finish(valueFbs);
+ return builder.sizedByteArray();
+ }
+
+ @Override
+ protected PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource) {
+ var valueFbs = PatioInstructionFbs.getRootAsPatioInstructionFbs(ByteBuffer.wrap(buffer));
+ return PatioToFlatbuffers.deserializeInstruction(valueFbs, parentSource);
+ }
+
+ @Override
protected byte[] serializeOperand(PatioOperand value) {
var builder = new FlatBufferBuilder();
var valueFbs = PatioToFlatbuffers.serializeOperand(builder, value);
diff --git a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
index ff8cfc4a..cfee8d5f 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
@@ -6,21 +6,37 @@ import org.shedlang.compiler.patio.PatioFunctionDeclaration;
import org.shedlang.compiler.patio.PatioFunctionDefinition;
import org.shedlang.compiler.patio.PatioVisibility;
import org.shedlang.compiler.patio.instructions.Patio;
+import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
import org.shedlang.compiler.patio.protobuf.PatioProtobuf;
import org.shedlang.compiler.patio.types.*;
import org.shedlang.compiler.patio.values.PatioDataPtrValue;
import org.shedlang.compiler.patio.values.PatioIntValue;
+import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.sources.Sources;
import java.util.List;
-import java.util.Optional;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public class PatioToProtobufTests extends PatioSerializationTests {
@Override
+ protected byte[] serializeInstruction(PatioInstruction value, Source parentSource) {
+ return PatioToProtobuf.serializeInstruction(value, parentSource).toByteArray();
+ }
+
+ @Override
+ protected PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource) {
+ try {
+ var valueProtobuf = PatioProtobuf.PatioInstruction.parseFrom(buffer);
+ return PatioToProtobuf.deserializeInstruction(valueProtobuf, parentSource);
+ } catch (InvalidProtocolBufferException exception) {
+ throw new RuntimeException(exception);
+ }
+ }
+
+ @Override
protected byte[] serializeOperand(PatioOperand value) {
return PatioToProtobuf.serializeOperand(value).toByteArray();
}
@@ -228,508 +244,4 @@ public class PatioToProtobufTests extends PatioSerializationTests {
assertThat(deserializedElement, equalTo(element));
}
-
- // == Instructions ==
-
- @Test
- public void canSerializeBlock() {
- var instruction = Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x1"), Patio.intConst(1)),
- Patio.localStore(Patio.localRef("y1"), Patio.intConst(2))
- ),
- List.of(
- Patio.localRef("x1"),
- Patio.localRef("y1")
- )
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeBoolToInt() {
- var instruction = Patio.boolToInt(Patio.localRef("destination"), Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeCallWithoutDestination() {
- var instruction = Patio.call(
- Optional.empty(),
- "f",
- List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeCallWithDestination() {
- var instruction = Patio.call(
- Optional.of(Patio.localRef("destination")),
- "f",
- List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeCallPointer() {
- var instruction = Patio.callPointer(
- Patio.localRef("destination"),
- Patio.localRef("f"),
- List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c"))
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeDataPtrToInt() {
- var instruction = Patio.dataPtrToInt(Patio.localRef("destination"), Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIf() {
- var instruction = Patio.if_(
- List.of(
- Patio.localRef("x"),
- Patio.localRef("y")
- ),
- Patio.localRef("condition"),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x1"), Patio.intConst(1)),
- Patio.localStore(Patio.localRef("y1"), Patio.intConst(2))
- ),
- List.of(
- Patio.localRef("x1"),
- Patio.localRef("y1")
- )
- ),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x2"), Patio.intConst(11)),
- Patio.localStore(Patio.localRef("y2"), Patio.intConst(12))
- ),
- List.of(
- Patio.localRef("x2"),
- Patio.localRef("y2")
- )
- )
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntAdd() {
- var instruction = Patio.intAdd(
- Patio.localRef("destination"),
- Patio.localRef("left"),
- Patio.localRef("right")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntEquals() {
- var instruction = Patio.intEquals(
- Patio.localRef("destination"),
- Patio.localRef("left"),
- Patio.localRef("right")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntNotEqual() {
- var instruction = Patio.intNotEqual(
- Patio.localRef("destination"),
- Patio.localRef("left"),
- Patio.localRef("right")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntSub() {
- var instruction = Patio.intSub(
- Patio.localRef("destination"),
- Patio.localRef("left"),
- Patio.localRef("right")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntToBool() {
- var instruction = Patio.intToBool(Patio.localRef("destination"), Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeIntToDataPtr() {
- var instruction = Patio.intToDataPtr(
- Patio.localRef("destination"),
- Patio.localRef("value")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeLocalStore() {
- var instruction = Patio.localStore(
- Patio.localRef("destination"),
- Patio.localRef("x")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeLoop() {
- var instruction = Patio.loop(
- List.of(
- Patio.localStore(Patio.localRef("x"), Patio.intConst(1))
- )
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeLoopBreak() {
- var instruction = Patio.loopBreak();
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeLoopContinue() {
- var instruction = Patio.loopContinue();
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeMemoryLoad() {
- var instruction = Patio.memoryLoad(
- Patio.localRef("destination"),
- Patio.localRef("pointer"),
- PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE)),
- List.of(1)
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeMemoryStore() {
- var instruction = Patio.memoryStore(
- Patio.localRef("pointer"),
- PatioDataLayouts.struct(List.of(PatioDataLayouts.INT, PatioDataLayouts.INT, PatioDataLayouts.BYTE)),
- List.of(1),
- Patio.localRef("value")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeResume() {
- var instruction = Patio.resume(Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeReturn() {
- var instruction = Patio.return_(Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeReturnVoid() {
- var instruction = Patio.returnVoid();
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeSwitch() {
- var instruction = Patio.switch_(
- List.of(
- Patio.localRef("x"),
- Patio.localRef("y")
- ),
- Patio.localRef("value"),
- List.of(
- Patio.switchCase(
- 1,
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x1"), Patio.intConst(11)),
- Patio.localStore(Patio.localRef("y1"), Patio.intConst(12))
- ),
- List.of(
- Patio.localRef("x1"),
- Patio.localRef("y1")
- )
- )
- ),
- Patio.switchCase(
- 2,
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x2"), Patio.intConst(21)),
- Patio.localStore(Patio.localRef("y2"), Patio.intConst(22))
- ),
- List.of(
- Patio.localRef("x2"),
- Patio.localRef("y2")
- )
- )
- )
- ),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("x3"), Patio.intConst(31)),
- Patio.localStore(Patio.localRef("y3"), Patio.intConst(32))
- ),
- List.of(
- Patio.localRef("x3"),
- Patio.localRef("y3")
- )
- )
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeThrow() {
- var instruction = Patio.throw_("Error", Patio.localRef("value"));
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeTry() {
- var instruction = Patio.try_(
- List.of(Patio.localRef("x"), Patio.localRef("y")),
- List.of(
- Patio.catchClause(
- "Error1",
- Patio.localRef("a1"),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("xCatch1"), Patio.intConst(11)),
- Patio.localStore(Patio.localRef("yCatch1"), Patio.intConst(12))
- ),
- List.of(Patio.localRef("xCatch1"), Patio.localRef("yCatch1"))
- )
- ),
- Patio.catchClause(
- "Error2",
- Patio.localRef("a2"),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("xCatch2"), Patio.intConst(21)),
- Patio.localStore(Patio.localRef("yCatch2"), Patio.intConst(22))
- ),
- List.of(Patio.localRef("xCatch2"), Patio.localRef("yCatch2"))
- )
- )
- ),
- Patio.block(
- List.of(
- Patio.localStore(Patio.localRef("xTry"), Patio.intConst(31)),
- Patio.localStore(Patio.localRef("yTry"), Patio.intConst(32))
- ),
- List.of(Patio.localRef("xTry"), Patio.localRef("yTry"))
- )
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeUnreachable() {
- var instruction = Patio.unreachable();
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeVarLoad() {
- var instruction = Patio.varLoad(
- Patio.localRef("destination"),
- Patio.localRef("v")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
-
- @Test
- public void canSerializeVarStore() {
- var instruction = Patio.varStore(
- Patio.localRef("destination"),
- Patio.localRef("value")
- );
-
- var deserializedInstruction = PatioToProtobuf.deserializeInstruction(
- PatioToProtobuf.serializeInstruction(instruction, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedInstruction, equalTo(instruction));
- }
}