diff options
| author | Cliff Click <cliffc@acm.org> | 2025-06-13 15:42:08 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2025-07-08 20:29:09 -0700 |
| commit | fcce1e13814a02d8358eae9a40e33a7e6f2b5400 (patch) | |
| tree | b9623369d88e22a0be21dbba472eebfa476d02ab /src/test/java/com/seaofnodes/simple/Chapter19Test.java | |
| parent | 664761624f4b0e3d6d1593b99e576854beec5949 (diff) | |
| download | Simple-linear-chapter24.tar.gz Simple-linear-chapter24.zip | |
Unifying Structs and Arrayslinear-chapter24
Diffstat (limited to 'src/test/java/com/seaofnodes/simple/Chapter19Test.java')
| -rw-r--r-- | src/test/java/com/seaofnodes/simple/Chapter19Test.java | 332 |
1 files changed, 0 insertions, 332 deletions
diff --git a/src/test/java/com/seaofnodes/simple/Chapter19Test.java b/src/test/java/com/seaofnodes/simple/Chapter19Test.java deleted file mode 100644 index e2a155ce..00000000 --- a/src/test/java/com/seaofnodes/simple/Chapter19Test.java +++ /dev/null @@ -1,332 +0,0 @@ -package com.seaofnodes.simple; - -import com.seaofnodes.simple.codegen.CodeGen.Phase; -import com.seaofnodes.simple.codegen.CodeGen; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import org.junit.Test; -import static org.junit.Assert.*; - -public class Chapter19Test { - - @Test - public void testJig() { - CodeGen code = new CodeGen(""" -return 0; -"""); - code.parse().opto().typeCheck(); - assertEquals("return 0;", code._stop.toString()); - assertEquals("0", Eval2.eval(code, 2)); - } - - - @Test - public void testString() throws IOException { - String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/stringHash.smp")); - CodeGen code = new CodeGen(src).parse().opto().typeCheck().GCM().localSched(); - assertEquals("Stop[ return Phi(Region,1,0,0,1); return Phi(Region,._hashCode,Phi(Region,123456789,Phi(Loop,0,(.[]+((Phi_hash<<5)-Phi_hash))))); ]", code._stop.toString()); - //assertEquals("-4898613127354160978", Eval2.eval(code, 2)); - } - - @Test - public void testBasic0() { - CodeGen code = new CodeGen("return 0;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return 0;", code._stop.toString()); - } - - @Test - public void testBasic1() { - CodeGen code = new CodeGen("return arg+1;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (inc,arg);", code._stop.toString()); - } - - @Test - public void testBasic2() { - CodeGen code = new CodeGen("return -17;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return -17;", code._stop.toString()); - } - - - @Test - public void testBasic3() { - CodeGen code = new CodeGen("return arg==1;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (set==,(cmp,arg));", code._stop.toString()); - } - - @Test - public void testBasic4() { - CodeGen code = new CodeGen("return arg<<1;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (shli,arg);", code._stop.toString()); - } - - @Test - public void testBasic5() { - CodeGen code = new CodeGen("return arg >> 1;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (sari,arg);", code._stop.toString()); - } - - @Test - public void testBasic6() { - CodeGen code = new CodeGen("return arg >>> 1;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (shri,arg);", code._stop.toString()); - } - - @Test - public void testBasic7() { - CodeGen code = new CodeGen("return arg / 2;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (div,arg,2);", code._stop.toString()); - } - - @Test - public void testBasic8() { - CodeGen code = new CodeGen("return arg * 6;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (muli,arg);", code._stop.toString()); - } - - @Test - public void testBasic9() { - CodeGen code = new CodeGen("return arg & 2;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (andi,arg);", code._stop.toString()); - } - - @Test - public void testBasic10() { - CodeGen code = new CodeGen("return arg | 2;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (ori,arg);", code._stop.toString()); - } - - @Test - public void testBasic11() { - CodeGen code = new CodeGen("return arg ^ 2;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (xori,arg);", code._stop.toString()); - } - - @Test - public void testBasic12() { - CodeGen code = new CodeGen("return arg + 2.0;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (addf,(cvtf,arg),2.0f);", code._stop.toString()); - } - - @Test - public void testBasic13() { - CodeGen code = new CodeGen("return arg - 2.0;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (subf,(cvtf,arg),2.0f);", code._stop.toString()); - } - - @Test - public void testBasic14() { - CodeGen code = new CodeGen("return arg * 2.0;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (mulf,(cvtf,arg),2.0f);", code._stop.toString()); - } - - @Test - public void testBasic15() { - CodeGen code = new CodeGen("return arg / 2.0;").driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (mulf,(cvtf,arg),0.5f);", code._stop.toString()); - } - - @Test - public void testBasic16() { - CodeGen code = new CodeGen( -""" -int arg1 = arg + 1; -return arg1 / arg;"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (div,(inc,arg),arg);", code._stop.toString()); - } - - @Test - public void testBasic17() { - CodeGen code = new CodeGen( -""" -int arg1 = arg + 1; -return arg1 * arg; -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (mul,(inc,arg),arg);", code._stop.toString()); - } - - @Test - public void testToFloat() { - CodeGen code = new CodeGen(""" -int a = arg; -return a + 2.0; -""" - ).driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (addf,(cvtf,arg),2.0f);", code._stop.toString()); - } - - @Test - public void testIfStmt() { - CodeGen code = new CodeGen( -""" -int a = 1; -if (arg == 1) - a = arg+2; -else { - a = arg-3; -} -return a;"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return Phi(Region,(addi,arg),(addi,arg));", code.print()); - } - - @Test - public void testIfMerge2() { - CodeGen code = new CodeGen( -""" -int a=arg+1; -int b=arg+2; -if( arg==1 ) - b=b+a; -else - a=b+1; -return a+b;"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (add,(add,Phi(Region,(shli,arg),arg),arg),Phi(Region,4,5));", code.print()); - } - - @Test - public void testLoop() { - CodeGen code = new CodeGen( -""" -int sum=0; -for( int i=0; i<arg; i++ ) - sum += i; -return sum;"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return Phi(Loop,0,(add,Phi_sum,Phi(Loop,0,(inc,Phi_i))));", code.print()); - } - - @Test - public void testAlloc1() { - CodeGen code = new CodeGen( -""" -struct S { int a; S? c; }; -return new S;"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return S;", code.print()); - } - - @Test - public void testLea1() { - CodeGen code = new CodeGen("int x = arg/3; return arg+x+7;"); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (lea,arg,(div,arg,3));", code.print()); - } - - @Test - public void testLea2() { - CodeGen code = new CodeGen("int x = arg/3; return arg+x*4+7;"); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (lea,arg,(div,arg,3));", code.print()); - } - - @Test - public void testLea3() { - CodeGen code = new CodeGen("int x = arg/3; return x*4+arg;"); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return (lea,arg,(div,arg,3));", code.print()); - } - - @Test - public void testAlloc2() { - CodeGen code = new CodeGen("int[] !xs = new int[3]; xs[arg]=1; return xs[arg&1];"); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return .[];", code.print()); - } - - @Test - public void testAlloc3() { - CodeGen code = new CodeGen("int[] !xs = new int[3]; xs[arg]=1; return xs[arg&1]+3;"); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return .[];", code.print()); - } - - @Test - public void testArray1() { - CodeGen code = new CodeGen( -""" -int[] !ary = new int[arg]; -// Fill [0,1,2,3,4,...] -for( int i=0; i<ary#; i++ ) - ary[i] = i; -// Fill [0,1,3,6,10,...] -for( int i=0; i<ary#-1; i++ ) - ary[i+1] += ary[i]; -return ary[1] * 1000 + ary[3]; // 1 * 1000 + 6 -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return .[];", code.print()); - } - - @Test - public void testArray2() { - CodeGen code = new CodeGen( -""" -flt[] !A = new flt[arg], !B = new flt[arg]; -// Fill [0,1,2,3,4,...] -for( int i=0; i<A#; i++ ) - A[i] = i; -for( int i=0; i<A#; i++ ) - B[i] += A[i]; -return 0; -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return 0;", code.print()); - } - - @Test - public void testArray3() { - CodeGen code = new CodeGen( -""" -byte[] !A = new byte[arg]; -for( int i=0; i<A#; i++ ) - A[i]++; -return A[1]; -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return .[];", code.print()); - } - - @Test - public void testNewton() throws IOException { - String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/newtonFloat.smp")) - + "flt farg = arg; return test_sqrt(farg);"; - CodeGen code = new CodeGen(src).driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return Phi(Loop,(cvtf,arg),(mulf,(addf,(divf,cvtf,Phi_guess),Phi_guess),0.5f));", code.print()); - }; - - - @Test - public void sieveOfEratosthenes() throws IOException { - String src = Files.readString(Path.of("src/test/java/com/seaofnodes/simple/progs/sieve.smp")); - CodeGen code = new CodeGen(src).driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("return []u32;", code.print()); - //assertEquals("u32[ 2,3,5,7,11,13,17,19]",Eval2.eval(code, 20)); - } - - - @Test - public void testFcn1() { - CodeGen code = new CodeGen( -""" -val fcn = arg ? { int x -> x*x; } : { int x -> x+x; }; -return fcn(2)*10 + fcn(3); -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("Stop[ return (add,#2,(muli,#2)); return (mul,Parm_x($fun21,i64),x); return (shli,Parm_x($fun22,i64)); ]", code.print()); - } - - @Test - public void testFcn2() { - CodeGen code = new CodeGen( -""" -val sq = { int x -> x*x; }; -return sq(arg) + sq(3); -"""); - code.driver(Phase.LocalSched,"x86_64_v2", "SystemV"); - assertEquals("Stop[ return (add,#2,#2); return (mul,Parm_x(sq,i64),x); ]", code.print()); - } -} |
