// 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 unsigned int sleep(unsigned int seconds); 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) { start := time.Now() parallelSleep(1) dt := time.Now().Sub(start) // bug used to run sleeps in serial, producing a 2-second delay. if dt >= 1300*time.Millisecond { t.Fatalf("parallel 1-second sleeps slept for %f seconds", dt.Seconds()) } }