aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-02 11:20:57 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-02 11:20:57 +0000
commita3887cd8bd6acedca45a1e76e48d1d0ed9b63942 (patch)
tree58666fe12f128bbd147f98318cf2e1ab02678f59 /src/test/java
parent9bace82acaf0ef7ec4c83203c262544f3dd7cae2 (diff)
Include type-level params in TypedFunctionSignatureNode
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java7
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java30
2 files changed, 37 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java
index ca2e64ae..d6038729 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedFunctionSignatureNodeMatcher.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.ast.typed;
import org.pcollections.Empty;
import org.pcollections.PVector;
import org.shedlang.compiler.testing.MatcherBuilder;
+import org.shedlang.compiler.types.TypeParam;
import org.zwobble.precisely.Matcher;
import java.util.Optional;
@@ -48,4 +49,10 @@ public class TypedFunctionSignatureNodeMatcher extends MatcherBuilder<
public TypedFunctionSignatureNodeMatcher withReturnType(Matcher<TypedTypeLevelExpressionNode<?>> returnType) {
return with(has("returnType", x -> x.returnType(), isOptionalOf(returnType)));
}
+
+ public TypedFunctionSignatureNodeMatcher withTypeLevelParams(
+ Matcher<Optional<? extends Iterable<TypeParam>>> typeLevelParams
+ ) {
+ return with(has("typeLevelParams", x -> x.typeLevelParams(), typeLevelParams));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java
index f0d13333..c1557bbc 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java
@@ -95,6 +95,36 @@ public class TypeCheckerFunctionSignatureTests {
}
@Test
+ public void typeLevelParamsAreTypedChecked() {
+ var untyped = UntypedFunctionSignatureNode.builder()
+ .withTypeLevelParams(List.of(
+ Untyped.typeLevelParam("T")
+ ))
+ .build();
+ var namespaceName = NamespaceName.of("Example");
+ var context = TypeCheckerContext.EMPTY
+ .enterNamespace(namespaceName, P.map());
+
+ var typed = typeCheckFunctionSignature(
+ untyped,
+ Optional.of(new Scope.Function(namespaceName, "f")),
+ context
+ );
+
+ assertThat(
+ typed,
+ isTypedFunctionSignatureNode()
+ .withTypeLevelParams(isOptionalOf(isSequence(
+ equalTo(TypeParam.forFunction(
+ namespaceName,
+ "f",
+ "T"
+ ))
+ )))
+ );
+ }
+
+ @Test
public void paramTypesCanReferenceTypeLevelParams() {
var untyped = UntypedFunctionSignatureNode.builder()
.withTypeLevelParams(List.of(