summaryrefslogtreecommitdiff
path: root/chapter24a/src/test/java/com
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-28 16:14:30 -0700
committerCliff Click <cliffc@acm.org>2026-10-28 16:14:30 -0700
commit3df967056bf48bd9f87900f3a1ad9af2aedce948 (patch)
treefdbdac5e5919deabb08d353147da32b7ccb741d8 /chapter24a/src/test/java/com
parent50924bbe7cfeecfe7aec1885dae9bbda0013ac1b (diff)
downloadSimple-3df967056bf48bd9f87900f3a1ad9af2aedce948.tar.gz
Simple-3df967056bf48bd9f87900f3a1ad9af2aedce948.zip
Backport some minor speedups
Diffstat (limited to 'chapter24a/src/test/java/com')
-rw-r--r--chapter24a/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/chapter24a/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java b/chapter24a/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java
new file mode 100644
index 00000000..319c94b0
--- /dev/null
+++ b/chapter24a/src/test/java/com/seaofnodes/simple/SchedulingScratchTest.java
@@ -0,0 +1,32 @@
+package com.seaofnodes.simple;
+
+import com.seaofnodes.simple.codegen.CodeGen;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class SchedulingScratchTest {
+ @Test public void testScratchAcrossCompilations() {
+ String src = """
+ int[] !xs = new int[2];
+ xs[0] = arg;
+ int sum = 0;
+ int i = 0;
+ while( i<5 ) {
+ int old = xs[arg&1];
+ xs[0] = 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++ ) {
+ CodeGen code = new CodeGen(src).driver(CodeGen.Phase.TypeCheck);
+ // A small graph after many earlier node allocations.
+ if( round==0 ) code._uid += 100_000;
+ assertEquals("6",Eval2.eval(code,0));
+ assertEquals("0",Eval2.eval(code,1));
+ assertEquals("8",Eval2.eval(code,2));
+ }
+ }
+}