aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 12:00:08 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 12:00:08 +0100
commitd2769fe60d264607f2e1c338657dc7e4d4bfba52 (patch)
tree787d0041a3f11e8c1ed72dfc6e5ef9a0fca93e1f /src/test/java
parent3b620b72664afaa5168bfdb2ce763555a7bfbd20 (diff)
Type check expression statements
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java9
-rw-r--r--src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java4
-rw-r--r--src/test/java/org/shedlang/compiler/typechecker/TypeCheckerExpressionStatementTests.java27
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")));
+ }
+}