LEFT | RIGHT |
(no file at all) | |
| 1 // compile |
| 2 |
| 3 // Copyright 2012 The Go Authors. All rights reserved. |
| 4 // Use of this source code is governed by a BSD-style |
| 5 // license that can be found in the LICENSE file. |
| 6 |
| 7 // Various tests for expressions with high complexity. |
| 8 |
| 9 package main |
| 10 |
| 11 // Concatenate 16 4-bit integers into a 64-bit number. |
| 12 func concat(s *[16]byte) uint64 { |
| 13 r := (((((((((((((((uint64(s[0])<<4| |
| 14 uint64(s[1]))<<4| |
| 15 uint64(s[2]))<<4| |
| 16 uint64(s[3]))<<4| |
| 17 uint64(s[4]))<<4| |
| 18 uint64(s[5]))<<4| |
| 19 uint64(s[6]))<<4| |
| 20 uint64(s[7]))<<4| |
| 21 uint64(s[8]))<<4| |
| 22 uint64(s[9]))<<4| |
| 23 uint64(s[10]))<<4| |
| 24 uint64(s[11]))<<4| |
| 25 uint64(s[12]))<<4| |
| 26 uint64(s[13]))<<4| |
| 27 uint64(s[14]))<<4 | |
| 28 uint64(s[15])) |
| 29 return r |
| 30 } |
| 31 |
| 32 // Compute the determinant of a 4x4-matrix by the sum |
| 33 // over all index permutations. |
| 34 func determinant(m [4][4]float64) float64 { |
| 35 return m[0][0]*m[1][1]*m[2][2]*m[3][3] - |
| 36 m[0][0]*m[1][1]*m[2][3]*m[3][2] - |
| 37 m[0][0]*m[1][2]*m[2][1]*m[3][3] + |
| 38 m[0][0]*m[1][2]*m[2][3]*m[3][1] + |
| 39 m[0][0]*m[1][3]*m[2][1]*m[3][2] - |
| 40 m[0][0]*m[1][3]*m[2][2]*m[3][1] - |
| 41 m[0][1]*m[1][0]*m[2][2]*m[3][3] + |
| 42 m[0][1]*m[1][0]*m[2][3]*m[3][2] + |
| 43 m[0][1]*m[1][2]*m[2][0]*m[3][3] - |
| 44 m[0][1]*m[1][2]*m[2][3]*m[3][0] - |
| 45 m[0][1]*m[1][3]*m[2][0]*m[3][2] + |
| 46 m[0][1]*m[1][3]*m[2][2]*m[3][0] + |
| 47 m[0][2]*m[1][0]*m[2][1]*m[3][3] - |
| 48 m[0][2]*m[1][0]*m[2][3]*m[3][1] - |
| 49 m[0][2]*m[1][1]*m[2][0]*m[3][3] + |
| 50 m[0][2]*m[1][1]*m[2][3]*m[3][0] + |
| 51 m[0][2]*m[1][3]*m[2][0]*m[3][1] - |
| 52 m[0][2]*m[1][3]*m[2][1]*m[3][0] - |
| 53 m[0][3]*m[1][0]*m[2][1]*m[3][2] + |
| 54 m[0][3]*m[1][0]*m[2][2]*m[3][1] + |
| 55 m[0][3]*m[1][1]*m[2][0]*m[3][2] - |
| 56 m[0][3]*m[1][1]*m[2][2]*m[3][0] - |
| 57 m[0][3]*m[1][2]*m[2][0]*m[3][1] + |
| 58 m[0][3]*m[1][2]*m[2][1]*m[3][0] |
| 59 } |
| 60 |
| 61 // A right-leaning tree of byte multiplications. |
| 62 func righttree(a, b, c, d uint8) uint8 { |
| 63 return a * (b * (c * (d * |
| 64 (a * (b * (c * (d * |
| 65 (a * (b * (c * (d * |
| 66 (a * (b * (c * (d * |
| 67 (a * (b * (c * (d * |
| 68 a * (b * (c * d)))))))))))))))))
)))) |
| 69 |
| 70 } |
| 71 |
| 72 // A left-leaning tree of byte multiplications. |
| 73 func lefttree(a, b, c, d uint8) uint8 { |
| 74 return ((((((((((((((((((a * b) * c) * d * |
| 75 a) * b) * c) * d * |
| 76 a) * b) * c) * d * |
| 77 a) * b) * c) * d * |
| 78 a) * b) * c) * d * |
| 79 a) * b) * c) * d) |
| 80 } |
| 81 |
| 82 type T struct { |
| 83 Next I |
| 84 } |
| 85 |
| 86 type I interface{} |
| 87 |
| 88 // A chains of type assertions. |
| 89 func ChainT(t *T) *T { |
| 90 return t. |
| 91 Next.(*T). |
| 92 Next.(*T). |
| 93 Next.(*T). |
| 94 Next.(*T). |
| 95 Next.(*T). |
| 96 Next.(*T). |
| 97 Next.(*T). |
| 98 Next.(*T). |
| 99 Next.(*T). |
| 100 Next.(*T). |
| 101 Next.(*T). |
| 102 Next.(*T). |
| 103 Next.(*T). |
| 104 Next.(*T). |
| 105 Next.(*T). |
| 106 Next.(*T). |
| 107 Next.(*T). |
| 108 Next.(*T). |
| 109 Next.(*T). |
| 110 Next.(*T) |
| 111 } |
| 112 |
| 113 type U struct { |
| 114 Children []J |
| 115 } |
| 116 |
| 117 func (u *U) Child(n int) J { return u.Children[n] } |
| 118 |
| 119 type J interface { |
| 120 Child(n int) J |
| 121 } |
| 122 |
| 123 func ChainUAssert(u *U) *U { |
| 124 return u.Child(0).(*U). |
| 125 Child(0).(*U). |
| 126 Child(0).(*U). |
| 127 Child(0).(*U). |
| 128 Child(0).(*U). |
| 129 Child(0).(*U). |
| 130 Child(0).(*U). |
| 131 Child(0).(*U). |
| 132 Child(0).(*U). |
| 133 Child(0).(*U). |
| 134 Child(0).(*U). |
| 135 Child(0).(*U). |
| 136 Child(0).(*U). |
| 137 Child(0).(*U). |
| 138 Child(0).(*U). |
| 139 Child(0).(*U). |
| 140 Child(0).(*U). |
| 141 Child(0).(*U). |
| 142 Child(0).(*U). |
| 143 Child(0).(*U). |
| 144 Child(0).(*U). |
| 145 Child(0).(*U) |
| 146 } |
| 147 |
| 148 func ChainUNoAssert(u *U) *U { |
| 149 return u.Child(0). |
| 150 Child(0). |
| 151 Child(0). |
| 152 Child(0). |
| 153 Child(0). |
| 154 Child(0). |
| 155 Child(0). |
| 156 Child(0). |
| 157 Child(0). |
| 158 Child(0). |
| 159 Child(0). |
| 160 Child(0). |
| 161 Child(0). |
| 162 Child(0). |
| 163 Child(0). |
| 164 Child(0). |
| 165 Child(0). |
| 166 Child(0). |
| 167 Child(0). |
| 168 Child(0). |
| 169 Child(0). |
| 170 Child(0).(*U) |
| 171 } |
LEFT | RIGHT |