// $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 "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() {
}
