diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:49:26 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:49:26 +0100 |
| commit | 5ba7391d6cc2b34ab2a5c58551992defdb2a34fa (patch) | |
| tree | 27680764c364b141e292428cb0373aa024c257ed /src/test/java | |
| parent | 88831fb3f83810cd234b0e871b02c4b9f539c1b8 (diff) | |
Type check int equals
Diffstat (limited to 'src/test/java')
3 files changed, 31 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java index 22da82bf..cd183ae4 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -60,6 +60,13 @@ public class TypedNodeMatchers { return isTypedBinaryOperationNode(TypedBinaryOperator.INT_ADD, left, right); } + public static Matcher<TypedExpressionNode> isTypedIntEqualsNode( + Matcher<TypedExpressionNode> left, + Matcher<TypedExpressionNode> right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.INT_EQUALS, left, right); + } + public static Matcher<TypedExpressionNode> isTypedIntLiteralNode(int value) { return isTypedIntLiteralNode(BigInteger.valueOf(value)); } diff --git a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java index b0cce55e..cee690b3 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -46,6 +46,18 @@ public class Untyped { ); } + public static UntypedBinaryOperationNode equals( + UntypedExpressionNode left, + UntypedExpressionNode right + ) { + return new UntypedBinaryOperationNode( + UntypedBinaryOperator.EQUALS, + left, + right, + Sources.NULL + ); + } + public static UntypedExpressionStatementNode expressionStatement(UntypedExpressionNode expression) { return new UntypedExpressionStatementNode(expression, Sources.NULL); } diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java index 98dd8679..63bb54c6 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java @@ -21,6 +21,18 @@ public class TypeCheckerBinaryOperationTests { )); assertThat(typed.value().type(), equalTo(Types.INT)); } + @Test + public void whenBothOperandsAreIntsAndOperatorIsEqualsThenIsTypedAsIntEquals() { + var untyped = Untyped.equals(Untyped.intLiteral(42), Untyped.intLiteral(47)); + + var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed.value(), isTypedIntEqualsNode( + isTypedIntLiteralNode(42), + isTypedIntLiteralNode(47) + )); + assertThat(typed.value().type(), equalTo(Types.BOOL)); + } @Test public void whenBothOperandsAreIntsAndOperatorIsSubThenIsTypedAsIntSub() { |
