aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-07 18:50:45 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-07 18:50:45 +0100
commitf0dd2aad3b947c447166b86481955a99e3baf86d (patch)
tree8079f116f0d55d9a88d29470b480c0b35a309009 /src/test/java
parent5ba7391d6cc2b34ab2a5c58551992defdb2a34fa (diff)
Type check int not equal
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java7
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java12
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java15
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));