aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-02-02 20:02:14 +0000
committerMichael Williamson <mike@zwobble.org>2025-02-02 20:13:20 +0000
commit1814bc450fa6806c3bbc9468dbe56865c7f3c3a4 (patch)
tree10241f47903396316b44d94c6f9779682aab3f9f /src/test/java
parentf15ca7f8355f007dee1df45e99725c0ce1f0480b (diff)
Type check int multiplication
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.java12
3 files changed, 31 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 6f8ffdb1..7c0c4396 100644
--- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
+++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java
@@ -244,6 +244,13 @@ public class TypedNodeMatchers {
);
}
+ public static Matcher<TypedExpressionNode> isTypedIntMultiplyNode(
+ Matcher<TypedExpressionNode> left,
+ Matcher<TypedExpressionNode> right
+ ) {
+ return isTypedBinaryOperationNode(TypedBinaryOperator.INT_MULTIPLY, left, right);
+ }
+
public static Matcher<TypedExpressionNode> isTypedIntNotEqualNode(
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 0ecf4719..727f57af 100644
--- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
+++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java
@@ -190,6 +190,18 @@ public class Untyped {
return new UntypedMemberAccessNode(receiver, memberName, Sources.NULL);
}
+ public static UntypedExpressionNode multiply(
+ UntypedExpressionNode left,
+ UntypedExpressionNode right
+ ) {
+ return new UntypedBinaryOperationNode(
+ UntypedBinaryOperator.MULTIPLY,
+ left,
+ right,
+ Sources.NULL
+ );
+ }
+
public static UntypedNamedArgNode namedArg(String name, UntypedExpressionNode expression) {
return new UntypedNamedArgNode(name, 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 850b0ac9..f875bb22 100644
--- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java
+++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerBinaryOperationTests.java
@@ -90,6 +90,18 @@ public class TypeCheckerBinaryOperationTests {
));
assertThat(typed.value().type(), equalTo(Types.BOOL));
}
+ @Test
+ public void whenBothOperandsAreIntsAndOperatorIsMultiplyThenIsTypedAsIntMultiply() {
+ var untyped = Untyped.multiply(Untyped.intLiteral(42), Untyped.intLiteral(47));
+
+ var typed = typeCheckExpression(untyped, TypeCheckerContext.EMPTY);
+
+ assertThat(typed.value(), isTypedIntMultiplyNode(
+ isTypedIntLiteralNode(42),
+ isTypedIntLiteralNode(47)
+ ));
+ assertThat(typed.value().type(), equalTo(Types.INT));
+ }
@Test
public void whenBothOperandsAreIntsAndOperatorIsNotEqualThenIsTypedAsIntNotEqual() {