aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/zwobble/couscous
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/zwobble/couscous')
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java45
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java37
-rw-r--r--src/test/java/org/zwobble/couscous/tests/CompilerTests.java50
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java7
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java9
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java39
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java9
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java28
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java48
-rw-r--r--src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java16
10 files changed, 136 insertions, 152 deletions
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index cccd305..c9c7414 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -3,9 +3,8 @@ package org.zwobble.couscous.tests;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.StringValue;
import java.util.Collections;
import java.util.List;
@@ -35,7 +34,7 @@ public abstract class BackendEvalTests {
assertEquals(value(true), evalExpression(literal(true)));
assertEquals(value(false), evalExpression(literal(false)));
assertEquals(value(42), evalExpression(literal(42)));
- assertEquals(value(StringValue.REF), evalExpression(literal(StringValue.REF)));
+ assertEquals(value(Types.STRING), evalExpression(literal(Types.STRING)));
}
@Test
@@ -127,7 +126,7 @@ public abstract class BackendEvalTests {
literal("hello"),
"length",
list(),
- IntegerValue.REF));
+ Types.INT));
assertEquals(value(5), result);
}
@@ -137,7 +136,7 @@ public abstract class BackendEvalTests {
literal("hello"),
"substring",
list(literal(1), literal(4)),
- StringValue.REF));
+ Types.STRING));
assertEquals(value("ell"), result);
}
@@ -147,7 +146,7 @@ public abstract class BackendEvalTests {
"java.lang.Integer",
"parseInt",
list(literal("42")),
- IntegerValue.REF));
+ Types.INT));
assertEquals(value(42), result);
}
@@ -155,15 +154,15 @@ public abstract class BackendEvalTests {
public void canCallStaticMethodFromUserDefinedStaticMethod() {
ClassNode classNode = ClassNode.builder("com.example.Example")
.staticMethod("main", method -> method
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(returns(staticMethodCall(
"java.lang.Integer",
"parseInt",
list(literal("42")),
- IntegerValue.REF))))
+ Types.INT))))
.build();
PrimitiveValue result = evalExpression(list(classNode),
- staticMethodCall("com.example.Example", "main", list(), IntegerValue.REF));
+ staticMethodCall("com.example.Example", "main", list(), Types.INT));
assertEquals(value(42), result);
}
@@ -171,21 +170,21 @@ public abstract class BackendEvalTests {
public void canCallInstanceMethodWithNoArgumentsOnUserDefinedClass() {
ClassNode classNode = ClassNode.builder("com.example.Example")
.method("main", method -> method
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(returns(literal(42))))
.build();
PrimitiveValue result = evalExpression(list(classNode),
- methodCall(constructorCall(classNode.getName(), list()), "main", list(), IntegerValue.REF));
+ methodCall(constructorCall(classNode.getName(), list()), "main", list(), Types.INT));
assertEquals(value(42), result);
}
@Test
public void canCallInstanceMethodWithArgumentsOnUserDefinedClass() {
- FormalArgumentNode argument = formalArg(var(ANY_ID, "x", IntegerValue.REF));
+ FormalArgumentNode argument = formalArg(var(ANY_ID, "x", Types.INT));
ClassNode classNode = ClassNode.builder("com.example.Example")
.method("main", method -> method
.argument(argument)
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(returns(reference(argument))))
.build();
@@ -195,25 +194,25 @@ public abstract class BackendEvalTests {
constructorCall(classNode.getName(), list()),
"main",
list(literal(42)),
- IntegerValue.REF));
+ Types.INT));
assertEquals(value(42), result);
}
@Test
public void constructorIsExecutedOnConstruction() {
- FormalArgumentNode argument = formalArg(var(ANY_ID, "x", IntegerValue.REF));
+ FormalArgumentNode argument = formalArg(var(ANY_ID, "x", Types.INT));
ClassNode classNode = ClassNode.builder("com.example.Example")
- .field("value", IntegerValue.REF)
+ .field("value", Types.INT)
.constructor(constructor -> constructor
.argument(argument)
.statement(assignStatement(
- fieldAccess(constructor.thisReference(), "value", IntegerValue.REF),
+ fieldAccess(constructor.thisReference(), "value", Types.INT),
reference(argument))))
.method("main", method -> method
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(returns(
- fieldAccess(method.thisReference(), "value", IntegerValue.REF))))
+ fieldAccess(method.thisReference(), "value", Types.INT))))
.build();
PrimitiveValue result = evalExpression(
@@ -222,7 +221,7 @@ public abstract class BackendEvalTests {
constructorCall(classNode.getName(), list(literal(42))),
"main",
list(),
- IntegerValue.REF));
+ Types.INT));
assertEquals(value(42), result);
}
@@ -231,16 +230,16 @@ public abstract class BackendEvalTests {
public void staticConstructorIsExecutedOnReference() {
ScalarType type = ScalarType.of("com.example.Example");
ClassNode classNode = ClassNode.builder(type)
- .staticField("value", IntegerValue.REF)
+ .staticField("value", Types.INT)
.staticConstructor(list(
assignStatement(
- fieldAccess(type, "value", IntegerValue.REF),
+ fieldAccess(type, "value", Types.INT),
literal(42))))
.build();
PrimitiveValue result = evalExpression(
list(classNode),
- fieldAccess(type, "value", IntegerValue.REF));
+ fieldAccess(type, "value", Types.INT));
assertEquals(value(42), result);
}
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
index c8b2b70..635dae8 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
@@ -2,10 +2,9 @@ package org.zwobble.couscous.tests;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
-import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
-import org.zwobble.couscous.values.StringValue;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
@@ -38,7 +37,7 @@ public abstract class BackendMethodTests {
@Test
public void canReturnLiteralValue() {
MethodNode.Builder method = staticMethod("hello")
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(returns(literal("hello, world!")));
final java.lang.Object result = runMethod(method);
assertEquals(value("hello, world!"), result);
@@ -46,10 +45,10 @@ public abstract class BackendMethodTests {
@Test
public void canPassValueToMethod() {
- FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF));
+ FormalArgumentNode arg = formalArg(var(ANY_ID, "x", Types.STRING));
MethodNode.Builder method = staticMethod("hello")
.argument(arg)
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(returns(reference(arg)));
final java.lang.Object result = runMethod(method, value("hello, world!"));
assertEquals(value("hello, world!"), result);
@@ -57,10 +56,10 @@ public abstract class BackendMethodTests {
@Test
public void canReassignValueToArgument() {
- FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF));
+ FormalArgumentNode arg = formalArg(var(ANY_ID, "x", Types.STRING));
MethodNode.Builder method = staticMethod("hello")
.argument(arg)
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(expressionStatement(assign(
reference(arg),
literal("[updated value]"))))
@@ -71,9 +70,9 @@ public abstract class BackendMethodTests {
@Test
public void canDeclareVariable() {
- LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]"));
+ LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(ANY_ID, "x", Types.STRING, LiteralNode.literal("[initial value]"));
MethodNode.Builder method = staticMethod("hello")
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(localVariableDeclaration)
.statement(returns(reference(localVariableDeclaration)));
final java.lang.Object result = runMethod(method);
@@ -82,9 +81,9 @@ public abstract class BackendMethodTests {
@Test
public void canDeclareVariableAndThenAssignValues() {
- LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]"));
+ LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(ANY_ID, "x", Types.STRING, LiteralNode.literal("[initial value]"));
MethodNode.Builder method = staticMethod("hello")
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(localVariableDeclaration)
.statement(expressionStatement(assign(
reference(localVariableDeclaration),
@@ -97,7 +96,7 @@ public abstract class BackendMethodTests {
@Test
public void whenConditionIsTrueIfStatementExecutesTrueBranch() {
MethodNode.Builder method = staticMethod("hello")
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(ifStatement(
literal(true),
list(returns(literal("[true]"))),
@@ -108,7 +107,7 @@ public abstract class BackendMethodTests {
@Test
public void whenConditionIsFalseIfStatementExecutesTrueBranch() {
MethodNode.Builder method = staticMethod("hello")
- .returns(StringValue.REF)
+ .returns(Types.STRING)
.statement(ifStatement(
literal(false),
list(returns(literal("[true]"))),
@@ -118,10 +117,10 @@ public abstract class BackendMethodTests {
@Test
public void whileLoopIsExecutedWhileConditionIsTrue() {
- LocalVariableDeclarationNode x = localVariableDeclaration(TestIds.id("x"), "x", IntegerValue.REF, literal(0));
- LocalVariableDeclarationNode y = localVariableDeclaration(TestIds.id("y"), "y", IntegerValue.REF, literal(2));
+ LocalVariableDeclarationNode x = localVariableDeclaration(TestIds.id("x"), "x", Types.INT, literal(0));
+ LocalVariableDeclarationNode y = localVariableDeclaration(TestIds.id("y"), "y", Types.INT, literal(2));
MethodNode.Builder method = staticMethod("hello")
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(x)
.statement(y)
.statement(whileLoop(
@@ -133,10 +132,10 @@ public abstract class BackendMethodTests {
@Test
public void returnWillExitWhileLoopEarly() {
- LocalVariableDeclarationNode x = localVariableDeclaration(TestIds.id("x"), "x", IntegerValue.REF, literal(0));
- LocalVariableDeclarationNode y = localVariableDeclaration(TestIds.id("y"), "y", IntegerValue.REF, literal(2));
+ LocalVariableDeclarationNode x = localVariableDeclaration(TestIds.id("x"), "x", Types.INT, literal(0));
+ LocalVariableDeclarationNode y = localVariableDeclaration(TestIds.id("y"), "y", Types.INT, literal(2));
MethodNode.Builder method = staticMethod("hello")
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.statement(x)
.statement(y)
.statement(whileLoop(
diff --git a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
index ae8376b..7df7582 100644
--- a/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/CompilerTests.java
@@ -2,10 +2,8 @@ package org.zwobble.couscous.tests;
import org.junit.Test;
import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.values.BooleanValue;
-import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.StringValue;
import java.io.File;
import java.io.IOException;
@@ -23,7 +21,7 @@ import static org.zwobble.couscous.values.PrimitiveValues.value;
public abstract class CompilerTests {
@Test
public void canEvaluateLiterals() {
- assertEquals(value("hello"), evalExpression(StringValue.REF, "\"hello\""));
+ assertEquals(value("hello"), evalExpression(Types.STRING, "\"hello\""));
assertEquals(value(42), evalIntExpression("42"));
}
@@ -41,13 +39,13 @@ public abstract class CompilerTests {
@Test
public void equalityOnReferenceTypesChecksForIdentity() {
assertEquals(value(false), evalBooleanExpression("new Object() == new Object()"));
- assertEquals(value(true), exec(BooleanValue.REF, "Object x = new Object(); return x == x;"));
+ assertEquals(value(true), exec(Types.BOOLEAN, "Object x = new Object(); return x == x;"));
}
@Test
public void integersCanBeAssignedToObjectVariable() {
- assertEquals(value(false), exec(BooleanValue.REF, "Object x = 1; return x.equals(new Object());"));
- assertEquals(value(true), exec(BooleanValue.REF, "Object x = 1; return x.equals(1);"));
+ assertEquals(value(false), exec(Types.BOOLEAN, "Object x = 1; return x.equals(new Object());"));
+ assertEquals(value(true), exec(Types.BOOLEAN, "Object x = 1; return x.equals(1);"));
}
@Test
@@ -59,7 +57,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.RecursiveFactorial"),
"factorial",
list(value(6)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -71,7 +69,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.WhileFactorial"),
"factorial",
list(value(6)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -83,7 +81,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.ForFactorial"),
"factorial",
list(value(6)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -95,7 +93,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.StaticNestedClass"),
"value",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -107,7 +105,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.InnerClass"),
"run",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -119,7 +117,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.InnerClass"),
"run",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -131,7 +129,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.ConstantIntSupplier"),
"value",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -143,7 +141,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.AnonymousClass"),
"value",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -155,7 +153,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.AnonymousClass"),
"value",
list(value(42)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -167,7 +165,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.Lambda"),
"value",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -179,7 +177,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.Lambda"),
"value",
list(value(2)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -191,7 +189,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.Lambda"),
"value",
list(value(2)),
- IntegerValue.REF));
+ Types.INT));
}
@Test
@@ -203,7 +201,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.GenericInterface"),
"value",
list(),
- StringValue.REF));
+ Types.STRING));
}
@Test
@@ -215,7 +213,7 @@ public abstract class CompilerTests {
ScalarType.of("com.example.GenericInterface"),
"value",
list(),
- StringValue.REF));
+ Types.STRING));
}
@Test
@@ -227,17 +225,17 @@ public abstract class CompilerTests {
ScalarType.of("com.example.StaticMethodOverloads"),
"value",
list(),
- IntegerValue.REF));
+ Types.INT));
}
@Test
public void stringAdd() throws Exception {
- assertEquals(value("42"), evalExpression(StringValue.REF, "\"4\" + \"2\""));
+ assertEquals(value("42"), evalExpression(Types.STRING, "\"4\" + \"2\""));
}
@Test
public void stringToLowerCase() throws Exception {
- assertEquals(value("patrick wolf"), evalExpression(StringValue.REF, "\"Patrick Wolf\".toLowerCase()"));
+ assertEquals(value("patrick wolf"), evalExpression(Types.STRING, "\"Patrick Wolf\".toLowerCase()"));
}
@Test
@@ -305,11 +303,11 @@ public abstract class CompilerTests {
}
private PrimitiveValue evalBooleanExpression(String expressionSource) {
- return evalExpression(BooleanValue.REF, expressionSource);
+ return evalExpression(Types.BOOLEAN, expressionSource);
}
private PrimitiveValue evalIntExpression(String expressionSource) {
- return evalExpression(IntegerValue.REF, expressionSource);
+ return evalExpression(Types.INT, expressionSource);
}
private PrimitiveValue evalExpression(ScalarType type, String expressionSource) {
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
index 2ca3b2d..fbc3c54 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpMethodRunner.java
@@ -14,11 +14,10 @@ import org.zwobble.couscous.backends.csharp.CsharpBackend;
import org.zwobble.couscous.backends.csharp.CsharpSerializer;
import org.zwobble.couscous.tests.MethodRunner;
import org.zwobble.couscous.tests.backends.Processes;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.util.ExtraLists;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.PrimitiveValues;
-import org.zwobble.couscous.values.StringValue;
-import org.zwobble.couscous.values.UnitValue;
import java.io.IOException;
import java.nio.file.Files;
@@ -72,7 +71,7 @@ public class CsharpMethodRunner implements MethodRunner {
eagerMap(arguments, LiteralNode::literal),
returnType));
- boolean isVoid = returnType.equals(UnitValue.REF);
+ boolean isVoid = returnType.equals(Types.VOID);
String body = isVoid
? value + ";"
: "var value = " + value + ";" +
@@ -123,7 +122,7 @@ public class CsharpMethodRunner implements MethodRunner {
return value(value.equals("True"));
case "System.MonoType":
if (value.equals("System.String")) {
- return value(StringValue.REF);
+ return value(Types.STRING);
} else {
assertThat(value, Matchers.startsWith(NAMESPACE_PREFIX));
return value(ScalarType.of(value.substring(NAMESPACE_PREFIX.length())));
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
index 3eebf1a..5c1044d 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
@@ -5,8 +5,7 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.backends.csharp.CsharpSerializer;
import org.zwobble.couscous.tests.TestIds;
-import org.zwobble.couscous.values.BooleanValue;
-import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.types.Types;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.AssignmentNode.assign;
@@ -71,7 +70,7 @@ public class CsharpSerializerTests {
@Test
public void assignmentSeparatesTargetAndValueWithEqualsSign() {
String output = serialize(assign(
- reference(var(TestIds.ANY_ID, "x", BooleanValue.REF)),
+ reference(var(TestIds.ANY_ID, "x", Types.BOOLEAN)),
literal(true)));
assertEquals("x = true", output);
}
@@ -131,7 +130,7 @@ public class CsharpSerializerTests {
@Test
public void prefixExpression() {
String output = serialize(not(
- reference(var(TestIds.ANY_ID, "x", BooleanValue.REF))));
+ reference(var(TestIds.ANY_ID, "x", Types.BOOLEAN))));
assertEquals("!x", output);
}
@@ -360,7 +359,7 @@ public class CsharpSerializerTests {
@Test
public void interfaceWithMethod() {
- MethodNode method = MethodNode.builder("get").isAbstract().returns(IntegerValue.REF).build();
+ MethodNode method = MethodNode.builder("get").isAbstract().returns(Types.INT).build();
Node node = new ClassNodeBuilder(ScalarType.of("com.example.Example"))
.method(method)
.buildInterface();
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java
index cc36c20..3ad255b 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/ExpressionReadingTests.java
@@ -3,10 +3,7 @@ package org.zwobble.couscous.tests.frontends.java;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.values.BooleanValue;
-import org.zwobble.couscous.values.IntegerValue;
-import org.zwobble.couscous.values.ObjectValues;
-import org.zwobble.couscous.values.StringValue;
+import org.zwobble.couscous.types.Types;
import java.util.List;
@@ -38,7 +35,7 @@ public class ExpressionReadingTests {
assertEquals(literal(false), readBooleanExpression("false"));
assertEquals(literal(42), readIntExpression("42"));
assertEquals(literal('h'), readIntExpression("'h'"));
- assertEquals(literal(StringValue.REF), readExpression("Class<String>", "String.class"));
+ assertEquals(literal(Types.STRING), readExpression("Class<String>", "String.class"));
}
@Test
@@ -51,7 +48,7 @@ public class ExpressionReadingTests {
@Test
public void canReadCasts() {
assertEquals(
- cast(literal(42), ObjectValues.OBJECT),
+ cast(literal(42), Types.OBJECT),
readExpression("Object", "(Object)42"));
}
@Test
@@ -96,7 +93,7 @@ public class ExpressionReadingTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"name",
- StringValue.REF),
+ Types.STRING),
returnNode.getValue());
}
@@ -122,21 +119,21 @@ public class ExpressionReadingTests {
fieldAccess(
ScalarType.of("com.example.Example"),
"name",
- StringValue.REF),
+ Types.STRING),
returnNode.getValue());
}
@Test
public void canReadInstanceMethodCalls() {
assertEquals(
- methodCall(literal("hello"), "startsWith", list(literal("h")), BooleanValue.REF),
+ methodCall(literal("hello"), "startsWith", list(literal("h")), Types.BOOLEAN),
readBooleanExpression("\"hello\".startsWith(\"h\")"));
List<StatementNode> statements = readStatements("int", "Object x = 1; return x.hashCode();");
LocalVariableDeclarationNode declaration = (LocalVariableDeclarationNode) statements.get(0);
ReturnNode returnNode = (ReturnNode) statements.get(1);
assertEquals(
- methodCall(reference(declaration), "hashCode", list(), IntegerValue.REF),
+ methodCall(reference(declaration), "hashCode", list(), Types.INT),
returnNode.getValue());
}
@@ -153,7 +150,7 @@ public class ExpressionReadingTests {
ThisReferenceNode.thisReference(ScalarType.of("com.example.Example")),
"loop",
list(),
- StringValue.REF),
+ Types.STRING),
returnNode.getValue());
}
@@ -164,7 +161,7 @@ public class ExpressionReadingTests {
ScalarType.of("java.lang.Integer"),
"parseInt",
list(literal("42")),
- IntegerValue.REF),
+ Types.INT),
readIntExpression("Integer.parseInt(\"42\")"));
}
@@ -181,7 +178,7 @@ public class ExpressionReadingTests {
ScalarType.of("com.example.Example"),
"loop",
list(),
- StringValue.REF),
+ Types.STRING),
returnNode.getValue());
}
@@ -198,7 +195,7 @@ public class ExpressionReadingTests {
"String",
"java.util.Objects.toString(42)");
assertEquals(
- typeCoercion(literal(42), ObjectValues.OBJECT),
+ typeCoercion(literal(42), Types.OBJECT),
expression.getArguments().get(0));
}
@@ -285,14 +282,14 @@ public class ExpressionReadingTests {
public void equalityOperatorDoesNotUnboxIfBothOperandsAreBoxed() {
assertEquals(
same(
- typeCoercion(constructorCall(ObjectValues.BOXED_INT, list(literal(1))), ObjectValues.OBJECT),
- typeCoercion(constructorCall(ObjectValues.BOXED_INT, list(literal(2))), ObjectValues.OBJECT)),
+ typeCoercion(constructorCall(Types.BOXED_INT, list(literal(1))), Types.OBJECT),
+ typeCoercion(constructorCall(Types.BOXED_INT, list(literal(2))), Types.OBJECT)),
readBooleanExpression("new Integer(1) == new Integer(2)"));
assertEquals(
not(same(
- typeCoercion(constructorCall(ObjectValues.BOXED_INT, list(literal(1))), ObjectValues.OBJECT),
- typeCoercion(constructorCall(ObjectValues.BOXED_INT, list(literal(2))), ObjectValues.OBJECT))),
+ typeCoercion(constructorCall(Types.BOXED_INT, list(literal(1))), Types.OBJECT),
+ typeCoercion(constructorCall(Types.BOXED_INT, list(literal(2))), Types.OBJECT))),
readBooleanExpression("new Integer(1) != new Integer(2)"));
}
@@ -326,7 +323,7 @@ public class ExpressionReadingTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"name",
- StringValue.REF),
+ Types.STRING),
literal("blah")),
returnNode.getValue());
}
@@ -345,8 +342,8 @@ public class ExpressionReadingTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"value",
- ObjectValues.OBJECT),
- typeCoercion(literal(4), ObjectValues.OBJECT)),
+ Types.OBJECT),
+ typeCoercion(literal(4), Types.OBJECT)),
returnNode.getValue());
}
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java
index 84e9508..8bcf38d 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java
@@ -4,11 +4,10 @@ import org.junit.Test;
import org.zwobble.couscous.ast.ReferenceNode;
import org.zwobble.couscous.ast.VariableDeclaration;
import org.zwobble.couscous.tests.TestIds;
-import org.zwobble.couscous.values.StringValue;
+import org.zwobble.couscous.types.Types;
import java.util.List;
-import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
@@ -22,14 +21,14 @@ import static org.zwobble.couscous.util.ExtraLists.list;
public class FreeVariablesTests {
@Test
public void referenceIsFreeIfThereIsNoAssociatedDeclaration() {
- VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", StringValue.REF);
+ VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", Types.STRING);
List<ReferenceNode> freeVariables = findFreeVariables(list(reference(declaration)));
assertEquals(list(reference(declaration)), freeVariables);
}
@Test
public void referenceIsNotFreeIfIsDeclaredAsArgument() {
- VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", StringValue.REF);
+ VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", Types.STRING);
List<ReferenceNode> freeVariables = findFreeVariables(
list(formalArg(declaration), reference(declaration)));
assertEquals(emptyList(), freeVariables);
@@ -37,7 +36,7 @@ public class FreeVariablesTests {
@Test
public void referenceIsNotFreeIfIsReferenceToLocalDefinedInBody() {
- VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", StringValue.REF);
+ VariableDeclaration declaration = var(TestIds.ANY_ID, "[name]", Types.STRING);
List<ReferenceNode> freeVariables = findFreeVariables(
list(
localVariableDeclaration(declaration, literal("[value]")),
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
index c3b83a0..97b8b66 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
@@ -3,9 +3,7 @@ package org.zwobble.couscous.tests.frontends.java;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.values.IntegerValue;
-import org.zwobble.couscous.values.ObjectValues;
-import org.zwobble.couscous.values.StringValue;
+import org.zwobble.couscous.types.Types;
import java.util.List;
@@ -41,7 +39,7 @@ public class JavaReaderTests {
LocalVariableDeclarationNode declaration = (LocalVariableDeclarationNode) statements.get(0);
assertEquals("x", declaration.getName());
- assertEquals(IntegerValue.REF, declaration.getType());
+ assertEquals(Types.INT, declaration.getType());
assertEquals(literal(4), declaration.getInitialValue());
ReturnNode returnNode = (ReturnNode) statements.get(1);
assertEquals(
@@ -54,7 +52,7 @@ public class JavaReaderTests {
StatementNode statement = readStatement("void", "Object x = 4;");
LocalVariableDeclarationNode declaration = (LocalVariableDeclarationNode) statement;
- assertEquals(typeCoercion(literal(4), ObjectValues.OBJECT), declaration.getInitialValue());
+ assertEquals(typeCoercion(literal(4), Types.OBJECT), declaration.getInitialValue());
}
@Test
@@ -65,7 +63,7 @@ public class JavaReaderTests {
"}");
MethodNode method = classNode.getMethods().get(0);
- assertEquals(IntegerValue.REF, method.getReturnType());
+ assertEquals(Types.INT, method.getReturnType());
}
@Test
@@ -93,7 +91,7 @@ public class JavaReaderTests {
ScalarType.of("java.lang.Integer"),
"parseInt",
list(literal("42")),
- IntegerValue.REF)),
+ Types.INT)),
readStatement("void", "Integer.parseInt(\"42\");"));
}
@@ -182,7 +180,7 @@ public class JavaReaderTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"name",
- StringValue.REF),
+ Types.STRING),
literal("Flaws"))),
constructor.getBody());
}
@@ -205,13 +203,13 @@ public class JavaReaderTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"year",
- IntegerValue.REF),
+ Types.INT),
literal(2013)),
assignStatement(
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"name",
- StringValue.REF),
+ Types.STRING),
literal("Flaws"))),
constructor.getBody());
}
@@ -233,13 +231,13 @@ public class JavaReaderTests {
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"year",
- IntegerValue.REF),
+ Types.INT),
literal(2013)),
assignStatement(
fieldAccess(
thisReference(ScalarType.of("com.example.Example")),
"name",
- StringValue.REF),
+ Types.STRING),
literal("Flaws"))),
constructor.getBody());
}
@@ -259,7 +257,7 @@ public class JavaReaderTests {
fieldAccess(
ScalarType.of("com.example.Example"),
"name",
- StringValue.REF),
+ Types.STRING),
literal("Flaws"))),
staticConstructor);
}
@@ -276,7 +274,7 @@ public class JavaReaderTests {
fieldAccess(
ScalarType.of("com.example.Example"),
"name",
- StringValue.REF),
+ Types.STRING),
literal("Flaws"))),
staticConstructor);
}
@@ -362,7 +360,7 @@ public class JavaReaderTests {
MethodNode expectedMethod = MethodNode.builder("get")
.isAbstract()
- .returns(IntegerValue.REF)
+ .returns(Types.INT)
.build();
assertEquals(list(expectedMethod), classNode.getMethods());
}
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 760cc56..6112c8e 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/EvaluatorTests.java
@@ -13,10 +13,8 @@ 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.values.IntegerValue;
-import org.zwobble.couscous.values.ObjectValues;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.StringValue;
import java.util.List;
import java.util.Optional;
@@ -41,7 +39,7 @@ import static org.zwobble.couscous.util.ExtraLists.list;
public class EvaluatorTests extends BackendEvalTests {
@Test
public void valueOfAssignmentExpressionIsNewValue() {
- FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF));
+ FormalArgumentNode arg = formalArg(var(ANY_ID, "x", Types.STRING));
Environment environment = new Environment(
new MapBackedProject(ImmutableMap.of()),
Optional.empty(),
@@ -66,8 +64,8 @@ public class EvaluatorTests extends BackendEvalTests {
literal("hello"),
"size",
list(),
- IntegerValue.REF)));
- assertEquals(new MethodSignature("size", list(), IntegerValue.REF), exception.getSignature());
+ Types.INT)));
+ assertEquals(new MethodSignature("size", list(), Types.INT), exception.getSignature());
}
@Test
@@ -78,8 +76,8 @@ public class EvaluatorTests extends BackendEvalTests {
literal("hello"),
"substring",
list(literal(1)),
- StringValue.REF)));
- assertEquals(new MethodSignature("substring", list(IntegerValue.REF), StringValue.REF), exception.getSignature());
+ Types.STRING)));
+ assertEquals(new MethodSignature("substring", list(Types.INT), Types.STRING), exception.getSignature());
}
@Test
@@ -90,15 +88,15 @@ public class EvaluatorTests extends BackendEvalTests {
literal("hello"),
"substring",
list(literal(0), literal("")),
- StringValue.REF)));
+ Types.STRING)));
assertEquals(
- new MethodSignature("substring", list(IntegerValue.REF, StringValue.REF), StringValue.REF),
+ new MethodSignature("substring", list(Types.INT, Types.STRING), Types.STRING),
exception.getSignature());
}
@Test
public void errorIfConstructorArgumentIsWrongType() {
- FormalArgumentNode argument = formalArg(var(ANY_ID, "x", IntegerValue.REF));
+ FormalArgumentNode argument = formalArg(var(ANY_ID, "x", Types.INT));
ClassNode classNode = ClassNode.builder("com.example.Example")
.constructor(constructor -> constructor
.argument(argument))
@@ -111,7 +109,7 @@ public class EvaluatorTests extends BackendEvalTests {
classNode.getName(),
list(literal("")))));
- assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception);
+ assertEquals(new UnexpectedValueType(Types.INT, Types.STRING), exception);
}
@Test
@@ -127,7 +125,7 @@ public class EvaluatorTests extends BackendEvalTests {
classNode.getName(),
list()),
"value",
- IntegerValue.REF)));
+ Types.INT)));
assertEquals(new NoSuchField("value"), exception);
}
@@ -135,7 +133,7 @@ public class EvaluatorTests extends BackendEvalTests {
@Test
public void cannotGetValueOfUnboundField() {
ClassNode classNode = ClassNode.builder("com.example.Example")
- .field("value", IntegerValue.REF)
+ .field("value", Types.INT)
.build();
UnboundField exception = assertThrows(UnboundField.class,
@@ -146,7 +144,7 @@ public class EvaluatorTests extends BackendEvalTests {
classNode.getName(),
list()),
"value",
- IntegerValue.REF)));
+ Types.INT)));
assertEquals(new UnboundField("value"), exception);
}
@@ -156,7 +154,7 @@ public class EvaluatorTests extends BackendEvalTests {
ClassNode classNode = ClassNode.builder("com.example.Example")
.constructor(constructor -> constructor
.statement(assignStatement(
- fieldAccess(constructor.thisReference(), "value", IntegerValue.REF),
+ fieldAccess(constructor.thisReference(), "value", Types.INT),
literal(42))))
.build();
@@ -174,10 +172,10 @@ public class EvaluatorTests extends BackendEvalTests {
public void cannotSetValueOfInstanceFieldAsThoughItIsAStaticField() {
ScalarType type = ScalarType.of("com.example.Example");
ClassNode classNode = ClassNode.builder(type)
- .field("value", IntegerValue.REF)
+ .field("value", Types.INT)
.constructor(constructor -> constructor
.statement(assignStatement(
- fieldAccess(type, "value", IntegerValue.REF),
+ fieldAccess(type, "value", Types.INT),
literal(42))))
.build();
@@ -194,10 +192,10 @@ public class EvaluatorTests extends BackendEvalTests {
@Test
public void cannotSetValueOfFieldWithWrongType() {
ClassNode classNode = ClassNode.builder("com.example.Example")
- .field("value", IntegerValue.REF)
+ .field("value", Types.INT)
.constructor(constructor -> constructor
.statement(assignStatement(
- fieldAccess(constructor.thisReference(), "value", IntegerValue.REF),
+ fieldAccess(constructor.thisReference(), "value", Types.INT),
literal(""))))
.build();
@@ -208,14 +206,14 @@ public class EvaluatorTests extends BackendEvalTests {
classNode.getName(),
list())));
- assertEquals(new UnexpectedValueType(IntegerValue.REF, StringValue.REF), exception);
+ assertEquals(new UnexpectedValueType(Types.INT, Types.STRING), exception);
}
@Test
public void validCastPassesValueThrough() {
InterpreterValue value = eval(
emptyEnvironment(),
- cast(literal("42"), ObjectValues.OBJECT));
+ cast(literal("42"), Types.OBJECT));
assertEquals(value("42"), value);
}
@@ -223,9 +221,9 @@ public class EvaluatorTests extends BackendEvalTests {
public void errorIfCastIsNotValid() {
InvalidCast exception = assertThrows(InvalidCast.class,
() -> eval(emptyEnvironment(),
- cast(literal(42), StringValue.REF)));
- assertEquals(StringValue.REF, exception.getExpected());
- assertEquals(IntegerValue.REF, exception.getActual());
+ cast(literal(42), Types.STRING)));
+ assertEquals(Types.STRING, exception.getExpected());
+ assertEquals(Types.INT, exception.getActual());
}
private static Environment emptyEnvironment() {
diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
index 9787ee2..0e644e1 100644
--- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java
@@ -15,10 +15,8 @@ import org.zwobble.couscous.interpreter.values.InterpreterValue;
import org.zwobble.couscous.interpreter.values.InterpreterValues;
import org.zwobble.couscous.tests.BackendMethodTests;
import org.zwobble.couscous.tests.MethodRunner;
-import org.zwobble.couscous.values.IntegerValue;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.StringValue;
-import org.zwobble.couscous.values.UnitValue;
import java.util.List;
import java.util.stream.Collectors;
@@ -46,12 +44,12 @@ public class InterpreterMethodTests extends BackendMethodTests {
NoSuchMethod exception = assertThrows(NoSuchMethod.class,
() -> runMethod(method, value("hello, world!")));
- assertEquals(new MethodSignature("hello", list(StringValue.REF), UnitValue.REF), exception.getSignature());
+ assertEquals(new MethodSignature("hello", list(Types.STRING), Types.VOID), exception.getSignature());
}
@Test
public void errorIfTryingToAssignValueOfWrongTypeToVariable() {
- FormalArgumentNode arg = formalArg(var(ANY_ID, "x", StringValue.REF));
+ FormalArgumentNode arg = formalArg(var(ANY_ID, "x", Types.STRING));
MethodNode.Builder method = staticMethod("hello")
.argument(arg)
.statement(expressionStatement(assign(reference(arg), literal(0))));
@@ -59,13 +57,13 @@ public class InterpreterMethodTests extends BackendMethodTests {
UnexpectedValueType exception = assertThrows(UnexpectedValueType.class,
() -> runMethod(method, value("")));
- assertEquals(new UnexpectedValueType(StringValue.REF, IntegerValue.REF), exception);
+ assertEquals(new UnexpectedValueType(Types.STRING, Types.INT), exception);
}
@Test
public void errorIfTryingToAssignToVariableNotInScope() {
LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(
- ANY_ID, "x", StringValue.REF, literal(""));
+ ANY_ID, "x", Types.STRING, literal(""));
MethodNode.Builder method = staticMethod("hello")
.statement(expressionStatement(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]"))));
@@ -78,7 +76,7 @@ public class InterpreterMethodTests extends BackendMethodTests {
@Test
public void errorIfTryingToGetValueOfVariableNotInScope() {
LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(
- ANY_ID, "x", StringValue.REF, literal(""));
+ ANY_ID, "x", Types.STRING, literal(""));
MethodNode.Builder method = staticMethod("hello")
.statement(returns(reference(localVariableDeclaration)));
@@ -91,7 +89,7 @@ public class InterpreterMethodTests extends BackendMethodTests {
@Test
public void errorIfTryingToGetValueOfUnboundVariable() {
LocalVariableDeclarationNode localVariableDeclaration = localVariableDeclaration(
- ANY_ID, "x", StringValue.REF, literal(""));
+ ANY_ID, "x", Types.STRING, literal(""));
MethodNode.Builder method = staticMethod("hello")
.statement(returns(reference(localVariableDeclaration)))
.statement(localVariableDeclaration);