aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-30 17:28:56 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-30 17:28:56 +0100
commitbc735ece60ac6cc3b0624d01408e2c95cc575533 (patch)
tree6d75b80fdf3664ddd60fa2ba76932013eb388a01 /src/test/java
parent84b617ab54023c4a9a67687ead488976a4fb8056 (diff)
Extract and test isSubType()
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java60
1 files changed, 60 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
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)
+ );
+ }
+}