| // run | |
| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // Test integer modulus by constants. | |
| package main | |
| import "math/rand" | |
| const Count = 1e5 | |
| func i64rand() int64 { | |
| for { | |
| a := int64(rand.Uint32()) | |
| a = (a << 32) | int64(rand.Uint32()) | |
| a >>= uint(rand.Intn(64)) | |
| if -a != a { | |
| return a | |
| } | |
| } | |
| return 0 // impossible | |
| } | |
| func i64test(a, b, c int64) { | |
| d := a % c | |
| if d != b { | |
| println("i64", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func i64run() { | |
| var a, b int64 | |
| for i := 0; i < Count; i++ { | |
| a = i64rand() | |
| b = a % 1 | |
| i64test(a, b, 1) | |
| b = a % 2 | |
| i64test(a, b, 2) | |
| b = a % 3 | |
| i64test(a, b, 3) | |
| b = a % 4 | |
| i64test(a, b, 4) | |
| b = a % 5 | |
| i64test(a, b, 5) | |
| b = a % 6 | |
| i64test(a, b, 6) | |
| b = a % 7 | |
| i64test(a, b, 7) | |
| b = a % 8 | |
| i64test(a, b, 8) | |
| b = a % 10 | |
| i64test(a, b, 10) | |
| b = a % 16 | |
| i64test(a, b, 16) | |
| b = a % 20 | |
| i64test(a, b, 20) | |
| b = a % 32 | |
| i64test(a, b, 32) | |
| b = a % 60 | |
| i64test(a, b, 60) | |
| b = a % 64 | |
| i64test(a, b, 64) | |
| b = a % 128 | |
| i64test(a, b, 128) | |
| b = a % 256 | |
| i64test(a, b, 256) | |
| b = a % 16384 | |
| i64test(a, b, 16384) | |
| b = a % -1 | |
| i64test(a, b, -1) | |
| b = a % -2 | |
| i64test(a, b, -2) | |
| b = a % -3 | |
| i64test(a, b, -3) | |
| b = a % -4 | |
| i64test(a, b, -4) | |
| b = a % -5 | |
| i64test(a, b, -5) | |
| b = a % -6 | |
| i64test(a, b, -6) | |
| b = a % -7 | |
| i64test(a, b, -7) | |
| b = a % -8 | |
| i64test(a, b, -8) | |
| b = a % -10 | |
| i64test(a, b, -10) | |
| b = a % -16 | |
| i64test(a, b, -16) | |
| b = a % -20 | |
| i64test(a, b, -20) | |
| b = a % -32 | |
| i64test(a, b, -32) | |
| b = a % -60 | |
| i64test(a, b, -60) | |
| b = a % -64 | |
| i64test(a, b, -64) | |
| b = a % -128 | |
| i64test(a, b, -128) | |
| b = a % -256 | |
| i64test(a, b, -256) | |
| b = a % -16384 | |
| i64test(a, b, -16384) | |
| } | |
| } | |
| func u64rand() uint64 { | |
| a := uint64(rand.Uint32()) | |
| a = (a << 32) | uint64(rand.Uint32()) | |
| a >>= uint(rand.Intn(64)) | |
| return a | |
| } | |
| func u64test(a, b, c uint64) { | |
| d := a % c | |
| if d != b { | |
| println("u64", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func u64run() { | |
| var a, b uint64 | |
| for i := 0; i < Count; i++ { | |
| a = u64rand() | |
| b = a % 1 | |
| u64test(a, b, 1) | |
| b = a % 2 | |
| u64test(a, b, 2) | |
| b = a % 3 | |
| u64test(a, b, 3) | |
| b = a % 4 | |
| u64test(a, b, 4) | |
| b = a % 5 | |
| u64test(a, b, 5) | |
| b = a % 6 | |
| u64test(a, b, 6) | |
| b = a % 7 | |
| u64test(a, b, 7) | |
| b = a % 8 | |
| u64test(a, b, 8) | |
| b = a % 10 | |
| u64test(a, b, 10) | |
| b = a % 16 | |
| u64test(a, b, 16) | |
| b = a % 20 | |
| u64test(a, b, 20) | |
| b = a % 32 | |
| u64test(a, b, 32) | |
| b = a % 60 | |
| u64test(a, b, 60) | |
| b = a % 64 | |
| u64test(a, b, 64) | |
| b = a % 128 | |
| u64test(a, b, 128) | |
| b = a % 256 | |
| u64test(a, b, 256) | |
| b = a % 16384 | |
| u64test(a, b, 16384) | |
| } | |
| } | |
| func i32rand() int32 { | |
| for { | |
| a := int32(rand.Uint32()) | |
| a >>= uint(rand.Intn(32)) | |
| if -a != a { | |
| return a | |
| } | |
| } | |
| return 0 // impossible | |
| } | |
| func i32test(a, b, c int32) { | |
| d := a % c | |
| if d != b { | |
| println("i32", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func i32run() { | |
| var a, b int32 | |
| for i := 0; i < Count; i++ { | |
| a = i32rand() | |
| b = a % 1 | |
| i32test(a, b, 1) | |
| b = a % 2 | |
| i32test(a, b, 2) | |
| b = a % 3 | |
| i32test(a, b, 3) | |
| b = a % 4 | |
| i32test(a, b, 4) | |
| b = a % 5 | |
| i32test(a, b, 5) | |
| b = a % 6 | |
| i32test(a, b, 6) | |
| b = a % 7 | |
| i32test(a, b, 7) | |
| b = a % 8 | |
| i32test(a, b, 8) | |
| b = a % 10 | |
| i32test(a, b, 10) | |
| b = a % 16 | |
| i32test(a, b, 16) | |
| b = a % 20 | |
| i32test(a, b, 20) | |
| b = a % 32 | |
| i32test(a, b, 32) | |
| b = a % 60 | |
| i32test(a, b, 60) | |
| b = a % 64 | |
| i32test(a, b, 64) | |
| b = a % 128 | |
| i32test(a, b, 128) | |
| b = a % 256 | |
| i32test(a, b, 256) | |
| b = a % 16384 | |
| i32test(a, b, 16384) | |
| b = a % -1 | |
| i32test(a, b, -1) | |
| b = a % -2 | |
| i32test(a, b, -2) | |
| b = a % -3 | |
| i32test(a, b, -3) | |
| b = a % -4 | |
| i32test(a, b, -4) | |
| b = a % -5 | |
| i32test(a, b, -5) | |
| b = a % -6 | |
| i32test(a, b, -6) | |
| b = a % -7 | |
| i32test(a, b, -7) | |
| b = a % -8 | |
| i32test(a, b, -8) | |
| b = a % -10 | |
| i32test(a, b, -10) | |
| b = a % -16 | |
| i32test(a, b, -16) | |
| b = a % -20 | |
| i32test(a, b, -20) | |
| b = a % -32 | |
| i32test(a, b, -32) | |
| b = a % -60 | |
| i32test(a, b, -60) | |
| b = a % -64 | |
| i32test(a, b, -64) | |
| b = a % -128 | |
| i32test(a, b, -128) | |
| b = a % -256 | |
| i32test(a, b, -256) | |
| } | |
| } | |
| func u32rand() uint32 { | |
| a := uint32(rand.Uint32()) | |
| a >>= uint(rand.Intn(32)) | |
| return a | |
| } | |
| func u32test(a, b, c uint32) { | |
| d := a % c | |
| if d != b { | |
| println("u32", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func u32run() { | |
| var a, b uint32 | |
| for i := 0; i < Count; i++ { | |
| a = u32rand() | |
| b = a % 1 | |
| u32test(a, b, 1) | |
| b = a % 2 | |
| u32test(a, b, 2) | |
| b = a % 3 | |
| u32test(a, b, 3) | |
| b = a % 4 | |
| u32test(a, b, 4) | |
| b = a % 5 | |
| u32test(a, b, 5) | |
| b = a % 6 | |
| u32test(a, b, 6) | |
| b = a % 7 | |
| u32test(a, b, 7) | |
| b = a % 8 | |
| u32test(a, b, 8) | |
| b = a % 10 | |
| u32test(a, b, 10) | |
| b = a % 16 | |
| u32test(a, b, 16) | |
| b = a % 20 | |
| u32test(a, b, 20) | |
| b = a % 32 | |
| u32test(a, b, 32) | |
| b = a % 60 | |
| u32test(a, b, 60) | |
| b = a % 64 | |
| u32test(a, b, 64) | |
| b = a % 128 | |
| u32test(a, b, 128) | |
| b = a % 256 | |
| u32test(a, b, 256) | |
| b = a % 16384 | |
| u32test(a, b, 16384) | |
| } | |
| } | |
| func i16rand() int16 { | |
| for { | |
| a := int16(rand.Uint32()) | |
| a >>= uint(rand.Intn(16)) | |
| if -a != a { | |
| return a | |
| } | |
| } | |
| return 0 // impossible | |
| } | |
| func i16test(a, b, c int16) { | |
| d := a % c | |
| if d != b { | |
| println("i16", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func i16run() { | |
| var a, b int16 | |
| for i := 0; i < Count; i++ { | |
| a = i16rand() | |
| b = a % 1 | |
| i16test(a, b, 1) | |
| b = a % 2 | |
| i16test(a, b, 2) | |
| b = a % 3 | |
| i16test(a, b, 3) | |
| b = a % 4 | |
| i16test(a, b, 4) | |
| b = a % 5 | |
| i16test(a, b, 5) | |
| b = a % 6 | |
| i16test(a, b, 6) | |
| b = a % 7 | |
| i16test(a, b, 7) | |
| b = a % 8 | |
| i16test(a, b, 8) | |
| b = a % 10 | |
| i16test(a, b, 10) | |
| b = a % 16 | |
| i16test(a, b, 16) | |
| b = a % 20 | |
| i16test(a, b, 20) | |
| b = a % 32 | |
| i16test(a, b, 32) | |
| b = a % 60 | |
| i16test(a, b, 60) | |
| b = a % 64 | |
| i16test(a, b, 64) | |
| b = a % 128 | |
| i16test(a, b, 128) | |
| b = a % 256 | |
| i16test(a, b, 256) | |
| b = a % 16384 | |
| i16test(a, b, 16384) | |
| b = a % -1 | |
| i16test(a, b, -1) | |
| b = a % -2 | |
| i16test(a, b, -2) | |
| b = a % -3 | |
| i16test(a, b, -3) | |
| b = a % -4 | |
| i16test(a, b, -4) | |
| b = a % -5 | |
| i16test(a, b, -5) | |
| b = a % -6 | |
| i16test(a, b, -6) | |
| b = a % -7 | |
| i16test(a, b, -7) | |
| b = a % -8 | |
| i16test(a, b, -8) | |
| b = a % -10 | |
| i16test(a, b, -10) | |
| b = a % -16 | |
| i16test(a, b, -16) | |
| b = a % -20 | |
| i16test(a, b, -20) | |
| b = a % -32 | |
| i16test(a, b, -32) | |
| b = a % -60 | |
| i16test(a, b, -60) | |
| b = a % -64 | |
| i16test(a, b, -64) | |
| b = a % -128 | |
| i16test(a, b, -128) | |
| b = a % -256 | |
| i16test(a, b, -256) | |
| b = a % -16384 | |
| i16test(a, b, -16384) | |
| } | |
| } | |
| func u16rand() uint16 { | |
| a := uint16(rand.Uint32()) | |
| a >>= uint(rand.Intn(16)) | |
| return a | |
| } | |
| func u16test(a, b, c uint16) { | |
| d := a % c | |
| if d != b { | |
| println("u16", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func u16run() { | |
| var a, b uint16 | |
| for i := 0; i < Count; i++ { | |
| a = u16rand() | |
| b = a % 1 | |
| u16test(a, b, 1) | |
| b = a % 2 | |
| u16test(a, b, 2) | |
| b = a % 3 | |
| u16test(a, b, 3) | |
| b = a % 4 | |
| u16test(a, b, 4) | |
| b = a % 5 | |
| u16test(a, b, 5) | |
| b = a % 6 | |
| u16test(a, b, 6) | |
| b = a % 7 | |
| u16test(a, b, 7) | |
| b = a % 8 | |
| u16test(a, b, 8) | |
| b = a % 10 | |
| u16test(a, b, 10) | |
| b = a % 16 | |
| u16test(a, b, 16) | |
| b = a % 20 | |
| u16test(a, b, 20) | |
| b = a % 32 | |
| u16test(a, b, 32) | |
| b = a % 60 | |
| u16test(a, b, 60) | |
| b = a % 64 | |
| u16test(a, b, 64) | |
| b = a % 128 | |
| u16test(a, b, 128) | |
| b = a % 256 | |
| u16test(a, b, 256) | |
| b = a % 16384 | |
| u16test(a, b, 16384) | |
| } | |
| } | |
| func i8rand() int8 { | |
| for { | |
| a := int8(rand.Uint32()) | |
| a >>= uint(rand.Intn(8)) | |
| if -a != a { | |
| return a | |
| } | |
| } | |
| return 0 // impossible | |
| } | |
| func i8test(a, b, c int8) { | |
| d := a % c | |
| if d != b { | |
| println("i8", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func i8run() { | |
| var a, b int8 | |
| for i := 0; i < Count; i++ { | |
| a = i8rand() | |
| b = a % 1 | |
| i8test(a, b, 1) | |
| b = a % 2 | |
| i8test(a, b, 2) | |
| b = a % 3 | |
| i8test(a, b, 3) | |
| b = a % 4 | |
| i8test(a, b, 4) | |
| b = a % 5 | |
| i8test(a, b, 5) | |
| b = a % 6 | |
| i8test(a, b, 6) | |
| b = a % 7 | |
| i8test(a, b, 7) | |
| b = a % 8 | |
| i8test(a, b, 8) | |
| b = a % 10 | |
| i8test(a, b, 10) | |
| b = a % 8 | |
| i8test(a, b, 8) | |
| b = a % 20 | |
| i8test(a, b, 20) | |
| b = a % 32 | |
| i8test(a, b, 32) | |
| b = a % 60 | |
| i8test(a, b, 60) | |
| b = a % 64 | |
| i8test(a, b, 64) | |
| b = a % 127 | |
| i8test(a, b, 127) | |
| b = a % -1 | |
| i8test(a, b, -1) | |
| b = a % -2 | |
| i8test(a, b, -2) | |
| b = a % -3 | |
| i8test(a, b, -3) | |
| b = a % -4 | |
| i8test(a, b, -4) | |
| b = a % -5 | |
| i8test(a, b, -5) | |
| b = a % -6 | |
| i8test(a, b, -6) | |
| b = a % -7 | |
| i8test(a, b, -7) | |
| b = a % -8 | |
| i8test(a, b, -8) | |
| b = a % -10 | |
| i8test(a, b, -10) | |
| b = a % -8 | |
| i8test(a, b, -8) | |
| b = a % -20 | |
| i8test(a, b, -20) | |
| b = a % -32 | |
| i8test(a, b, -32) | |
| b = a % -60 | |
| i8test(a, b, -60) | |
| b = a % -64 | |
| i8test(a, b, -64) | |
| b = a % -128 | |
| i8test(a, b, -128) | |
| b = a % -101 | |
| i8test(a, b, -101) | |
| } | |
| } | |
| func u8rand() uint8 { | |
| a := uint8(rand.Uint32()) | |
| a >>= uint(rand.Intn(8)) | |
| return a | |
| } | |
| func u8test(a, b, c uint8) { | |
| d := a % c | |
| if d != b { | |
| println("u8", a, b, c, d) | |
| panic("fail") | |
| } | |
| } | |
| func u8run() { | |
| var a, b uint8 | |
| for i := 0; i < Count; i++ { | |
| a = u8rand() | |
| b = a % 1 | |
| u8test(a, b, 1) | |
| b = a % 2 | |
| u8test(a, b, 2) | |
| b = a % 3 | |
| u8test(a, b, 3) | |
| b = a % 4 | |
| u8test(a, b, 4) | |
| b = a % 5 | |
| u8test(a, b, 5) | |
| b = a % 6 | |
| u8test(a, b, 6) | |
| b = a % 7 | |
| u8test(a, b, 7) | |
| b = a % 8 | |
| u8test(a, b, 8) | |
| b = a % 10 | |
| u8test(a, b, 10) | |
| b = a % 8 | |
| u8test(a, b, 8) | |
| b = a % 20 | |
| u8test(a, b, 20) | |
| b = a % 32 | |
| u8test(a, b, 32) | |
| b = a % 60 | |
| u8test(a, b, 60) | |
| b = a % 64 | |
| u8test(a, b, 64) | |
| b = a % 127 | |
| u8test(a, b, 127) | |
| } | |
| } | |
| func main() { | |
| xtest() | |
| i64run() | |
| u64run() | |
| i32run() | |
| u32run() | |
| i16run() | |
| u16run() | |
| i8run() | |
| u8run() | |
| } | |
| func xtest() { | |
| } |