// 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>

unsigned int sleep(unsigned int seconds);

extern void BackgroundSleep(int);
void twoSleep(int);
*/
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())
	}
}
