aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-11 00:29:06 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-11 00:29:06 +0000
commit1b56846cfdf7e25408920bdeb4f46edb721a218f (patch)
treee8b5192b1d3708c7669068a4c4436482cd66a1d3 /src/test/java
parentd1b3124cf2ef0b8d88f7e996248779b08a519878 (diff)
Type check calls to positional structs
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java34
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java8
2 files changed, 37 insertions, 5 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
index cfae87ed..bef0039c 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
@@ -356,6 +356,7 @@ public class TypeCheckerCallTests {
var structType = Types.struct(NamespaceName.of("Example"), "User");
var structTypeInfo = StructTypeInfo.builder()
.addField("name", Types.STRING)
+ .withFieldsArePositional(false)
.build();
var context = TypeCheckerContext.EMPTY
.enterGlobal(P.map(Map.entry("User", Types.metaType(structType))))
@@ -380,6 +381,39 @@ public class TypeCheckerCallTests {
}
@Test
+ public void canCallStructWithPositionalFields() {
+ var untyped = UntypedCallNode.builder()
+ .withReceiver(Untyped.reference("User"))
+ .addPositionalArg(Untyped.stringLiteral("Bob"))
+ .build();
+ var structType = Types.struct(NamespaceName.of("Example"), "User");
+ var structTypeInfo = StructTypeInfo.builder()
+ .addField("name", Types.STRING)
+ .withFieldsArePositional(true)
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(Map.entry("User", Types.metaType(structType))))
+ .addStructTypeInfo(structType, structTypeInfo);
+
+ var typed = typeCheckExpression(untyped, context);
+
+ assertThat(
+ typed.value(),
+ isTypedCallNode()
+ .withReceiver(isTypedReferenceNode("User", Types.metaType(structType)))
+ .withArgs(
+ isTypedArgsNode()
+ .withPositional(isSequence(
+ isTypedStringLiteralNode("Bob")
+ ))
+ .withNamed(isSequence())
+ )
+ .withHasEffects(false)
+ .withType(structType)
+ );
+ }
+
+ @Test
public void canCallGenericStructWithExplicitTypeArgs() {
var untyped = UntypedCallNode.builder()
.withReceiver(Untyped.reference("Box"))
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
index e41bc2fa..c6fd0480 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerWhenTests.java
@@ -303,11 +303,9 @@ public class TypeCheckerWhenTests {
)))
.addStructTypeInfo(
VARIANT_TYPE_1,
- new StructTypeInfo(
- FieldsInfo.builder()
- .addField("value", TypeParam.forStructType(VARIANT_TYPE_1, "T"))
- .build()
- )
+ StructTypeInfo.builder()
+ .addField("value", TypeParam.forStructType(VARIANT_TYPE_1, "T"))
+ .build()
)
.enterGlobal(P.map(
Map.entry("x", SUM_TYPE),