| 1 | package main |
|---|---|
| 2 | |
| 3 | // Tests of channel 'peers' query. |
| 4 | // See go.tools/guru/guru_test.go for explanation. |
| 5 | // See peers.golden for expected query results. |
| 6 | |
| 7 | var a2 int |
| 8 | |
| 9 | func main() { |
| 10 | chA := make(chan *int) |
| 11 | a1 := 1 |
| 12 | chA <- &a1 |
| 13 | |
| 14 | chA2 := make(chan *int, 2) |
| 15 | if a2 == 0 { |
| 16 | chA = chA2 |
| 17 | } |
| 18 | |
| 19 | chB := make(chan *int) |
| 20 | b := 3 |
| 21 | chB <- &b |
| 22 | |
| 23 | <-chA // @pointsto pointsto-chA "chA" |
| 24 | <-chA2 // @pointsto pointsto-chA2 "chA2" |
| 25 | <-chB // @pointsto pointsto-chB "chB" |
| 26 | |
| 27 | select { |
| 28 | case rA := <-chA: // @peers peer-recv-chA "<-" |
| 29 | _ = rA // @pointsto pointsto-rA "rA" |
| 30 | case rB := <-chB: // @peers peer-recv-chB "<-" |
| 31 | _ = rB // @pointsto pointsto-rB "rB" |
| 32 | |
| 33 | case <-chA: // @peers peer-recv-chA' "<-" |
| 34 | |
| 35 | case chA2 <- &a2: // @peers peer-send-chA' "<-" |
| 36 | } |
| 37 | |
| 38 | for range chA { |
| 39 | } |
| 40 | |
| 41 | close(chA) // @peers peer-close-chA "chA" |
| 42 | |
| 43 | chC := make(chan *int) |
| 44 | (close)(chC) // @peers peer-close-chC "chC" |
| 45 | |
| 46 | close := func(ch chan *int) chan *int { |
| 47 | return ch |
| 48 | } |
| 49 | |
| 50 | close(chC) <- &b // @peers peer-send-chC "chC" |
| 51 | <-close(chC) // @peers peer-recv-chC "chC" |
| 52 | } |
| 53 |