aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 15:22:08 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 15:22:08 +0100
commit0d531b61a74872da604aa35e367392b4f8c59219 (patch)
treefb58f311399fbcaf69f18c93e09e7cf1a4e716f3 /src/test/java
parente95211da9f73ff0b0bc123ab9d29ef6a0eaf6c67 (diff)
Type check function definition params
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java29
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();