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

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

