aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-03 10:27:42 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-03 10:27:42 +0000
commitf48ecd33ee4430abe7ebb85652554d37d8dea29b (patch)
tree938632a0b72cd176f5f9945307a8d1b18b07e733 /src/test/java
parentec7c801a8dbad307b76b0a18f819da3ea06bb16e (diff)
Check number of type-level arguments
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
index 21a3e718..3027304e 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerCallTests.java
@@ -632,4 +632,35 @@ public class TypeCheckerCallTests {
.withHasEffects(true)
);
}
+
+ @Test
+ public void whenReceiverIsCalledWithWrongNumberOfTypeLevelArgsThenErrorIsThrown() {
+ var untyped = UntypedCallNode.builder()
+ .withReceiver(Untyped.reference("identity"))
+ .withTypeLevelArgs(List.of(
+ Untyped.typeLevelReference("Int"),
+ Untyped.typeLevelReference("Int")
+ ))
+ .addPositionalArg(Untyped.intLiteral(42))
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(
+ Map.entry(
+ "identity",
+ FunctionType.builder()
+ .withTypeLevelParams(List.of(
+ TypeParam.forFunction(NamespaceName.of("Example"), "identity", "T")
+ ))
+ .addPositionalParam(TypeParam.forFunction(NamespaceName.of("Example"), "identity", "T"))
+ .withReturnType(TypeParam.forFunction(NamespaceName.of("Example"), "identity", "T"))
+ .build()
+ ),
+ Map.entry("Int", Types.metaType(Types.INT))
+ ));
+
+ var error = assertThrows(WrongNumberOfTypeLevelArgsError.class, () -> typeCheckExpression(untyped, context));
+
+ assertThat(error.expected(), equalTo(1));
+ assertThat(error.actual(), equalTo(2));
+ }
}