diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-22 19:57:29 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-25 18:20:57 +0000 |
| commit | d51fb33b030447682d47087be59cd8925516ec24 (patch) | |
| tree | e3752025e08b2d5d5816ba18d5a8117113507c1b /src/test/java/org | |
| parent | 2fad94a05e879072af65ed1a995939d3249c2443 (diff) | |
Serialize Patio instructions to flatbuffers
Diffstat (limited to 'src/test/java/org')
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)); - } } |
