diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-30 17:31:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-30 17:31:10 +0100 |
| commit | ce8dfcfecd0937fbf2f4d5b941517f3750f29af2 (patch) | |
| tree | 62a208d4b517c642d40dc42d0c7fdef6f5943d3c /src/test/java | |
| parent | bc735ece60ac6cc3b0624d01408e2c95cc575533 (diff) | |
Add subtyping for bottom type
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIsSubTypeTests.java | 48 |
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) + ); + } } |
