aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-24 21:24:52 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-24 21:24:52 +0100
commit3fca8824b6ce6f7a654706d9d1c4fef537335a5e (patch)
tree7c0369385d0d7322fea06ccbfd3d0d35a472c670 /src/test/java
parent405fc623d679c0d40a8e4fc031dd4e5e32d5f35f (diff)
Type check positional params in function types
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 d1c7c2f2..2b212b4b 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionTypeTests.java
@@ -85,4 +85,32 @@ public class TypeCheckerFunctionTypeTests {
))
);
}
+
+ @Test
+ public void positionalParamsAreTypeChecked() {
+ var untyped = UntypedFunctionTypeNode.builder()
+ .addPositionalParam(Untyped.typeLevelReference("Int"))
+ .addPositionalParam(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()
+ .addPositionalParam(Types.INT)
+ .addPositionalParam(Types.BOOL)
+ .withReturnType(Types.STRING)
+ .build()
+ ))
+ );
+ }
}