diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-22 18:25:49 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-22 18:25:49 +0000 |
| commit | 0a6b38ca7ee956cab5818c195856d5c159966f7a (patch) | |
| tree | 760bb0e88b5e83a2a44826ed032d580e334fd82a /src/test/java/org | |
| parent | ed1c39334aaf4635119532e9ba6098a46843321a (diff) | |
Serialize Patio data values to flatbuffers
Diffstat (limited to 'src/test/java/org')
3 files changed, 126 insertions, 98 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 791743c0..14d47932 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java @@ -2,10 +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.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.types.*; import org.shedlang.compiler.patio.values.PatioDataPtrValue; import org.shedlang.compiler.patio.values.PatioIntValue; @@ -265,4 +262,98 @@ public abstract class PatioSerializationTests { assertThat(deserializedLayout, equalTo(layout)); } + + // == Data values == + + protected abstract PatioDataValue deserializeDataValue(byte[] buffer); + protected abstract byte[] serializeDataValue(PatioDataValue value); + + + @Test + public void canSerializeDataValueArray() { + var value = PatioDataValues.array( + PatioDataLayouts.BYTE, + List.of( + PatioDataValues.byte_(0x01), + PatioDataValues.byte_(0x02), + PatioDataValues.byte_(0x03) + ) + ); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueBool() { + var value = PatioDataValues.bool(true); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueByte() { + var value = PatioDataValues.byte_(0xc8); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueDataPtr() { + var value = PatioDataValues.dataPtrNull(); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueInt() { + var value = PatioDataValues.int_(42); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueInt32() { + var value = PatioDataValues.int32(42); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } + + @Test + public void canSerializeDataValueStruct() { + var value = PatioDataValues.struct(List.of( + PatioDataValues.byte_(0x01), + PatioDataValues.byte_(0x02), + PatioDataValues.byte_(0x03) + )); + + var deserializedValue = deserializeDataValue( + serializeDataValue(value) + ); + + assertThat(deserializedValue, equalTo(value)); + } } 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 2f6fdede..e8c5eaa8 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java @@ -1,11 +1,9 @@ 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.flatbuffers.PatioTypeFbs; +import org.shedlang.compiler.patio.flatbuffers.*; 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; @@ -68,4 +66,18 @@ public class PatioToFlatbuffersTests extends PatioSerializationTests { var valueFbs = PatioDataLayoutFbs.getRootAsPatioDataLayoutFbs(ByteBuffer.wrap(buffer)); return PatioToFlatbuffers.deserializeDataLayout(valueFbs); } + + @Override + protected byte[] serializeDataValue(PatioDataValue value) { + var builder = new FlatBufferBuilder(); + var valueFbs = PatioToFlatbuffers.serializeDataValue(builder, value); + builder.finish(valueFbs); + return builder.sizedByteArray(); + } + + @Override + protected PatioDataValue deserializeDataValue(byte[] buffer) { + var valueFbs = PatioDataValueFbs.getRootAsPatioDataValueFbs(ByteBuffer.wrap(buffer)); + return PatioToFlatbuffers.deserializeDataValue(valueFbs); + } } 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 44334435..a57b7810 100644 --- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java @@ -79,6 +79,21 @@ public class PatioToProtobufTests extends PatioSerializationTests { } } + @Override + protected byte[] serializeDataValue(PatioDataValue value) { + return PatioToProtobuf.serializeDataValue(value).toByteArray(); + } + + @Override + protected PatioDataValue deserializeDataValue(byte[] buffer) { + try { + var valueProtobuf = PatioProtobuf.PatioDataValue.parseFrom(buffer); + return PatioToProtobuf.deserializeDataValue(valueProtobuf); + } catch (InvalidProtocolBufferException exception) { + throw new RuntimeException(exception); + } + } + // == Compilation unit == @Test @@ -780,94 +795,4 @@ public class PatioToProtobufTests extends PatioSerializationTests { assertThat(deserializedOperand, equalTo(operand)); } - - // == Data values == - - @Test - public void canSerializeDataValueArray() { - var value = PatioDataValues.array( - PatioDataLayouts.BYTE, - List.of( - PatioDataValues.byte_(0x01), - PatioDataValues.byte_(0x02), - PatioDataValues.byte_(0x03) - ) - ); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueBool() { - var value = PatioDataValues.bool(true); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueByte() { - var value = PatioDataValues.byte_(0xc8); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueDataPtr() { - var value = PatioDataValues.dataPtrNull(); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueInt() { - var value = PatioDataValues.int_(42); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueInt32() { - var value = PatioDataValues.int32(42); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } - - @Test - public void canSerializeDataValueStruct() { - var value = PatioDataValues.struct(List.of( - PatioDataValues.byte_(0x01), - PatioDataValues.byte_(0x02), - PatioDataValues.byte_(0x03) - )); - - var deserializedValue = PatioToProtobuf.deserializeDataValue( - PatioToProtobuf.serializeDataValue(value) - ); - - assertThat(deserializedValue, equalTo(value)); - } } |
