...
1
16
17
18 package waitgroup
19
20 import (
21 "testing"
22 )
23
24 func TestWaitGroup(t *testing.T) {
25 wg1 := &SafeWaitGroup{}
26 wg2 := &SafeWaitGroup{}
27 n := 16
28 wg1.Add(n)
29 wg2.Add(n)
30 exited := make(chan bool, n)
31 for i := 0; i != n; i++ {
32 go func(i int) {
33 wg1.Done()
34 wg2.Wait()
35 exited <- true
36 }(i)
37 }
38 wg1.Wait()
39 for i := 0; i != n; i++ {
40 select {
41 case <-exited:
42 t.Fatal("SafeWaitGroup released group too soon")
43 default:
44 }
45 wg2.Done()
46 }
47 for i := 0; i != n; i++ {
48 <-exited
49 }
50 }
51
52 func TestWaitGroupAddFail(t *testing.T) {
53 wg := &SafeWaitGroup{}
54 wg.Add(1)
55 wg.Done()
56 wg.Wait()
57 if err := wg.Add(1); err == nil {
58 t.Errorf("Should return error when add positive after Wait")
59 }
60 }
61
View as plain text