diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:28:35 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:28:35 +0100 |
| commit | 07860b8ad33a87c6a95c53b63f2b15ae86574ed3 (patch) | |
| tree | 35d0472aa8ff4d932ff1cfc27775ab15d5265f5a /src/test/java | |
| parent | 0d531b61a74872da604aa35e367392b4f8c59219 (diff) | |
Type check effect in function definition
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java index 1215389b..1671bed4 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerFunctionDefinitionTests.java @@ -3,6 +3,7 @@ package org.shedlang.compiler.typechecker; import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.untyped.Untyped; import org.shedlang.compiler.ast.untyped.UntypedFunctionDefinitionNode; +import org.shedlang.compiler.types.Effects; import org.shedlang.compiler.types.Types; import org.shedlang.compiler.util.P; @@ -10,8 +11,7 @@ import java.util.Map; import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*; import static org.zwobble.precisely.AssertThat.assertThat; -import static org.zwobble.precisely.Matchers.isOptionalEmpty; -import static org.zwobble.precisely.Matchers.isSequence; +import static org.zwobble.precisely.Matchers.*; public class TypeCheckerFunctionDefinitionTests { @Test @@ -63,6 +63,26 @@ public class TypeCheckerFunctionDefinitionTests { ) ); } + @Test + public void effectIsTypeChecked() { + var untyped = UntypedFunctionDefinitionNode.builder() + .withEffect(Untyped.typeLevelReference("Io")) + .withReturnType(Untyped.typeLevelReference("Unit")) + .build(); + var context = TypeCheckerContext.EMPTY + .enter(P.map( + Map.entry("Io", Types.effectType(Effects.IO)), + Map.entry("Unit", Types.metaType(Types.UNIT)) + )); + + var typed = TypeChecker.typeCheckNamespaceStatement(untyped, context); + + assertThat( + typed, + isTypedFunctionDefinitionNode() + .withEffect(isOptionalOf(isTypedTypeLevelReferenceNode("Io", Effects.IO))) + ); + } @Test public void bodyIsTypeChecked() { |
