diff options
Diffstat (limited to 'src/test/java')
3 files changed, 34 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 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<TypedExpressionNode> isTypedIntNotEqualNode( + Matcher<TypedExpressionNode> left, + Matcher<TypedExpressionNode> right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.INT_NOT_EQUAL, left, right); + } + public static Matcher<TypedExpressionNode> isTypedIntSubNode( Matcher<TypedExpressionNode> left, Matcher<TypedExpressionNode> 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)); @@ -35,6 +36,20 @@ public class TypeCheckerBinaryOperationTests { } @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)); |
