aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous/tests/interpreter
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-31 12:08:02 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-31 12:08:02 +0100
commit6bb8fe3f983cd0a2be76239df2124af633f0e05c (patch)
tree8ae88b29f16ccbc0a408fa33f625b607c9fc32cc /src/test/java/org/zwobble/couscous/tests/interpreter
parent2247cff5b5361a8124d4c261a1edb1852bd5f08f (diff)
Add evaluation of arrays to interpreter
Diffstat (limited to 'src/test/java/org/zwobble/couscous/tests/interpreter')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
index 6112c8e..5f42065 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -1,25 +1,31 @@
package org.zwobble.couscous.tests.interpreter;
import com.google.common.collect.ImmutableMap;
+import org.hamcrest.Matcher;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
-import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.interpreter.Environment;
import org.zwobble.couscous.interpreter.JavaProject;
import org.zwobble.couscous.interpreter.MapBackedProject;
import org.zwobble.couscous.interpreter.StackFrameBuilder;
import org.zwobble.couscous.interpreter.errors.*;
+import org.zwobble.couscous.interpreter.values.ArrayInterpreterValue;
import org.zwobble.couscous.interpreter.values.IntegerInterpreterValue;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
import org.zwobble.couscous.interpreter.values.StringInterpreterValue;
import org.zwobble.couscous.tests.BackendEvalTests;
+import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
import java.util.List;
import java.util.Optional;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertEquals;
+import static org.zwobble.couscous.ast.ArrayNode.array;
import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.AssignmentNode.assignStatement;
import static org.zwobble.couscous.ast.CastNode.cast;
@@ -34,6 +40,7 @@ import static org.zwobble.couscous.interpreter.Evaluator.eval;
import static org.zwobble.couscous.interpreter.values.InterpreterValues.value;
import static org.zwobble.couscous.tests.TestIds.ANY_ID;
import static org.zwobble.couscous.tests.util.ExtraAsserts.assertThrows;
+import static org.zwobble.couscous.tests.util.ExtraMatchers.*;
import static org.zwobble.couscous.util.ExtraLists.list;
public class EvaluatorTests extends BackendEvalTests {
@@ -225,7 +232,31 @@ public class EvaluatorTests extends BackendEvalTests {
assertEquals(Types.STRING, exception.getExpected());
assertEquals(Types.INT, exception.getActual());
}
-
+
+ @Test
+ public void canEvaluateEmptyArray() {
+ InterpreterValue array = eval(emptyEnvironment(), array(Types.STRING, list()));
+ assertThat(array, isArrayInterpreterValue(Types.STRING, list()));
+ }
+
+ @Test
+ public void canEvaluateArrayWithElements() {
+ InterpreterValue array = eval(emptyEnvironment(), array(Types.STRING, list(literal("one"), literal("two"))));
+ assertThat(
+ array,
+ isArrayInterpreterValue(Types.STRING, list(
+ StringInterpreterValue.of("one"),
+ StringInterpreterValue.of("two"))));
+ }
+
+ private Matcher<InterpreterValue> isArrayInterpreterValue(ScalarType elementType, List<InterpreterValue> elements) {
+ return isInstance(
+ ArrayInterpreterValue.class,
+ allOf(
+ hasFeature("elementType", value -> value.getElementType(), equalTo(elementType)),
+ hasFeature("elements", value -> value.getElements(), containsExactElements(elements))));
+ }
+
private static Environment emptyEnvironment() {
return new Environment(
JavaProject.builder().build(),