package peers

// Tests of channel 'peers' query.
// See go.tools/oracle/oracle_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"
}
