Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / go.test / test / ken / modconst.go
1 // run
2
3 // Copyright 2009 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 // Test integer modulus by contstants.
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 // impossible
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 // impossible
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 // impossible
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 // impossible
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                 b = a % -101
564                 i8test(a, b, -101)
565         }
566 }
567
568 func u8rand() uint8 {
569         a := uint8(rand.Uint32())
570         a >>= uint(rand.Intn(8))
571         return a
572 }
573
574 func u8test(a, b, c uint8) {
575         d := a % c
576         if d != b {
577                 println("u8", a, b, c, d)
578                 panic("fail")
579         }
580 }
581
582 func u8run() {
583         var a, b uint8
584
585         for i := 0; i < Count; i++ {
586                 a = u8rand()
587
588                 b = a % 1
589                 u8test(a, b, 1)
590                 b = a % 2
591                 u8test(a, b, 2)
592                 b = a % 3
593                 u8test(a, b, 3)
594                 b = a % 4
595                 u8test(a, b, 4)
596                 b = a % 5
597                 u8test(a, b, 5)
598                 b = a % 6
599                 u8test(a, b, 6)
600                 b = a % 7
601                 u8test(a, b, 7)
602                 b = a % 8
603                 u8test(a, b, 8)
604                 b = a % 10
605                 u8test(a, b, 10)
606                 b = a % 8
607                 u8test(a, b, 8)
608                 b = a % 20
609                 u8test(a, b, 20)
610                 b = a % 32
611                 u8test(a, b, 32)
612                 b = a % 60
613                 u8test(a, b, 60)
614                 b = a % 64
615                 u8test(a, b, 64)
616                 b = a % 127
617                 u8test(a, b, 127)
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 }