aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-28 11:10:19 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-28 11:10:19 +0100
commit5dd379c50eb0a9eff9ab87c7edf9cb10c20529e0 (patch)
treef9d6277c547e2520630f0cbbc297a4ef2a9ac27a /src/test/java
parent8d3e6ce5e6c77ff27e99f0f8ca0b22ff943b7d3f (diff)
Add struct type info during type checking
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java
index f8cb0fc5..325f7ea7 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerStructDefinitionTests.java
@@ -83,6 +83,31 @@ public class TypeCheckerStructDefinitionTests {
);
}
+ @Test
+ public void typesOfFieldsAreStored() {
+ var untyped = UntypedStructDefinitionNode.builder()
+ .withName("ExampleStruct")
+ .addField(Untyped.structFieldDefinition("b", Untyped.typeLevelReference("Bool")))
+ .addField(Untyped.structFieldDefinition("a", Untyped.typeLevelReference("Int")))
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(
+ Map.entry("Bool", Types.metaType(Types.BOOL)),
+ Map.entry("Int", Types.metaType(Types.INT))
+ ));
+
+ var typed = typeCheckNamespaceStatement(untyped, context);
+
+ assertThat(
+ typed.context().structTypeInfo().get(Types.struct(NAMESPACE_NAME, "ExampleStruct")),
+ // TODO: builder for OrderedPMap
+ has("fields", x -> x.fields().entrySet(), isSequence(
+ equalTo(Map.entry("b", Types.BOOL)),
+ equalTo(Map.entry("a", Types.INT))
+ ))
+ );
+ }
+
private static TypeCheckerResult<? extends TypedNamespaceStatementNode> typeCheckNamespaceStatement(
UntypedNamespaceStatementNode untyped,
TypeCheckerContext context