.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / cmd / guru / testdata / src / peers / main.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/cmd/guru/testdata/src/peers/main.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/cmd/guru/testdata/src/peers/main.go
new file mode 100644 (file)
index 0000000..40ee205
--- /dev/null
@@ -0,0 +1,52 @@
+package main
+
+// Tests of channel 'peers' query.
+// See go.tools/guru/guru_test.go for explanation.
+// See peers.golden for expected query results.
+
+var a2 int
+
+func main() {
+       chA := make(chan *int)
+       a1 := 1
+       chA <- &a1
+
+       chA2 := make(chan *int, 2)
+       if a2 == 0 {
+               chA = chA2
+       }
+
+       chB := make(chan *int)
+       b := 3
+       chB <- &b
+
+       <-chA  // @pointsto pointsto-chA "chA"
+       <-chA2 // @pointsto pointsto-chA2 "chA2"
+       <-chB  // @pointsto pointsto-chB "chB"
+
+       select {
+       case rA := <-chA: // @peers peer-recv-chA "<-"
+               _ = rA // @pointsto pointsto-rA "rA"
+       case rB := <-chB: // @peers peer-recv-chB "<-"
+               _ = rB // @pointsto pointsto-rB "rB"
+
+       case <-chA: // @peers peer-recv-chA' "<-"
+
+       case chA2 <- &a2: // @peers peer-send-chA' "<-"
+       }
+
+       for range chA {
+       }
+
+       close(chA) // @peers peer-close-chA "chA"
+
+       chC := make(chan *int)
+       (close)(chC) // @peers peer-close-chC "chC"
+
+       close := func(ch chan *int) chan *int {
+               return ch
+       }
+
+       close(chC) <- &b // @peers peer-send-chC "chC"
+       <-close(chC)     // @peers peer-recv-chC "chC"
+}