Plan 9 from Bell Labs’s /usr/web/sources/contrib/ericvh/go-plan9/test/ken/divconst.go

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


// $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);
	}
}

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);
	}
}

func
main()
{
	xtest();
	i64run();
	u64run();
	i32run();
	u32run();
	i16run();
	u16run();
	i8run();
	u8run();
}

func
xtest()
{
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].