// 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) {
	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())
	}
}
