Source file
test/ken/divconst.go
1
2
3
4
5
6
7
8
9 package main
10
11 import "math/rand"
12
13 const Count = 1e5
14
15 func i64rand() int64 {
16 for {
17 a := int64(rand.Uint32())
18 a = (a << 32) | int64(rand.Uint32())
19 a >>= uint(rand.Intn(64))
20 if -a != a {
21 return a
22 }
23 }
24 return 0
25 }
26
27 func i64test(a, b, c int64) {
28 d := a / c
29 if d != b {
30 println("i64", a, b, c, d)
31 panic("fail")
32 }
33 }
34
35 func i64run() {
36 var a, b int64
37
38 for i := 0; i < Count; i++ {
39 a = i64rand()
40
41 b = a / 1
42 i64test(a, b, 1)
43 b = a / 2
44 i64test(a, b, 2)
45 b = a / 3
46 i64test(a, b, 3)
47 b = a / 4
48 i64test(a, b, 4)
49 b = a / 5
50 i64test(a, b, 5)
51 b = a / 6
52 i64test(a, b, 6)
53 b = a / 7
54 i64test(a, b, 7)
55 b = a / 8
56 i64test(a, b, 8)
57 b = a / 10
58 i64test(a, b, 10)
59 b = a / 16
60 i64test(a, b, 16)
61 b = a / 20
62 i64test(a, b, 20)
63 b = a / 32
64 i64test(a, b, 32)
65 b = a / 60
66 i64test(a, b, 60)
67 b = a / 64
68 i64test(a, b, 64)
69 b = a / 128
70 i64test(a, b, 128)
71 b = a / 256
72 i64test(a, b, 256)
73 b = a / 16384
74 i64test(a, b, 16384)
75
76 b = a / -1
77 i64test(a, b, -1)
78 b = a / -2
79 i64test(a, b, -2)
80 b = a / -3
81 i64test(a, b, -3)
82 b = a / -4
83 i64test(a, b, -4)
84 b = a / -5
85 i64test(a, b, -5)
86 b = a / -6
87 i64test(a, b, -6)
88 b = a / -7
89 i64test(a, b, -7)
90 b = a / -8
91 i64test(a, b, -8)
92 b = a / -10
93 i64test(a, b, -10)
94 b = a / -16
95 i64test(a, b, -16)
96 b = a / -20
97 i64test(a, b, -20)
98 b = a / -32
99 i64test(a, b, -32)
100 b = a / -60
101 i64test(a, b, -60)
102 b = a / -64
103 i64test(a, b, -64)
104 b = a / -128
105 i64test(a, b, -128)
106 b = a / -256
107 i64test(a, b, -256)
108 b = a / -16384
109 i64test(a, b, -16384)
110 }
111 }
112
113 func u64rand() uint64 {
114 a := uint64(rand.Uint32())
115 a = (a << 32) | uint64(rand.Uint32())
116 a >>= uint(rand.Intn(64))
117 return a
118 }
119
120 func u64test(a, b, c uint64) {
121 d := a / c
122 if d != b {
123 println("u64", a, b, c, d)
124 panic("fail")
125 }
126 }
127
128 func u64run() {
129 var a, b uint64
130
131 for i := 0; i < Count; i++ {
132 a = u64rand()
133
134 b = a / 1
135 u64test(a, b, 1)
136 b = a / 2
137 u64test(a, b, 2)
138 b = a / 3
139 u64test(a, b, 3)
140 b = a / 4
141 u64test(a, b, 4)
142 b = a / 5
143 u64test(a, b, 5)
144 b = a / 6
145 u64test(a, b, 6)
146 b = a / 7
147 u64test(a, b, 7)
148 b = a / 8
149 u64test(a, b, 8)
150 b = a / 10
151 u64test(a, b, 10)
152 b = a / 16
153 u64test(a, b, 16)
154 b = a / 20
155 u64test(a, b, 20)
156 b = a / 32
157 u64test(a, b, 32)
158 b = a / 60
159 u64test(a, b, 60)
160 b = a / 64
161 u64test(a, b, 64)
162 b = a / 128
163 u64test(a, b, 128)
164 b = a / 256
165 u64test(a, b, 256)
166 b = a / 16384
167 u64test(a, b, 16384)
168 }
169 }
170
171 func i32rand() int32 {
172 for {
173 a := int32(rand.Uint32())
174 a >>= uint(rand.Intn(32))
175 if -a != a {
176 return a
177 }
178 }
179 return 0
180 }
181
182 func i32test(a, b, c int32) {
183 d := a / c
184 if d != b {
185 println("i32", a, b, c, d)
186 panic("fail")
187 }
188 }
189
190 func i32run() {
191 var a, b int32
192
193 for i := 0; i < Count; i++ {
194 a = i32rand()
195
196 b = a / 1
197 i32test(a, b, 1)
198 b = a / 2
199 i32test(a, b, 2)
200 b = a / 3
201 i32test(a, b, 3)
202 b = a / 4
203 i32test(a, b, 4)
204 b = a / 5
205 i32test(a, b, 5)
206 b = a / 6
207 i32test(a, b, 6)
208 b = a / 7
209 i32test(a, b, 7)
210 b = a / 8
211 i32test(a, b, 8)
212 b = a / 10
213 i32test(a, b, 10)
214 b = a / 16
215 i32test(a, b, 16)
216 b = a / 20
217 i32test(a, b, 20)
218 b = a / 32
219 i32test(a, b, 32)
220 b = a / 60
221 i32test(a, b, 60)
222 b = a / 64
223 i32test(a, b, 64)
224 b = a / 128
225 i32test(a, b, 128)
226 b = a / 256
227 i32test(a, b, 256)
228 b = a / 16384
229 i32test(a, b, 16384)
230
231 b = a / -1
232 i32test(a, b, -1)
233 b = a / -2
234 i32test(a, b, -2)
235 b = a / -3
236 i32test(a, b, -3)
237 b = a / -4
238 i32test(a, b, -4)
239 b = a / -5
240 i32test(a, b, -5)
241 b = a / -6
242 i32test(a, b, -6)
243 b = a / -7
244 i32test(a, b, -7)
245 b = a / -8
246 i32test(a, b, -8)
247 b = a / -10
248 i32test(a, b, -10)
249 b = a / -16
250 i32test(a, b, -16)
251 b = a / -20
252 i32test(a, b, -20)
253 b = a / -32
254 i32test(a, b, -32)
255 b = a / -60
256 i32test(a, b, -60)
257 b = a / -64
258 i32test(a, b, -64)
259 b = a / -128
260 i32test(a, b, -128)
261 b = a / -256
262 i32test(a, b, -256)
263 }
264 }
265
266 func u32rand() uint32 {
267 a := uint32(rand.Uint32())
268 a >>= uint(rand.Intn(32))
269 return a
270 }
271
272 func u32test(a, b, c uint32) {
273 d := a / c
274 if d != b {
275 println("u32", a, b, c, d)
276 panic("fail")
277 }
278 }
279
280 func u32run() {
281 var a, b uint32
282
283 for i := 0; i < Count; i++ {
284 a = u32rand()
285
286 b = a / 1
287 u32test(a, b, 1)
288 b = a / 2
289 u32test(a, b, 2)
290 b = a / 3
291 u32test(a, b, 3)
292 b = a / 4
293 u32test(a, b, 4)
294 b = a / 5
295 u32test(a, b, 5)
296 b = a / 6
297 u32test(a, b, 6)
298 b = a / 7
299 u32test(a, b, 7)
300 b = a / 8
301 u32test(a, b, 8)
302 b = a / 10
303 u32test(a, b, 10)
304 b = a / 16
305 u32test(a, b, 16)
306 b = a / 20
307 u32test(a, b, 20)
308 b = a / 32
309 u32test(a, b, 32)
310 b = a / 60
311 u32test(a, b, 60)
312 b = a / 64
313 u32test(a, b, 64)
314 b = a / 128
315 u32test(a, b, 128)
316 b = a / 256
317 u32test(a, b, 256)
318 b = a / 16384
319 u32test(a, b, 16384)
320 }
321 }
322
323 func i16rand() int16 {
324 for {
325 a := int16(rand.Uint32())
326 a >>= uint(rand.Intn(16))
327 if -a != a {
328 return a
329 }
330 }
331 return 0
332 }
333
334 func i16test(a, b, c int16) {
335 d := a / c
336 if d != b {
337 println("i16", a, b, c, d)
338 panic("fail")
339 }
340 }
341
342 func i16run() {
343 var a, b int16
344
345 for i := 0; i < Count; i++ {
346 a = i16rand()
347
348 b = a / 1
349 i16test(a, b, 1)
350 b = a / 2
351 i16test(a, b, 2)
352 b = a / 3
353 i16test(a, b, 3)
354 b = a / 4
355 i16test(a, b, 4)
356 b = a / 5
357 i16test(a, b, 5)
358 b = a / 6
359 i16test(a, b, 6)
360 b = a / 7
361 i16test(a, b, 7)
362 b = a / 8
363 i16test(a, b, 8)
364 b = a / 10
365 i16test(a, b, 10)
366 b = a / 16
367 i16test(a, b, 16)
368 b = a / 20
369 i16test(a, b, 20)
370 b = a / 32
371 i16test(a, b, 32)
372 b = a / 60
373 i16test(a, b, 60)
374 b = a / 64
375 i16test(a, b, 64)
376 b = a / 128
377 i16test(a, b, 128)
378 b = a / 256
379 i16test(a, b, 256)
380 b = a / 16384
381 i16test(a, b, 16384)
382
383 b = a / -1
384 i16test(a, b, -1)
385 b = a / -2
386 i16test(a, b, -2)
387 b = a / -3
388 i16test(a, b, -3)
389 b = a / -4
390 i16test(a, b, -4)
391 b = a / -5
392 i16test(a, b, -5)
393 b = a / -6
394 i16test(a, b, -6)
395 b = a / -7
396 i16test(a, b, -7)
397 b = a / -8
398 i16test(a, b, -8)
399 b = a / -10
400 i16test(a, b, -10)
401 b = a / -16
402 i16test(a, b, -16)
403 b = a / -20
404 i16test(a, b, -20)
405 b = a / -32
406 i16test(a, b, -32)
407 b = a / -60
408 i16test(a, b, -60)
409 b = a / -64
410 i16test(a, b, -64)
411 b = a / -128
412 i16test(a, b, -128)
413 b = a / -256
414 i16test(a, b, -256)
415 b = a / -16384
416 i16test(a, b, -16384)
417 }
418 }
419
420 func u16rand() uint16 {
421 a := uint16(rand.Uint32())
422 a >>= uint(rand.Intn(16))
423 return a
424 }
425
426 func u16test(a, b, c uint16) {
427 d := a / c
428 if d != b {
429 println("u16", a, b, c, d)
430 panic("fail")
431 }
432 }
433
434 func u16run() {
435 var a, b uint16
436
437 for i := 0; i < Count; i++ {
438 a = u16rand()
439
440 b = a / 1
441 u16test(a, b, 1)
442 b = a / 2
443 u16test(a, b, 2)
444 b = a / 3
445 u16test(a, b, 3)
446 b = a / 4
447 u16test(a, b, 4)
448 b = a / 5
449 u16test(a, b, 5)
450 b = a / 6
451 u16test(a, b, 6)
452 b = a / 7
453 u16test(a, b, 7)
454 b = a / 8
455 u16test(a, b, 8)
456 b = a / 10
457 u16test(a, b, 10)
458 b = a / 16
459 u16test(a, b, 16)
460 b = a / 20
461 u16test(a, b, 20)
462 b = a / 32
463 u16test(a, b, 32)
464 b = a / 60
465 u16test(a, b, 60)
466 b = a / 64
467 u16test(a, b, 64)
468 b = a / 128
469 u16test(a, b, 128)
470 b = a / 256
471 u16test(a, b, 256)
472 b = a / 16384
473 u16test(a, b, 16384)
474 }
475 }
476
477 func i8rand() int8 {
478 for {
479 a := int8(rand.Uint32())
480 a >>= uint(rand.Intn(8))
481 if -a != a {
482 return a
483 }
484 }
485 return 0
486 }
487
488 func i8test(a, b, c int8) {
489 d := a / c
490 if d != b {
491 println("i8", a, b, c, d)
492 panic("fail")
493 }
494 }
495
496 func i8run() {
497 var a, b int8
498
499 for i := 0; i < Count; i++ {
500 a = i8rand()
501
502 b = a / 1
503 i8test(a, b, 1)
504 b = a / 2
505 i8test(a, b, 2)
506 b = a / 3
507 i8test(a, b, 3)
508 b = a / 4
509 i8test(a, b, 4)
510 b = a / 5
511 i8test(a, b, 5)
512 b = a / 6
513 i8test(a, b, 6)
514 b = a / 7
515 i8test(a, b, 7)
516 b = a / 8
517 i8test(a, b, 8)
518 b = a / 10
519 i8test(a, b, 10)
520 b = a / 8
521 i8test(a, b, 8)
522 b = a / 20
523 i8test(a, b, 20)
524 b = a / 32
525 i8test(a, b, 32)
526 b = a / 60
527 i8test(a, b, 60)
528 b = a / 64
529 i8test(a, b, 64)
530 b = a / 127
531 i8test(a, b, 127)
532
533 b = a / -1
534 i8test(a, b, -1)
535 b = a / -2
536 i8test(a, b, -2)
537 b = a / -3
538 i8test(a, b, -3)
539 b = a / -4
540 i8test(a, b, -4)
541 b = a / -5
542 i8test(a, b, -5)
543 b = a / -6
544 i8test(a, b, -6)
545 b = a / -7
546 i8test(a, b, -7)
547 b = a / -8
548 i8test(a, b, -8)
549 b = a / -10
550 i8test(a, b, -10)
551 b = a / -8
552 i8test(a, b, -8)
553 b = a / -20
554 i8test(a, b, -20)
555 b = a / -32
556 i8test(a, b, -32)
557 b = a / -60
558 i8test(a, b, -60)
559 b = a / -64
560 i8test(a, b, -64)
561 b = a / -128
562 i8test(a, b, -128)
563 }
564 }
565
566 func u8rand() uint8 {
567 a := uint8(rand.Uint32())
568 a >>= uint(rand.Intn(8))
569 return a
570 }
571
572 func u8test(a, b, c uint8) {
573 d := a / c
574 if d != b {
575 println("u8", a, b, c, d)
576 panic("fail")
577 }
578 }
579
580 func u8run() {
581 var a, b uint8
582
583 for i := 0; i < Count; i++ {
584 a = u8rand()
585
586 b = a / 1
587 u8test(a, b, 1)
588 b = a / 2
589 u8test(a, b, 2)
590 b = a / 3
591 u8test(a, b, 3)
592 b = a / 4
593 u8test(a, b, 4)
594 b = a / 5
595 u8test(a, b, 5)
596 b = a / 6
597 u8test(a, b, 6)
598 b = a / 7
599 u8test(a, b, 7)
600 b = a / 8
601 u8test(a, b, 8)
602 b = a / 10
603 u8test(a, b, 10)
604 b = a / 8
605 u8test(a, b, 8)
606 b = a / 20
607 u8test(a, b, 20)
608 b = a / 32
609 u8test(a, b, 32)
610 b = a / 60
611 u8test(a, b, 60)
612 b = a / 64
613 u8test(a, b, 64)
614 b = a / 128
615 u8test(a, b, 128)
616 b = a / 184
617 u8test(a, b, 184)
618 }
619 }
620
621 func main() {
622 xtest()
623 i64run()
624 u64run()
625 i32run()
626 u32run()
627 i16run()
628 u16run()
629 i8run()
630 u8run()
631 }
632
633 func xtest() {
634 }
635
View as plain text