diff options
| author | Cliff Click <cliffc@acm.org> | 2024-09-07 09:22:29 -0700 |
|---|---|---|
| committer | Thalia Archibald <thalia@archibald.dev> | 2024-09-07 10:54:48 -0700 |
| commit | eccda096c2e8e30f76e4c4a21421243159cd9026 (patch) | |
| tree | d94f7ba3f46cd2c877e000d260406d084d27fb6f /chapter14/src/test/java/com | |
| parent | 22a129078b27d5244fac5bddd44a1b50cbb79839 (diff) | |
| download | Simple-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.java | 11 | ||||
| -rw-r--r-- | chapter14/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java | 2 |
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); |
