github.com/pharosnet/flyline@v1.0.2/sequence_test.go (about)

     1  package flyline
     2  
     3  import (
     4  	"runtime"
     5  	"sync"
     6  	"testing"
     7  )
     8  
     9  func TestNewSequence(t *testing.T) {
    10  	seq := NewSequence()
    11  	if seq.Get() == -1 {
    12  		t.Logf("seq %v", seq)
    13  	} else {
    14  		t.Errorf("seq %v", seq)
    15  	}
    16  }
    17  
    18  func TestSequence_Incr(t *testing.T) {
    19  	seq := NewSequence()
    20  	v := seq.Get()
    21  	n := seq.Incr()
    22  	if n == v+1 {
    23  		t.Logf("seq incr: %v -> %v", v, n)
    24  	} else {
    25  		t.Errorf("seq incr: %v -> %v", v, n)
    26  	}
    27  	t.Log("thread safe testing....")
    28  	runtime.GOMAXPROCS(4)
    29  	wg := new(sync.WaitGroup)
    30  	for i := 0; i < 20; i++ {
    31  		wg.Add(1)
    32  		go func(seq *Sequence, wg *sync.WaitGroup) {
    33  			defer wg.Done()
    34  			t.Logf("seq now: %v incr : %v, get : %v", seq.Get(), seq.Incr(), seq.Get())
    35  		}(seq, wg)
    36  	}
    37  	wg.Wait()
    38  }
    39  
    40  func TestSequence_Decr(t *testing.T) {
    41  	seq := NewSequence()
    42  	v := seq.Get()
    43  	n := seq.Decr()
    44  	if n == v-1 {
    45  		t.Logf("seq incr: %v -> %v", v, n)
    46  	} else {
    47  		t.Errorf("seq incr: %v -> %v", v, n)
    48  	}
    49  	t.Log("thread safe testing....")
    50  	runtime.GOMAXPROCS(4)
    51  	wg := new(sync.WaitGroup)
    52  	for i := 0; i < 20; i++ {
    53  		wg.Add(1)
    54  		go func(seq *Sequence, wg *sync.WaitGroup) {
    55  			defer wg.Done()
    56  			t.Logf("seq now: %v incr : %v, get : %v", seq.Get(), seq.Decr(), seq.Get())
    57  		}(seq, wg)
    58  	}
    59  	wg.Wait()
    60  }