From 95cc1acbe32a0fe759d9063e6fa7978b68517ad1 Mon Sep 17 00:00:00 2001 From: Dibyendu Majumdar Date: Sun, 30 Jun 2024 16:58:08 +0100 Subject: #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 --- .../java/com/seaofnodes/simple/Chapter10Test.java | 31 +++++++++++++++++++++- .../test/java/com/seaofnodes/simple/TypeTest.java | 16 +++++------ .../com/seaofnodes/simple/evaluator/Evaluator.java | 28 +++---------------- 3 files changed, 42 insertions(+), 33 deletions(-) (limited to 'chapter11/src/test/java/com/seaofnodes') 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= 0 ) return idx; + throw new AssertionError("Field "+memop._name+" not found in struct " + struct._name); } public enum Status { -- cgit v1.2.3