From bc735ece60ac6cc3b0624d01408e2c95cc575533 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 30 Sep 2023 17:28:56 +0100 Subject: Extract and test isSubType() --- .../typechecker/TypeCheckerIsSubTypeTests.java | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java (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 new file mode 100644 index 00000000..c80a861a --- /dev/null +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java @@ -0,0 +1,60 @@ +package org.shedlang.compiler.typechecker; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.types.NamespaceName; +import org.shedlang.compiler.types.StructType; +import org.shedlang.compiler.types.Types; + +import static org.shedlang.compiler.typechecker.TypeCheckerSubTyping.isSubType; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TypeCheckerIsSubTypeTests { + @Test + public void typesAreSubTypesOfThemselves() { + var namespaceName = NamespaceName.of("Example", "Project"); + var context = TypeCheckerContext.EMPTY; + + assertThat(isSubType(Types.INT, Types.INT, context), equalTo(true)); + assertThat( + isSubType( + new StructType(namespaceName, "X"), + new StructType(namespaceName, "X"), + context + ), + equalTo(true) + ); + } + + @Test + public void unrelatedTypesAreNotSubTypes() { + var namespaceName = NamespaceName.of("Example", "Project"); + var context = TypeCheckerContext.EMPTY; + + assertThat(isSubType(Types.INT, Types.STRING, context), equalTo(false)); + assertThat( + isSubType( + new StructType(namespaceName, "X"), + new StructType(namespaceName, "Y"), + context + ), + equalTo(false) + ); + } + + @Test + public void topTypeIsSuperTypeOfAllTypes() { + var namespaceName = NamespaceName.of("Example", "Project"); + var context = TypeCheckerContext.EMPTY; + + assertThat(isSubType(Types.INT, Types.TOP, context), equalTo(true)); + assertThat( + isSubType( + new StructType(namespaceName, "X"), + Types.TOP, + context + ), + equalTo(true) + ); + } +} -- cgit v1.2.3