aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-26 21:09:32 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-26 21:09:32 +0000
commitb6dc495cf53e882d1c2e332d18322db1e8def9e4 (patch)
tree4ecd953d959e09ec7fae75f0ec08cd3db89aaa07 /src/test/java
parentcf04670f145879bc3877326698a4d3d0b9f2a988 (diff)
Serialize Patio compilation units to flatbuffers
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java26
-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.java40
3 files changed, 52 insertions, 29 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 cfb28691..7b894f40 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioSerializationTests.java
@@ -1,10 +1,7 @@
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.*;
import org.shedlang.compiler.patio.instructions.Patio;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
import org.shedlang.compiler.patio.operands.PatioOperand;
@@ -21,6 +18,27 @@ import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
public abstract class PatioSerializationTests {
+
+ // == Compilation unit ==
+
+ protected abstract PatioCompilationUnit deserializeCompilationUnit(byte[] buffer);
+ protected abstract byte[] serializeCompilationUnit(PatioCompilationUnit value);
+
+ @Test
+ public void canSerializeCompilationUnit() {
+ var element = PatioFunctionDefinition.builder()
+ .withName("f")
+ .withReturnType(PatioTypes.VOID)
+ .build();
+ var compilationUnit = Patio.compilationUnit(List.of(element));
+
+ var deserializedCompilationUnit = deserializeCompilationUnit(
+ serializeCompilationUnit(compilationUnit)
+ );
+
+ assertThat(deserializedCompilationUnit, equalTo(compilationUnit));
+ }
+
// == Compilation unit elements ==
protected abstract PatioCompilationUnitElement deserializeCompilationUnitElement(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 00be1e28..9ff08678 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.PatioCompilationUnit;
import org.shedlang.compiler.patio.PatioCompilationUnitElement;
import org.shedlang.compiler.patio.flatbuffers.*;
import org.shedlang.compiler.patio.instructions.PatioInstruction;
@@ -16,6 +17,20 @@ import java.nio.ByteBuffer;
public class PatioToFlatbuffersTests extends PatioSerializationTests {
@Override
+ protected byte[] serializeCompilationUnit(PatioCompilationUnit value) {
+ var builder = new FlatBufferBuilder();
+ var valueFbs = PatioToFlatbuffers.serializeCompilationUnit(builder, value);
+ builder.finish(valueFbs);
+ return builder.sizedByteArray();
+ }
+
+ @Override
+ protected PatioCompilationUnit deserializeCompilationUnit(byte[] buffer) {
+ var valueFbs = PatioCompilationUnitFbs.getRootAsPatioCompilationUnitFbs(ByteBuffer.wrap(buffer));
+ return PatioToFlatbuffers.deserializeCompilationUnit(valueFbs);
+ }
+
+ @Override
protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource) {
var builder = new FlatBufferBuilder();
var valueFbs = PatioToFlatbuffers.serializeCompilationUnitElement(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 168f5372..d75016cb 100644
--- a/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/serialization/PatioToProtobufTests.java
@@ -1,27 +1,34 @@
package org.shedlang.compiler.patio.serialization;
import com.google.protobuf.InvalidProtocolBufferException;
-import org.junit.jupiter.api.Test;
+import org.shedlang.compiler.patio.PatioCompilationUnit;
import org.shedlang.compiler.patio.PatioCompilationUnitElement;
-import org.shedlang.compiler.patio.PatioFunctionDefinition;
-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.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 java.util.List;
+public class PatioToProtobufTests extends PatioSerializationTests {
+ @Override
+ protected byte[] serializeCompilationUnit(PatioCompilationUnit value) {
+ return PatioToProtobuf.serializeCompilationUnit(value).toByteArray();
+ }
-import static org.zwobble.precisely.AssertThat.assertThat;
-import static org.zwobble.precisely.Matchers.equalTo;
+ @Override
+ protected PatioCompilationUnit deserializeCompilationUnit(byte[] buffer) {
+ try {
+ var valueProtobuf = PatioProtobuf.PatioCompilationUnit.parseFrom(buffer);
+ return PatioToProtobuf.deserializeCompilationUnit(valueProtobuf);
+ } catch (InvalidProtocolBufferException exception) {
+ throw new RuntimeException(exception);
+ }
+ }
-public class PatioToProtobufTests extends PatioSerializationTests {
@Override
protected byte[] serializeCompilationUnitElement(PatioCompilationUnitElement value, Source parentSource) {
return PatioToProtobuf.serializeCompilationUnitElement(value, parentSource).toByteArray();
@@ -141,21 +148,4 @@ public class PatioToProtobufTests extends PatioSerializationTests {
throw new RuntimeException(exception);
}
}
-
- // == Compilation unit ==
-
- @Test
- public void canSerializeCompilationUnit() {
- var element = PatioFunctionDefinition.builder()
- .withName("f")
- .withReturnType(PatioTypes.VOID)
- .build();
- var compilationUnit = Patio.compilationUnit(List.of(element));
-
- var deserializedCompilationUnit = PatioToProtobuf.deserializeCompilationUnit(
- PatioToProtobuf.serializeCompilationUnit(compilationUnit)
- );
-
- assertThat(deserializedCompilationUnit, equalTo(compilationUnit));
- }
}