// Copyright 2009 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.

// GOMAXPROCS=10 gotest

package sync_test

import (
	. "sync";
	"testing"
)

func HammerSemaphore(s *int32, cdone chan bool) {
	for i := 0; i < 1000; i++ {
		Semacquire(s);
		Semrelease(s);
	}
	cdone <- true;
}

func TestSemaphore(t *testing.T) {
	s := new(int32);
	*s = 1;
	c := make(chan bool);
	for i := 0; i < 10; i++ {
		go HammerSemaphore(s, c);
	}
	for i := 0; i < 10; i++ {
		<-c;
	}
}


func HammerMutex(m *Mutex, cdone chan bool) {
	for i := 0; i < 1000; i++ {
		m.Lock();
		m.Unlock();
	}
	cdone <- true;
}

func TestMutex(t *testing.T) {
	m := new(Mutex);
	c := make(chan bool);
	for i := 0; i < 10; i++ {
		go HammerMutex(m, c);
	}
	for i := 0; i < 10; i++ {
		<-c;
	}
}

