You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

semaphores_test.go 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright (c) 2019 Shivaram Lingamneni
  2. // released under the MIT license
  3. package utils
  4. import (
  5. "testing"
  6. "time"
  7. )
  8. func TestTryAcquire(t *testing.T) {
  9. count := 3
  10. var sem Semaphore
  11. sem.Initialize(count)
  12. for i := 0; i < count; i++ {
  13. assertEqual(sem.TryAcquire(), true, t)
  14. }
  15. // used up the capacity
  16. assertEqual(sem.TryAcquire(), false, t)
  17. sem.Release()
  18. // got one slot back
  19. assertEqual(sem.TryAcquire(), true, t)
  20. }
  21. func TestAcquireWithTimeout(t *testing.T) {
  22. var sem Semaphore
  23. sem.Initialize(1)
  24. assertEqual(sem.TryAcquire(), true, t)
  25. // cannot acquire the held semaphore
  26. assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), false, t)
  27. sem.Release()
  28. // can acquire the released semaphore
  29. assertEqual(sem.AcquireWithTimeout(100*time.Millisecond), true, t)
  30. sem.Release()
  31. // XXX this test could fail if the machine is extremely overloaded
  32. sem.Acquire()
  33. go func() {
  34. time.Sleep(100 * time.Millisecond)
  35. sem.Release()
  36. }()
  37. // we should acquire successfully after approximately 100 msec
  38. assertEqual(sem.AcquireWithTimeout(1*time.Second), true, t)
  39. }