1// run
2
3// Copyright 2011 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 select when discarding a value.
8
9package main
10
11import "runtime"
12
13func recv1(c <-chan int) {
14	<-c
15}
16
17func recv2(c <-chan int) {
18	select {
19	case <-c:
20	}
21}
22
23func recv3(c <-chan int) {
24	c2 := make(chan int)
25	select {
26	case <-c:
27	case <-c2:
28	}
29}
30
31func send1(recv func(<-chan int)) {
32	c := make(chan int)
33	go recv(c)
34	runtime.Gosched()
35	c <- 1
36}
37
38func send2(recv func(<-chan int)) {
39	c := make(chan int)
40	go recv(c)
41	runtime.Gosched()
42	select {
43	case c <- 1:
44	}
45}
46
47func send3(recv func(<-chan int)) {
48	c := make(chan int)
49	go recv(c)
50	runtime.Gosched()
51	c2 := make(chan int)
52	select {
53	case c <- 1:
54	case c2 <- 1:
55	}
56}
57
58func main() {
59	send1(recv1)
60	send2(recv1)
61	send3(recv1)
62	send1(recv2)
63	send2(recv2)
64	send3(recv2)
65	send1(recv3)
66	send2(recv3)
67	send3(recv3)
68}
69