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