diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:50:45 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:50:45 +0100 |
| commit | f0dd2aad3b947c447166b86481955a99e3baf86d (patch) | |
| tree | 8079f116f0d55d9a88d29470b480c0b35a309009 /src/test/java | |
| parent | 5ba7391d6cc2b34ab2a5c58551992defdb2a34fa (diff) | |
Type check int not equal
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)); |
