From f6c13bb2b739d6bd3f58bc9ec754286c9beb7bb7 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Wed, 16 Jul 2008 14:41:27 -0700 Subject: [PATCH] add test for non-blocking channel ops SVN=127595 --- test/chan/nonblock.go | 107 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 test/chan/nonblock.go diff --git a/test/chan/nonblock.go b/test/chan/nonblock.go new file mode 100644 index 0000000000..4a6857d508 --- /dev/null +++ b/test/chan/nonblock.go @@ -0,0 +1,107 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// 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. + +// Verify channel operations that test for blocking +// Use several sizes and types of operands + +package main + +func pause() { + for i:=0; i<100; i++ { sys.gosched() } +} + +func i32receiver(c *chan int32) { + <-c +} + +func i32sender(c *chan int32) { + c -< 1 +} + +func i64receiver(c *chan int64) { + <-c +} + +func i64sender(c *chan int64) { + c -< 1 +} + +func breceiver(c *chan bool) { + <-c +} + +func bsender(c *chan bool) { + c -< true +} + +func sreceiver(c *chan string) { + <-c +} + +func ssender(c *chan string) { + c -< "hi" +} + +func main() { + var i32 int32; + var i64 int64; + var b bool; + 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 -< 1; + if !ok { panic "i32receiver" } + go i32sender(c32); + pause(); + i32, ok = <-c32; + if !ok { panic "i32sender" } + + go i64receiver(c64); + pause(); + ok = c64 -< 1; + if !ok { panic "i64receiver" } + go i64sender(c64); + pause(); + i64, ok = <-c64; + if !ok { panic "i64sender" } + + go breceiver(cb); + pause(); + ok = cb -< true; + if !ok { panic "breceiver" } + go bsender(cb); + pause(); + b, ok = <-cb; + if !ok { panic "bsender" } + + go sreceiver(cs); + pause(); + ok = cs -< "hi"; + if !ok { panic "sreceiver" } + go ssender(cs); + pause(); + s, ok = <-cs; + if !ok { panic "ssender" } +} -- 2.48.1