| // $G $D/$F.go && $L $F.$A && ./$A.out |
| |
| // 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. |
| |
| package main |
| |
| import ( |
| "os"; |
| "fmt"; |
| ) |
| |
| type T struct { |
| a float64; |
| b int64; |
| c string; |
| d byte; |
| } |
| |
| var a = []int{ 1, 2, 3 } |
| var NIL []int; |
| |
| func arraycmptest() { |
| a1 := a; |
| if NIL != nil { |
| println("fail1:", NIL, "!= nil"); |
| } |
| if nil != NIL { |
| println("fail2: nil !=", NIL); |
| } |
| if a == nil || nil == a { |
| println("fail3:", a, "== nil"); |
| } |
| if a == NIL || NIL == a { |
| println("fail4:", a, "==", NIL); |
| } |
| if a != a { |
| println("fail5:", a, "!=", a); |
| } |
| if a1 != a { |
| println("fail6:", a1, "!=", a); |
| } |
| } |
| |
| var t = T{1.5, 123, "hello", 255} |
| var mt = new(map[int]T) |
| var ma = new(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); |
| } |
| |
| ma[1] = a; |
| a1 := ma[1]; |
| if a1 != a { |
| println("fail: map val array", a, a1); |
| } |
| } |
| |
| var mt1 = new(map[T]int) |
| var ma1 = new(map[[]int] int) |
| |
| func maptest2() { |
| mt1[t] = 123; |
| t1 := t; |
| val, ok := mt1[t1]; |
| if val != 123 || !ok { |
| println("fail: map key struct", val, ok); |
| } |
| |
| ma1[a] = 345; |
| a1 := a; |
| val, ok = ma1[a1]; |
| if val != 345 || !ok { |
| panic("map key array", val, ok); |
| } |
| } |
| |
| var ct = new(chan T) |
| var ca = new(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: chan struct", t1.a, t1.b, t1.c, t1.d); |
| } |
| |
| a1 := <-ca; |
| if a1 != a { |
| println("fail: chan array", a, a1); |
| } |
| } |
| |
| func main() { |
| arraycmptest(); |
| maptest(); |
| maptest2(); |
| chantest(); |
| } |