aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-14 21:09:42 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-14 21:09:42 +0100
commitd024723fb80ed28e6eea333f83481397a0cba7ea (patch)
treef230743734529e170fb63b8178d384979ff968f7 /src/test/java
parent5b999386f081b1f7e5259e26ffd33ea85e3e7a2b (diff)
Type if expression properly
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIfTests.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIfTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIfTests.java
index 796dd7c9..47a6cc22 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIfTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerIfTests.java
@@ -35,6 +35,27 @@ public class TypeCheckerIfTests {
}
@Test
+ public void whenBranchesHaveDifferentTypesThenTypeOfIfIsUnionOfBranchTypes() {
+ var untyped = Untyped.if_(
+ List.of(
+ Untyped.conditionalBranch(
+ Untyped.boolLiteral(true),
+ Untyped.block(List.of(
+ Untyped.blockReturn(Untyped.intLiteral(42))
+ ))
+ )
+ ),
+ Untyped.block(List.of(
+ Untyped.blockReturn(Untyped.stringLiteral("b"))
+ ))
+ );
+
+ var result = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY);
+
+ assertThat(result.value().type(), equalTo(Types.TOP));
+ }
+
+ @Test
public void whenConditionIsNotBoolThenErrorIsThrown() {
var untyped = Untyped.if_(
List.of(