diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:22:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:22:08 +0100 |
| commit | 0d531b61a74872da604aa35e367392b4f8c59219 (patch) | |
| tree | fb58f311399fbcaf69f18c93e09e7cf1a4e716f3 /src/test/java | |
| parent | e95211da9f73ff0b0bc123ab9d29ef6a0eaf6c67 (diff) | |
Type check function definition params
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java index 889698ac..1215389b 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java @@ -37,9 +37,36 @@ public class TypeCheckerFunctionDefinitionTests { } @Test + public void paramsAreTypeChecked() { + var untyped = UntypedFunctionDefinitionNode.builder() + .addPositionalParam("x", Untyped.typeLevelReference("String")) + .addNamedParam("y", Untyped.typeLevelReference("Int")) + .withReturnType(Untyped.typeLevelReference("Unit")) + .build(); + var context = TypeCheckerContext.EMPTY + .enter(P.map( + Map.entry("Int", Types.metaType(Types.INT)), + Map.entry("String", Types.metaType(Types.STRING)), + Map.entry("Unit", Types.metaType(Types.UNIT)) + )); + + var typed = TypeChecker.typeCheckNamespaceStatement(untyped, context); + + assertThat( + typed, + isTypedFunctionDefinitionNode() + .withParams( + isTypedParamsNode( + isSequence(isTypedParamNode("x", isTypedTypeLevelReferenceNode("String", Types.STRING))), + isSequence(isTypedParamNode("y", isTypedTypeLevelReferenceNode("Int", Types.INT))) + ) + ) + ); + } + + @Test public void bodyIsTypeChecked() { var untyped = UntypedFunctionDefinitionNode.builder() - .withName("f") .withReturnType(Untyped.typeLevelReference("Unit")) .addStatement(Untyped.expressionStatement(Untyped.stringLiteral("hello"))) .build(); |
