// 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. package sync_test import ( . "sync" "testing" ) type one int func (o *one) Increment() { *o++ } func run(once *Once, o *one, c chan bool) { once.Do(func() { o.Increment() }) c <- true } func TestOnce(t *testing.T) { o := new(one) once := new(Once) c := make(chan bool) const N = 10 for i := 0; i < N; i++ { go run(once, o, c) } for i := 0; i < N; i++ { <-c } if *o != 1 { t.Errorf("once failed: %d is not 1", *o) } }