From 21b95752a91ccb623ce14a7258b2473f7b193b44 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 5 Jan 2024 21:15:32 +0000 Subject: Test subtype as free type param --- .../typechecker/TypeCheckerIsSubTypeTests.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/test/java') 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 -- cgit v1.2.3