diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-17 17:52:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-17 17:52:53 +0100 |
| commit | 65e3321942082459badd006f0fed8efee474e8e0 (patch) | |
| tree | 24eebce3fab94f84aeda17c68cebca653f047668 /src/test/java | |
| parent | 3224f1c3cd303ef1ed2ea13eb7a2ba4328a64ead (diff) | |
Type check tuples
Diffstat (limited to 'src/test/java')
3 files changed, 52 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 9f66f16c..c8b0501d 100644 --- a/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java +++ b/src/test/java/org/shedlang/compiler/ast/typed/TypedNodeMatchers.java @@ -251,6 +251,15 @@ public class TypedNodeMatchers { ); } + public static Matcher<TypedExpressionNode> isTypedTupleNode( + Matcher<Iterable<? extends TypedExpressionNode>> elements + ) { + return instanceOf( + TypedTupleNode.class, + has("elements", x -> x.elements(), elements) + ); + } + public static Matcher<TypedTypeLevelExpressionNode<?>> isTypedTupleTypeNode( Matcher<TupleType> 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 8c046e4a..36668a8b 100644 --- a/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java +++ b/src/test/java/org/shedlang/compiler/ast/untyped/Untyped.java @@ -166,6 +166,12 @@ public class Untyped { return new UntypedTargetNode.Var(name, Sources.NULL); } + public static UntypedTupleNode tuple( + List<UntypedExpressionNode> elements + ) { + return new UntypedTupleNode(elements, Sources.NULL); + } + public static UntypedTupleTypeNode tupleType( List<UntypedTypeLevelExpressionNode> elements ) { diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTupleTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTupleTests.java new file mode 100644 index 00000000..ee719eba --- /dev/null +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerTupleTests.java @@ -0,0 +1,37 @@ +package org.shedlang.compiler.typechecker; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.ast.untyped.Untyped; +import org.shedlang.compiler.types.TupleType; +import org.shedlang.compiler.types.Types; + +import java.util.List; + +import static org.shedlang.compiler.ast.typed.TypedNodeMatchers.*; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; +import static org.zwobble.precisely.Matchers.isSequence; + +public class TypeCheckerTupleTests { + @Test + public void stringLiteralIsTypeCheckedAsString() { + var untyped = Untyped.tuple(List.of( + Untyped.stringLiteral("hello"), + Untyped.boolLiteral(true), + Untyped.intLiteral(42) + )); + + var typed = TypeChecker.typeCheckExpression(untyped, TypeCheckerContext.EMPTY); + + assertThat(typed.value(), isTypedTupleNode(isSequence( + isTypedStringLiteralNode("hello"), + isTypedBoolLiteralNode(true), + isTypedIntLiteralNode(42) + ))); + assertThat(typed.value().type(), equalTo(new TupleType(List.of( + Types.STRING, + Types.BOOL, + Types.INT + )))); + } +} |
