diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-26 21:09:32 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-26 21:09:32 +0000 |
| commit | b6dc495cf53e882d1c2e332d18322db1e8def9e4 (patch) | |
| tree | 4ecd953d959e09ec7fae75f0ec08cd3db89aaa07 /src/test/java | |
| parent | cf04670f145879bc3877326698a4d3d0b9f2a988 (diff) | |
Serialize Patio compilation units to flatbuffers
Diffstat (limited to 'src/test/java')
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)); - } } |
