]> Cypherpunks.ru repositories - gostls13.git/blob - test/bigalg.go
test: [a-c]: add introductory comments to tests
[gostls13.git] / test / bigalg.go
1 // run
2
3 // Copyright 2009 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // 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
9 package main
10
11 type T struct {
12         a float64
13         b int64
14         c string
15         d byte
16 }
17
18 var a = []int{ 1, 2, 3 }
19 var NIL []int
20
21 func arraycmptest() {
22         if NIL != nil {
23                 println("fail1:", NIL, "!= nil")
24         }
25         if nil != NIL {
26                 println("fail2: nil !=", NIL)
27         }
28         if a == nil || nil == a {
29                 println("fail3:", a, "== nil")
30         }
31 }
32
33 func SameArray(a, b []int) bool {
34         if len(a) != len(b) || cap(a) != cap(b) {
35                 return false
36         }
37         if len(a) > 0 && &a[0] != &b[0] {
38                 return false
39         }
40         return true
41 }
42
43 var t = T{1.5, 123, "hello", 255}
44 var mt = make(map[int]T)
45 var ma = make(map[int][]int)
46
47 func maptest() {
48         mt[0] = t
49         t1 := mt[0]
50         if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
51                 println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
52         }
53
54         ma[1] = a
55         a1 := ma[1]
56         if !SameArray(a, a1) {
57                 println("fail: map val array", a, a1)
58         }
59 }
60
61 var ct = make(chan T)
62 var ca = make(chan []int)
63
64 func send() {
65         ct <- t
66         ca <- a
67 }
68
69 func chantest() {
70         go send()
71
72         t1 := <-ct
73         if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
74                 println("fail: map val struct", t1.a, t1.b, t1.c, t1.d)
75         }
76
77         a1 := <-ca
78         if !SameArray(a, a1) {
79                 println("fail: map val array", a, a1)
80         }
81 }
82
83 type E struct { }
84 var e E
85
86 func interfacetest() {
87         var i interface{}
88
89         i = a
90         a1 := i.([]int)
91         if !SameArray(a, a1) {
92                 println("interface <-> []int", a, a1)
93         }
94         pa := new([]int)
95         *pa = a
96         i = pa
97         a1 = *i.(*[]int)
98         if !SameArray(a, a1) {
99                 println("interface <-> *[]int", a, a1)
100         }
101
102         i = t
103         t1 := i.(T)
104         if t1.a != t.a || t1.b != t.b || t1.c != t.c || t1.d != t.d {
105                 println("interface <-> struct", t1.a, t1.b, t1.c, t1.d)
106         }
107
108         i = e
109         e1 := i.(E)
110         // nothing to check; just verify it doesn't crash
111         _ = e1
112 }
113
114 func main() {
115         arraycmptest()
116         maptest()
117         chantest()
118         interfacetest()
119 }