summaryrefslogtreecommitdiffstats
path: root/test/bigalg.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/bigalg.go')
-rw-r--r--test/bigalg.go130
1 files changed, 130 insertions, 0 deletions
diff --git a/test/bigalg.go b/test/bigalg.go
new file mode 100644
index 0000000..60e8229
--- /dev/null
+++ b/test/bigalg.go
@@ -0,0 +1,130 @@
+// 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 the internal "algorithms" for objects larger than a word: hashing, equality etc.
+
+package main
+
+type T struct {
+ a float64
+ b int64
+ c string
+ d byte
+}
+
+var a = []int{1, 2, 3}
+var NIL []int
+
+func arraycmptest() {
+ if NIL != nil {
+ println("fail1:", NIL, "!= nil")
+ panic("bigalg")
+ }
+ if nil != NIL {
+ println("fail2: nil !=", NIL)
+ panic("bigalg")
+ }
+ if a == nil || nil == a {
+ println("fail3:", a, "== nil")
+ panic("bigalg")
+ }
+}
+
+func SameArray(a, b []int) bool {
+ if len(a) != len(b) || cap(a) != cap(b) {
+ return false
+ }
+ if len(a) > 0 && &a[0] != &b[0] {
+ return false
+ }
+ return true
+}
+
+var t = T{1.5, 123, "hello", 255}
+var mt = make(map[int]T)
+var ma = make(map[int][]int)
+
+func maptest() {
+ mt[0] = t
+ t1 := mt[0]
+ if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
+ println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
+ panic("bigalg")
+ }
+
+ ma[1] = a
+ a1 := ma[1]
+ if !SameArray(a, a1) {
+ println("fail: map val array", a, a1)
+ panic("bigalg")
+ }
+}
+
+var ct = make(chan T)
+var ca = make(chan []int)
+
+func send() {
+ ct <- t
+ ca <- a
+}
+
+func chantest() {
+ go send()
+
+ t1 := <-ct
+ if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
+ println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
+ panic("bigalg")
+ }
+
+ a1 := <-ca
+ if !SameArray(a, a1) {
+ println("fail: map val array", a, a1)
+ panic("bigalg")
+ }
+}
+
+type E struct{}
+
+var e E
+
+func interfacetest() {
+ var i interface{}
+
+ i = a
+ a1 := i.([]int)
+ if !SameArray(a, a1) {
+ println("interface <-> []int", a, a1)
+ panic("bigalg")
+ }
+ pa := new([]int)
+ *pa = a
+ i = pa
+ a1 = *i.(*[]int)
+ if !SameArray(a, a1) {
+ println("interface <-> *[]int", a, a1)
+ panic("bigalg")
+ }
+
+ i = t
+ t1 := i.(T)
+ if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
+ println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)
+ panic("bigalg")
+ }
+
+ i = e
+ e1 := i.(E)
+ // nothing to check; just verify it doesn't crash
+ _ = e1
+}
+
+func main() {
+ arraycmptest()
+ maptest()
+ chantest()
+ interfacetest()
+}