summaryrefslogtreecommitdiff
path: root/src/test/java/com/seaofnodes/simple/Chapter22Test.java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2025-06-13 15:42:08 -0700
committerCliff Click <cliffc@acm.org>2026-10-24 15:56:44 -0700
commit89dd0a79da85b2c7102b7c8918a1466e6238fe94 (patch)
treecfa3d1457e9c40ad79ae78ded15c7c2ff286d79d /src/test/java/com/seaofnodes/simple/Chapter22Test.java
parent8309071562b63f77a15425ab2146e05dbcb5acfd (diff)
downloadSimple-linear-chapter24a.tar.gz
Simple-linear-chapter24a.zip
Chapter 24a: SCCP Within a Functionlinear-chapter24a
Co-authored-by: Tamás Hadházy <85063808+Hels15@users.noreply.github.com> Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: Symious <14933944+symious@users.noreply.github.com> Co-authored-by: Jun Kawasaki <jun784@gmail.com> Co-authored-by: Hadházy Tamás <helsgithub15@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/Chapter22Test.java')
-rw-r--r--src/test/java/com/seaofnodes/simple/Chapter22Test.java54
1 files changed, 37 insertions, 17 deletions
diff --git a/src/test/java/com/seaofnodes/simple/Chapter22Test.java b/src/test/java/com/seaofnodes/simple/Chapter22Test.java
index 351fd571..3ff8dc09 100644
--- a/src/test/java/com/seaofnodes/simple/Chapter22Test.java
+++ b/src/test/java/com/seaofnodes/simple/Chapter22Test.java
@@ -126,7 +126,7 @@ public class Chapter22Test {
else assertEquals(42,cpu.regs[0]);
}
}
- CodeGen unused = new CodeGen("({->42;}); return 0;").parse().iter().finalizeIR();
+ CodeGen unused = new CodeGen("({->42;}); return 0;").driver(CodeGen.Phase.FinalizeIR);
assertEquals(1,unused._stop.nIns());
}
@@ -186,7 +186,8 @@ public class Chapter22Test {
testCPU(src,"arm","SystemV",0,"return Top;");
}
- // Enabled in Chapter 23; measured there by Chapter23AllocTest.
+
+ // Frozen Jig runs in Chapter23AllocTest; the revised input is in Chapter24AllocTest.
@Test @Ignore
public void testJig() throws IOException {
String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/jig.smp"));
@@ -223,11 +224,11 @@ return 0;
assertEquals(56, testCPUSize(src, "arm","SystemV",4,"return 0;"));
// do assertEquals here
- EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away", 0, 4, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away", src,0, 4, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away", 0, 4, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away", src, 0, 4, false);
trap = A5.step(100);
assertEquals(0,trap);
@@ -243,11 +244,11 @@ return 0;
return 0;
""";
- EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away_2", 0, 4, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_not_fold_away_2", src, 0, 4, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away_2", 0, 4, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_not_fold_away_2", src, 0, 4, false);
int trap_arm = A5.step(100);
assertEquals(0,trap_arm);
@@ -267,11 +268,11 @@ p.age = (arg<<48)>>48;
return 0;
""";
- EvalRisc5 R5 = TestRisc5.build("sext_str_fold_away", 0, 5, false);
+ EvalRisc5 R5 = TestRisc5.build("sext_str_fold_away", src, 0, 5, false);
int trap = R5.step(100);
assertEquals(0,trap);
- EvalArm64 A5 = TestArm64.build("sext_str_fold_away", 0, 5, false);
+ EvalArm64 A5 = TestArm64.build("sext_str_fold_away", src, 0, 5, false);
int trap_arm = A5.step(100);
assertEquals(0,trap_arm);
@@ -284,8 +285,19 @@ return 0;
// Int now is changed to 4 bytes.
@Test public void testPerson() throws IOException {
+ String src =
+"""
+struct Person {
+ i32 age;
+};
+
+val fcn = { !Person?[] !ps, int x ->
+ if( ps[x] )
+ ps[x].age++;
+};
+""";
String person = "6\n";
- TestC.run("person", person, 0);
+ TestC.run(src, "person", null, person, 0);
// Memory layout starting at PS:
int ps = 1<<16; // Person array pointer starts at heap start
@@ -296,7 +308,7 @@ return 0;
int p1 = ps+4*8+1*8;
// P2 = { age } // sizeof=8
int p2 = ps+4*8+2*8;
- EvalRisc5 R5 = TestRisc5.build("person", ps, 0, false);
+ EvalRisc5 R5 = TestRisc5.build("person", src, ps, 0, false);
R5.regs[riscv.A1] = 1; // Index 1
R5.st8(ps,3); // Length
R5.st8(ps+1*8,p0);
@@ -312,7 +324,7 @@ return 0;
assertEquals(17+1,R5.ld8(p1));
assertEquals(60+0,R5.ld8(p2));
- EvalArm64 A5 = TestArm64.build("person", ps, 0, false);
+ EvalArm64 A5 = TestArm64.build("person", src, ps, 0, false);
A5.regs[arm.X1] = 1; // Index 1
A5.st8(ps, 3);
A5.st8(ps+1*8,p0);
@@ -351,18 +363,22 @@ return cc.cz;
@Test
public void testHelloWorld() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/helloWorld.smp"));
+ String src =
+"""
+sys.io.p("Hello, World!");
+return 0;
+""";
TestC.run(src,TestC.CALL_CONVENTION,null, null,null,"build/objs/helloWorld","","Hello, World!",0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("helloWorld", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("helloWorld", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
assertEquals("Hello, World!",R5._stdout.toString());
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("helloWorld", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("helloWorld", src,0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);
@@ -392,17 +408,21 @@ return sum(is);
@Test @Ignore
public void testEcho() throws IOException {
- String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/echo.smp"));
+ String src =
+"""
+// Echo stdin to stdout.
+return sys.io.p( sys.io.stdin() );
+""";
TestC.run(src,TestC.CALL_CONVENTION,null, null,null,"build/objs/echo","","",0);
// Evaluate on RISC5 emulator
- EvalRisc5 R5 = TestRisc5.build("echo", 0, 2, false);
+ EvalRisc5 R5 = TestRisc5.build("echo", src, 0, 2, false);
int trap = R5.step(100);
assertEquals(0,trap);
assertEquals(0,R5.regs[riscv.A0]);
// Evaluate on ARM emulator
- EvalArm64 arm = TestArm64.build("echo", 0, 2, false);
+ EvalArm64 arm = TestArm64.build("echo", src, 0, 2, false);
trap = arm.step(100);
assertEquals(0,trap);
assertEquals(0,arm.regs[0]);