From 2b07a0dd23552612aa05f826763e061604fc61fd Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 3 Jan 2024 21:46:20 +0000 Subject: Test subtyping when supertype is bound type param --- .../typechecker/TypeCheckerIsSubTypeTests.java | 24 ++++++++++++++++++++++ 1 file changed, 24 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 88f93472..1ff85fea 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java @@ -1,10 +1,12 @@ package org.shedlang.compiler.typechecker; import org.junit.jupiter.api.Test; +import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.types.*; import org.shedlang.compiler.util.P; import java.util.List; +import java.util.Map; import static org.shedlang.compiler.typechecker.TypeCheckerSubTyping.isSubType; import static org.zwobble.precisely.AssertThat.assertThat; @@ -113,6 +115,28 @@ public class TypeCheckerIsSubTypeTests { ); } + // == Type params == + + @Test + public void whenSupertypeIsBoundTypeParamThenLowerBoundIsAddedToType() { + var typeParam = TypeParam.forStructType( + Types.struct(NamespaceName.of("Example"), "Struct"), + "T" + ); + + var constraints = TypeCheckerSubTyping.addSubtypeConstraint( + Types.INT, + typeParam, + Sources.NULL, + TypeCheckerSubTyping.constraints(List.of(typeParam), TypeInfos.EMPTY) + ); + var result = constraints.solve(); + + assertThat(result, equalTo(TypeSubstitutionMap.of( + Map.entry(typeParam, Types.INT) + ))); + } + // == Sum types == @Test -- cgit v1.2.3