diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-01-03 21:48:58 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-01-03 21:48:58 +0000 |
| commit | 41ca4d2ab2310cb53921a5ae11b2b2aea2756ccb (patch) | |
| tree | 3a8451f8b7bddc2163a351263c2ce9d134d6a01c /src/test/java | |
| parent | 2b07a0dd23552612aa05f826763e061604fc61fd (diff) | |
Check subtyping when supertype is free type param
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java | 24 |
1 files changed, 24 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 1ff85fea..d86e0ed2 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java @@ -2,12 +2,15 @@ package org.shedlang.compiler.typechecker; import org.junit.jupiter.api.Test; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.typechecker.errors.UnexpectedTypeError; +import org.shedlang.compiler.typechecker.typesets.TypeSets; import org.shedlang.compiler.types.*; import org.shedlang.compiler.util.P; import java.util.List; import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.shedlang.compiler.typechecker.TypeCheckerSubTyping.isSubType; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; @@ -137,6 +140,27 @@ public class TypeCheckerIsSubTypeTests { ))); } + @Test + public void whenSupertypeIsFreeTypeParamThenOtherTypesAreNotSubtype() { + var typeParam = TypeParam.forStructType( + Types.struct(NamespaceName.of("Example"), "Struct"), + "T" + ); + + var error = assertThrows( + UnexpectedTypeError.class, + () -> TypeCheckerSubTyping.addSubtypeConstraint( + Types.INT, + typeParam, + Sources.NULL, + TypeCheckerSubTyping.constraints(List.of(), TypeInfos.EMPTY) + ) + ); + + assertThat(error.expected(), equalTo(TypeSets.type(typeParam))); + assertThat(error.actual(), equalTo(Types.INT)); + } + // == Sum types == @Test |
