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  }