...
Run Format

Source file test/chan/select.go

Documentation: test/chan

  // run
  
  // Copyright 2009 The Go Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style
  // license that can be found in the LICENSE file.
  
  // Test simple select.
  
  package main
  
  var counter uint
  var shift uint
  
  func GetValue() uint {
  	counter++
  	return 1 << shift
  }
  
  func Send(a, b chan uint) int {
  	var i int
  
  LOOP:
  	for {
  		select {
  		case a <- GetValue():
  			i++
  			a = nil
  		case b <- GetValue():
  			i++
  			b = nil
  		default:
  			break LOOP
  		}
  		shift++
  	}
  	return i
  }
  
  func main() {
  	a := make(chan uint, 1)
  	b := make(chan uint, 1)
  	if v := Send(a, b); v != 2 {
  		println("Send returned", v, "!= 2")
  		panic("fail")
  	}
  	if av, bv := <-a, <-b; av|bv != 3 {
  		println("bad values", av, bv)
  		panic("fail")
  	}
  	if v := Send(a, nil); v != 1 {
  		println("Send returned", v, "!= 1")
  		panic("fail")
  	}
  	if counter != 10 {
  		println("counter is", counter, "!= 10")
  		panic("fail")
  	}
  }
  

View as plain text