From 53ae751f2c678f678853ca4ddd9bbac3b5d902f9 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 21 Mar 2026 12:04:41 +0000 Subject: Serialize Patio data values and data layouts to protobuf --- .../patio/protobuf/PatioToProtobufTests.java | 162 +++++++++++++++++++++ 1 file changed, 162 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/protobuf/PatioToProtobufTests.java b/src/test/java/org/shedlang/compiler/patio/protobuf/PatioToProtobufTests.java index 877d59cf..368f95f3 100644 --- a/src/test/java/org/shedlang/compiler/patio/protobuf/PatioToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/patio/protobuf/PatioToProtobufTests.java @@ -1,7 +1,9 @@ package org.shedlang.compiler.patio.protobuf; import org.junit.jupiter.api.Test; +import org.shedlang.compiler.patio.instructions.Patio; import org.shedlang.compiler.patio.types.PatioDataLayouts; +import org.shedlang.compiler.patio.types.PatioDataValues; import java.util.List; @@ -9,6 +11,76 @@ import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; public class PatioToProtobufTests { + // == Data ptr values == + + @Test + public void canSerializeDataPtrValueDataElement() { + var dataPtrValue = Patio.dataPtrValueDataElement("string"); + + var deserializedDataPtrValue = PatioToProtobuf.deserializeDataPtrValue( + PatioToProtobuf.serializeDataPtrValue(dataPtrValue) + ); + + assertThat(deserializedDataPtrValue, equalTo(dataPtrValue)); + } + + @Test + public void canSerializeDataPtrValueNull() { + var dataPtrValue = Patio.dataPtrValueNull(); + + var deserializedDataPtrValue = PatioToProtobuf.deserializeDataPtrValue( + PatioToProtobuf.serializeDataPtrValue(dataPtrValue) + ); + + assertThat(deserializedDataPtrValue, equalTo(dataPtrValue)); + } + + // == 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)); + } + // == Data layouts == @Test @@ -98,4 +170,94 @@ public class PatioToProtobufTests { assertThat(deserializedLayout, equalTo(layout)); } + + // == 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)); + } } -- cgit v1.2.3