blob: fa53d0b2569ae05d6bbb499a912862eecbe05b5a [file] [log] [blame]
// $G $D/$F.go && $L $F.$A && ./$A.out
// 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.
package main
import "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 {
panicln("i64", a, b, c, d);
}
}
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 {
panicln("u64", a, b, c, d);
}
}
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 {
panicln("i32", a, b, c, d);
}
}
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 {
panicln("u32", a, b, c, d);
}
}
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 {
panicln("i16", a, b, c, d);
}
}
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 {
panicln("u16", a, b, c, d);
}
}
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 {
panicln("i8", a, b, c, d);
}
}
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 {
panicln("u8", a, b, c, d);
}
}
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() {
}