// 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 <unistd.h>

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)
	}
}
