From f0dd2aad3b947c447166b86481955a99e3baf86d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 7 Jul 2023 18:50:45 +0100 Subject: Type check int not equal --- .../shedlang/compiler/ast/typed/TypedNodeMatchers.java | 7 +++++++ .../java/org/shedlang/compiler/ast/untyped/Untyped.java | 12 ++++++++++++ .../typechecker/TypeCheckerBinaryOperationTests.java | 15 +++++++++++++++ 3 files changed, 34 insertions(+) (limited to 'src/test/java') 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 cd183ae4..9b432d5e 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -78,6 +78,13 @@ public class TypedNodeMatchers { ); } + public static Matcher isTypedIntNotEqualNode( + Matcher left, + Matcher right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.INT_NOT_EQUAL, left, right); + } + public static Matcher isTypedIntSubNode( Matcher left, Matcher right 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 cee690b3..6465f27a 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -85,6 +85,18 @@ public class Untyped { return namespace(NamespaceName.of("DefaultNamespaceName"), body); } + public static UntypedBinaryOperationNode notEqual( + UntypedExpressionNode left, + UntypedExpressionNode right + ) { + return new UntypedBinaryOperationNode( + UntypedBinaryOperator.NOT_EQUAL, + left, + right, + Sources.NULL + ); + } + public static UntypedReferenceNode reference(String name) { return new UntypedReferenceNode(name, 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 63bb54c6..d752fe94 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java @@ -21,6 +21,7 @@ public class TypeCheckerBinaryOperationTests { )); assertThat(typed.value().type(), equalTo(Types.INT)); } + @Test public void whenBothOperandsAreIntsAndOperatorIsEqualsThenIsTypedAsIntEquals() { var untyped = Untyped.equals(Untyped.intLiteral(42), Untyped.intLiteral(47)); @@ -34,6 +35,20 @@ public class TypeCheckerBinaryOperationTests { assertThat(typed.value().type(), equalTo(Types.BOOL)); } + @Test + public void whenBothOperandsAreIntsAndOperatorIsNotEqualThenIsTypedAsIntNotEqual() { + var untyped = Untyped.notEqual(Untyped.intLiteral(42), Untyped.intLiteral(47)); + + var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed.value(), isTypedIntNotEqualNode( + isTypedIntLiteralNode(42), + isTypedIntLiteralNode(47) + )); + assertThat(typed.value().type(), equalTo(Types.BOOL)); + } + + @Test public void whenBothOperandsAreIntsAndOperatorIsSubThenIsTypedAsIntSub() { var untyped = Untyped.sub(Untyped.intLiteral(42), Untyped.intLiteral(47)); -- cgit v1.2.3