aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-29 21:53:33 +0000
committerMichael Williamson <mike@zwobble.org>2023-10-29 21:54:10 +0000
commit323c351da52c1c74b388dbd8f6c0e29bbccb792b (patch)
tree39060f0b448399999609aba5465bcfb0b71963d7 /src/test/java
parent914b5c38a44df715ca6dc632ea6486a3f8c6e373 (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.java26
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))
+ );
+ }
}