github.com/teng231/glock@v1.1.11/kmutex_test.go (about) 1 package glock 2 3 import ( 4 "sync" 5 "testing" 6 ) 7 8 const number = 100 9 10 func TestKmutex(t *testing.T) { 11 wg := sync.WaitGroup{} 12 13 km := CreateKmutexInstance() 14 15 ids := []int{} 16 17 for i := 0; i < number; i++ { 18 ids = append(ids, i) 19 } 20 21 ii := 0 22 for i := 0; i < number*number; i++ { 23 wg.Add(1) 24 go func(iii int) { 25 km.Lock(ids[iii]) 26 km.Unlock(ids[iii]) 27 wg.Done() 28 }(ii) 29 ii++ 30 if ii == number { 31 ii = 0 32 } 33 } 34 wg.Wait() 35 } 36 37 func TestWithLock(t *testing.T) { 38 wg := sync.WaitGroup{} 39 l := sync.Mutex{} 40 km := WithLock(&l) 41 42 ids := []int{} 43 44 for i := 0; i < number; i++ { 45 ids = append(ids, i) 46 } 47 48 ii := 0 49 for i := 0; i < number*number; i++ { 50 wg.Add(1) 51 go func(iii int) { 52 km.Lock(ids[iii]) 53 km.Unlock(ids[iii]) 54 wg.Done() 55 }(ii) 56 ii++ 57 if ii == number { 58 ii = 0 59 } 60 } 61 wg.Wait() 62 } 63 64 func TestLockerInterface(t *testing.T) { 65 km := CreateKmutexInstance() 66 67 locker := km.Locker("TEST") 68 69 cond := sync.NewCond(locker) 70 71 if false { 72 cond.Wait() 73 } 74 } 75 76 func BenchmarkKmutex100t(t *testing.B) { 77 km := CreateKmutexInstance() 78 for i := 0; i < 100; i++ { 79 km.Lock(i) 80 km.Unlock(i) 81 } 82 } 83 84 func BenchmarkKmutex10000t(t *testing.B) { 85 km := CreateKmutexInstance() 86 for i := 0; i < 10000; i++ { 87 km.Lock(i) 88 km.Unlock(i) 89 } 90 } 91 92 func BenchmarkKmutex100000tMultiples(t *testing.B) { 93 km := CreateKmutexInstance() 94 wg := &sync.WaitGroup{} 95 c := make(chan int, 20000) 96 for i := 0; i < 0; i++ { 97 go func() { 98 for { 99 j := <-c 100 // log.Print(j) 101 km.Lock(j) 102 km.Unlock(j) 103 wg.Done() 104 } 105 }() 106 } 107 108 for i := 0; i < 100000; i++ { 109 c <- i 110 wg.Add(1) 111 } 112 wg.Wait() 113 }