aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-30 17:31:10 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-30 17:31:10 +0100
commitce8dfcfecd0937fbf2f4d5b941517f3750f29af2 (patch)
tree62a208d4b517c642d40dc42d0c7fdef6f5943d3c /src/test/java/org
parentbc735ece60ac6cc3b0624d01408e2c95cc575533 (diff)
Add subtyping for bottom type
Diffstat (limited to 'src/test/java/org')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java48
1 files changed, 48 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
index c80a861a..b7da683c 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java
@@ -57,4 +57,52 @@ public class TypeCheckerIsSubTypeTests {
equalTo(true)
);
}
+
+ @Test
+ public void topTypeIsSubTypeOfNoOtherTypes() {
+ var namespaceName = NamespaceName.of("Example", "Project");
+ var context = TypeCheckerContext.EMPTY;
+
+ assertThat(isSubType(Types.TOP, Types.INT, context), equalTo(false));
+ assertThat(
+ isSubType(
+ Types.TOP,
+ new StructType(namespaceName, "X"),
+ context
+ ),
+ equalTo(false)
+ );
+ }
+
+ @Test
+ public void bottomTypeIsSubTypeOfAllTypes() {
+ var namespaceName = NamespaceName.of("Example", "Project");
+ var context = TypeCheckerContext.EMPTY;
+
+ assertThat(isSubType(Types.BOTTOM, Types.INT, context), equalTo(true));
+ assertThat(
+ isSubType(
+ Types.BOTTOM,
+ new StructType(namespaceName, "X"),
+ context
+ ),
+ equalTo(true)
+ );
+ }
+
+ @Test
+ public void bottomTypeIsSuperTypeOfNoOtherTypes() {
+ var namespaceName = NamespaceName.of("Example", "Project");
+ var context = TypeCheckerContext.EMPTY;
+
+ assertThat(isSubType(Types.INT, Types.BOTTOM, context), equalTo(false));
+ assertThat(
+ isSubType(
+ new StructType(namespaceName, "X"),
+ Types.BOTTOM,
+ context
+ ),
+ equalTo(false)
+ );
+ }
}