diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-29 21:53:33 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-29 21:54:10 +0000 |
| commit | 323c351da52c1c74b388dbd8f6c0e29bbccb792b (patch) | |
| tree | 39060f0b448399999609aba5465bcfb0b71963d7 /src/test/java | |
| parent | 914b5c38a44df715ca6dc632ea6486a3f8c6e373 (diff) | |
Infer type of positional param from hint
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionExpressionTests.java | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionExpressionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionExpressionTests.java index a7ea41d7..e7c0db4c 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionExpressionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionExpressionTests.java @@ -10,9 +10,9 @@ import org.shedlang.compiler.util.P; import java.util.List; import java.util.Map; +import java.util.Optional; import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*; -import static org.shedlang.compiler.typechecker.TypeCheckerTesting.typeCheckExpression; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.isOptionalEmpty; import static org.zwobble.precisely.Matchers.isSequence; @@ -26,7 +26,7 @@ public class TypeCheckerFunctionExpressionTests { var context = TypeCheckerContext.EMPTY .enterGlobal(P.map(Map.entry("Unit", Types.metaType(Types.UNIT)))); - var typed = typeCheckExpression(untyped, context); + var typed = TypeCheckerTesting.typeCheckExpression(untyped, context); assertThat( typed.value(), @@ -47,7 +47,7 @@ public class TypeCheckerFunctionExpressionTests { .build(); var context = TypeCheckerContext.EMPTY; - var typed = typeCheckExpression(untyped, context); + var typed = TypeCheckerTesting.typeCheckExpression(untyped, context); assertThat( typed.value(), @@ -55,4 +55,24 @@ public class TypeCheckerFunctionExpressionTests { .withType(new FunctionType(List.of(), List.of(), Effects.NONE, Types.STRING)) ); } + + @Test + public void positionalParamTypeCanBeInferredFromHint() { + var untyped = UntypedFunctionExpressionNode.builder() + .addPositionalParam("x", Optional.empty()) + .build(); + var context = TypeCheckerContext.EMPTY; + + var typed = TypeChecker.typeCheckExpression( + untyped, + Optional.of(new FunctionType(List.of(Types.STRING), List.of(), Effects.NONE, Types.UNIT)), + context + ); + + assertThat( + typed.value(), + isTypedFunctionExpressionNode() + .withType(new FunctionType(List.of(Types.STRING), List.of(), Effects.NONE, Types.UNIT)) + ); + } } |
