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  }