From 8430d69e1df2e9062c8fa25c5b0584966794855e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 17:56:34 +0000 Subject: Serialize Patio int values to flatbuffers --- .../serialization/PatioSerializationTests.java | 50 +++++++++++++++++ .../serialization/PatioToFlatbuffersTests.java | 16 ++++++ .../patio/serialization/PatioToProtobufTests.java | 62 ++++++---------------- 3 files changed, 82 insertions(+), 46 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 3ed5ae0c..b68d89b7 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java @@ -5,6 +5,7 @@ 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.values.PatioDataPtrValue; +import org.shedlang.compiler.patio.values.PatioIntValue; import java.util.List; @@ -39,6 +40,55 @@ public abstract class PatioSerializationTests { assertThat(deserializedDataPtrValue, equalTo(dataPtrValue)); } + // == Int values == + + protected abstract PatioIntValue deserializeIntValue(byte[] buffer); + protected abstract byte[] serializeIntValue(PatioIntValue value); + + @Test + public void canSerializeIntValueByteOffsetOf() { + var intValue = Patio.intValueByteOffsetOf( + PatioDataLayouts.struct(List.of( + PatioDataLayouts.INT, + PatioDataLayouts.BYTE + )), + List.of(1, 2) + ); + + var deserializedIntValue = deserializeIntValue( + serializeIntValue(intValue) + ); + + assertThat(deserializedIntValue, equalTo(intValue)); + } + + @Test + public void canSerializeIntValueByteSizeOf() { + var intValue = Patio.intValueByteSizeOf( + PatioDataLayouts.struct(List.of( + PatioDataLayouts.INT, + PatioDataLayouts.BYTE + )) + ); + + var deserializedIntValue = deserializeIntValue( + serializeIntValue(intValue) + ); + + assertThat(deserializedIntValue, equalTo(intValue)); + } + + @Test + public void canSerializeIntValueLiteral() { + var intValue = Patio.intValueLiteral(42); + + var deserializedIntValue = deserializeIntValue( + serializeIntValue(intValue) + ); + + assertThat(deserializedIntValue, equalTo(intValue)); + } + // == 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 eacb36cb..3c787404 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java @@ -3,8 +3,10 @@ package org.shedlang.compiler.patio.serialization; 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.types.PatioDataLayout; import org.shedlang.compiler.patio.values.PatioDataPtrValue; +import org.shedlang.compiler.patio.values.PatioIntValue; import java.nio.ByteBuffer; @@ -23,6 +25,20 @@ public class PatioToFlatbuffersTests extends PatioSerializationTests { return PatioToFlatbuffers.deserializeDataPtrValue(valueFbs); } + @Override + protected byte[] serializeIntValue(PatioIntValue value) { + var builder = new FlatBufferBuilder(); + var valueFbs = PatioToFlatbuffers.serializeIntValue(builder, value); + builder.finish(valueFbs); + return builder.sizedByteArray(); + } + + @Override + protected PatioIntValue deserializeIntValue(byte[] buffer) { + var valueFbs = PatioIntValueFbs.getRootAsPatioIntValueFbs(ByteBuffer.wrap(buffer)); + return PatioToFlatbuffers.deserializeIntValue(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 a112af5c..18a92f59 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java @@ -12,6 +12,7 @@ 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.values.PatioDataPtrValue; +import org.shedlang.compiler.patio.values.PatioIntValue; import org.shedlang.compiler.sources.Sources; import java.util.List; @@ -36,6 +37,21 @@ public class PatioToProtobufTests extends PatioSerializationTests { } } + @Override + protected byte[] serializeIntValue(PatioIntValue value) { + return PatioToProtobuf.serializeIntValue(value).toByteArray(); + } + + @Override + protected PatioIntValue deserializeIntValue(byte[] buffer) { + try { + var valueProtobuf = PatioProtobuf.PatioIntValue.parseFrom(buffer); + return PatioToProtobuf.deserializeIntValue(valueProtobuf); + } catch (InvalidProtocolBufferException exception) { + throw new RuntimeException(exception); + } + } + @Override protected byte[] serializeDataLayout(PatioDataLayout value) { return PatioToProtobuf.serializeDataLayout(value).toByteArray(); @@ -753,52 +769,6 @@ public class PatioToProtobufTests extends PatioSerializationTests { assertThat(deserializedOperand, equalTo(operand)); } - // == Int values == - - @Test - public void canSerializeIntValueByteOffsetOf() { - var intValue = Patio.intValueByteOffsetOf( - PatioDataLayouts.struct(List.of( - PatioDataLayouts.INT, - PatioDataLayouts.BYTE - )), - List.of(1, 2) - ); - - var deserializedIntValue = PatioToProtobuf.deserializeIntValue( - PatioToProtobuf.serializeIntValue(intValue) - ); - - assertThat(deserializedIntValue, equalTo(intValue)); - } - - @Test - public void canSerializeIntValueByteSizeOf() { - var intValue = Patio.intValueByteSizeOf( - PatioDataLayouts.struct(List.of( - PatioDataLayouts.INT, - PatioDataLayouts.BYTE - )) - ); - - var deserializedIntValue = PatioToProtobuf.deserializeIntValue( - PatioToProtobuf.serializeIntValue(intValue) - ); - - assertThat(deserializedIntValue, equalTo(intValue)); - } - - @Test - public void canSerializeIntValueLiteral() { - var intValue = Patio.intValueLiteral(42); - - var deserializedIntValue = PatioToProtobuf.deserializeIntValue( - PatioToProtobuf.serializeIntValue(intValue) - ); - - assertThat(deserializedIntValue, equalTo(intValue)); - } - // == Types == @Test -- cgit v1.2.3