github.com/andy2046/gopie@v0.7.0/pkg/semaphore/semaphore_test.go (about) 1 package semaphore 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 ) 8 9 func work() { 10 time.Sleep(100 * time.Millisecond) 11 } 12 13 func TestSemaphore(t *testing.T) { 14 s := New(1) 15 ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) 16 17 if err := s.Acquire(ctx); err != nil { 18 t.Fatal(err) 19 } 20 work() 21 if err := s.Release(ctx); err != nil { 22 t.Fatal(err) 23 } 24 cancel() 25 } 26 27 func BenchmarkSemaphore(b *testing.B) { 28 s := New(1) 29 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) 30 31 b.ResetTimer() 32 for i := 0; i < b.N; i++ { 33 if err := s.Acquire(ctx); err != nil { 34 b.Fatal(err) 35 } 36 if err := s.Release(ctx); err != nil { 37 b.Fatal(err) 38 } 39 } 40 cancel() 41 }