Source file
test/fixedbugs/issue16870.go
1
2
3
4
5
6
7 package main
8
9 import (
10 "log"
11 "reflect"
12 )
13
14 func test(got, want interface{}) {
15 if !reflect.DeepEqual(got, want) {
16 log.Fatalf("got %v, want %v", got, want)
17 }
18 }
19
20 func main() {
21 var i int
22 var ip *int
23 var ok interface{}
24
25
26 c := make(chan int, 1)
27 c2 := make(chan int)
28
29 c <- 42
30 i, ok = <-c
31 test(i, 42)
32 test(ok, true)
33
34 c <- 42
35 _, ok = <-c
36 test(ok, true)
37
38 c <- 42
39 select {
40 case i, ok = <-c:
41 test(i, 42)
42 test(ok, true)
43 }
44
45 c <- 42
46 select {
47 case _, ok = <-c:
48 test(ok, true)
49 }
50
51 c <- 42
52 select {
53 case i, ok = <-c:
54 test(i, 42)
55 test(ok, true)
56 default:
57 log.Fatal("bad select")
58 }
59
60 c <- 42
61 select {
62 case _, ok = <-c:
63 test(ok, true)
64 default:
65 log.Fatal("bad select")
66 }
67
68 c <- 42
69 select {
70 case i, ok = <-c:
71 test(i, 42)
72 test(ok, true)
73 case <-c2:
74 log.Fatal("bad select")
75 }
76
77 c <- 42
78 select {
79 case _, ok = <-c:
80 test(ok, true)
81 case <-c2:
82 log.Fatal("bad select")
83 }
84
85 close(c)
86 i, ok = <-c
87 test(i, 0)
88 test(ok, false)
89
90 _, ok = <-c
91 test(ok, false)
92
93
94 m := make(map[int]int)
95
96 i, ok = m[0]
97 test(i, 0)
98 test(ok, false)
99
100 _, ok = m[0]
101 test(ok, false)
102
103 m[0] = 42
104 i, ok = m[0]
105 test(i, 42)
106 test(ok, true)
107
108 _, ok = m[0]
109 test(ok, true)
110
111
112 var u interface{}
113
114 i, ok = u.(int)
115 test(i, 0)
116 test(ok, false)
117
118 ip, ok = u.(*int)
119 test(ip, (*int)(nil))
120 test(ok, false)
121
122 _, ok = u.(int)
123 test(ok, false)
124
125 u = 42
126 i, ok = u.(int)
127 test(i, 42)
128 test(ok, true)
129
130 _, ok = u.(int)
131 test(ok, true)
132
133 u = &i
134 ip, ok = u.(*int)
135 test(ip, &i)
136 test(ok, true)
137
138 _, ok = u.(*int)
139 test(ok, true)
140 }
141
View as plain text