diff options
| author | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2024-06-30 16:58:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-30 08:58:08 -0700 |
| commit | 95cc1acbe32a0fe759d9063e6fa7978b68517ad1 (patch) | |
| tree | a755730db62c7df1eddbaf60601187a10eee887d /chapter11/src/test/java | |
| parent | 00d1b8eed7406fc8e150dd5f789cfac48db14286 (diff) | |
| download | Simple-95cc1acbe32a0fe759d9063e6fa7978b68517ad1.tar.gz Simple-95cc1acbe32a0fe759d9063e6fa7978b68517ad1.zip | |
#80 #85 apply bug fixes from chapter10 (#89)
* #80 #85 apply bug fixes from chapter10
* #85 #80 more detail regarding anti-dependency
* Remove Util.eq
Was enforced interning of strings, not needed here.
---------
Co-authored-by: Cliff Click <cliffc@acm.org>
Diffstat (limited to 'chapter11/src/test/java')
3 files changed, 42 insertions, 33 deletions
diff --git a/chapter11/src/test/java/com/seaofnodes/simple/Chapter10Test.java b/chapter11/src/test/java/com/seaofnodes/simple/Chapter10Test.java index 451d3da2..06065702 100644 --- a/chapter11/src/test/java/com/seaofnodes/simple/Chapter10Test.java +++ b/chapter11/src/test/java/com/seaofnodes/simple/Chapter10Test.java @@ -1,13 +1,41 @@ package com.seaofnodes.simple; +import com.seaofnodes.simple.node.Node; import com.seaofnodes.simple.node.StopNode; +import com.seaofnodes.simple.type.*; import org.junit.Test; +import java.util.Arrays; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class Chapter10Test { + @Test + public void testFuzzer() { + Parser parser = new Parser( +""" +int a = arg/3; +int b = arg*5; +int x = arg*7; +int y = arg/11; +int p; int g; int h; +if( (arg/13)==0 ) { + p = x + y; + g = x; + h = y; +} else { + p = a + b; + g = a; + h = b; +} +int r = g+h; +return p-r; +"""); + StopNode stop = parser.parse(false).iterate(false); + assertEquals("return 0;", stop.toString()); + } @Test public void testStruct() { @@ -167,7 +195,8 @@ while(arg) { return ret; """); try { parser.parse(true).iterate(true); fail(); } - catch( Exception e ) { assertEquals("Might be null accessing 'v0'", e.getMessage()); } + catch( Exception e ) { + assertEquals("Might be null accessing 'v0'", e.getMessage()); } } @Test diff --git a/chapter11/src/test/java/com/seaofnodes/simple/TypeTest.java b/chapter11/src/test/java/com/seaofnodes/simple/TypeTest.java index f18fb306..f9c580cc 100644 --- a/chapter11/src/test/java/com/seaofnodes/simple/TypeTest.java +++ b/chapter11/src/test/java/com/seaofnodes/simple/TypeTest.java @@ -13,19 +13,19 @@ public class TypeTest { @Test public void testTypeAdHoc() { TypeStruct s1 = TypeStruct.make("s1", new Field[]{ - Field.make("s1", TypeInteger.BOT, "a"), - Field.make("s1", TypeInteger.BOT, "b") }); + Field.make("a", TypeInteger.BOT), + Field.make("b", TypeInteger.BOT) }); TypeStruct s2 = TypeStruct.make("s2", new Field[]{ - Field.make("s2", TypeInteger.BOT, "a"), - Field.make("s2", TypeInteger.BOT, "b") }); + Field.make("a", TypeInteger.BOT), + Field.make("b", TypeInteger.BOT) }); Assert.assertEquals(s1, s1.glb()); Assert.assertNotEquals(s1, s1.dual()); Assert.assertEquals(s1, s1.dual().glb()); - TypeMem m1 = TypeMem.make(s1.get("a")._alias); - TypeMem m2 = TypeMem.make(s1.get("b")._alias); - TypeMem m3 = TypeMem.make(s2.get("a")._alias); - TypeMem m4 = TypeMem.make(s2.get("b")._alias); + TypeMem m1 = TypeMem.make(1); + TypeMem m2 = TypeMem.make(2); + TypeMem m3 = TypeMem.make(3); + TypeMem m4 = TypeMem.make(4); Assert.assertNotEquals(m1, m2); Assert.assertNotEquals(m2, m3); diff --git a/chapter11/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java b/chapter11/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java index 2447a36a..4a405a3b 100644 --- a/chapter11/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java +++ b/chapter11/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java @@ -29,30 +29,10 @@ public class Evaluator { } } - private static final MethodHandle get_MemOpNode_field; - - static { - try { - var MemOpNode = Class.forName("com.seaofnodes.simple.node.MemOpNode"); - var field = MemOpNode.getDeclaredField("_field"); - field.setAccessible(true); - get_MemOpNode_field = MethodHandles.lookup().unreflectGetter(field); - } catch (Exception e) { - throw new ExceptionInInitializerError(e); - } - } - - private static int getFieldIndex(TypeStruct struct, Node memop) { - Field field; - try { - field = (Field)get_MemOpNode_field.invoke(memop); - } catch (Throwable e) { - throw new RuntimeException(e); - } - for(int i=0;i<struct._fields.length;i++) { - if (struct._fields[i]._alias == field._alias) return i; - } - throw new AssertionError("Field "+field._fname+" of struct " +field._sname + " not found in struct " + struct._name); + private static int getFieldIndex(TypeStruct struct, MemOpNode memop) { + int idx = struct.find(memop._name); + if( idx >= 0 ) return idx; + throw new AssertionError("Field "+memop._name+" not found in struct " + struct._name); } public enum Status { |
