diff options
Diffstat (limited to 'gcc/testsuite/go.test/test/bigalg.go')
-rw-r--r-- | gcc/testsuite/go.test/test/bigalg.go | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/gcc/testsuite/go.test/test/bigalg.go b/gcc/testsuite/go.test/test/bigalg.go new file mode 100644 index 000000000..902ba8410 --- /dev/null +++ b/gcc/testsuite/go.test/test/bigalg.go @@ -0,0 +1,117 @@ +// $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 + +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") + } + if nil != NIL { + println("fail2: nil !=", NIL) + } + if a == nil || nil == a { + println("fail3:", a, "== nil") + } +} + +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) + } + + ma[1] = a + a1 := ma[1] + if !SameArray(a, a1) { + println("fail: map val array", a, a1) + } +} + +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) + } + + a1 := <-ca + if !SameArray(a, a1) { + println("fail: map val array", a, a1) + } +} + +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) + } + pa := new([]int) + *pa = a + i = pa + a1 = *i.(*[]int) + if !SameArray(a, a1) { + println("interface <-> *[]int", a, a1) + } + + 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) + } + + i = e + e1 := i.(E) + // nothing to check; just verify it doesn't crash + _ = e1 +} + +func main() { + arraycmptest() + maptest() + chantest() + interfacetest() +} |