aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-17 17:23:02 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-17 17:23:02 +0100
commitd6c6abb4e28f851969a40ff207648308be031090 (patch)
tree750e16ade3e4bb55aba08fd78fbef3614ba80c9d /src
parent3a139894dab4b6e4d7c3bf97ed97a90665d9d6df (diff)
Add proper description for tuple types
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/types/TupleType.java7
-rw-r--r--src/test/java/org/shedlang/compiler/types/TupleTypeTests.java23
2 files changed, 28 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/types/TupleType.java b/src/main/java/org/shedlang/compiler/types/TupleType.java
index a2eeb0b0..2d97b469 100644
--- a/src/main/java/org/shedlang/compiler/types/TupleType.java
+++ b/src/main/java/org/shedlang/compiler/types/TupleType.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.types;
import java.util.List;
+import java.util.stream.Collectors;
/**
* A tuple type, representing tuples with elements of the given types.
@@ -8,8 +9,10 @@ import java.util.List;
public record TupleType(List<Type> elements) implements Type {
@Override
public String describe() {
- // TODO: finish this
- return "Tuple";
+ var elementsString = elements.stream()
+ .map(element -> element.describe())
+ .collect(Collectors.joining(", "));
+ return "#(" + elementsString + ")";
}
@Override
diff --git a/src/test/java/org/shedlang/compiler/types/TupleTypeTests.java b/src/test/java/org/shedlang/compiler/types/TupleTypeTests.java
new file mode 100644
index 00000000..31137214
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/types/TupleTypeTests.java
@@ -0,0 +1,23 @@
+package org.shedlang.compiler.types;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.equalTo;
+
+public class TupleTypeTests {
+ @Test
+ public void descriptionOfTupleTypeIncludesDescriptionOfElements() {
+ var tupleType = new TupleType(List.of(
+ Types.STRING,
+ Types.BOOL,
+ Types.INT
+ ));
+
+ var result = tupleType.describe();
+
+ assertThat(result, equalTo("#(String, Bool, Int)"));
+ }
+}