aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-26 21:03:25 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-26 21:03:25 +0000
commitcf04670f145879bc3877326698a4d3d0b9f2a988 (patch)
tree50b8c499e79e6814361f127572244aa0927b67d7 /src/test/java
parentd51fb33b030447682d47087be59cd8925516ec24 (diff)
Serialize Patio compilation unit elements to flatbuffers
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java109
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java15
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java126
3 files changed, 144 insertions, 106 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 2c6c3a4d..cfb28691 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
@@ -1,6 +1,10 @@
package org.shedlang.compiler.patio.serialization;
import org.junit.jupiter.api.Test;
+import org.shedlang.compiler.patio.PatioCompilationUnitElement;
+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.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
@@ -17,6 +21,111 @@ import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public abstract class PatioSerializationTests {
+ // == Compilation unit elements ==
+
+ protected abstract PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer, Source parentSource);
+ protected abstract byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource);
+
+ @Test
+ public void canSerializeDataElementImmutableDefinition() {
+ var element = Patio.dataElementImmutableDefinition(
+ "x",
+ PatioVisibility.PRIVATE,
+ PatioDataValues.array(
+ PatioDataLayouts.BYTE,
+ List.of(PatioDataValues.byte_(0x01), PatioDataValues.byte_(0x02))
+ )
+ );
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
+ @Test
+ public void canSerializeDataElementMutableDeclaration() {
+ var element = Patio.dataElementMutableDeclaration(
+ "x",
+ PatioDataLayouts.INT
+ );
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
+ @Test
+ public void canSerializeDataElementMutableDefinition() {
+ var element = Patio.dataElementMutableDefinition(
+ "x",
+ PatioVisibility.PRIVATE,
+ PatioDataValues.int_(42)
+ );
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
+ @Test
+ public void canSerializeExceptionTypeDefinition() {
+ var element = Patio.exceptionTypeDefinition("Error", PatioTypes.INT);
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
+ @Test
+ public void canSerializeFunctionDeclaration() {
+ var element = PatioFunctionDeclaration.builder()
+ .withName("f")
+ .addParam(Patio.param("param1", PatioTypes.INT))
+ .addParam(Patio.param("param2", PatioTypes.DATA_PTR))
+ .withReturnType(PatioTypes.VOID)
+ .build();
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
+ @Test
+ public void canSerializeFunctionDefinition() {
+ var element = PatioFunctionDefinition.builder()
+ .withName("f")
+ .withVisibility(PatioVisibility.PRIVATE)
+ .addLocal(Patio.param("param1", PatioTypes.INT))
+ .addLocal(Patio.param("param2", PatioTypes.DATA_PTR))
+ .addLocal(Patio.val("local1", PatioTypes.FUNCTION_PTR))
+ .addLocal(Patio.val("local2", PatioTypes.INT))
+ .withReturnType(PatioTypes.VOID)
+ .addBodyInstruction(Patio.localStore(Patio.localRef("local2"), Patio.intConst(2)))
+ .build();
+
+ var deserializedElement = deserializeCompilationUnitElement(
+ serializeCompilationUnitElement(element, Sources.NULL),
+ Sources.NULL
+ );
+
+ assertThat(deserializedElement, equalTo(element));
+ }
+
// == Instructions ==
protected abstract PatioInstruction deserializeInstruction(byte[] buffer, Source parentSource);
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 a430ee8b..00be1e28 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToFlatbuffersTests.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.patio.serialization;
import com.google.flatbuffers.FlatBufferBuilder;
+import org.shedlang.compiler.patio.PatioCompilationUnitElement;
import org.shedlang.compiler.patio.flatbuffers.*;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
@@ -15,6 +16,20 @@ import java.nio.ByteBuffer;
public class PatioToFlatbuffersTests extends PatioSerializationTests {
@Override
+ protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource) {
+ var builder = new FlatBufferBuilder();
+ var valueFbs = PatioToFlatbuffers.serializeCompilationUnitElement(builder, value, parentSource);
+ builder.finish(valueFbs);
+ return builder.sizedByteArray();
+ }
+
+ @Override
+ protected PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer, Source parentSource) {
+ var valueFbs = PatioCompilationUnitElementFbs.getRootAsPatioCompilationUnitElementFbs(ByteBuffer.wrap(buffer));
+ return PatioToFlatbuffers.deserializeCompilationUnitElement(valueFbs, parentSource);
+ }
+
+ @Override
protected byte[] serializeInstruction(PatioInstruction value, Source parentSource) {
var builder = new FlatBufferBuilder();
var valueFbs = PatioToFlatbuffers.serializeInstruction(builder, value, parentSource);
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 cfee8d5f..168f5372 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
@@ -2,18 +2,19 @@ package org.shedlang.compiler.patio.serialization;
import com.google.protobuf.InvalidProtocolBufferException;
import org.junit.jupiter.api.Test;
-import org.shedlang.compiler.patio.PatioFunctionDeclaration;
+import org.shedlang.compiler.patio.PatioCompilationUnitElement;
import org.shedlang.compiler.patio.PatioFunctionDefinition;
-import org.shedlang.compiler.patio.PatioVisibility;
import org.shedlang.compiler.patio.instructions.Patio;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
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.types.PatioDataLayout;
+import org.shedlang.compiler.patio.types.PatioDataValue;
+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;
import org.shedlang.compiler.sources.Source;
-import org.shedlang.compiler.sources.Sources;
import java.util.List;
@@ -22,6 +23,21 @@ import static org.zwobble.precisely.Matchers.equalTo;
public class PatioToProtobufTests extends PatioSerializationTests {
@Override
+ protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource) {
+ return PatioToProtobuf.serializeCompilationUnitElement(value, parentSource).toByteArray();
+ }
+
+ @Override
+ protected PatioCompilationUnitElement deserializeCompilationUnitElement(byte[] buffer, Source parentSource) {
+ try {
+ var valueProtobuf = PatioProtobuf.PatioCompilationUnitElement.parseFrom(buffer);
+ return PatioToProtobuf.deserializeCompilationUnitElement(valueProtobuf, parentSource);
+ } catch (InvalidProtocolBufferException exception) {
+ throw new RuntimeException(exception);
+ }
+ }
+
+ @Override
protected byte[] serializeInstruction(PatioInstruction value, Source parentSource) {
return PatioToProtobuf.serializeInstruction(value, parentSource).toByteArray();
}
@@ -142,106 +158,4 @@ public class PatioToProtobufTests extends PatioSerializationTests {
assertThat(deserializedCompilationUnit, equalTo(compilationUnit));
}
-
- // == Compilation unit elements ==
-
- @Test
- public void canSerializeDataElementImmutableDefinition() {
- var element = Patio.dataElementImmutableDefinition(
- "x",
- PatioVisibility.PRIVATE,
- PatioDataValues.array(
- PatioDataLayouts.BYTE,
- List.of(PatioDataValues.byte_(0x01), PatioDataValues.byte_(0x02))
- )
- );
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
-
- @Test
- public void canSerializeDataElementMutableDeclaration() {
- var element = Patio.dataElementMutableDeclaration(
- "x",
- PatioDataLayouts.INT
- );
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
-
- @Test
- public void canSerializeDataElementMutableDefinition() {
- var element = Patio.dataElementMutableDefinition(
- "x",
- PatioVisibility.PRIVATE,
- PatioDataValues.int_(42)
- );
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
-
- @Test
- public void canSerializeExceptionTypeDefinition() {
- var element = Patio.exceptionTypeDefinition("Error", PatioTypes.INT);
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
-
- @Test
- public void canSerializeFunctionDeclaration() {
- var element = PatioFunctionDeclaration.builder()
- .withName("f")
- .addParam(Patio.param("param1", PatioTypes.INT))
- .addParam(Patio.param("param2", PatioTypes.DATA_PTR))
- .withReturnType(PatioTypes.VOID)
- .build();
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
-
- @Test
- public void canSerializeFunctionDefinition() {
- var element = PatioFunctionDefinition.builder()
- .withName("f")
- .withVisibility(PatioVisibility.PRIVATE)
- .addLocal(Patio.param("param1", PatioTypes.INT))
- .addLocal(Patio.param("param2", PatioTypes.DATA_PTR))
- .addLocal(Patio.val("local1", PatioTypes.FUNCTION_PTR))
- .addLocal(Patio.val("local2", PatioTypes.INT))
- .withReturnType(PatioTypes.VOID)
- .addBodyInstruction(Patio.localStore(Patio.localRef("local2"), Patio.intConst(2)))
- .build();
-
- var deserializedElement = PatioToProtobuf.deserializeCompilationUnitElement(
- PatioToProtobuf.serializeCompilationUnitElement(element, Sources.NULL),
- Sources.NULL
- );
-
- assertThat(deserializedElement, equalTo(element));
- }
}