From 604d1e71ef722e1006e955ae0bb72fa00cd78c8a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 31 Oct 2015 13:05:10 +0000 Subject: Support equality on ints --- .../org/zwobble/couscous/backends/python/PrimitiveMethods.java | 1 + src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 2 ++ .../couscous/interpreter/values/IntegerInterpreterValue.java | 2 ++ src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java | 8 +++++++- .../zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) 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 @@ -161,6 +161,9 @@ public class JavaReaderTests { methodCall(literal(1), "mod", asList(literal(2)), IntegerValue.REF), 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")); -- cgit v1.2.3