diff options
| author | Cliff Click <cliffc@acm.org> | 2024-11-26 11:01:47 -0800 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-01-14 15:17:03 -0800 |
| commit | eee5b806fabae0b480ff7d41159369c5a457d014 (patch) | |
| tree | 576e6ed318eea76aa9e0de9e95af7616a0b8475a /src/test/java/com/seaofnodes/simple/Chapter10Test.java | |
| parent | c07510c1d75020d23d688f7f184149c57b13a39a (diff) | |
| download | Simple-linear-chapter18.tar.gz Simple-linear-chapter18.zip | |
Chapter 18: Functionslinear-chapter18
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/Chapter10Test.java')
| -rw-r--r-- | src/test/java/com/seaofnodes/simple/Chapter10Test.java | 135 |
1 files changed, 66 insertions, 69 deletions
diff --git a/src/test/java/com/seaofnodes/simple/Chapter10Test.java b/src/test/java/com/seaofnodes/simple/Chapter10Test.java index d41c83d8..02029b3f 100644 --- a/src/test/java/com/seaofnodes/simple/Chapter10Test.java +++ b/src/test/java/com/seaofnodes/simple/Chapter10Test.java @@ -1,7 +1,5 @@ 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; import static org.junit.Assert.fail; @@ -10,7 +8,7 @@ public class Chapter10Test { @Test public void testFuzzer() { - Parser parser = new Parser( + CodeGen code = new CodeGen( """ int a = arg/3; int b = arg*5; @@ -29,13 +27,13 @@ if( (arg/13)==0 ) { int r = g+h; return p-r; """); - StopNode stop = parser.parse(false).iterate(false); - assertEquals("return 0;", stop.toString()); + code.parse().opto(); + assertEquals("return 0;", code.print()); } @Test public void testStruct() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; int b; @@ -49,13 +47,13 @@ bar.a = 1; bar.a = 2; return bar.a; """); - StopNode stop = parser.parse(false).iterate(); - assertEquals("return 2;", stop.toString()); + code.parse().opto(); + assertEquals("return 2;", code.print()); } @Test public void testExample() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Vector2D { int x; int y; }; Vector2D !v = new Vector2D; v.x = 1; @@ -65,36 +63,36 @@ else v.y = 3; return v; """); - StopNode stop = parser.parse(false).iterate(); - assertEquals("return Vector2D;", stop.toString()); + code.parse().opto(); + assertEquals("return Vector2D;", code.print()); } @Test public void testBug() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int v0; }; s0? v1=null; int v3=v1.zAicm; """); - try { parser.parse(); fail(); } + try { code.parse(); fail(); } catch( Exception e ) { assertEquals("Accessing unknown field 'zAicm' from 'null'",e.getMessage()); } } @Test public void testBug2() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int v0; }; arg=0+new s0.0; """); - try { parser.parse(); fail(); } + try { code.parse(); fail(); } catch( Exception e ) { assertEquals("Expected an identifier, found 'null'",e.getMessage()); } } @Test public void testLoop() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; }; Bar !bar = new Bar; while (arg) { @@ -103,65 +101,65 @@ while (arg) { } return bar.a; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return Phi(Loop,0,(Phi_a+2));", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Loop,0,(Phi_a+2));", code.print()); } @Test public void testIf() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; }; Bar !bar = new Bar; if (arg) bar = null; bar.a = 1; return bar.a; """); - try { parser.parse().iterate(); fail(); } + try { code.parse().opto(); fail(); } catch( Exception e ) { assertEquals("Type null is not of declared type *Bar",e.getMessage()); } } @Test public void testIf2() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; }; Bar? !bar = null; if (arg) bar = new Bar; bar.a = 1; return bar.a; """); - try { parser.parse().iterate(); fail(); } + try { code.parse().opto().typeCheck(); fail(); } catch( Exception e ) { assertEquals("Might be null accessing 'a'",e.getMessage()); } } @Test public void testIf3() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; }; Bar bar = null; if (arg) bar = null; bar.a = 1; return bar.a; """); - try { parser.parse(); fail(); } + try { code.parse(); fail(); } catch( Exception e ) { assertEquals("Type null is not of declared type *Bar", e.getMessage()); } } @Test public void testIfOrNull() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct Bar { int a; }; Bar? !bar = new Bar; if (arg) bar = null; if( bar ) bar.a = 1; return bar; """); - StopNode stop = parser.parse(false).iterate(); - assertEquals("return Phi(Region,(*void)Phi(Region,null,Bar),null);", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Region,null,Bar);", code.print()); } @Test public void testIfOrNull2() { - Parser parser = new Parser( + CodeGen code = new CodeGen( """ struct Bar { int a; }; Bar? !bar = new Bar; @@ -171,13 +169,13 @@ if( !bar ) rez=4; else bar.a = 1; return rez; """); - StopNode stop = parser.parse(false).iterate(); - assertEquals("return Phi(Region,4,3);", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Region,4,3);", code.print()); } @Test public void testWhileWithNullInside() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 {int v0;}; s0? !v0 = new s0; int ret = 0; @@ -188,14 +186,14 @@ while(arg) { } return ret; """); - try { parser.parse().iterate(); fail(); } + try { code.parse().opto().typeCheck(); fail(); } catch( Exception e ) { assertEquals("Might be null accessing 'v0'", e.getMessage()); } } @Test public void testRedeclareStruct() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int v0; }; @@ -203,14 +201,14 @@ s0? v1=new s0; s0? v1; v1=new s0; """); - try { parser.parse(); fail(); } + try { code.parse(); fail(); } catch( Exception e ) { assertEquals("Redefining name 'v1'", e.getMessage()); } } @Test public void testIter() { // Build and use an iterator - Parser parser = new Parser( + CodeGen code = new CodeGen( """ struct Iter { int x; @@ -225,14 +223,14 @@ while( i.x < i.len ) { } return sum; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return Phi(Loop,0,(Phi(Loop,0,(Phi_x+1))+Phi_sum));", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Loop,0,(Phi(Loop,0,(Phi_x+1))+Phi_sum));", code.print()); } @Test public void test1() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 {int v0;}; s0 !ret = new s0; while(arg) { @@ -244,13 +242,13 @@ while(arg) { } return ret; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", code.print()); } @Test public void test2() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 {int v0;}; s0 !ret = new s0; s0 !v0 = new s0; @@ -262,14 +260,14 @@ while(arg) { } return ret; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", code.print()); } @Test public void test3() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 {int v0;}; s0 !ret = new s0; while(arg < 10) { @@ -279,41 +277,40 @@ while(arg < 10) { } return ret; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", stop.toString()); + code.parse().opto(); + assertEquals("return Phi(Loop,s0,Phi(Region,s0,Phi_ret));", code.print()); } @Test public void testBug3() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int f0; }; return new s0; int v0=null.f0; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return s0;", stop.toString()); - assertEquals("Obj<s0>{f0=0}", Evaluator.evaluate(stop, 0).toString()); + try { code.parse(); fail(); } + catch( Exception e ) { assertEquals("Accessing unknown field 'f0' from 'null'",e.getMessage()); } } @Test public void testBug4() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" if(0) { while(0) if(arg) continue; int v0=0; while(1) { - int arg=-arg; - v0=arg; + int v2=-arg; + v0=v2; } } """); - StopNode stop = parser.parse().iterate(); - assertEquals("return 0;", stop.toString()); + code.parse().opto(); + assertEquals("return 0;", code.print()); } @Test public void testBug5() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int f0; }; @@ -321,13 +318,13 @@ if(0) return 0; else return new s0; if(new s0.f0) return 0; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return s0;", stop.toString()); + code.parse().opto(); + assertEquals("return s0;", code.print()); } @Test public void testBug6MissedWorklist() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" while(0) {} int v4=0; while(0<arg) { @@ -337,26 +334,26 @@ while(0<arg) { } return 0; """); - StopNode stop = parser.parse().iterate(); + code.parse().opto(); } @Test public void testBug7() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" struct s0 { int f0; }; s0 v0 = new s0; while(v0.f0) {} s0 v1 = v0; return v1; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return (const)s0;", stop.toString()); + code.parse().opto(); + assertEquals("return (const)s0;", code.print()); } @Test public void testBug8() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" int v2=0; while(0) while(0) {} @@ -381,19 +378,19 @@ while(0) {} } } } """); - StopNode stop = parser.parse().iterate(); - assertEquals("return 0;", stop.toString()); + code.parse().opto(); + assertEquals("return 0;", code.print()); } @Test public void testBug9() { - Parser parser = new Parser(""" + CodeGen code = new CodeGen(""" int v0=arg==0; while(v0) continue; return 0; """); - StopNode stop = parser.parse().iterate(); - assertEquals("return 0;", stop.toString()); + code.parse().opto(); + assertEquals("return 0;", code.print()); } } |
