summaryrefslogtreecommitdiff
path: root/chapter10/src/test/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'chapter10/src/test/java/com')
-rw-r--r--chapter10/src/test/java/com/seaofnodes/simple/Chapter10Test.java18
-rw-r--r--chapter10/src/test/java/com/seaofnodes/simple/TypeTest.java16
-rw-r--r--chapter10/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java28
3 files changed, 30 insertions, 32 deletions
diff --git a/chapter10/src/test/java/com/seaofnodes/simple/Chapter10Test.java b/chapter10/src/test/java/com/seaofnodes/simple/Chapter10Test.java
index 36ad19ae..4a4ef8be 100644
--- a/chapter10/src/test/java/com/seaofnodes/simple/Chapter10Test.java
+++ b/chapter10/src/test/java/com/seaofnodes/simple/Chapter10Test.java
@@ -13,6 +13,24 @@ import static org.junit.Assert.fail;
public class Chapter10Test {
+ @Test
+ public void testFuzzer() {
+ Parser parser = new Parser(
+"""
+struct s0 {
+ int v0;
+}
+s0 v5 = new s0;
+int v6 = new s0.v0;
+s0? arg=v5;
+if( arg ) v5 = new s0;
+else v6 = 0;
+s0 v7=v5;
+return 0;
+""");
+ StopNode stop = parser.parse(false).iterate(false);
+ assertEquals("return 0;", stop.toString());
+ }
@Test
public void testStruct() {
diff --git a/chapter10/src/test/java/com/seaofnodes/simple/TypeTest.java b/chapter10/src/test/java/com/seaofnodes/simple/TypeTest.java
index f18fb306..f9c580cc 100644
--- a/chapter10/src/test/java/com/seaofnodes/simple/TypeTest.java
+++ b/chapter10/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/chapter10/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java b/chapter10/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java
index 15f65f39..8622eb25 100644
--- a/chapter10/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java
+++ b/chapter10/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 {