diff options
Diffstat (limited to 'vaporize/tests/QuickSort.vapor')
-rw-r--r-- | vaporize/tests/QuickSort.vapor | 399 |
1 files changed, 399 insertions, 0 deletions
diff --git a/vaporize/tests/QuickSort.vapor b/vaporize/tests/QuickSort.vapor new file mode 100644 index 0000000..3fe3798 --- /dev/null +++ b/vaporize/tests/QuickSort.vapor @@ -0,0 +1,399 @@ + +const vmt_QS + :QS.Start + :QS.Sort + :QS.Print + :QS.Init + + +func Main() + t.0 = HeapAllocZ(12) + [t.0] = :vmt_QS + if t.0 goto :null1 + Error("null pointer") + null1: + t.1 = [t.0] + t.1 = [t.1+0] + t.2 = call t.1(t.0 10) + PrintIntS(t.2) + ret + +func QS.Start(this sz) + t.0 = [this] + t.0 = [t.0+12] + aux01 = call t.0(this sz) + t.1 = [this] + t.1 = [t.1+8] + aux01 = call t.1(this) + PrintIntS(9999) + t.2 = [this+8] + aux01 = Sub(t.2 1) + t.3 = [this] + t.3 = [t.3+4] + aux01 = call t.3(this 0 aux01) + t.4 = [this] + t.4 = [t.4+8] + aux01 = call t.4(this) + ret 0 + +func QS.Sort(this left right) + t = 0 + t.0 = LtS(left right) + if0 t.0 goto :if1_else + t.1 = [this+4] + if t.1 goto :null2 + Error("null pointer") + null2: + t.2 = [t.1] + t.2 = Lt(right t.2) + if t.2 goto :bounds1 + Error("array index out of bounds") + bounds1: + t.2 = MulS(right 4) + t.2 = Add(t.2 t.1) + v = [t.2+4] + i = Sub(left 1) + j = right + cont01 = 1 + while1_top: + if0 cont01 goto :while1_end + cont02 = 1 + while2_top: + if0 cont02 goto :while2_end + i = Add(i 1) + t.3 = [this+4] + if t.3 goto :null3 + Error("null pointer") + null3: + t.4 = [t.3] + t.4 = Lt(i t.4) + if t.4 goto :bounds2 + Error("array index out of bounds") + bounds2: + t.4 = MulS(i 4) + t.4 = Add(t.4 t.3) + aux03 = [t.4+4] + t.5 = LtS(aux03 v) + t.6 = Sub(1 t.5) + if0 t.6 goto :if2_else + cont02 = 0 + goto :if2_end + if2_else: + cont02 = 1 + if2_end: + goto :while2_top + while2_end: + cont02 = 1 + while3_top: + if0 cont02 goto :while3_end + j = Sub(j 1) + t.7 = [this+4] + if t.7 goto :null4 + Error("null pointer") + null4: + t.8 = [t.7] + t.8 = Lt(j t.8) + if t.8 goto :bounds3 + Error("array index out of bounds") + bounds3: + t.8 = MulS(j 4) + t.8 = Add(t.8 t.7) + aux03 = [t.8+4] + t.9 = LtS(v aux03) + t.10 = Sub(1 t.9) + if0 t.10 goto :if3_else + cont02 = 0 + goto :if3_end + if3_else: + cont02 = 1 + if3_end: + goto :while3_top + while3_end: + t.11 = [this+4] + if t.11 goto :null5 + Error("null pointer") + null5: + t.12 = [t.11] + t.12 = Lt(i t.12) + if t.12 goto :bounds4 + Error("array index out of bounds") + bounds4: + t.12 = MulS(i 4) + t.12 = Add(t.12 t.11) + t = [t.12+4] + t.13 = [this+4] + if t.13 goto :null6 + Error("null pointer") + null6: + t.14 = [t.13] + t.14 = Lt(i t.14) + if t.14 goto :bounds5 + Error("array index out of bounds") + bounds5: + t.14 = MulS(i 4) + t.14 = Add(t.14 t.13) + t.15 = [this+4] + if t.15 goto :null7 + Error("null pointer") + null7: + t.16 = [t.15] + t.16 = Lt(j t.16) + if t.16 goto :bounds6 + Error("array index out of bounds") + bounds6: + t.16 = MulS(j 4) + t.16 = Add(t.16 t.15) + t.17 = [t.16+4] + [t.14+4] = t.17 + t.18 = [this+4] + if t.18 goto :null8 + Error("null pointer") + null8: + t.19 = [t.18] + t.19 = Lt(j t.19) + if t.19 goto :bounds7 + Error("array index out of bounds") + bounds7: + t.19 = MulS(j 4) + t.19 = Add(t.19 t.18) + [t.19+4] = t + t.20 = Add(i 1) + t.21 = LtS(j t.20) + if0 t.21 goto :if4_else + cont01 = 0 + goto :if4_end + if4_else: + cont01 = 1 + if4_end: + goto :while1_top + while1_end: + t.22 = [this+4] + if t.22 goto :null9 + Error("null pointer") + null9: + t.23 = [t.22] + t.23 = Lt(j t.23) + if t.23 goto :bounds8 + Error("array index out of bounds") + bounds8: + t.23 = MulS(j 4) + t.23 = Add(t.23 t.22) + t.24 = [this+4] + if t.24 goto :null10 + Error("null pointer") + null10: + t.25 = [t.24] + t.25 = Lt(i t.25) + if t.25 goto :bounds9 + Error("array index out of bounds") + bounds9: + t.25 = MulS(i 4) + t.25 = Add(t.25 t.24) + t.26 = [t.25+4] + [t.23+4] = t.26 + t.27 = [this+4] + if t.27 goto :null11 + Error("null pointer") + null11: + t.28 = [t.27] + t.28 = Lt(i t.28) + if t.28 goto :bounds10 + Error("array index out of bounds") + bounds10: + t.28 = MulS(i 4) + t.28 = Add(t.28 t.27) + t.29 = [this+4] + if t.29 goto :null12 + Error("null pointer") + null12: + t.30 = [t.29] + t.30 = Lt(right t.30) + if t.30 goto :bounds11 + Error("array index out of bounds") + bounds11: + t.30 = MulS(right 4) + t.30 = Add(t.30 t.29) + t.31 = [t.30+4] + [t.28+4] = t.31 + t.32 = [this+4] + if t.32 goto :null13 + Error("null pointer") + null13: + t.33 = [t.32] + t.33 = Lt(right t.33) + if t.33 goto :bounds12 + Error("array index out of bounds") + bounds12: + t.33 = MulS(right 4) + t.33 = Add(t.33 t.32) + [t.33+4] = t + t.34 = [this] + t.34 = [t.34+4] + t.35 = Sub(i 1) + nt = call t.34(this left t.35) + t.36 = [this] + t.36 = [t.36+4] + t.37 = Add(i 1) + nt = call t.36(this t.37 right) + goto :if1_end + if1_else: + nt = 0 + if1_end: + ret 0 + +func QS.Print(this) + j = 0 + while4_top: + t.0 = [this+8] + t.1 = LtS(j t.0) + if0 t.1 goto :while4_end + t.2 = [this+4] + if t.2 goto :null14 + Error("null pointer") + null14: + t.3 = [t.2] + t.3 = Lt(j t.3) + if t.3 goto :bounds13 + Error("array index out of bounds") + bounds13: + t.3 = MulS(j 4) + t.3 = Add(t.3 t.2) + t.4 = [t.3+4] + PrintIntS(t.4) + j = Add(j 1) + goto :while4_top + while4_end: + ret 0 + +func QS.Init(this sz) + [this+8] = sz + t.0 = call :AllocArray(sz) + [this+4] = t.0 + t.1 = [this+4] + if t.1 goto :null15 + Error("null pointer") + null15: + t.2 = [t.1] + t.2 = Lt(0 t.2) + if t.2 goto :bounds14 + Error("array index out of bounds") + bounds14: + t.2 = MulS(0 4) + t.2 = Add(t.2 t.1) + [t.2+4] = 20 + t.3 = [this+4] + if t.3 goto :null16 + Error("null pointer") + null16: + t.4 = [t.3] + t.4 = Lt(1 t.4) + if t.4 goto :bounds15 + Error("array index out of bounds") + bounds15: + t.4 = MulS(1 4) + t.4 = Add(t.4 t.3) + [t.4+4] = 7 + t.5 = [this+4] + if t.5 goto :null17 + Error("null pointer") + null17: + t.6 = [t.5] + t.6 = Lt(2 t.6) + if t.6 goto :bounds16 + Error("array index out of bounds") + bounds16: + t.6 = MulS(2 4) + t.6 = Add(t.6 t.5) + [t.6+4] = 12 + t.7 = [this+4] + if t.7 goto :null18 + Error("null pointer") + null18: + t.8 = [t.7] + t.8 = Lt(3 t.8) + if t.8 goto :bounds17 + Error("array index out of bounds") + bounds17: + t.8 = MulS(3 4) + t.8 = Add(t.8 t.7) + [t.8+4] = 18 + t.9 = [this+4] + if t.9 goto :null19 + Error("null pointer") + null19: + t.10 = [t.9] + t.10 = Lt(4 t.10) + if t.10 goto :bounds18 + Error("array index out of bounds") + bounds18: + t.10 = MulS(4 4) + t.10 = Add(t.10 t.9) + [t.10+4] = 2 + t.11 = [this+4] + if t.11 goto :null20 + Error("null pointer") + null20: + t.12 = [t.11] + t.12 = Lt(5 t.12) + if t.12 goto :bounds19 + Error("array index out of bounds") + bounds19: + t.12 = MulS(5 4) + t.12 = Add(t.12 t.11) + [t.12+4] = 11 + t.13 = [this+4] + if t.13 goto :null21 + Error("null pointer") + null21: + t.14 = [t.13] + t.14 = Lt(6 t.14) + if t.14 goto :bounds20 + Error("array index out of bounds") + bounds20: + t.14 = MulS(6 4) + t.14 = Add(t.14 t.13) + [t.14+4] = 6 + t.15 = [this+4] + if t.15 goto :null22 + Error("null pointer") + null22: + t.16 = [t.15] + t.16 = Lt(7 t.16) + if t.16 goto :bounds21 + Error("array index out of bounds") + bounds21: + t.16 = MulS(7 4) + t.16 = Add(t.16 t.15) + [t.16+4] = 9 + t.17 = [this+4] + if t.17 goto :null23 + Error("null pointer") + null23: + t.18 = [t.17] + t.18 = Lt(8 t.18) + if t.18 goto :bounds22 + Error("array index out of bounds") + bounds22: + t.18 = MulS(8 4) + t.18 = Add(t.18 t.17) + [t.18+4] = 19 + t.19 = [this+4] + if t.19 goto :null24 + Error("null pointer") + null24: + t.20 = [t.19] + t.20 = Lt(9 t.20) + if t.20 goto :bounds23 + Error("array index out of bounds") + bounds23: + t.20 = MulS(9 4) + t.20 = Add(t.20 t.19) + [t.20+4] = 5 + ret 0 + +func AllocArray(size) + bytes = MulS(size 4) + bytes = Add(bytes 4) + v = HeapAllocZ(bytes) + [v] = size + ret v |