From ed1c39334aaf4635119532e9ba6098a46843321a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 18:06:56 +0000 Subject: Serialize Patio types to flatbuffers --- .../serialization/PatioSerializationTests.java | 84 ++++++++++++++++++ .../serialization/PatioToFlatbuffersTests.java | 16 ++++ .../patio/serialization/PatioToProtobufTests.java | 99 ++++------------------ 3 files changed, 116 insertions(+), 83 deletions(-) (limited to 'src/test/java/org') 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 b68d89b7..791743c0 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test; import org.shedlang.compiler.patio.instructions.Patio; import org.shedlang.compiler.patio.types.PatioDataLayout; import org.shedlang.compiler.patio.types.PatioDataLayouts; +import org.shedlang.compiler.patio.types.PatioType; +import org.shedlang.compiler.patio.types.PatioTypes; import org.shedlang.compiler.patio.values.PatioDataPtrValue; import org.shedlang.compiler.patio.values.PatioIntValue; @@ -89,6 +91,88 @@ public abstract class PatioSerializationTests { assertThat(deserializedIntValue, equalTo(intValue)); } + // == Types == + + protected abstract PatioType deserializeType(byte[] buffer); + protected abstract byte[] serializeType(PatioType value); + + @Test + public void canSerializeBoolType() { + var type = PatioTypes.BOOL; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeByteType() { + var type = PatioTypes.BYTE; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeDataPtrType() { + var type = PatioTypes.DATA_PTR; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeFunctionPtrType() { + var type = PatioTypes.FUNCTION_PTR; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeIntType() { + var type = PatioTypes.INT; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeInt32Type() { + var type = PatioTypes.INT32; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + + @Test + public void canSerializeVoidType() { + var type = PatioTypes.VOID; + + var deserializedType = deserializeType( + serializeType(type) + ); + + assertThat(deserializedType, equalTo(type)); + } + // == Data layouts == protected abstract PatioDataLayout deserializeDataLayout(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 3c787404..2f6fdede 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java @@ -4,7 +4,9 @@ import com.google.flatbuffers.FlatBufferBuilder; import org.shedlang.compiler.patio.flatbuffers.PatioDataLayoutFbs; import org.shedlang.compiler.patio.flatbuffers.PatioDataPtrValueFbs; import org.shedlang.compiler.patio.flatbuffers.PatioIntValueFbs; +import org.shedlang.compiler.patio.flatbuffers.PatioTypeFbs; import org.shedlang.compiler.patio.types.PatioDataLayout; +import org.shedlang.compiler.patio.types.PatioType; import org.shedlang.compiler.patio.values.PatioDataPtrValue; import org.shedlang.compiler.patio.values.PatioIntValue; @@ -39,6 +41,20 @@ public class PatioToFlatbuffersTests extends PatioSerializationTests { return PatioToFlatbuffers.deserializeIntValue(valueFbs); } + @Override + protected byte[] serializeType(PatioType value) { + var builder = new FlatBufferBuilder(); + var valueFbs = PatioToFlatbuffers.serializeType(builder, value); + builder.finish(valueFbs); + return builder.sizedByteArray(); + } + + @Override + protected PatioType deserializeType(byte[] buffer) { + var valueFbs = PatioTypeFbs.getRootAsPatioTypeFbs(ByteBuffer.wrap(buffer)); + return PatioToFlatbuffers.deserializeType(valueFbs); + } + @Override protected byte[] serializeDataLayout(PatioDataLayout 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 18a92f59..44334435 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java @@ -7,10 +7,7 @@ import org.shedlang.compiler.patio.PatioFunctionDefinition; import org.shedlang.compiler.patio.PatioVisibility; import org.shedlang.compiler.patio.instructions.Patio; import org.shedlang.compiler.patio.protobuf.PatioProtobuf; -import org.shedlang.compiler.patio.types.PatioDataLayout; -import org.shedlang.compiler.patio.types.PatioDataLayouts; -import org.shedlang.compiler.patio.types.PatioDataValues; -import org.shedlang.compiler.patio.types.PatioTypes; +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.Sources; @@ -52,6 +49,21 @@ public class PatioToProtobufTests extends PatioSerializationTests { } } + @Override + protected byte[] serializeType(PatioType value) { + return PatioToProtobuf.serializeType(value).toByteArray(); + } + + @Override + protected PatioType deserializeType(byte[] buffer) { + try { + var valueProtobuf = PatioProtobuf.PatioType.parseFrom(buffer); + return PatioToProtobuf.deserializeType(valueProtobuf); + } catch (InvalidProtocolBufferException exception) { + throw new RuntimeException(exception); + } + } + @Override protected byte[] serializeDataLayout(PatioDataLayout value) { return PatioToProtobuf.serializeDataLayout(value).toByteArray(); @@ -769,85 +781,6 @@ public class PatioToProtobufTests extends PatioSerializationTests { assertThat(deserializedOperand, equalTo(operand)); } - // == Types == - - @Test - public void canSerializeBoolType() { - var type = PatioTypes.BOOL; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeByteType() { - var type = PatioTypes.BYTE; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeDataPtrType() { - var type = PatioTypes.DATA_PTR; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeFunctionPtrType() { - var type = PatioTypes.FUNCTION_PTR; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeIntType() { - var type = PatioTypes.INT; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeInt32Type() { - var type = PatioTypes.INT32; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - - @Test - public void canSerializeVoidType() { - var type = PatioTypes.VOID; - - var deserializedType = PatioToProtobuf.deserializeType( - PatioToProtobuf.serializeType(type) - ); - - assertThat(deserializedType, equalTo(type)); - } - // == Data values == @Test -- cgit v1.2.3