From f48ecd33ee4430abe7ebb85652554d37d8dea29b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 3 Mar 2024 10:27:42 +0000 Subject: Check number of type-level arguments --- .../compiler/typechecker/TypeCheckerCallTests.java | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/test/java') 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)); + } } -- cgit v1.2.3