1
2
3 package main
4
5 import "testing"
6
7 type utd64 struct {
8 a, b uint64
9 add, sub, mul, div, mod uint64
10 }
11 type itd64 struct {
12 a, b int64
13 add, sub, mul, div, mod int64
14 }
15 type utd32 struct {
16 a, b uint32
17 add, sub, mul, div, mod uint32
18 }
19 type itd32 struct {
20 a, b int32
21 add, sub, mul, div, mod int32
22 }
23 type utd16 struct {
24 a, b uint16
25 add, sub, mul, div, mod uint16
26 }
27 type itd16 struct {
28 a, b int16
29 add, sub, mul, div, mod int16
30 }
31 type utd8 struct {
32 a, b uint8
33 add, sub, mul, div, mod uint8
34 }
35 type itd8 struct {
36 a, b int8
37 add, sub, mul, div, mod int8
38 }
39
40
41 func add_uint64_ssa(a, b uint64) uint64 {
42 return a + b
43 }
44
45
46 func sub_uint64_ssa(a, b uint64) uint64 {
47 return a - b
48 }
49
50
51 func div_uint64_ssa(a, b uint64) uint64 {
52 return a / b
53 }
54
55
56 func mod_uint64_ssa(a, b uint64) uint64 {
57 return a % b
58 }
59
60
61 func mul_uint64_ssa(a, b uint64) uint64 {
62 return a * b
63 }
64
65
66 func add_int64_ssa(a, b int64) int64 {
67 return a + b
68 }
69
70
71 func sub_int64_ssa(a, b int64) int64 {
72 return a - b
73 }
74
75
76 func div_int64_ssa(a, b int64) int64 {
77 return a / b
78 }
79
80
81 func mod_int64_ssa(a, b int64) int64 {
82 return a % b
83 }
84
85
86 func mul_int64_ssa(a, b int64) int64 {
87 return a * b
88 }
89
90
91 func add_uint32_ssa(a, b uint32) uint32 {
92 return a + b
93 }
94
95
96 func sub_uint32_ssa(a, b uint32) uint32 {
97 return a - b
98 }
99
100
101 func div_uint32_ssa(a, b uint32) uint32 {
102 return a / b
103 }
104
105
106 func mod_uint32_ssa(a, b uint32) uint32 {
107 return a % b
108 }
109
110
111 func mul_uint32_ssa(a, b uint32) uint32 {
112 return a * b
113 }
114
115
116 func add_int32_ssa(a, b int32) int32 {
117 return a + b
118 }
119
120
121 func sub_int32_ssa(a, b int32) int32 {
122 return a - b
123 }
124
125
126 func div_int32_ssa(a, b int32) int32 {
127 return a / b
128 }
129
130
131 func mod_int32_ssa(a, b int32) int32 {
132 return a % b
133 }
134
135
136 func mul_int32_ssa(a, b int32) int32 {
137 return a * b
138 }
139
140
141 func add_uint16_ssa(a, b uint16) uint16 {
142 return a + b
143 }
144
145
146 func sub_uint16_ssa(a, b uint16) uint16 {
147 return a - b
148 }
149
150
151 func div_uint16_ssa(a, b uint16) uint16 {
152 return a / b
153 }
154
155
156 func mod_uint16_ssa(a, b uint16) uint16 {
157 return a % b
158 }
159
160
161 func mul_uint16_ssa(a, b uint16) uint16 {
162 return a * b
163 }
164
165
166 func add_int16_ssa(a, b int16) int16 {
167 return a + b
168 }
169
170
171 func sub_int16_ssa(a, b int16) int16 {
172 return a - b
173 }
174
175
176 func div_int16_ssa(a, b int16) int16 {
177 return a / b
178 }
179
180
181 func mod_int16_ssa(a, b int16) int16 {
182 return a % b
183 }
184
185
186 func mul_int16_ssa(a, b int16) int16 {
187 return a * b
188 }
189
190
191 func add_uint8_ssa(a, b uint8) uint8 {
192 return a + b
193 }
194
195
196 func sub_uint8_ssa(a, b uint8) uint8 {
197 return a - b
198 }
199
200
201 func div_uint8_ssa(a, b uint8) uint8 {
202 return a / b
203 }
204
205
206 func mod_uint8_ssa(a, b uint8) uint8 {
207 return a % b
208 }
209
210
211 func mul_uint8_ssa(a, b uint8) uint8 {
212 return a * b
213 }
214
215
216 func add_int8_ssa(a, b int8) int8 {
217 return a + b
218 }
219
220
221 func sub_int8_ssa(a, b int8) int8 {
222 return a - b
223 }
224
225
226 func div_int8_ssa(a, b int8) int8 {
227 return a / b
228 }
229
230
231 func mod_int8_ssa(a, b int8) int8 {
232 return a % b
233 }
234
235
236 func mul_int8_ssa(a, b int8) int8 {
237 return a * b
238 }
239
240 var uint64_data []utd64 = []utd64{utd64{a: 0, b: 0, add: 0, sub: 0, mul: 0},
241 utd64{a: 0, b: 1, add: 1, sub: 18446744073709551615, mul: 0, div: 0, mod: 0},
242 utd64{a: 0, b: 4294967296, add: 4294967296, sub: 18446744069414584320, mul: 0, div: 0, mod: 0},
243 utd64{a: 0, b: 18446744073709551615, add: 18446744073709551615, sub: 1, mul: 0, div: 0, mod: 0},
244 utd64{a: 1, b: 0, add: 1, sub: 1, mul: 0},
245 utd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
246 utd64{a: 1, b: 4294967296, add: 4294967297, sub: 18446744069414584321, mul: 4294967296, div: 0, mod: 1},
247 utd64{a: 1, b: 18446744073709551615, add: 0, sub: 2, mul: 18446744073709551615, div: 0, mod: 1},
248 utd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0},
249 utd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0},
250 utd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0},
251 utd64{a: 4294967296, b: 18446744073709551615, add: 4294967295, sub: 4294967297, mul: 18446744069414584320, div: 0, mod: 4294967296},
252 utd64{a: 18446744073709551615, b: 0, add: 18446744073709551615, sub: 18446744073709551615, mul: 0},
253 utd64{a: 18446744073709551615, b: 1, add: 0, sub: 18446744073709551614, mul: 18446744073709551615, div: 18446744073709551615, mod: 0},
254 utd64{a: 18446744073709551615, b: 4294967296, add: 4294967295, sub: 18446744069414584319, mul: 18446744069414584320, div: 4294967295, mod: 4294967295},
255 utd64{a: 18446744073709551615, b: 18446744073709551615, add: 18446744073709551614, sub: 0, mul: 1, div: 1, mod: 0},
256 }
257 var int64_data []itd64 = []itd64{itd64{a: -9223372036854775808, b: -9223372036854775808, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
258 itd64{a: -9223372036854775808, b: -9223372036854775807, add: 1, sub: -1, mul: -9223372036854775808, div: 1, mod: -1},
259 itd64{a: -9223372036854775808, b: -4294967296, add: 9223372032559808512, sub: -9223372032559808512, mul: 0, div: 2147483648, mod: 0},
260 itd64{a: -9223372036854775808, b: -1, add: 9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0},
261 itd64{a: -9223372036854775808, b: 0, add: -9223372036854775808, sub: -9223372036854775808, mul: 0},
262 itd64{a: -9223372036854775808, b: 1, add: -9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: -9223372036854775808, mod: 0},
263 itd64{a: -9223372036854775808, b: 4294967296, add: -9223372032559808512, sub: 9223372032559808512, mul: 0, div: -2147483648, mod: 0},
264 itd64{a: -9223372036854775808, b: 9223372036854775806, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
265 itd64{a: -9223372036854775808, b: 9223372036854775807, add: -1, sub: 1, mul: -9223372036854775808, div: -1, mod: -1},
266 itd64{a: -9223372036854775807, b: -9223372036854775808, add: 1, sub: 1, mul: -9223372036854775808, div: 0, mod: -9223372036854775807},
267 itd64{a: -9223372036854775807, b: -9223372036854775807, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
268 itd64{a: -9223372036854775807, b: -4294967296, add: 9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 2147483647, mod: -4294967295},
269 itd64{a: -9223372036854775807, b: -1, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0},
270 itd64{a: -9223372036854775807, b: 0, add: -9223372036854775807, sub: -9223372036854775807, mul: 0},
271 itd64{a: -9223372036854775807, b: 1, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0},
272 itd64{a: -9223372036854775807, b: 4294967296, add: -9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: -2147483647, mod: -4294967295},
273 itd64{a: -9223372036854775807, b: 9223372036854775806, add: -1, sub: 3, mul: 9223372036854775806, div: -1, mod: -1},
274 itd64{a: -9223372036854775807, b: 9223372036854775807, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
275 itd64{a: -4294967296, b: -9223372036854775808, add: 9223372032559808512, sub: 9223372032559808512, mul: 0, div: 0, mod: -4294967296},
276 itd64{a: -4294967296, b: -9223372036854775807, add: 9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 0, mod: -4294967296},
277 itd64{a: -4294967296, b: -4294967296, add: -8589934592, sub: 0, mul: 0, div: 1, mod: 0},
278 itd64{a: -4294967296, b: -1, add: -4294967297, sub: -4294967295, mul: 4294967296, div: 4294967296, mod: 0},
279 itd64{a: -4294967296, b: 0, add: -4294967296, sub: -4294967296, mul: 0},
280 itd64{a: -4294967296, b: 1, add: -4294967295, sub: -4294967297, mul: -4294967296, div: -4294967296, mod: 0},
281 itd64{a: -4294967296, b: 4294967296, add: 0, sub: -8589934592, mul: 0, div: -1, mod: 0},
282 itd64{a: -4294967296, b: 9223372036854775806, add: 9223372032559808510, sub: 9223372032559808514, mul: 8589934592, div: 0, mod: -4294967296},
283 itd64{a: -4294967296, b: 9223372036854775807, add: 9223372032559808511, sub: 9223372032559808513, mul: 4294967296, div: 0, mod: -4294967296},
284 itd64{a: -1, b: -9223372036854775808, add: 9223372036854775807, sub: 9223372036854775807, mul: -9223372036854775808, div: 0, mod: -1},
285 itd64{a: -1, b: -9223372036854775807, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 0, mod: -1},
286 itd64{a: -1, b: -4294967296, add: -4294967297, sub: 4294967295, mul: 4294967296, div: 0, mod: -1},
287 itd64{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
288 itd64{a: -1, b: 0, add: -1, sub: -1, mul: 0},
289 itd64{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
290 itd64{a: -1, b: 4294967296, add: 4294967295, sub: -4294967297, mul: -4294967296, div: 0, mod: -1},
291 itd64{a: -1, b: 9223372036854775806, add: 9223372036854775805, sub: -9223372036854775807, mul: -9223372036854775806, div: 0, mod: -1},
292 itd64{a: -1, b: 9223372036854775807, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: -1},
293 itd64{a: 0, b: -9223372036854775808, add: -9223372036854775808, sub: -9223372036854775808, mul: 0, div: 0, mod: 0},
294 itd64{a: 0, b: -9223372036854775807, add: -9223372036854775807, sub: 9223372036854775807, mul: 0, div: 0, mod: 0},
295 itd64{a: 0, b: -4294967296, add: -4294967296, sub: 4294967296, mul: 0, div: 0, mod: 0},
296 itd64{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
297 itd64{a: 0, b: 0, add: 0, sub: 0, mul: 0},
298 itd64{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
299 itd64{a: 0, b: 4294967296, add: 4294967296, sub: -4294967296, mul: 0, div: 0, mod: 0},
300 itd64{a: 0, b: 9223372036854775806, add: 9223372036854775806, sub: -9223372036854775806, mul: 0, div: 0, mod: 0},
301 itd64{a: 0, b: 9223372036854775807, add: 9223372036854775807, sub: -9223372036854775807, mul: 0, div: 0, mod: 0},
302 itd64{a: 1, b: -9223372036854775808, add: -9223372036854775807, sub: -9223372036854775807, mul: -9223372036854775808, div: 0, mod: 1},
303 itd64{a: 1, b: -9223372036854775807, add: -9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: 0, mod: 1},
304 itd64{a: 1, b: -4294967296, add: -4294967295, sub: 4294967297, mul: -4294967296, div: 0, mod: 1},
305 itd64{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
306 itd64{a: 1, b: 0, add: 1, sub: 1, mul: 0},
307 itd64{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
308 itd64{a: 1, b: 4294967296, add: 4294967297, sub: -4294967295, mul: 4294967296, div: 0, mod: 1},
309 itd64{a: 1, b: 9223372036854775806, add: 9223372036854775807, sub: -9223372036854775805, mul: 9223372036854775806, div: 0, mod: 1},
310 itd64{a: 1, b: 9223372036854775807, add: -9223372036854775808, sub: -9223372036854775806, mul: 9223372036854775807, div: 0, mod: 1},
311 itd64{a: 4294967296, b: -9223372036854775808, add: -9223372032559808512, sub: -9223372032559808512, mul: 0, div: 0, mod: 4294967296},
312 itd64{a: 4294967296, b: -9223372036854775807, add: -9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: 0, mod: 4294967296},
313 itd64{a: 4294967296, b: -4294967296, add: 0, sub: 8589934592, mul: 0, div: -1, mod: 0},
314 itd64{a: 4294967296, b: -1, add: 4294967295, sub: 4294967297, mul: -4294967296, div: -4294967296, mod: 0},
315 itd64{a: 4294967296, b: 0, add: 4294967296, sub: 4294967296, mul: 0},
316 itd64{a: 4294967296, b: 1, add: 4294967297, sub: 4294967295, mul: 4294967296, div: 4294967296, mod: 0},
317 itd64{a: 4294967296, b: 4294967296, add: 8589934592, sub: 0, mul: 0, div: 1, mod: 0},
318 itd64{a: 4294967296, b: 9223372036854775806, add: -9223372032559808514, sub: -9223372032559808510, mul: -8589934592, div: 0, mod: 4294967296},
319 itd64{a: 4294967296, b: 9223372036854775807, add: -9223372032559808513, sub: -9223372032559808511, mul: -4294967296, div: 0, mod: 4294967296},
320 itd64{a: 9223372036854775806, b: -9223372036854775808, add: -2, sub: -2, mul: 0, div: 0, mod: 9223372036854775806},
321 itd64{a: 9223372036854775806, b: -9223372036854775807, add: -1, sub: -3, mul: 9223372036854775806, div: 0, mod: 9223372036854775806},
322 itd64{a: 9223372036854775806, b: -4294967296, add: 9223372032559808510, sub: -9223372032559808514, mul: 8589934592, div: -2147483647, mod: 4294967294},
323 itd64{a: 9223372036854775806, b: -1, add: 9223372036854775805, sub: 9223372036854775807, mul: -9223372036854775806, div: -9223372036854775806, mod: 0},
324 itd64{a: 9223372036854775806, b: 0, add: 9223372036854775806, sub: 9223372036854775806, mul: 0},
325 itd64{a: 9223372036854775806, b: 1, add: 9223372036854775807, sub: 9223372036854775805, mul: 9223372036854775806, div: 9223372036854775806, mod: 0},
326 itd64{a: 9223372036854775806, b: 4294967296, add: -9223372032559808514, sub: 9223372032559808510, mul: -8589934592, div: 2147483647, mod: 4294967294},
327 itd64{a: 9223372036854775806, b: 9223372036854775806, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
328 itd64{a: 9223372036854775806, b: 9223372036854775807, add: -3, sub: -1, mul: -9223372036854775806, div: 0, mod: 9223372036854775806},
329 itd64{a: 9223372036854775807, b: -9223372036854775808, add: -1, sub: -1, mul: -9223372036854775808, div: 0, mod: 9223372036854775807},
330 itd64{a: 9223372036854775807, b: -9223372036854775807, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
331 itd64{a: 9223372036854775807, b: -4294967296, add: 9223372032559808511, sub: -9223372032559808513, mul: 4294967296, div: -2147483647, mod: 4294967295},
332 itd64{a: 9223372036854775807, b: -1, add: 9223372036854775806, sub: -9223372036854775808, mul: -9223372036854775807, div: -9223372036854775807, mod: 0},
333 itd64{a: 9223372036854775807, b: 0, add: 9223372036854775807, sub: 9223372036854775807, mul: 0},
334 itd64{a: 9223372036854775807, b: 1, add: -9223372036854775808, sub: 9223372036854775806, mul: 9223372036854775807, div: 9223372036854775807, mod: 0},
335 itd64{a: 9223372036854775807, b: 4294967296, add: -9223372032559808513, sub: 9223372032559808511, mul: -4294967296, div: 2147483647, mod: 4294967295},
336 itd64{a: 9223372036854775807, b: 9223372036854775806, add: -3, sub: 1, mul: -9223372036854775806, div: 1, mod: 1},
337 itd64{a: 9223372036854775807, b: 9223372036854775807, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
338 }
339 var uint32_data []utd32 = []utd32{utd32{a: 0, b: 0, add: 0, sub: 0, mul: 0},
340 utd32{a: 0, b: 1, add: 1, sub: 4294967295, mul: 0, div: 0, mod: 0},
341 utd32{a: 0, b: 4294967295, add: 4294967295, sub: 1, mul: 0, div: 0, mod: 0},
342 utd32{a: 1, b: 0, add: 1, sub: 1, mul: 0},
343 utd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
344 utd32{a: 1, b: 4294967295, add: 0, sub: 2, mul: 4294967295, div: 0, mod: 1},
345 utd32{a: 4294967295, b: 0, add: 4294967295, sub: 4294967295, mul: 0},
346 utd32{a: 4294967295, b: 1, add: 0, sub: 4294967294, mul: 4294967295, div: 4294967295, mod: 0},
347 utd32{a: 4294967295, b: 4294967295, add: 4294967294, sub: 0, mul: 1, div: 1, mod: 0},
348 }
349 var int32_data []itd32 = []itd32{itd32{a: -2147483648, b: -2147483648, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
350 itd32{a: -2147483648, b: -2147483647, add: 1, sub: -1, mul: -2147483648, div: 1, mod: -1},
351 itd32{a: -2147483648, b: -1, add: 2147483647, sub: -2147483647, mul: -2147483648, div: -2147483648, mod: 0},
352 itd32{a: -2147483648, b: 0, add: -2147483648, sub: -2147483648, mul: 0},
353 itd32{a: -2147483648, b: 1, add: -2147483647, sub: 2147483647, mul: -2147483648, div: -2147483648, mod: 0},
354 itd32{a: -2147483648, b: 2147483647, add: -1, sub: 1, mul: -2147483648, div: -1, mod: -1},
355 itd32{a: -2147483647, b: -2147483648, add: 1, sub: 1, mul: -2147483648, div: 0, mod: -2147483647},
356 itd32{a: -2147483647, b: -2147483647, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
357 itd32{a: -2147483647, b: -1, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 2147483647, mod: 0},
358 itd32{a: -2147483647, b: 0, add: -2147483647, sub: -2147483647, mul: 0},
359 itd32{a: -2147483647, b: 1, add: -2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0},
360 itd32{a: -2147483647, b: 2147483647, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
361 itd32{a: -1, b: -2147483648, add: 2147483647, sub: 2147483647, mul: -2147483648, div: 0, mod: -1},
362 itd32{a: -1, b: -2147483647, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 0, mod: -1},
363 itd32{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
364 itd32{a: -1, b: 0, add: -1, sub: -1, mul: 0},
365 itd32{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
366 itd32{a: -1, b: 2147483647, add: 2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: -1},
367 itd32{a: 0, b: -2147483648, add: -2147483648, sub: -2147483648, mul: 0, div: 0, mod: 0},
368 itd32{a: 0, b: -2147483647, add: -2147483647, sub: 2147483647, mul: 0, div: 0, mod: 0},
369 itd32{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
370 itd32{a: 0, b: 0, add: 0, sub: 0, mul: 0},
371 itd32{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
372 itd32{a: 0, b: 2147483647, add: 2147483647, sub: -2147483647, mul: 0, div: 0, mod: 0},
373 itd32{a: 1, b: -2147483648, add: -2147483647, sub: -2147483647, mul: -2147483648, div: 0, mod: 1},
374 itd32{a: 1, b: -2147483647, add: -2147483646, sub: -2147483648, mul: -2147483647, div: 0, mod: 1},
375 itd32{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
376 itd32{a: 1, b: 0, add: 1, sub: 1, mul: 0},
377 itd32{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
378 itd32{a: 1, b: 2147483647, add: -2147483648, sub: -2147483646, mul: 2147483647, div: 0, mod: 1},
379 itd32{a: 2147483647, b: -2147483648, add: -1, sub: -1, mul: -2147483648, div: 0, mod: 2147483647},
380 itd32{a: 2147483647, b: -2147483647, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
381 itd32{a: 2147483647, b: -1, add: 2147483646, sub: -2147483648, mul: -2147483647, div: -2147483647, mod: 0},
382 itd32{a: 2147483647, b: 0, add: 2147483647, sub: 2147483647, mul: 0},
383 itd32{a: 2147483647, b: 1, add: -2147483648, sub: 2147483646, mul: 2147483647, div: 2147483647, mod: 0},
384 itd32{a: 2147483647, b: 2147483647, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
385 }
386 var uint16_data []utd16 = []utd16{utd16{a: 0, b: 0, add: 0, sub: 0, mul: 0},
387 utd16{a: 0, b: 1, add: 1, sub: 65535, mul: 0, div: 0, mod: 0},
388 utd16{a: 0, b: 65535, add: 65535, sub: 1, mul: 0, div: 0, mod: 0},
389 utd16{a: 1, b: 0, add: 1, sub: 1, mul: 0},
390 utd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
391 utd16{a: 1, b: 65535, add: 0, sub: 2, mul: 65535, div: 0, mod: 1},
392 utd16{a: 65535, b: 0, add: 65535, sub: 65535, mul: 0},
393 utd16{a: 65535, b: 1, add: 0, sub: 65534, mul: 65535, div: 65535, mod: 0},
394 utd16{a: 65535, b: 65535, add: 65534, sub: 0, mul: 1, div: 1, mod: 0},
395 }
396 var int16_data []itd16 = []itd16{itd16{a: -32768, b: -32768, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
397 itd16{a: -32768, b: -32767, add: 1, sub: -1, mul: -32768, div: 1, mod: -1},
398 itd16{a: -32768, b: -1, add: 32767, sub: -32767, mul: -32768, div: -32768, mod: 0},
399 itd16{a: -32768, b: 0, add: -32768, sub: -32768, mul: 0},
400 itd16{a: -32768, b: 1, add: -32767, sub: 32767, mul: -32768, div: -32768, mod: 0},
401 itd16{a: -32768, b: 32766, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
402 itd16{a: -32768, b: 32767, add: -1, sub: 1, mul: -32768, div: -1, mod: -1},
403 itd16{a: -32767, b: -32768, add: 1, sub: 1, mul: -32768, div: 0, mod: -32767},
404 itd16{a: -32767, b: -32767, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
405 itd16{a: -32767, b: -1, add: -32768, sub: -32766, mul: 32767, div: 32767, mod: 0},
406 itd16{a: -32767, b: 0, add: -32767, sub: -32767, mul: 0},
407 itd16{a: -32767, b: 1, add: -32766, sub: -32768, mul: -32767, div: -32767, mod: 0},
408 itd16{a: -32767, b: 32766, add: -1, sub: 3, mul: 32766, div: -1, mod: -1},
409 itd16{a: -32767, b: 32767, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
410 itd16{a: -1, b: -32768, add: 32767, sub: 32767, mul: -32768, div: 0, mod: -1},
411 itd16{a: -1, b: -32767, add: -32768, sub: 32766, mul: 32767, div: 0, mod: -1},
412 itd16{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
413 itd16{a: -1, b: 0, add: -1, sub: -1, mul: 0},
414 itd16{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
415 itd16{a: -1, b: 32766, add: 32765, sub: -32767, mul: -32766, div: 0, mod: -1},
416 itd16{a: -1, b: 32767, add: 32766, sub: -32768, mul: -32767, div: 0, mod: -1},
417 itd16{a: 0, b: -32768, add: -32768, sub: -32768, mul: 0, div: 0, mod: 0},
418 itd16{a: 0, b: -32767, add: -32767, sub: 32767, mul: 0, div: 0, mod: 0},
419 itd16{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
420 itd16{a: 0, b: 0, add: 0, sub: 0, mul: 0},
421 itd16{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
422 itd16{a: 0, b: 32766, add: 32766, sub: -32766, mul: 0, div: 0, mod: 0},
423 itd16{a: 0, b: 32767, add: 32767, sub: -32767, mul: 0, div: 0, mod: 0},
424 itd16{a: 1, b: -32768, add: -32767, sub: -32767, mul: -32768, div: 0, mod: 1},
425 itd16{a: 1, b: -32767, add: -32766, sub: -32768, mul: -32767, div: 0, mod: 1},
426 itd16{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
427 itd16{a: 1, b: 0, add: 1, sub: 1, mul: 0},
428 itd16{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
429 itd16{a: 1, b: 32766, add: 32767, sub: -32765, mul: 32766, div: 0, mod: 1},
430 itd16{a: 1, b: 32767, add: -32768, sub: -32766, mul: 32767, div: 0, mod: 1},
431 itd16{a: 32766, b: -32768, add: -2, sub: -2, mul: 0, div: 0, mod: 32766},
432 itd16{a: 32766, b: -32767, add: -1, sub: -3, mul: 32766, div: 0, mod: 32766},
433 itd16{a: 32766, b: -1, add: 32765, sub: 32767, mul: -32766, div: -32766, mod: 0},
434 itd16{a: 32766, b: 0, add: 32766, sub: 32766, mul: 0},
435 itd16{a: 32766, b: 1, add: 32767, sub: 32765, mul: 32766, div: 32766, mod: 0},
436 itd16{a: 32766, b: 32766, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
437 itd16{a: 32766, b: 32767, add: -3, sub: -1, mul: -32766, div: 0, mod: 32766},
438 itd16{a: 32767, b: -32768, add: -1, sub: -1, mul: -32768, div: 0, mod: 32767},
439 itd16{a: 32767, b: -32767, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
440 itd16{a: 32767, b: -1, add: 32766, sub: -32768, mul: -32767, div: -32767, mod: 0},
441 itd16{a: 32767, b: 0, add: 32767, sub: 32767, mul: 0},
442 itd16{a: 32767, b: 1, add: -32768, sub: 32766, mul: 32767, div: 32767, mod: 0},
443 itd16{a: 32767, b: 32766, add: -3, sub: 1, mul: -32766, div: 1, mod: 1},
444 itd16{a: 32767, b: 32767, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
445 }
446 var uint8_data []utd8 = []utd8{utd8{a: 0, b: 0, add: 0, sub: 0, mul: 0},
447 utd8{a: 0, b: 1, add: 1, sub: 255, mul: 0, div: 0, mod: 0},
448 utd8{a: 0, b: 255, add: 255, sub: 1, mul: 0, div: 0, mod: 0},
449 utd8{a: 1, b: 0, add: 1, sub: 1, mul: 0},
450 utd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
451 utd8{a: 1, b: 255, add: 0, sub: 2, mul: 255, div: 0, mod: 1},
452 utd8{a: 255, b: 0, add: 255, sub: 255, mul: 0},
453 utd8{a: 255, b: 1, add: 0, sub: 254, mul: 255, div: 255, mod: 0},
454 utd8{a: 255, b: 255, add: 254, sub: 0, mul: 1, div: 1, mod: 0},
455 }
456 var int8_data []itd8 = []itd8{itd8{a: -128, b: -128, add: 0, sub: 0, mul: 0, div: 1, mod: 0},
457 itd8{a: -128, b: -127, add: 1, sub: -1, mul: -128, div: 1, mod: -1},
458 itd8{a: -128, b: -1, add: 127, sub: -127, mul: -128, div: -128, mod: 0},
459 itd8{a: -128, b: 0, add: -128, sub: -128, mul: 0},
460 itd8{a: -128, b: 1, add: -127, sub: 127, mul: -128, div: -128, mod: 0},
461 itd8{a: -128, b: 126, add: -2, sub: 2, mul: 0, div: -1, mod: -2},
462 itd8{a: -128, b: 127, add: -1, sub: 1, mul: -128, div: -1, mod: -1},
463 itd8{a: -127, b: -128, add: 1, sub: 1, mul: -128, div: 0, mod: -127},
464 itd8{a: -127, b: -127, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
465 itd8{a: -127, b: -1, add: -128, sub: -126, mul: 127, div: 127, mod: 0},
466 itd8{a: -127, b: 0, add: -127, sub: -127, mul: 0},
467 itd8{a: -127, b: 1, add: -126, sub: -128, mul: -127, div: -127, mod: 0},
468 itd8{a: -127, b: 126, add: -1, sub: 3, mul: 126, div: -1, mod: -1},
469 itd8{a: -127, b: 127, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
470 itd8{a: -1, b: -128, add: 127, sub: 127, mul: -128, div: 0, mod: -1},
471 itd8{a: -1, b: -127, add: -128, sub: 126, mul: 127, div: 0, mod: -1},
472 itd8{a: -1, b: -1, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
473 itd8{a: -1, b: 0, add: -1, sub: -1, mul: 0},
474 itd8{a: -1, b: 1, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
475 itd8{a: -1, b: 126, add: 125, sub: -127, mul: -126, div: 0, mod: -1},
476 itd8{a: -1, b: 127, add: 126, sub: -128, mul: -127, div: 0, mod: -1},
477 itd8{a: 0, b: -128, add: -128, sub: -128, mul: 0, div: 0, mod: 0},
478 itd8{a: 0, b: -127, add: -127, sub: 127, mul: 0, div: 0, mod: 0},
479 itd8{a: 0, b: -1, add: -1, sub: 1, mul: 0, div: 0, mod: 0},
480 itd8{a: 0, b: 0, add: 0, sub: 0, mul: 0},
481 itd8{a: 0, b: 1, add: 1, sub: -1, mul: 0, div: 0, mod: 0},
482 itd8{a: 0, b: 126, add: 126, sub: -126, mul: 0, div: 0, mod: 0},
483 itd8{a: 0, b: 127, add: 127, sub: -127, mul: 0, div: 0, mod: 0},
484 itd8{a: 1, b: -128, add: -127, sub: -127, mul: -128, div: 0, mod: 1},
485 itd8{a: 1, b: -127, add: -126, sub: -128, mul: -127, div: 0, mod: 1},
486 itd8{a: 1, b: -1, add: 0, sub: 2, mul: -1, div: -1, mod: 0},
487 itd8{a: 1, b: 0, add: 1, sub: 1, mul: 0},
488 itd8{a: 1, b: 1, add: 2, sub: 0, mul: 1, div: 1, mod: 0},
489 itd8{a: 1, b: 126, add: 127, sub: -125, mul: 126, div: 0, mod: 1},
490 itd8{a: 1, b: 127, add: -128, sub: -126, mul: 127, div: 0, mod: 1},
491 itd8{a: 126, b: -128, add: -2, sub: -2, mul: 0, div: 0, mod: 126},
492 itd8{a: 126, b: -127, add: -1, sub: -3, mul: 126, div: 0, mod: 126},
493 itd8{a: 126, b: -1, add: 125, sub: 127, mul: -126, div: -126, mod: 0},
494 itd8{a: 126, b: 0, add: 126, sub: 126, mul: 0},
495 itd8{a: 126, b: 1, add: 127, sub: 125, mul: 126, div: 126, mod: 0},
496 itd8{a: 126, b: 126, add: -4, sub: 0, mul: 4, div: 1, mod: 0},
497 itd8{a: 126, b: 127, add: -3, sub: -1, mul: -126, div: 0, mod: 126},
498 itd8{a: 127, b: -128, add: -1, sub: -1, mul: -128, div: 0, mod: 127},
499 itd8{a: 127, b: -127, add: 0, sub: -2, mul: -1, div: -1, mod: 0},
500 itd8{a: 127, b: -1, add: 126, sub: -128, mul: -127, div: -127, mod: 0},
501 itd8{a: 127, b: 0, add: 127, sub: 127, mul: 0},
502 itd8{a: 127, b: 1, add: -128, sub: 126, mul: 127, div: 127, mod: 0},
503 itd8{a: 127, b: 126, add: -3, sub: 1, mul: -126, div: 1, mod: 1},
504 itd8{a: 127, b: 127, add: -2, sub: 0, mul: 1, div: 1, mod: 0},
505 }
506
507
508 func TestArithmeticBoundary(t *testing.T) {
509
510 for _, v := range uint64_data {
511 if got := add_uint64_ssa(v.a, v.b); got != v.add {
512 t.Errorf("add_uint64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
513 }
514 if got := sub_uint64_ssa(v.a, v.b); got != v.sub {
515 t.Errorf("sub_uint64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
516 }
517 if v.b != 0 {
518 if got := div_uint64_ssa(v.a, v.b); got != v.div {
519 t.Errorf("div_uint64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
520 }
521
522 }
523 if v.b != 0 {
524 if got := mod_uint64_ssa(v.a, v.b); got != v.mod {
525 t.Errorf("mod_uint64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
526 }
527
528 }
529 if got := mul_uint64_ssa(v.a, v.b); got != v.mul {
530 t.Errorf("mul_uint64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
531 }
532 }
533 for _, v := range int64_data {
534 if got := add_int64_ssa(v.a, v.b); got != v.add {
535 t.Errorf("add_int64 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
536 }
537 if got := sub_int64_ssa(v.a, v.b); got != v.sub {
538 t.Errorf("sub_int64 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
539 }
540 if v.b != 0 {
541 if got := div_int64_ssa(v.a, v.b); got != v.div {
542 t.Errorf("div_int64 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
543 }
544
545 }
546 if v.b != 0 {
547 if got := mod_int64_ssa(v.a, v.b); got != v.mod {
548 t.Errorf("mod_int64 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
549 }
550
551 }
552 if got := mul_int64_ssa(v.a, v.b); got != v.mul {
553 t.Errorf("mul_int64 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
554 }
555 }
556 for _, v := range uint32_data {
557 if got := add_uint32_ssa(v.a, v.b); got != v.add {
558 t.Errorf("add_uint32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
559 }
560 if got := sub_uint32_ssa(v.a, v.b); got != v.sub {
561 t.Errorf("sub_uint32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
562 }
563 if v.b != 0 {
564 if got := div_uint32_ssa(v.a, v.b); got != v.div {
565 t.Errorf("div_uint32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
566 }
567
568 }
569 if v.b != 0 {
570 if got := mod_uint32_ssa(v.a, v.b); got != v.mod {
571 t.Errorf("mod_uint32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
572 }
573
574 }
575 if got := mul_uint32_ssa(v.a, v.b); got != v.mul {
576 t.Errorf("mul_uint32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
577 }
578 }
579 for _, v := range int32_data {
580 if got := add_int32_ssa(v.a, v.b); got != v.add {
581 t.Errorf("add_int32 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
582 }
583 if got := sub_int32_ssa(v.a, v.b); got != v.sub {
584 t.Errorf("sub_int32 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
585 }
586 if v.b != 0 {
587 if got := div_int32_ssa(v.a, v.b); got != v.div {
588 t.Errorf("div_int32 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
589 }
590
591 }
592 if v.b != 0 {
593 if got := mod_int32_ssa(v.a, v.b); got != v.mod {
594 t.Errorf("mod_int32 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
595 }
596
597 }
598 if got := mul_int32_ssa(v.a, v.b); got != v.mul {
599 t.Errorf("mul_int32 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
600 }
601 }
602 for _, v := range uint16_data {
603 if got := add_uint16_ssa(v.a, v.b); got != v.add {
604 t.Errorf("add_uint16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
605 }
606 if got := sub_uint16_ssa(v.a, v.b); got != v.sub {
607 t.Errorf("sub_uint16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
608 }
609 if v.b != 0 {
610 if got := div_uint16_ssa(v.a, v.b); got != v.div {
611 t.Errorf("div_uint16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
612 }
613
614 }
615 if v.b != 0 {
616 if got := mod_uint16_ssa(v.a, v.b); got != v.mod {
617 t.Errorf("mod_uint16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
618 }
619
620 }
621 if got := mul_uint16_ssa(v.a, v.b); got != v.mul {
622 t.Errorf("mul_uint16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
623 }
624 }
625 for _, v := range int16_data {
626 if got := add_int16_ssa(v.a, v.b); got != v.add {
627 t.Errorf("add_int16 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
628 }
629 if got := sub_int16_ssa(v.a, v.b); got != v.sub {
630 t.Errorf("sub_int16 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
631 }
632 if v.b != 0 {
633 if got := div_int16_ssa(v.a, v.b); got != v.div {
634 t.Errorf("div_int16 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
635 }
636
637 }
638 if v.b != 0 {
639 if got := mod_int16_ssa(v.a, v.b); got != v.mod {
640 t.Errorf("mod_int16 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
641 }
642
643 }
644 if got := mul_int16_ssa(v.a, v.b); got != v.mul {
645 t.Errorf("mul_int16 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
646 }
647 }
648 for _, v := range uint8_data {
649 if got := add_uint8_ssa(v.a, v.b); got != v.add {
650 t.Errorf("add_uint8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
651 }
652 if got := sub_uint8_ssa(v.a, v.b); got != v.sub {
653 t.Errorf("sub_uint8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
654 }
655 if v.b != 0 {
656 if got := div_uint8_ssa(v.a, v.b); got != v.div {
657 t.Errorf("div_uint8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
658 }
659
660 }
661 if v.b != 0 {
662 if got := mod_uint8_ssa(v.a, v.b); got != v.mod {
663 t.Errorf("mod_uint8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
664 }
665
666 }
667 if got := mul_uint8_ssa(v.a, v.b); got != v.mul {
668 t.Errorf("mul_uint8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
669 }
670 }
671 for _, v := range int8_data {
672 if got := add_int8_ssa(v.a, v.b); got != v.add {
673 t.Errorf("add_int8 %d+%d = %d, wanted %d\n", v.a, v.b, got, v.add)
674 }
675 if got := sub_int8_ssa(v.a, v.b); got != v.sub {
676 t.Errorf("sub_int8 %d-%d = %d, wanted %d\n", v.a, v.b, got, v.sub)
677 }
678 if v.b != 0 {
679 if got := div_int8_ssa(v.a, v.b); got != v.div {
680 t.Errorf("div_int8 %d/%d = %d, wanted %d\n", v.a, v.b, got, v.div)
681 }
682
683 }
684 if v.b != 0 {
685 if got := mod_int8_ssa(v.a, v.b); got != v.mod {
686 t.Errorf("mod_int8 %d%%%d = %d, wanted %d\n", v.a, v.b, got, v.mod)
687 }
688
689 }
690 if got := mul_int8_ssa(v.a, v.b); got != v.mul {
691 t.Errorf("mul_int8 %d*%d = %d, wanted %d\n", v.a, v.b, got, v.mul)
692 }
693 }
694 }
695
View as plain text