summaryrefslogtreecommitdiff
path: root/chapter14/src/test/java/com
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-09-07 09:22:29 -0700
committerThalia Archibald <thalia@archibald.dev>2024-09-07 10:54:48 -0700
commiteccda096c2e8e30f76e4c4a21421243159cd9026 (patch)
treed94f7ba3f46cd2c877e000d260406d084d27fb6f /chapter14/src/test/java/com
parent22a129078b27d5244fac5bddd44a1b50cbb79839 (diff)
downloadSimple-eccda096c2e8e30f76e4c4a21421243159cd9026.tar.gz
Simple-eccda096c2e8e30f76e4c4a21421243159cd9026.zip
README includes more design decisions for type names.
Add Or,Xor for completeness.
Diffstat (limited to 'chapter14/src/test/java/com')
-rw-r--r--chapter14/src/test/java/com/seaofnodes/simple/Chapter14Test.java11
-rw-r--r--chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java2
2 files changed, 13 insertions, 0 deletions
diff --git a/chapter14/src/test/java/com/seaofnodes/simple/Chapter14Test.java b/chapter14/src/test/java/com/seaofnodes/simple/Chapter14Test.java
index 962b8e4d..5f7cf954 100644
--- a/chapter14/src/test/java/com/seaofnodes/simple/Chapter14Test.java
+++ b/chapter14/src/test/java/com/seaofnodes/simple/Chapter14Test.java
@@ -142,6 +142,17 @@ return c; //
}
@Test
+ public void testOr() {
+ Parser parser = new Parser(
+"""
+return (arg | 123 ^ 456) >>> 1;
+""");
+ StopNode stop = parser.parse(false).iterate(false);
+ assertEquals("return (((arg|123)^456)>>>1);", stop.toString());
+ assertEquals(217L, Evaluator.evaluate(stop, 0));
+ }
+
+ @Test
public void testMaskFloat() {
Parser parser = new Parser(
"""
diff --git a/chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java b/chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java
index 67e9deac..31a14c05 100644
--- a/chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java
+++ b/chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java
@@ -154,6 +154,8 @@ public class Evaluator {
case ShrNode shr -> vall(shr.in(1)) >>> vall(shr.in(2));
case SarNode sar -> vall(sar.in(1)) >> vall(sar.in(2));
case AndNode and -> vall(and.in(1)) & vall(and.in(2));
+ case OrNode or -> vall(or .in(1)) | vall(or .in(2));
+ case XorNode xor -> vall(xor.in(1)) ^ vall(xor.in(2));
case CastNode cast -> val(cast.in(1));
case ToFloatNode cast -> (double)vall(cast.in(1));
case LoadNode load -> load(load);