aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-21 19:01:12 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-21 19:01:12 +0000
commit8147341b40ea563e8bdabfab1a71dd9c39d72a7c (patch)
tree1cb80456f7e4987bd868534529aae7ad2a5a9656 /src/test/java
parentde25b93ec50da213047fe423f77583c92d692eca (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.java46
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java24
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,