syncs: add new package for extra sync types

This commit is contained in:
Brad Fitzpatrick
2020-03-12 11:13:33 -07:00
parent 57f220656c
commit b4d02a251a
2 changed files with 116 additions and 0 deletions

50
syncs/syncs_test.go Normal file
View File

@ -0,0 +1,50 @@
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package syncs
import "testing"
func TestWaitGroupChan(t *testing.T) {
wg := NewWaitGroupChan()
wantNotDone := func() {
t.Helper()
select {
case <-wg.DoneChan():
t.Fatal("done too early")
default:
}
}
wantDone := func() {
t.Helper()
select {
case <-wg.DoneChan():
default:
t.Fatal("expected to be done")
}
}
wg.Add(2)
wantNotDone()
wg.Decr()
wantNotDone()
wg.Decr()
wantDone()
wantDone()
}
func TestClosedChan(t *testing.T) {
ch := ClosedChan()
for i := 0; i < 2; i++ {
select {
case <-ch:
default:
t.Fatal("not closed")
}
}
}