aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-05 21:15:32 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-05 21:15:32 +0000
commit21b95752a91ccb623ce14a7258b2473f7b193b44 (patch)
treef1e1b7e18686be8bbbd3ef299f14fbad5b4369d1 /src/test/java
parent9007805f8569da524718a69ed0619c3e3d466875 (diff)
Test subtype as free type param
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java21
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