summaryrefslogtreecommitdiff
path: root/chapter11/src/test/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'chapter11/src/test/java/com')
-rw-r--r--chapter11/src/test/java/com/seaofnodes/simple/Chapter10Test.java31
-rw-r--r--chapter11/src/test/java/com/seaofnodes/simple/TypeTest.java16
-rw-r--r--chapter11/src/test/java/com/seaofnodes/simple/evaluator/Evaluator.java28
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 {