aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-31 13:05:10 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-31 13:05:10 +0000
commit604d1e71ef722e1006e955ae0bb72fa00cd78c8a (patch)
tree6b46e5262e3cef660f9b0c00cbc63867cd0de4a1
parentccbcd95c177ef9725ed772504e33310474835b57 (diff)
Support equality on ints
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java1
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java2
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java2
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java8
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java3
5 files changed, 15 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
index 5208ff1..9639c72 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -50,6 +50,7 @@ public class PrimitiveMethods {
internalReference("_mod_round_to_zero"),
asList(receiver, arguments.get(0))));
+ addMethod(methods, "equals", "__eq__");
addMethod(methods, "greaterThan", "__gt__");
addMethod(methods, "greaterThanOrEqual", "__ge__");
addMethod(methods, "lessThan", "__lt__");
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index baef84a..99d6a7a 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -280,6 +280,8 @@ public class JavaReader {
return JavaOperator.of("divide", IntegerValue.REF);
} else if (operator == Operator.REMAINDER) {
return JavaOperator.of("mod", IntegerValue.REF);
+ } else if (operator == Operator.EQUALS) {
+ return JavaOperator.of("equals", BooleanValue.REF);
} else if (operator == Operator.GREATER) {
return JavaOperator.of("greaterThan", BooleanValue.REF);
} else if (operator == Operator.GREATER_EQUALS) {
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
index 823e873..85480e7 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
@@ -27,6 +27,8 @@ public final class IntegerInterpreterValue implements InterpreterValue {
infixReturningInteger((left, right) -> left / right))
.method("mod", asList(IntegerValue.REF),
infixReturningInteger((left, right) -> left % right))
+ .method("equals", asList(IntegerValue.REF),
+ infixReturningBoolean((left, right) -> left == right))
.method("greaterThan", asList(IntegerValue.REF),
infixReturningBoolean((left, right) -> left > right))
.method("greaterThanOrEqual", asList(IntegerValue.REF),
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 0b28980..89a06af 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -62,7 +62,13 @@ public abstract class BackendEvalTests {
assertEquals(value(-4), evalExpression(modIntegers(-10, 6)));
assertEquals(value(4), evalExpression(modIntegers(10, -6)));
assertEquals(value(-4), evalExpression(modIntegers(-10, -6)));
-
+
+ assertEquals(
+ value(false),
+ evalExpression(methodCall(literal(1), "equals", asList(literal(2)), BooleanValue.REF)));
+ assertEquals(
+ value(true),
+ evalExpression(methodCall(literal(1), "equals", asList(literal(1)), BooleanValue.REF)));
assertEquals(
value(false),
evalExpression(methodCall(literal(1), "greaterThan", asList(literal(2)), BooleanValue.REF)));
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 ecb4d2a..9c75e90 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
@@ -162,6 +162,9 @@ public class JavaReaderTests {
readExpression("1 % 2"));
assertEquals(
+ methodCall(literal(1), "equals", asList(literal(2)), BooleanValue.REF),
+ readExpression("1 == 2"));
+ assertEquals(
methodCall(literal(1), "greaterThan", asList(literal(2)), BooleanValue.REF),
readExpression("1 > 2"));
assertEquals(