github.com/lingyao2333/mo-zero@v1.4.1/core/collection/ring_test.go (about) 1 package collection 2 3 import ( 4 "sync" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestNewRing(t *testing.T) { 11 assert.Panics(t, func() { 12 NewRing(0) 13 }) 14 } 15 16 func TestRingLess(t *testing.T) { 17 ring := NewRing(5) 18 for i := 0; i < 3; i++ { 19 ring.Add(i) 20 } 21 elements := ring.Take() 22 assert.ElementsMatch(t, []interface{}{0, 1, 2}, elements) 23 } 24 25 func TestRingMore(t *testing.T) { 26 ring := NewRing(5) 27 for i := 0; i < 11; i++ { 28 ring.Add(i) 29 } 30 elements := ring.Take() 31 assert.ElementsMatch(t, []interface{}{6, 7, 8, 9, 10}, elements) 32 } 33 34 func TestRingAdd(t *testing.T) { 35 ring := NewRing(5051) 36 wg := sync.WaitGroup{} 37 for i := 1; i <= 100; i++ { 38 wg.Add(1) 39 go func(i int) { 40 defer wg.Done() 41 for j := 1; j <= i; j++ { 42 ring.Add(i) 43 } 44 }(i) 45 } 46 wg.Wait() 47 assert.Equal(t, 5050, len(ring.Take())) 48 } 49 50 func BenchmarkRingAdd(b *testing.B) { 51 ring := NewRing(500) 52 b.RunParallel(func(pb *testing.PB) { 53 for pb.Next() { 54 for i := 0; i < b.N; i++ { 55 ring.Add(i) 56 } 57 } 58 }) 59 }