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 }