codekingpro/portable-devtools
114k
1// run2 3// Copyright 2009 The Go Authors. All rights reserved.4// Use of this source code is governed by a BSD-style5// license that can be found in the LICENSE file.6 7// Test the internal "algorithms" for objects larger than a word: hashing, equality etc.8 9package main10 11type T struct {12 a float6413 b int6414 c string15 d byte16}17 18var a = []int{1, 2, 3}19var NIL []int20 21func arraycmptest() {22 if NIL != nil {23 println("fail1:", NIL, "!= nil")24 panic("bigalg")25 }26 if nil != NIL {27 println("fail2: nil !=", NIL)28 panic("bigalg")29 }30 if a == nil || nil == a {31 println("fail3:", a, "== nil")32 panic("bigalg")33 }34}35 36func SameArray(a, b []int) bool {37 if len(a) != len(b) || cap(a) != cap(b) {38 return false39 }40 if len(a) > 0 && &a[0] != &b[0] {41 return false42 }43 return true44}45 46var t = T{1.5, 123, "hello", 255}47var mt = make(map[int]T)48var ma = make(map[int][]int)49 50func maptest() {51 mt[0] = t52 t1 := mt[0]53 if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {54 println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)55 panic("bigalg")56 }57 58 ma[1] = a59 a1 := ma[1]60 if !SameArray(a, a1) {61 println("fail: map val array", a, a1)62 panic("bigalg")63 }64}65 66var ct = make(chan T)67var ca = make(chan []int)68 69func send() {70 ct <- t71 ca <- a72}73 74func chantest() {75 go send()76 77 t1 := <-ct78 if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {79 println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)80 panic("bigalg")81 }82 83 a1 := <-ca84 if !SameArray(a, a1) {85 println("fail: map val array", a, a1)86 panic("bigalg")87 }88}89 90type E struct{}91 92var e E93 94func interfacetest() {95 var i interface{}96 97 i = a98 a1 := i.([]int)99 if !SameArray(a, a1) {100 println("interface <-> []int", a, a1)101 panic("bigalg")102 }103 pa := new([]int)104 *pa = a105 i = pa106 a1 = *i.(*[]int)107 if !SameArray(a, a1) {108 println("interface <-> *[]int", a, a1)109 panic("bigalg")110 }111 112 i = t113 t1 := i.(T)114 if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {115 println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)116 panic("bigalg")117 }118 119 i = e120 e1 := i.(E)121 // nothing to check; just verify it doesn't crash122 _ = e1123}124 125func main() {126 arraycmptest()127 maptest()128 chantest()129 interfacetest()130}131 