diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:11:49 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 15:11:49 +0100 |
| commit | d4e6e270b038e721f7eba92d8dbcfe95ab1b31dd (patch) | |
| tree | 20776839ac50d54c44c94f009a21236838050866 /src/test/java | |
| parent | 3352299423098fa32275345f46beec19892f6e99 (diff) | |
Check type of type-level value
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java index 13e7dc2c..c9f1272c 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java @@ -5,7 +5,7 @@ import org.shedlang.compiler.ast.untyped.Untyped; import org.shedlang.compiler.typechecker.errors.UnexpectedTypeError; import org.shedlang.compiler.typechecker.errors.UnknownVariableError; import org.shedlang.compiler.typechecker.typesets.TypeSets; -import org.shedlang.compiler.types.Type; +import org.shedlang.compiler.types.Effects; import org.shedlang.compiler.types.Types; import org.shedlang.compiler.util.P; @@ -23,7 +23,7 @@ public class TypeCheckerTypeLevelReferenceTests { var context = TypeCheckerContext.EMPTY .enter(P.map(Map.entry("String", Types.metaType(Types.STRING)))); - var typed = TypeChecker.typeCheckTypeLevelExpression(Type.class, untyped, context); + var typed = TypeChecker.typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context); assertThat(typed, isTypedTypeLevelReferenceNode("String", Types.STRING)); } @@ -36,14 +36,29 @@ public class TypeCheckerTypeLevelReferenceTests { var error = assertThrows( UnexpectedTypeError.class, - () -> TypeChecker.typeCheckTypeLevelExpression(Type.class, untyped, context) + () -> TypeChecker.typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context) ); - assertThat(error.expected(), equalTo(TypeSets.TYPE_LEVEL_VALUE)); + assertThat(error.expected(), equalTo(TypeSets.META_TYPE)); assertThat(error.actual(), equalTo(Types.STRING)); } @Test + public void whenNameRefersToValueOfWrongTypeThenErrorIsThrown() { + var untyped = Untyped.typeLevelReference("Io"); + var context = TypeCheckerContext.EMPTY + .enter(P.map(Map.entry("Io", Types.effectType(Effects.IO)))); + + var error = assertThrows( + UnexpectedTypeError.class, + () -> TypeChecker.typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context) + ); + + assertThat(error.expected(), equalTo(TypeSets.META_TYPE)); + assertThat(error.actual(), equalTo(Types.effectType(Effects.IO))); + } + + @Test public void whenNameIsNotBoundInEnvironmentThenErrorIsThrown() { var untyped = Untyped.typeLevelReference("String"); var context = TypeCheckerContext.EMPTY @@ -51,7 +66,7 @@ public class TypeCheckerTypeLevelReferenceTests { var error = assertThrows( UnknownVariableError.class, - () -> TypeChecker.typeCheckTypeLevelExpression(Type.class, untyped, context) + () -> TypeChecker.typeCheckTypeLevelExpression(TypeSets.META_TYPE, untyped, context) ); assertThat(error.variableName(), equalTo("String")); |
