diff options
author | Michael Stapelberg <stapelberg@debian.org> | 2013-03-04 21:27:36 +0100 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2013-03-04 21:27:36 +0100 |
commit | 04b08da9af0c450d645ab7389d1467308cfc2db8 (patch) | |
tree | db247935fa4f2f94408edc3acd5d0d4f997aa0d8 /src/pkg/sync/once_test.go | |
parent | 917c5fb8ec48e22459d77e3849e6d388f93d3260 (diff) | |
download | golang-upstream/1.1_hg20130304.tar.gz |
Imported Upstream version 1.1~hg20130304upstream/1.1_hg20130304
Diffstat (limited to 'src/pkg/sync/once_test.go')
-rw-r--r-- | src/pkg/sync/once_test.go | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/pkg/sync/once_test.go b/src/pkg/sync/once_test.go index 37075af17..183069a1a 100644 --- a/src/pkg/sync/once_test.go +++ b/src/pkg/sync/once_test.go @@ -17,8 +17,11 @@ func (o *one) Increment() { *o++ } -func run(once *Once, o *one, c chan bool) { +func run(t *testing.T, once *Once, o *one, c chan bool) { once.Do(func() { o.Increment() }) + if v := *o; v != 1 { + t.Errorf("once failed inside run: %d is not 1", v) + } c <- true } @@ -28,14 +31,34 @@ func TestOnce(t *testing.T) { c := make(chan bool) const N = 10 for i := 0; i < N; i++ { - go run(once, o, c) + go run(t, once, o, c) } for i := 0; i < N; i++ { <-c } if *o != 1 { - t.Errorf("once failed: %d is not 1", *o) + t.Errorf("once failed outside run: %d is not 1", *o) + } +} + +func TestOncePanic(t *testing.T) { + once := new(Once) + for i := 0; i < 2; i++ { + func() { + defer func() { + if recover() == nil { + t.Fatalf("Once.Do() has not panic'ed") + } + }() + once.Do(func() { + panic("failed") + }) + }() } + once.Do(func() {}) + once.Do(func() { + t.Fatalf("Once called twice") + }) } func BenchmarkOnce(b *testing.B) { |