From 2fad94a05e879072af65ed1a995939d3249c2443 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 18:42:45 +0000 Subject: Serialize Patio operands to flatbuffers --- .../serialization/PatioSerializationTests.java | 83 +++++++++++++++++++ .../serialization/PatioToFlatbuffersTests.java | 15 ++++ .../patio/serialization/PatioToProtobufTests.java | 95 ++++------------------ 3 files changed, 114 insertions(+), 79 deletions(-) (limited to 'src/test/java') 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 14d47932..432be5c3 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.patio.serialization; import org.junit.jupiter.api.Test; import org.shedlang.compiler.patio.instructions.Patio; +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; @@ -12,6 +13,88 @@ import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; public abstract class PatioSerializationTests { + // == Operands == + + protected abstract PatioOperand deserializeOperand(byte[] buffer); + protected abstract byte[] serializeOperand(PatioOperand value); + + @Test + public void canSerializeBoolConst() { + var operand = Patio.boolConst(true); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeByteConst() { + var operand = Patio.byteConst((byte) 42); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeDataPtrConst() { + var operand = Patio.dataPtrConst("x"); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeFunctionPtrConst() { + var operand = Patio.functionPtrConst("x"); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeIntConst() { + var operand = Patio.intConst(42); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeInt32Const() { + var operand = Patio.int32Const(42); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + + @Test + public void canSerializeLocalRef() { + var operand = Patio.localRef("x"); + + var deserializedOperand = deserializeOperand( + serializeOperand(operand) + ); + + assertThat(deserializedOperand, equalTo(operand)); + } + // == Data ptr values == protected abstract PatioDataPtrValue deserializeDataPtrValue(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 e8c5eaa8..b175f1da 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.patio.serialization; import com.google.flatbuffers.FlatBufferBuilder; import org.shedlang.compiler.patio.flatbuffers.*; +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; @@ -11,6 +12,20 @@ import org.shedlang.compiler.patio.values.PatioIntValue; import java.nio.ByteBuffer; public class PatioToFlatbuffersTests extends PatioSerializationTests { + @Override + protected byte[] serializeOperand(PatioOperand value) { + var builder = new FlatBufferBuilder(); + var valueFbs = PatioToFlatbuffers.serializeOperand(builder, value); + builder.finish(valueFbs); + return builder.sizedByteArray(); + } + + @Override + protected PatioOperand deserializeOperand(byte[] buffer) { + var valueFbs = PatioOperandFbs.getRootAsPatioOperandFbs(ByteBuffer.wrap(buffer)); + return PatioToFlatbuffers.deserializeOperand(valueFbs); + } + @Override protected byte[] serializeDataPtrValue(PatioDataPtrValue value) { var builder = new FlatBufferBuilder(); 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 a57b7810..ff8cfc4a 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java @@ -6,6 +6,7 @@ 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.operands.PatioOperand; import org.shedlang.compiler.patio.protobuf.PatioProtobuf; import org.shedlang.compiler.patio.types.*; import org.shedlang.compiler.patio.values.PatioDataPtrValue; @@ -19,6 +20,21 @@ import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; public class PatioToProtobufTests extends PatioSerializationTests { + @Override + protected byte[] serializeOperand(PatioOperand value) { + return PatioToProtobuf.serializeOperand(value).toByteArray(); + } + + @Override + protected PatioOperand deserializeOperand(byte[] buffer) { + try { + var valueProtobuf = PatioProtobuf.PatioOperand.parseFrom(buffer); + return PatioToProtobuf.deserializeOperand(valueProtobuf); + } catch (InvalidProtocolBufferException exception) { + throw new RuntimeException(exception); + } + } + @Override protected byte[] serializeDataPtrValue(PatioDataPtrValue value) { return PatioToProtobuf.serializeDataPtrValue(value).toByteArray(); @@ -716,83 +732,4 @@ public class PatioToProtobufTests extends PatioSerializationTests { assertThat(deserializedInstruction, equalTo(instruction)); } - - // == Operands == - - @Test - public void canSerializeBoolConst() { - var operand = Patio.boolConst(true); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeByteConst() { - var operand = Patio.byteConst((byte) 42); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeDataPtrConst() { - var operand = Patio.dataPtrConst("x"); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeFunctionPtrConst() { - var operand = Patio.functionPtrConst("x"); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeIntConst() { - var operand = Patio.intConst(42); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeInt32Const() { - var operand = Patio.int32Const(42); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } - - @Test - public void canSerializeLocalRef() { - var operand = Patio.localRef("x"); - - var deserializedOperand = PatioToProtobuf.deserializeOperand( - PatioToProtobuf.serializeOperand(operand) - ); - - assertThat(deserializedOperand, equalTo(operand)); - } } -- cgit v1.2.3