From d024723fb80ed28e6eea333f83481397a0cba7ea Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 14 Jul 2023 21:09:42 +0100 Subject: Type if expression properly --- .../compiler/typechecker/TypeCheckerIfTests.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/test/java') 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 @@ -34,6 +34,27 @@ public class TypeCheckerIfTests { assertThat(result.value().type(), equalTo(Types.STRING)); } + @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_( -- cgit v1.2.3