2009-08-06 23:33:12 -06:00
|
|
|
// $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"
|
|
|
|
|
2009-08-08 17:53:21 -06:00
|
|
|
const Count = 1e6
|
2009-08-06 23:33:12 -06:00
|
|
|
|
|
|
|
func
|
2009-08-08 17:53:21 -06:00
|
|
|
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()
|
2009-08-06 23:33:12 -06:00
|
|
|
{
|
|
|
|
var a, b int64;
|
|
|
|
|
2009-08-08 17:53:21 -06:00
|
|
|
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);
|
2009-08-06 23:33:12 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func
|
2009-08-08 17:53:21 -06:00
|
|
|
u16rand() uint16
|
|
|
|
{
|
|
|
|
a := uint16(rand.Uint32());
|
|
|
|
a >>= uint(rand.Intn(16));
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
|
|
|
|
func
|
|
|
|
u16test(a,b,c uint16)
|
2009-08-06 23:33:12 -06:00
|
|
|
{
|
|
|
|
d := a/c;
|
|
|
|
if d != b {
|
2009-08-08 17:53:21 -06:00
|
|
|
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);
|
2009-08-06 23:33:12 -06:00
|
|
|
}
|
|
|
|
}
|
2009-08-08 17:53:21 -06:00
|
|
|
|
2009-08-10 13:46:23 -06:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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/128; u8test(a,b,128);
|
|
|
|
b = a/184; u8test(a,b,184);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-08 17:53:21 -06:00
|
|
|
func
|
|
|
|
main()
|
|
|
|
{
|
|
|
|
xtest();
|
|
|
|
i64run();
|
|
|
|
u64run();
|
|
|
|
i32run();
|
|
|
|
u32run();
|
|
|
|
i16run();
|
|
|
|
u16run();
|
2009-08-10 13:46:23 -06:00
|
|
|
i8run();
|
|
|
|
u8run();
|
2009-08-08 17:53:21 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
func
|
|
|
|
xtest()
|
|
|
|
{
|
|
|
|
}
|