From 3fbada226294467581ed6ca0868c57bdfc2dfc7e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 26 Jun 2026 15:58:49 +0100 Subject: Extract TypeCheckerSubtyping --- .../compiler/typechecker/TypeChecker.java | 5 +--- .../compiler/typechecker/TypeCheckerSubtyping.java | 12 +++++++++ .../typechecker/TypeCheckerSubtypingTests.java | 30 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtyping.java create mode 100644 src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtypingTests.java (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index 1b10de2..841c934 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.List; import static org.zwobble.hobgoblin.compiler.typechecker.NamespaceNameResolution.resolveNamespaceName; +import static org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerSubtyping.isSubtype; public class TypeChecker { @@ -395,8 +396,4 @@ public class TypeChecker { ); } } - - private static boolean isSubtype(Type subtype, Type supertype) { - return subtype.equals(supertype); - } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtyping.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtyping.java new file mode 100644 index 0000000..673d931 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtyping.java @@ -0,0 +1,12 @@ +package org.zwobble.hobgoblin.compiler.typechecker; + +import org.zwobble.hobgoblin.compiler.types.Type; + +class TypeCheckerSubtyping { + private TypeCheckerSubtyping() { + } + + static boolean isSubtype(Type subtype, Type supertype) { + return subtype.equals(supertype); + } +} diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtypingTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtypingTests.java new file mode 100644 index 0000000..35779fe --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerSubtypingTests.java @@ -0,0 +1,30 @@ +package org.zwobble.hobgoblin.compiler.typechecker; + +import org.junit.jupiter.api.Test; +import org.zwobble.hobgoblin.compiler.types.SimpleNativeType; + +import static org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerSubtyping.isSubtype; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TypeCheckerSubtypingTests { + @Test + public void whenTypeIsEqualToTypeThenTypeIsSubtype() { + var nativeType1 = SimpleNativeType.builtin("Int32"); + var nativeType2 = SimpleNativeType.builtin("Int32"); + + var isSubtype = isSubtype(nativeType1, nativeType2); + + assertThat(isSubtype, equalTo(true)); + } + + @Test + public void distinctTypesAreNotSubtypes() { + var nativeType1 = SimpleNativeType.builtin("Int32"); + var nativeType2 = SimpleNativeType.builtin("Int64"); + + var isSubtype = isSubtype(nativeType1, nativeType2); + + assertThat(isSubtype, equalTo(false)); + } +} -- cgit v1.2.3