diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-05 21:15:32 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-05 21:15:32 +0000 |
| commit | 21b95752a91ccb623ce14a7258b2473f7b193b44 (patch) | |
| tree | f1e1b7e18686be8bbbd3ef299f14fbad5b4369d1 /src/test/java | |
| parent | 9007805f8569da524718a69ed0619c3e3d466875 (diff) | |
Test subtype as free type param
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java index 5f7fede9..33e47ff8 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java @@ -189,6 +189,27 @@ public class TypeCheckerIsSubTypeTests { assertThat(error.actual(), equalTo(Types.INT)); } + @Test + public void whenSubtypeIsFreeTypeParamThenOtherTypesAreNotSupertype() { + var typeParam = TypeParam.forStructType( + Types.struct(NamespaceName.of("Example"), "Struct"), + "T" + ); + + var error = assertThrows( + UnexpectedTypeError.class, + () -> TypeCheckerSubTyping.addSubtypeConstraint( + typeParam, + Types.INT, + Sources.NULL, + TypeCheckerSubTyping.constraints(List.of(), TypeInfos.EMPTY) + ) + ); + + assertThat(error.expected(), equalTo(TypeSets.type(Types.INT))); + assertThat(error.actual(), equalTo(typeParam)); + } + // == Sum types == @Test |
