1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package syncx
- import (
- "sync"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- )
- func TestTryLock(t *testing.T) {
- var lock SpinLock
- assert.True(t, lock.TryLock())
- assert.False(t, lock.TryLock())
- lock.Unlock()
- assert.True(t, lock.TryLock())
- }
- func TestSpinLock(t *testing.T) {
- var lock SpinLock
- lock.Lock()
- assert.False(t, lock.TryLock())
- lock.Unlock()
- assert.True(t, lock.TryLock())
- }
- func TestSpinLockRace(t *testing.T) {
- var lock SpinLock
- lock.Lock()
- var wait sync.WaitGroup
- wait.Add(1)
- go func() {
- lock.Lock()
- lock.Unlock()
- wait.Done()
- }()
- time.Sleep(time.Millisecond * 100)
- lock.Unlock()
- wait.Wait()
- assert.True(t, lock.TryLock())
- }
|