From 5ba7391d6cc2b34ab2a5c58551992defdb2a34fa Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 7 Jul 2023 18:49:26 +0100 Subject: Type check int equals --- .../org/shedlang/compiler/ast/typed/TypedNodeMatchers.java | 7 +++++++ src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java | 12 ++++++++++++ .../typechecker/TypeCheckerBinaryOperationTests.java | 12 ++++++++++++ 3 files changed, 31 insertions(+) (limited to 'src/test/java/org') 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 isTypedIntEqualsNode( + Matcher left, + Matcher right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.INT_EQUALS, left, right); + } + public static Matcher 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() { -- cgit v1.2.3