summaryrefslogtreecommitdiff
path: root/chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-11-08 14:10:02 -0800
committerCliff Click <cliffc@acm.org>2026-11-08 14:10:02 -0800
commit06fb5aceeb65a75b1cd643debd667c52fdcafcb9 (patch)
treec99813eaf27d98f840245302c4d6e923c964307e /chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java
parent6560a92433a38825fd1d44d9c66ffba9f26990ff (diff)
downloadSimple-ch30.tar.gz
Simple-ch30.zip
Better error messagesch30
Better error messages. Buffs to the std lib; getch() to fetch a single character; streaming I/O handles retries, and large sizes, with better error reporting. Formatted strings. Default int moved to i32. TicTacToe, the game.
Diffstat (limited to 'chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java')
-rw-r--r--chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java12
1 files changed, 6 insertions, 6 deletions
diff --git a/chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java b/chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java
index 10b7517e..0b05dc52 100644
--- a/chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java
+++ b/chapter30/src/test/java/com/seaofnodes/simple/BoundaryTest.java
@@ -20,7 +20,7 @@ public class BoundaryTest {
.driver(CodeGen.Phase.TypeCheck);
assertEquals("7",Eval2.eval(factory,0));
}
- String src="struct Counter { int x; int y; int z; new Counter={int n -> while(x<n) { int old=x; y=x+1; x=y+1; z=old; }}; }; val c=new Counter(arg); return c.x*100+c.z;";
+ String src="struct Counter { int x; int y; int z; new Counter={int n -> while(x<n) { int old=x; y=x+1; x=y+1; z=old; }}; }; val c=new Counter(((arg<<32)>>32)); return c.x*100+c.z;";
CodeGen code=new CodeGen(src).driver(CodeGen.Phase.LocalSched);
assertEquals("2018",Eval2.eval(code,19));
assertEquals("0",Eval2.eval(code,0));
@@ -53,11 +53,11 @@ public class BoundaryTest {
@Test public void testRecursiveCallback() {
String src="""
val run={int n ->
- val power={int base,int exponent -> if(exponent<=0) return 1; return base*power(base,exponent-1);};
- val sumPowers={int n,{int int -> int} f -> if(n<=0) return 0; return f(2,n)+sumPowers(n-1,f);};
+ val power={int base,int exponent -> if(exponent<=0) return 1; return base*power(base,--exponent);};
+ val sumPowers={int n,{int int -> i64} f -> if(n<=0) return 0; return f(2,n)+sumPowers(--n,f);};
return sumPowers(n,power);
};
- return run(arg);
+ return run(((arg<<32)>>32));
""";
for( long seed : new long[]{2,13,123} ) {
CodeGen code=new CodeGen(src,seed,true).driver(CodeGen.Phase.Opto);
@@ -74,11 +74,11 @@ public class BoundaryTest {
"retain(power); return power(2,n);",
"if(n) { retain(power); while(true) {} } return power(2,n);"
} ) {
- String src="val run={int n -> val power={int base,int exponent -> if(exponent<=0) return 1; return base*power(base,exponent-1);}; { {int int -> int} -> int } retain=\"C\";"+tail+"}; return run(arg);";
+ String src="val run={int n -> val power={int base,int exponent -> if(exponent<=0) return 1; return base*power(base,--exponent);}; { {int int -> i64} -> int } retain=\"C\";"+tail+"}; return run(((arg<<32)>>32));";
CodeGen code=new CodeGen(src).driver(CodeGen.Phase.Opto);
ParmNode base=code._start.walk(n -> n instanceof ParmNode p && p._label.equals("base") ? p : null);
assertNotNull(base);
- assertSame(TypeInteger.BOT,base._type);
+ assertSame(TypeInteger.I32,base._type);
code.driver(CodeGen.Phase.TypeCheck);
}
}