diff options
author | Russ Cox <rsc@golang.org> | 2008-09-26 11:47:04 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2008-09-26 11:47:04 -0700 |
commit | 01457885b03730e6358fca060000339cf27c714b (patch) | |
tree | 83263e885fb79b831604f7320e3e8d76aa2b3324 /test/chan | |
parent | 3b862f33016a306021ed033d6b70b37242b7ec0e (diff) | |
download | golang-01457885b03730e6358fca060000339cf27c714b.tar.gz |
test and fix non-blocking chan ops on buffered chans
R=ken
DELTA=68 (19 added, 0 deleted, 49 changed)
OCL=15966
CL=15969
Diffstat (limited to 'test/chan')
-rw-r--r-- | test/chan/nonblock.go | 114 |
1 files changed, 58 insertions, 56 deletions
diff --git a/test/chan/nonblock.go b/test/chan/nonblock.go index cac0944d5..5622e8382 100644 --- a/test/chan/nonblock.go +++ b/test/chan/nonblock.go @@ -52,61 +52,63 @@ func main() { var s string; var ok bool; - c32 := new(chan int32); - c64 := new(chan int64); - cb := new(chan bool); - cs := new(chan string); - - i32, ok = <-c32; - if ok { panic("blocked i32sender") } - - i64, ok = <-c64; - if ok { panic("blocked i64sender") } - - b, ok = <-cb; - if ok { panic("blocked bsender") } - - s, ok = <-cs; - if ok { panic("blocked ssender") } - - go i32receiver(c32); - pause(); - ok = c32 <- 123; - if !ok { panic("i32receiver") } - go i32sender(c32); - pause(); - i32, ok = <-c32; - if !ok { panic("i32sender") } - if i32 != 234 { panic("i32sender value") } - - go i64receiver(c64); - pause(); - ok = c64 <- 123456; - if !ok { panic("i64receiver") } - go i64sender(c64); - pause(); - i64, ok = <-c64; - if !ok { panic("i64sender") } - if i64 != 234567 { panic("i64sender value") } - - go breceiver(cb); - pause(); - ok = cb <- true; - if !ok { panic("breceiver") } - go bsender(cb); - pause(); - b, ok = <-cb; - if !ok { panic("bsender") } - if !b{ panic("bsender value") } - - go sreceiver(cs); - pause(); - ok = cs <- "hello"; - if !ok { panic("sreceiver") } - go ssender(cs); - pause(); - s, ok = <-cs; - if !ok { panic("ssender") } - if s != "hello again" { panic("ssender value") } + for buffer := 0; buffer < 2; buffer++ { + c32 := new(chan int32, buffer); + c64 := new(chan int64, buffer); + cb := new(chan bool, buffer); + cs := new(chan string, buffer); + + i32, ok = <-c32; + if ok { panic("blocked i32sender") } + + i64, ok = <-c64; + if ok { panic("blocked i64sender") } + + b, ok = <-cb; + if ok { panic("blocked bsender") } + + s, ok = <-cs; + if ok { panic("blocked ssender") } + + go i32receiver(c32); + pause(); + ok = c32 <- 123; + if !ok { panic("i32receiver") } + go i32sender(c32); + pause(); + i32, ok = <-c32; + if !ok { panic("i32sender") } + if i32 != 234 { panic("i32sender value") } + + go i64receiver(c64); + pause(); + ok = c64 <- 123456; + if !ok { panic("i64receiver") } + go i64sender(c64); + pause(); + i64, ok = <-c64; + if !ok { panic("i64sender") } + if i64 != 234567 { panic("i64sender value") } + + go breceiver(cb); + pause(); + ok = cb <- true; + if !ok { panic("breceiver") } + go bsender(cb); + pause(); + b, ok = <-cb; + if !ok { panic("bsender") } + if !b{ panic("bsender value") } + + go sreceiver(cs); + pause(); + ok = cs <- "hello"; + if !ok { panic("sreceiver") } + go ssender(cs); + pause(); + s, ok = <-cs; + if !ok { panic("ssender") } + if s != "hello again" { panic("ssender value") } + } print("PASS\n") } |