diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-21 19:01:12 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-21 19:01:12 +0000 |
| commit | 8147341b40ea563e8bdabfab1a71dd9c39d72a7c (patch) | |
| tree | 1cb80456f7e4987bd868534529aae7ad2a5a9656 /src/test/java | |
| parent | de25b93ec50da213047fe423f77583c92d692eca (diff) | |
Add Patio byte-size-of and byte-offset-of instructions
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java | 46 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/instructions/Patio.java | 24 |
2 files changed, 69 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java index 33dccf5a..404b072f 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -1,10 +1,10 @@ package org.shedlang.compiler.patio; 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 org.shedlang.compiler.patio.types.PatioTypes; -import org.shedlang.compiler.patio.instructions.Patio; import java.util.List; import java.util.Optional; @@ -193,6 +193,50 @@ public class PatioSerializerTests { } @Test + public void canSerializeByteOffsetOf() { + var instruction = Patio.byteOffsetOf( + Patio.localRef("destination"), + PatioDataLayouts.struct(List.of( + PatioDataLayouts.INT, + PatioDataLayouts.BYTE + )), + List.of(1, 2) + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo(""" + ( + byte-offset-of + (local "destination") + (struct (int byte)) + (1 2) + )""" + )); + } + + @Test + public void canSerializeByteSizeOf() { + var instruction = Patio.byteSizeOf( + Patio.localRef("destination"), + PatioDataLayouts.struct(List.of( + PatioDataLayouts.INT, + PatioDataLayouts.BYTE + )) + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo(""" + ( + byte-size-of + (local "destination") + (struct (int byte)) + )""" + )); + } + + @Test public void canSerializeCallWithoutTarget() { var instruction = Patio.call( Optional.empty(), diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java index e1610ada..a1dbd84e 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -36,6 +36,30 @@ public class Patio { return new PatioBoolToInt(destination, value, Sources.NULL); } + public static PatioInstruction byteOffsetOf( + PatioLocalRef destination, + PatioDataLayout layout, + List<Integer> offset + ) { + return new PatioByteOffsetOf( + destination, + layout, + offset, + Sources.NULL + ); + } + + public static PatioInstruction byteSizeOf( + PatioLocalRef destination, + PatioDataLayout layout + ) { + return new PatioByteSizeOf( + destination, + layout, + Sources.NULL + ); + } + public static PatioInstruction call( Optional<PatioLocalRef> destination, String name, |
