diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 12:00:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 12:00:08 +0100 |
| commit | d2769fe60d264607f2e1c338657dc7e4d4bfba52 (patch) | |
| tree | 787d0041a3f11e8c1ed72dfc6e5ef9a0fca93e1f /src/test/java | |
| parent | 3b620b72664afaa5168bfdb2ce763555a7bfbd20 (diff) | |
Type check expression statements
Diffstat (limited to 'src/test/java')
3 files changed, 40 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 acf61900..e6127108 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -26,6 +26,15 @@ public class TypedNodeMatchers { return TypedCallNodeMatcher.empty(); } + public static Matcher<TypedFunctionStatementNode> isTypedExpressionStatementNode( + Matcher<TypedExpressionNode> expression + ) { + return instanceOf( + TypedExpressionStatementNode.class, + has("expression", x -> x.expression(), expression) + ); + } + public static Matcher<TypedExpressionNode> isTypedIntLiteralNode(int value) { return isTypedIntLiteralNode(BigInteger.valueOf(value)); } 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 5cc0ce85..170857b9 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -33,6 +33,10 @@ public class Untyped { ); } + public static UntypedExpressionStatementNode expressionStatement(UntypedExpressionNode expression) { + return new UntypedExpressionStatementNode(expression, Sources.NULL); + } + public static UntypedIntLiteralNode intLiteral(int value) { return new UntypedIntLiteralNode(BigInteger.valueOf(value), Sources.NULL); } diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java new file mode 100644 index 00000000..29175665 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java @@ -0,0 +1,27 @@ +package org.shedlang.compiler.typechecker; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.ast.typed.Typed; +import org.shedlang.compiler.ast.untyped.Untyped; +import org.shedlang.compiler.typechecker.errors.UnknownVariableError; +import org.shedlang.compiler.types.Types; +import org.shedlang.compiler.util.P; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedExpressionStatementNode; +import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.isTypedStringLiteralNode; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TypeCheckerExpressionStatementTests { + @Test + public void expressionIsTypeChecked() { + var untyped = Untyped.expressionStatement(Untyped.stringLiteral("hello")); + + var typed = TypeChecker.typeCheckFunctionStatement(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed, isTypedExpressionStatementNode(isTypedStringLiteralNode("hello"))); + } +} |
