diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-03-02 11:20:57 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-03-02 11:20:57 +0000 |
| commit | a3887cd8bd6acedca45a1e76e48d1d0ed9b63942 (patch) | |
| tree | 58666fe12f128bbd147f98318cf2e1ab02678f59 /src/test/java | |
| parent | 9bace82acaf0ef7ec4c83203c262544f3dd7cae2 (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.java | 7 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionSignatureTests.java | 30 |
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( |
