| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package semaphore
- import (
- "testing"
- "time"
- )
- func TestSemaphoreAcquireRelease(t *testing.T) {
- sem := New(3, 1*time.Second)
- for i := 0; i < 10; i++ {
- if err := sem.Acquire(); err != nil {
- t.Error(err)
- }
- if err := sem.Acquire(); err != nil {
- t.Error(err)
- }
- if err := sem.Acquire(); err != nil {
- t.Error(err)
- }
- sem.Release()
- sem.Release()
- sem.Release()
- }
- }
- func TestSemaphoreBlockTimeout(t *testing.T) {
- sem := New(1, 200*time.Millisecond)
- if err := sem.Acquire(); err != nil {
- t.Error(err)
- }
- start := time.Now()
- if err := sem.Acquire(); err != ErrNoTickets {
- t.Error(err)
- }
- if start.Add(200 * time.Millisecond).After(time.Now()) {
- t.Error("semaphore did not wait long enough")
- }
- sem.Release()
- if err := sem.Acquire(); err != nil {
- t.Error(err)
- }
- }
- func TestSemaphoreEmpty(t *testing.T) {
- sem := New(2, 200*time.Millisecond)
- if !sem.IsEmpty() {
- t.Error("semaphore should be empty")
- }
- sem.Acquire()
- if sem.IsEmpty() {
- t.Error("semaphore should not be empty")
- }
- sem.Release()
- if !sem.IsEmpty() {
- t.Error("semaphore should be empty")
- }
- }
- func ExampleSemaphore() {
- sem := New(3, 1*time.Second)
- for i := 0; i < 10; i++ {
- go func() {
- if err := sem.Acquire(); err != nil {
- return //could not acquire semaphore
- }
- defer sem.Release()
- // do something semaphore-guarded
- }()
- }
- }
|