summaryrefslogtreecommitdiff
path: root/src/test/java/com/seaofnodes/simple/Chapter10Test.java
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-03 14:03:48 -0700
committerCliff Click <cliffc@acm.org>2026-10-04 13:30:41 -0700
commit9a5ca20d2537179f3a8e01762c8db6b52a4db2d9 (patch)
tree6fe0ab1ae48b05fb6a6e98f73c4dfdc52aec5c5d /src/test/java/com/seaofnodes/simple/Chapter10Test.java
parent63fe16fa2ea123b8ce2f976662b0a6d09f352868 (diff)
downloadSimple-linear-chapter17a.tar.gz
Simple-linear-chapter17a.zip
Chapter 17a: Mutability and Read-Only Viewslinear-chapter17a
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/Chapter10Test.java')
-rw-r--r--src/test/java/com/seaofnodes/simple/Chapter10Test.java68
1 files changed, 34 insertions, 34 deletions
diff --git a/src/test/java/com/seaofnodes/simple/Chapter10Test.java b/src/test/java/com/seaofnodes/simple/Chapter10Test.java
index 0b8be64b..f634e421 100644
--- a/src/test/java/com/seaofnodes/simple/Chapter10Test.java
+++ b/src/test/java/com/seaofnodes/simple/Chapter10Test.java
@@ -25,7 +25,7 @@ public class Chapter10Test {
// Issue #246: null-check guards start in Chapter 10; arrays arrive in Chapter 15.
private static final String NULLABLE_POINT_SOURCE = """
struct Point { int x; };
- Point?[] points = new Point?[2];
+ !Point?[] !points = new !Point?[2];
points[arg] = new Point { x = 42; };
Point? p = points[1];
""";
@@ -101,7 +101,7 @@ struct Foo {
int x;
};
Foo? foo = null;
-Bar bar = new Bar;
+!Bar !bar = new Bar;
bar.a = 1;
bar.a = 2;
return bar.a;
@@ -114,7 +114,7 @@ return bar.a;
public void testExample() {
Parser parser = new Parser("""
struct Vector2D { int x; int y; };
-Vector2D v = new Vector2D;
+!Vector2D !v = new Vector2D;
v.x = 1;
if (arg)
v.y = 2;
@@ -153,7 +153,7 @@ arg=0+new s0.0;
public void testLoop() {
Parser parser = new Parser("""
struct Bar { int a; };
-Bar bar = new Bar;
+!Bar !bar = new Bar;
while (arg) {
bar.a = bar.a + 2;
arg = arg + 1;
@@ -161,14 +161,14 @@ while (arg) {
return bar.a;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Loop17,0,(Phi_a+2));", stop.toString());
+ assertEquals("return Phi(Loop,0,(Phi_a+2));", stop.toString());
}
@Test
public void testIf() {
Parser parser = new Parser("""
struct Bar { int a; };
-Bar bar = new Bar;
+!Bar !bar = new Bar;
if (arg) bar = null;
bar.a = 1;
return bar.a;
@@ -181,7 +181,7 @@ return bar.a;
public void testIf2() {
Parser parser = new Parser("""
struct Bar { int a; };
-Bar? bar = null;
+!Bar? !bar = null;
if (arg) bar = new Bar;
bar.a = 1;
return bar.a;
@@ -207,13 +207,13 @@ return bar.a;
public void testIfOrNull() {
Parser parser = new Parser("""
struct Bar { int a; };
-Bar? bar = new Bar;
+!Bar? !bar = new Bar;
if (arg) bar = null;
if( bar ) bar.a = 1;
return bar;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Region38,(*void)Phi(Region24,null,Bar),null);", stop.toString());
+ assertEquals("return Phi(Region,(*void)Phi(Region,null,Bar),null);", stop.toString());
}
@Test
@@ -221,7 +221,7 @@ return bar;
Parser parser = new Parser(
"""
struct Bar { int a; };
-Bar? bar = new Bar;
+!Bar? !bar = new Bar;
if (arg) bar = null;
int rez = 3;
if( !bar ) rez=4;
@@ -229,14 +229,14 @@ else bar.a = 1;
return rez;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Region44,4,3);", stop.toString());
+ assertEquals("return Phi(Region,4,3);", stop.toString());
}
@Test
public void testWhileWithNullInside() {
Parser parser = new Parser("""
struct s0 {int v0;};
-s0? v0 = new s0;
+!s0? !v0 = new s0;
int ret = 0;
while(arg) {
ret = v0.v0;
@@ -257,7 +257,7 @@ struct s0 {
int v0;
};
s0? v1=new s0;
-s0? v1;
+!s0? !v1;
v1=new s0;
""");
try { parser.parse(); fail(); }
@@ -273,7 +273,7 @@ struct Iter {
int x;
int len;
};
-Iter i = new Iter;
+!Iter !i = new Iter;
i.len = arg;
int sum=0;
while( i.x < i.len ) {
@@ -283,7 +283,7 @@ while( i.x < i.len ) {
return sum;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Loop22,0,(Phi(Loop,0,(Phi_x+1))+Phi_sum));", stop.toString());
+ assertEquals("return Phi(Loop,0,(Phi(Loop,0,(Phi_x+1))+Phi_sum));", stop.toString());
}
@@ -291,9 +291,9 @@ return sum;
public void test1() {
Parser parser = new Parser("""
struct s0 {int v0;};
-s0 ret = new s0;
+!s0 !ret = new s0;
while(arg) {
- s0 v0 = new s0;
+ !s0 !v0 = new s0;
v0.v0 = arg;
arg = arg-1;
if (arg==5) ret=v0;
@@ -302,15 +302,15 @@ while(arg) {
return ret;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Loop17,s0,Phi(Region44,s0,Phi_ret));", stop.toString());
+ assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString());
}
@Test
public void test2() {
Parser parser = new Parser("""
struct s0 {int v0;};
-s0 ret = new s0;
-s0 v0 = new s0;
+!s0 !ret = new s0;
+!s0 !v0 = new s0;
while(arg) {
v0.v0 = arg;
arg = arg-1;
@@ -320,7 +320,7 @@ while(arg) {
return ret;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Loop23,s0,Phi(Region45,s0,Phi_ret));", stop.toString());
+ assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString());
}
@@ -328,16 +328,16 @@ return ret;
public void test3() {
Parser parser = new Parser("""
struct s0 {int v0;};
-s0 ret = new s0;
+!s0 !ret = new s0;
while(arg < 10) {
- s0 v0 = new s0;
+ !s0 !v0 = new s0;
if (arg == 5) ret=v0;
arg = arg + 1;
}
return ret;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return Phi(Loop17,s0,Phi(Region41,s0,Phi_ret));", stop.toString());
+ assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString());
}
@Test
@@ -407,7 +407,7 @@ s0 v1 = v0;
return v1;
""");
StopNode stop = parser.parse().iterate();
- assertEquals("return s0;", stop.toString());
+ assertEquals("return (const)s0;", stop.toString());
}
@@ -456,9 +456,9 @@ return 0;
@Test public void testReadBeforeStores() {
var stop = new Parser("""
struct S { int x; int y; };
- S a = new S; S b = new S;
+ !S !a = new S; !S !b = new S;
a.x = 11; b.x = 22;
- S p = a; if (arg) p = b;
+ !S !p = a; if (arg) p = b;
int before = p.x;
a.y = 55; b.y = 66;
a.x = 33; b.x = 44;
@@ -470,7 +470,7 @@ return 0;
static final String NESTED_MEMORY = """
struct S { int x; int y; int z; };
- S s = new S;
+ !S !s = new S;
s.x = 5; s.y = 7; s.z = 11;
while (arg > 0) {
s.x = s.x + 1;
@@ -501,7 +501,7 @@ return 0;
@Test public void testMemoryAtEarlyReturns() {
var stop = new Parser("""
struct S { int x; int y; int z; };
- S s = new S;
+ !S !s = new S;
s.x = 3; s.y = 5; s.z = 7;
if (arg) { s.x = 11; s.z = 13; return s; }
s.y = 17;
@@ -517,9 +517,9 @@ return 0;
@Test public void testKeepLoadsAtMerge() {
StopNode stop = new Parser("""
struct S { int x; };
- S a = new S; S b = new S;
+ !S !a = new S; !S !b = new S;
a.x = arg; b.x = arg+1;
- S p = a; S q = b;
+ !S !p = a; !S !q = b;
if (arg<0) { p=b; q=a; }
int v;
if (arg>1) v=p.x; else v=q.x;
@@ -535,7 +535,7 @@ return 0;
@Test public void testDropStores() {
StopNode stop = new Parser("""
struct S { int x; };
- S s = new S;
+ !S !s = new S;
if (arg) s.x=arg+1; else s.x=arg+2;
return s;
""").parse().iterate();
@@ -547,9 +547,9 @@ return 0;
@Test public void testKeepReadsBeforeWrites() {
StopNode stop = new Parser("""
struct S { int x; int y; };
- S a = new S; S b = new S;
+ !S !a = new S; !S !b = new S;
a.x=arg; b.x=arg+1;
- S p=a; S q=b;
+ !S !p=a; !S !q=b;
if (arg<0) { p=b; q=a; }
int v;
if (arg>1) { v=p.x; p.x=41; p.y=5; }