1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
11 func TestCondSignal(t
*testing
.T
) {
15 running
:= make(chan bool, n
)
16 awake
:= make(chan bool, n
)
17 for i
:= 0; i
< n
; i
++ {
26 for i
:= 0; i
< n
; i
++ {
27 <-running
// Wait for everyone to run.
32 t
.Fatal("goroutine not asleep")
38 <-awake
// Will deadlock if no goroutine wakes up
41 t
.Fatal("too many goroutines awake")
49 func TestCondSignalGenerations(t
*testing
.T
) {
53 running
:= make(chan bool, n
)
54 awake
:= make(chan int, n
)
55 for i
:= 0; i
< n
; i
++ {
66 t
.Fatalf("wrong goroutine woke up: want %d, got %d", i
-1, a
)
76 func TestCondBroadcast(t
*testing
.T
) {
80 running
:= make(chan int, n
)
81 awake
:= make(chan int, n
)
83 for i
:= 0; i
< n
; i
++ {
94 for i
:= 0; i
< n
; i
++ {
95 for i
:= 0; i
< n
; i
++ {
96 <-running
// Will deadlock unless n are running.
105 t
.Fatal("goroutine not asleep")
111 seen
:= make([]bool, n
)
112 for i
:= 0; i
< n
; i
++ {
115 t
.Fatal("goroutine woke up twice")
122 t
.Fatal("goroutine did not exit")