// run

// 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.

// Test integer division by constants.

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

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