1// run 2 3// Copyright 2009 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 simple select. 8 9package main 10 11var counter uint 12var shift uint 13 14func GetValue() uint { 15 counter++ 16 return 1 << shift 17} 18 19func Send(a, b chan uint) int { 20 var i int 21 22LOOP: 23 for { 24 select { 25 case a <- GetValue(): 26 i++ 27 a = nil 28 case b <- GetValue(): 29 i++ 30 b = nil 31 default: 32 break LOOP 33 } 34 shift++ 35 } 36 return i 37} 38 39func main() { 40 a := make(chan uint, 1) 41 b := make(chan uint, 1) 42 if v := Send(a, b); v != 2 { 43 println("Send returned", v, "!= 2") 44 panic("fail") 45 } 46 if av, bv := <-a, <-b; av|bv != 3 { 47 println("bad values", av, bv) 48 panic("fail") 49 } 50 if v := Send(a, nil); v != 1 { 51 println("Send returned", v, "!= 1") 52 panic("fail") 53 } 54 if counter != 10 { 55 println("counter is", counter, "!= 10") 56 panic("fail") 57 } 58} 59