package sync import ( "context" "testing" "time" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) func TestKeyLocker(t *testing.T) { taken := false eg, _ := errgroup.WithContext(context.Background()) keyLocker := NewKeyLocker[int]() for i := 0; i < 100; i++ { eg.Go(func() error { keyLocker.Lock(0) defer keyLocker.Unlock(0) require.False(t, taken) taken = true require.True(t, taken) time.Sleep(10 * time.Millisecond) taken = false require.False(t, taken) return nil }) } require.NoError(t, eg.Wait()) }