summaryrefslogtreecommitdiff
path: root/test/chan
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-09-26 11:47:04 -0700
committerRuss Cox <rsc@golang.org>2008-09-26 11:47:04 -0700
commit01457885b03730e6358fca060000339cf27c714b (patch)
tree83263e885fb79b831604f7320e3e8d76aa2b3324 /test/chan
parent3b862f33016a306021ed033d6b70b37242b7ec0e (diff)
downloadgolang-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.go114
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")
}