aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-24 21:29:06 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-24 21:29:06 +0100
commitb2db86c12b90dffe5f625d4209821594fd4cd620 (patch)
treeb11a92ee950359a7c6c78ed2c3f4b88bbc331163 /src/test/java
parent3fca8824b6ce6f7a654706d9d1c4fef537335a5e (diff)
Type check named params in function type
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java
index 2b212b4b..6b48a604 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java
@@ -113,4 +113,32 @@ public class TypeCheckerFunctionTypeTests {
))
);
}
+
+ @Test
+ public void namedParamsAreTypeChecked() {
+ var untyped = UntypedFunctionTypeNode.builder()
+ .addNamedParam("a", Untyped.typeLevelReference("Int"))
+ .addNamedParam("b", Untyped.typeLevelReference("Bool"))
+ .withReturnType(Untyped.typeLevelReference("String"))
+ .build();
+ var context = TypeCheckerContext.EMPTY
+ .enterGlobal(P.map(
+ Map.entry("Bool", Types.metaType(Types.BOOL)),
+ Map.entry("Int", Types.metaType(Types.INT)),
+ Map.entry("String", Types.metaType(Types.STRING))
+ ));
+
+ var typed = TypeChecker.typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context);
+
+ assertThat(
+ typed,
+ isTypedFunctionTypeNode(equalTo(
+ FunctionType.builder()
+ .addNamedParam("a", Types.INT)
+ .addNamedParam("b", Types.BOOL)
+ .withReturnType(Types.STRING)
+ .build()
+ ))
+ );
+ }
}