ring_test.go 997 B

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