// Copyright 2011 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 cgotest /* #include extern void BackgroundSleep(int); void twoSleep(int n) { BackgroundSleep(n); sleep(n); } */ import "C" import ( "testing" "time" ) var sleepDone = make(chan bool) func parallelSleep(n int) { C.twoSleep(C.int(n)) <-sleepDone } //export BackgroundSleep func BackgroundSleep(n int){ go func(){ C.sleep(C.uint(n)) sleepDone <- true }() } func TestParallelSleep(t *testing.T) { dt := -time.Nanoseconds() parallelSleep(1) dt += time.Nanoseconds() // bug used to run sleeps in serial, producing a 2-second delay. if dt >= 1.3e9 { t.Fatalf("parallel 1-second sleeps slept for %f seconds", float64(dt)/1e9) } }