aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java')
-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)
+ );
+ }
}