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