aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-08 11:11:40 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-08 11:11:40 +0100
commit93dd911a92929ff98fc384b243ab268ce2d033eb (patch)
tree57cd98bbc7ecbfa49a210c53478404e5216eff92 /src/test/java
parentc759fe0cbe348d2d6e69df6e8995ae6bb1a9a5a5 (diff)
Assign tags to structs
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java
index 6464dfe0..932f626a 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineStructTests.java
@@ -16,6 +16,8 @@ import java.util.List;
import java.util.Map;
import static org.shedlang.compiler.patio.PatioTesting.serialize;
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.equalTo;
@ExtendWith({SnapshotResolver.class})
public class PatioCodeGenDefineStructTests {
@@ -40,4 +42,25 @@ public class PatioCodeGenDefineStructTests {
snapshotter.assertSnapshot(serialize(result));
}
+
+ @Test
+ public void structsAreAssignedSequentialTags(Snapshotter snapshotter) throws IOException {
+ // TODO: we can probably optimise this to ensure that (for instance)
+ // variants of the same sum type have sequential tags, but source order
+ // will suffice for now
+ var structType1 = Types.struct(NamespaceName.of("Example", "Project"), "User");
+ var structType2 = Types.struct(NamespaceName.of("Example", "Project"), "Id");
+ var instruction1 = Instructions.defineStruct(structType1, List.of());
+ var instruction2 = Instructions.defineStruct(structType1, List.of());
+ var typeInfos = TypeInfos.EMPTY
+ .addStructTypeInfo(structType1, StructTypeInfo.fromFields(P.orderedMap()))
+ .addStructTypeInfo(structType2, StructTypeInfo.fromFields(P.orderedMap()));
+ var context = PatioCodeGenContext.forTypeInfos(typeInfos);
+
+ context = PatioCodeGen.generateInstruction(instruction1, context);
+ context = PatioCodeGen.generateInstruction(instruction2, context);
+
+ assertThat(context.tag(structType1), equalTo(0));
+ assertThat(context.tag(structType2), equalTo(1));
+ }
}