package commander import ( "sync/atomic" "testing" "time" "github.com/stretchr/testify/require" ) func TestNewSemaphore(t *testing.T) { t.Parallel() sem := NewSemaphore(2) var locked atomic.Uint32 for i := 0; i < 3; i++ { go func() { sem.Acquire() locked.Add(1) }() } time.Sleep(time.Microsecond * 10) require.Equal(t, uint32(2), locked.Load()) sem.Release() time.Sleep(time.Microsecond) require.Equal(t, uint32(3), locked.Load()) sem.Release() sem.Release() }