summaryrefslogtreecommitdiffstats
path: root/test/ken/divconst.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/ken/divconst.go')
-rw-r--r--test/ken/divconst.go634
1 files changed, 634 insertions, 0 deletions
diff --git a/test/ken/divconst.go b/test/ken/divconst.go
new file mode 100644
index 0000000..670e074
--- /dev/null
+++ b/test/ken/divconst.go
@@ -0,0 +1,634 @@
+// 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() {
+}