diff options
author | Russ Cox <rsc@golang.org> | 2010-03-30 10:34:57 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-03-30 10:34:57 -0700 |
commit | e37b45c553f866ff651efccb092694e7638c696b (patch) | |
tree | 2ad4647a66bf21bf56d761edba537c237b8e318a /test/chan | |
parent | e080bcef69024ef4ff6798a20166bb6978ceb050 (diff) | |
download | go-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.go | 3 | ||||
-rw-r--r-- | test/chan/nonblock.go | 242 | ||||
-rw-r--r-- | test/chan/sieve1.go | 31 | ||||
-rw-r--r-- | test/chan/sieve2.go | 3 |
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") } } } |