]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/torture.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / torture.go
index dd8ff59a03416db559d375a44ae137e60f569236..197b481e66de03f015fe82b949a77bbf20c6756e 100644 (file)
@@ -58,6 +58,81 @@ func determinant(m [4][4]float64) float64 {
                m[0][3]*m[1][2]*m[2][1]*m[3][0]
 }
 
+// Compute the determinant of a 4x4-matrix by the sum
+// over all index permutations.
+func determinantInt(m [4][4]int) int {
+       return m[0][0]*m[1][1]*m[2][2]*m[3][3] -
+               m[0][0]*m[1][1]*m[2][3]*m[3][2] -
+               m[0][0]*m[1][2]*m[2][1]*m[3][3] +
+               m[0][0]*m[1][2]*m[2][3]*m[3][1] +
+               m[0][0]*m[1][3]*m[2][1]*m[3][2] -
+               m[0][0]*m[1][3]*m[2][2]*m[3][1] -
+               m[0][1]*m[1][0]*m[2][2]*m[3][3] +
+               m[0][1]*m[1][0]*m[2][3]*m[3][2] +
+               m[0][1]*m[1][2]*m[2][0]*m[3][3] -
+               m[0][1]*m[1][2]*m[2][3]*m[3][0] -
+               m[0][1]*m[1][3]*m[2][0]*m[3][2] +
+               m[0][1]*m[1][3]*m[2][2]*m[3][0] +
+               m[0][2]*m[1][0]*m[2][1]*m[3][3] -
+               m[0][2]*m[1][0]*m[2][3]*m[3][1] -
+               m[0][2]*m[1][1]*m[2][0]*m[3][3] +
+               m[0][2]*m[1][1]*m[2][3]*m[3][0] +
+               m[0][2]*m[1][3]*m[2][0]*m[3][1] -
+               m[0][2]*m[1][3]*m[2][1]*m[3][0] -
+               m[0][3]*m[1][0]*m[2][1]*m[3][2] +
+               m[0][3]*m[1][0]*m[2][2]*m[3][1] +
+               m[0][3]*m[1][1]*m[2][0]*m[3][2] -
+               m[0][3]*m[1][1]*m[2][2]*m[3][0] -
+               m[0][3]*m[1][2]*m[2][0]*m[3][1] +
+               m[0][3]*m[1][2]*m[2][1]*m[3][0]
+}
+
+// Compute the determinant of a 4x4-matrix by the sum
+// over all index permutations.
+func determinantByte(m [4][4]byte) byte {
+       return m[0][0]*m[1][1]*m[2][2]*m[3][3] -
+               m[0][0]*m[1][1]*m[2][3]*m[3][2] -
+               m[0][0]*m[1][2]*m[2][1]*m[3][3] +
+               m[0][0]*m[1][2]*m[2][3]*m[3][1] +
+               m[0][0]*m[1][3]*m[2][1]*m[3][2] -
+               m[0][0]*m[1][3]*m[2][2]*m[3][1] -
+               m[0][1]*m[1][0]*m[2][2]*m[3][3] +
+               m[0][1]*m[1][0]*m[2][3]*m[3][2] +
+               m[0][1]*m[1][2]*m[2][0]*m[3][3] -
+               m[0][1]*m[1][2]*m[2][3]*m[3][0] -
+               m[0][1]*m[1][3]*m[2][0]*m[3][2] +
+               m[0][1]*m[1][3]*m[2][2]*m[3][0] +
+               m[0][2]*m[1][0]*m[2][1]*m[3][3] -
+               m[0][2]*m[1][0]*m[2][3]*m[3][1] -
+               m[0][2]*m[1][1]*m[2][0]*m[3][3] +
+               m[0][2]*m[1][1]*m[2][3]*m[3][0] +
+               m[0][2]*m[1][3]*m[2][0]*m[3][1] -
+               m[0][2]*m[1][3]*m[2][1]*m[3][0] -
+               m[0][3]*m[1][0]*m[2][1]*m[3][2] +
+               m[0][3]*m[1][0]*m[2][2]*m[3][1] +
+               m[0][3]*m[1][1]*m[2][0]*m[3][2] -
+               m[0][3]*m[1][1]*m[2][2]*m[3][0] -
+               m[0][3]*m[1][2]*m[2][0]*m[3][1] +
+               m[0][3]*m[1][2]*m[2][1]*m[3][0]
+}
+
+type A []A
+
+// A sequence of constant indexings.
+func IndexChain1(s A) A {
+       return s[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
+}
+
+// A sequence of non-constant indexings.
+func IndexChain2(s A, i int) A {
+       return s[i][i][i][i][i][i][i][i][i][i][i][i][i][i][i][i]
+}
+
+// Another sequence of indexings.
+func IndexChain3(s []int) int {
+       return s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[s[0]]]]]]]]]]]]]]]]]]]]]
+}
+
 // A right-leaning tree of byte multiplications.
 func righttree(a, b, c, d uint8) uint8 {
        return a * (b * (c * (d *
@@ -170,6 +245,73 @@ func ChainUNoAssert(u *U) *U {
                Child(0).(*U)
 }
 
+// Type assertions and slice indexing. See issue 4207.
+func ChainAssertIndex(u *U) J {
+       return u.
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0].(*U).
+               Children[0]
+}
+
+type UArr struct {
+       Children [2]J
+}
+
+func (u *UArr) Child(n int) J { return u.Children[n] }
+
+func ChainAssertArrayIndex(u *UArr) J {
+       return u.
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0].(*UArr).
+               Children[0]
+}
+
+type UArrPtr struct {
+       Children *[2]J
+}
+
+func (u *UArrPtr) Child(n int) J { return u.Children[n] }
+
+func ChainAssertArrayptrIndex(u *UArrPtr) J {
+       return u.
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0].(*UArrPtr).
+               Children[0]
+}
+
 // Chains of divisions. See issue 4201.
 
 func ChainDiv(a, b int) int {
@@ -180,10 +322,10 @@ func ChainDiv(a, b int) int {
 
 func ChainDivRight(a, b int) int {
        return a / (b / (a / (b /
-            (a / (b / (a / (b /
-            (a / (b / (a / (b /
-            (a / (b / (a / (b /
-            (a / (b / (a / b))))))))))))))))))
+               (a / (b / (a / (b /
+                       (a / (b / (a / (b /
+                               (a / (b / (a / (b /
+                                       (a / (b / (a / b))))))))))))))))))
 }
 
 func ChainDivConst(a int) int {
@@ -191,3 +333,14 @@ func ChainDivConst(a int) int {
                17 / 17 / 17 / 17 /
                17 / 17 / 17 / 17
 }
+
+func ChainMulBytes(a, b, c byte) byte {
+       return a*(a*(a*(a*(a*(a*(a*(a*(a*b+c)+c)+c)+c)+c)+c)+c)+c) + c
+}
+
+func ChainCap() {
+       select {
+       case <-make(chan int, cap(make(chan int, cap(make(chan int, cap(make(chan int, cap(make(chan int))))))))):
+       default:
+       }
+}