github.com/epfl-dcsl/gotee@v0.0.0-20200909122901-014b35f5e5e9/test/chan/select7.go (about)

     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  
     9  package main
    10  
    11  import "runtime"
    12  
    13  func recv1(c <-chan int) {
    14  	<-c
    15  }
    16  
    17  func recv2(c <-chan int) {
    18  	select {
    19  	case <-c:
    20  	}
    21  }
    22  
    23  func recv3(c <-chan int) {
    24  	c2 := make(chan int)
    25  	select {
    26  	case <-c:
    27  	case <-c2:
    28  	}
    29  }
    30  
    31  func send1(recv func(<-chan int)) {
    32  	c := make(chan int)
    33  	go recv(c)
    34  	runtime.Gosched()
    35  	c <- 1
    36  }
    37  
    38  func 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  
    47  func 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  
    58  func 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  }