Initial commit: Go 1.23 release state
This commit is contained in:
58
test/chan/select.go
Normal file
58
test/chan/select.go
Normal file
@@ -0,0 +1,58 @@
|
||||
// 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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user