From 1814bc450fa6806c3bbc9468dbe56865c7f3c3a4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 2 Feb 2025 20:02:14 +0000 Subject: Type check int multiplication --- .../org/shedlang/compiler/ast/typed/TypedNodeMatchers.java | 7 +++++++ src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java | 12 ++++++++++++ .../typechecker/TypeCheckerBinaryOperationTests.java | 12 ++++++++++++ 3 files changed, 31 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 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 isTypedIntMultiplyNode( + Matcher left, + Matcher right + ) { + return isTypedBinaryOperationNode(TypedBinaryOperator.INT_MULTIPLY, left, right); + } + public static Matcher isTypedIntNotEqualNode( 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 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() { -- cgit v1.2.3