summaryrefslogtreecommitdiff
path: root/test/chan
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-03-30 10:34:57 -0700
committerRuss Cox <rsc@golang.org>2010-03-30 10:34:57 -0700
commite37b45c553f866ff651efccb092694e7638c696b (patch)
tree2ad4647a66bf21bf56d761edba537c237b8e318a /test/chan
parente080bcef69024ef4ff6798a20166bb6978ceb050 (diff)
downloadgo-e37b45c553f866ff651efccb092694e7638c696b.tar.gz
single argument panic
note that sortmain.go has been run through hg gofmt; only the formatting of the day initializers changed. i'm happy to revert that formatting if you'd prefer. stop on error in doc/progs/run R=r CC=golang-dev http://codereview.appspot.com/850041
Diffstat (limited to 'test/chan')
-rw-r--r--test/chan/doubleselect.go3
-rw-r--r--test/chan/nonblock.go242
-rw-r--r--test/chan/sieve1.go31
-rw-r--r--test/chan/sieve2.go3
4 files changed, 175 insertions, 104 deletions
diff --git a/test/chan/doubleselect.go b/test/chan/doubleselect.go
index 53dafeb1a..592d2f54a 100644
--- a/test/chan/doubleselect.go
+++ b/test/chan/doubleselect.go
@@ -56,7 +56,8 @@ func recver(in <-chan int) {
break
}
if _, ok := seen[v]; ok {
- panic("got duplicate value: ", v)
+ println("got duplicate value: ", v)
+ panic("fail")
}
seen[v] = true
}
diff --git a/test/chan/nonblock.go b/test/chan/nonblock.go
index 5fd7f0d45..2bc5b6cb2 100644
--- a/test/chan/nonblock.go
+++ b/test/chan/nonblock.go
@@ -13,132 +13,198 @@ import "runtime"
import "time"
func i32receiver(c chan int32, strobe chan bool) {
- if <-c != 123 { panic("i32 value") }
+ if <-c != 123 {
+ panic("i32 value")
+ }
strobe <- true
}
func i32sender(c chan int32, strobe chan bool) {
- c <- 234;
+ c <- 234
strobe <- true
}
func i64receiver(c chan int64, strobe chan bool) {
- if <-c != 123456 { panic("i64 value") }
+ if <-c != 123456 {
+ panic("i64 value")
+ }
strobe <- true
}
func i64sender(c chan int64, strobe chan bool) {
- c <- 234567;
+ c <- 234567
strobe <- true
}
func breceiver(c chan bool, strobe chan bool) {
- if ! <-c { panic("b value") }
+ if !<-c {
+ panic("b value")
+ }
strobe <- true
}
func bsender(c chan bool, strobe chan bool) {
- c <- true;
+ c <- true
strobe <- true
}
func sreceiver(c chan string, strobe chan bool) {
- if <-c != "hello" { panic("s value") }
+ if <-c != "hello" {
+ panic("s value")
+ }
strobe <- true
}
func ssender(c chan string, strobe chan bool) {
- c <- "hello again";
+ c <- "hello again"
strobe <- true
}
-var ticker = time.Tick(10*1000); // 10 us
+var ticker = time.Tick(10 * 1000) // 10 us
func sleep() {
- <-ticker;
- <-ticker;
- runtime.Gosched();
- runtime.Gosched();
- runtime.Gosched();
+ <-ticker
+ <-ticker
+ runtime.Gosched()
+ runtime.Gosched()
+ runtime.Gosched()
}
func main() {
- var i32 int32;
- var i64 int64;
- var b bool;
- var s string;
- var ok bool;
+ var i32 int32
+ var i64 int64
+ var b bool
+ var s string
+ var ok bool
- var sync = make(chan bool);
+ var sync = make(chan bool)
for buffer := 0; buffer < 2; buffer++ {
- c32 := make(chan int32, buffer);
- c64 := make(chan int64, buffer);
- cb := make(chan bool, buffer);
- cs := make(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, sync);
- sleep();
- ok = c32 <- 123;
- if !ok { panic("i32receiver buffer=", buffer) }
- <-sync;
-
- go i32sender(c32, sync);
- if buffer > 0 { <-sync } else { sleep() }
- i32, ok = <-c32;
- if !ok { panic("i32sender buffer=", buffer) }
- if i32 != 234 { panic("i32sender value") }
- if buffer == 0 { <-sync }
-
- go i64receiver(c64, sync);
- sleep();
- ok = c64 <- 123456;
- if !ok { panic("i64receiver") }
- <-sync;
-
- go i64sender(c64, sync);
- if buffer > 0 { <-sync } else { sleep() }
- i64, ok = <-c64;
- if !ok { panic("i64sender") }
- if i64 != 234567 { panic("i64sender value") }
- if buffer == 0 { <-sync }
-
- go breceiver(cb, sync);
- sleep();
- ok = cb <- true;
- if !ok { panic("breceiver") }
- <-sync;
-
- go bsender(cb, sync);
- if buffer > 0 { <-sync } else { sleep() }
- b, ok = <-cb;
- if !ok { panic("bsender") }
- if !b{ panic("bsender value") }
- if buffer == 0 { <-sync }
-
- go sreceiver(cs, sync);
- sleep();
- ok = cs <- "hello";
- if !ok { panic("sreceiver") }
- <-sync;
-
- go ssender(cs, sync);
- if buffer > 0 { <-sync } else { sleep() }
- s, ok = <-cs;
- if !ok { panic("ssender") }
- if s != "hello again" { panic("ssender value") }
- if buffer == 0 { <-sync }
+ c32 := make(chan int32, buffer)
+ c64 := make(chan int64, buffer)
+ cb := make(chan bool, buffer)
+ cs := make(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, sync)
+ sleep()
+ ok = c32 <- 123
+ if !ok {
+ println("i32receiver buffer=", buffer)
+ panic("fail")
+ }
+ <-sync
+
+ go i32sender(c32, sync)
+ if buffer > 0 {
+ <-sync
+ } else {
+ sleep()
+ }
+ i32, ok = <-c32
+ if !ok {
+ println("i32sender buffer=", buffer)
+ panic("fail")
+ }
+ if i32 != 234 {
+ panic("i32sender value")
+ }
+ if buffer == 0 {
+ <-sync
+ }
+
+ go i64receiver(c64, sync)
+ sleep()
+ ok = c64 <- 123456
+ if !ok {
+ panic("i64receiver")
+ }
+ <-sync
+
+ go i64sender(c64, sync)
+ if buffer > 0 {
+ <-sync
+ } else {
+ sleep()
+ }
+ i64, ok = <-c64
+ if !ok {
+ panic("i64sender")
+ }
+ if i64 != 234567 {
+ panic("i64sender value")
+ }
+ if buffer == 0 {
+ <-sync
+ }
+
+ go breceiver(cb, sync)
+ sleep()
+ ok = cb <- true
+ if !ok {
+ panic("breceiver")
+ }
+ <-sync
+
+ go bsender(cb, sync)
+ if buffer > 0 {
+ <-sync
+ } else {
+ sleep()
+ }
+ b, ok = <-cb
+ if !ok {
+ panic("bsender")
+ }
+ if !b {
+ panic("bsender value")
+ }
+ if buffer == 0 {
+ <-sync
+ }
+
+ go sreceiver(cs, sync)
+ sleep()
+ ok = cs <- "hello"
+ if !ok {
+ panic("sreceiver")
+ }
+ <-sync
+
+ go ssender(cs, sync)
+ if buffer > 0 {
+ <-sync
+ } else {
+ sleep()
+ }
+ s, ok = <-cs
+ if !ok {
+ panic("ssender")
+ }
+ if s != "hello again" {
+ panic("ssender value")
+ }
+ if buffer == 0 {
+ <-sync
+ }
}
print("PASS\n")
}
diff --git a/test/chan/sieve1.go b/test/chan/sieve1.go
index d2e7f8786..55076c925 100644
--- a/test/chan/sieve1.go
+++ b/test/chan/sieve1.go
@@ -13,39 +13,42 @@ package main
// Send the sequence 2, 3, 4, ... to channel 'ch'.
func Generate(ch chan<- int) {
for i := 2; ; i++ {
- ch <- i // Send 'i' to channel 'ch'.
+ ch <- i // Send 'i' to channel 'ch'.
}
}
// Copy the values from channel 'in' to channel 'out',
// removing those divisible by 'prime'.
func Filter(in <-chan int, out chan<- int, prime int) {
- for i := range in { // Loop over values received from 'in'.
- if i % prime != 0 {
- out <- i // Send 'i' to channel 'out'.
+ for i := range in { // Loop over values received from 'in'.
+ if i%prime != 0 {
+ out <- i // Send 'i' to channel 'out'.
}
}
}
// The prime sieve: Daisy-chain Filter processes together.
func Sieve(primes chan<- int) {
- ch := make(chan int); // Create a new channel.
- go Generate(ch); // Start Generate() as a subprocess.
+ ch := make(chan int) // Create a new channel.
+ go Generate(ch) // Start Generate() as a subprocess.
for {
// Note that ch is different on each iteration.
- prime := <-ch;
- primes <- prime;
- ch1 := make(chan int);
- go Filter(ch, ch1, prime);
+ prime := <-ch
+ primes <- prime
+ ch1 := make(chan int)
+ go Filter(ch, ch1, prime)
ch = ch1
}
}
func main() {
- primes := make(chan int);
- go Sieve(primes);
- a := []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
+ primes := make(chan int)
+ go Sieve(primes)
+ a := []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
for i := 0; i < len(a); i++ {
- if x := <-primes; x != a[i] { panic(x, " != ", a[i]) }
+ if x := <-primes; x != a[i] {
+ println(x, " != ", a[i])
+ panic("fail")
+ }
}
}
diff --git a/test/chan/sieve2.go b/test/chan/sieve2.go
index e612ff3c3..7f2ed9157 100644
--- a/test/chan/sieve2.go
+++ b/test/chan/sieve2.go
@@ -165,7 +165,8 @@ func main() {
a := []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
for i := 0; i < len(a); i++ {
if x := <-primes; x != a[i] {
- panic(x, " != ", a[i])
+ println(x, " != ", a[i])
+ panic("fail")
}
}
}