summaryrefslogtreecommitdiff
path: root/chapter14/src/test/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'chapter14/src/test/java/com')
-rw-r--r--chapter14/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/chapter14/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java b/chapter14/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java
new file mode 100644
index 00000000..6acdcd52
--- /dev/null
+++ b/chapter14/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java
@@ -0,0 +1,32 @@
+package com.seaofnodes.simple;
+
+import com.seaofnodes.simple.evaluator.Evaluator;
+import com.seaofnodes.simple.node.StopNode;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class SchedulingScratchTest {
+ @Test public void testScratchAcrossCompilations() {
+ String src = """
+ struct Box { int x; };
+ Box b = new Box;
+ b.x = arg;
+ int sum = 0;
+ int i = 0;
+ while( i<5 ) {
+ int old = b.x;
+ b.x = i;
+ sum = sum + old;
+ i = i + 1;
+ }
+ return sum;
+ """;
+ // Each fresh compilation reuses node IDs and the scheduler's scratch.
+ for( int round=0; round<3; round++ ) {
+ StopNode stop = new Parser(src).parse().iterate();
+ assertEquals(6L,Evaluator.evaluate(stop,0));
+ assertEquals(7L,Evaluator.evaluate(stop,1));
+ assertEquals(8L,Evaluator.evaluate(stop,2));
+ }
+ }
+}