fifo_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package collection
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func TestFifo(t *testing.T) {
  7. elements := [][]byte{
  8. []byte("hello"),
  9. []byte("world"),
  10. []byte("again"),
  11. }
  12. queue := NewQueue(8)
  13. for i := range elements {
  14. queue.Put(elements[i])
  15. }
  16. for _, element := range elements {
  17. body, ok := queue.Take()
  18. assert.True(t, ok)
  19. assert.Equal(t, string(element), string(body.([]byte)))
  20. }
  21. }
  22. func TestTakeTooMany(t *testing.T) {
  23. elements := [][]byte{
  24. []byte("hello"),
  25. []byte("world"),
  26. []byte("again"),
  27. }
  28. queue := NewQueue(8)
  29. for i := range elements {
  30. queue.Put(elements[i])
  31. }
  32. for range elements {
  33. queue.Take()
  34. }
  35. assert.True(t, queue.Empty())
  36. _, ok := queue.Take()
  37. assert.False(t, ok)
  38. }
  39. func TestPutMore(t *testing.T) {
  40. elements := [][]byte{
  41. []byte("hello"),
  42. []byte("world"),
  43. []byte("again"),
  44. }
  45. queue := NewQueue(2)
  46. for i := range elements {
  47. queue.Put(elements[i])
  48. }
  49. for _, element := range elements {
  50. body, ok := queue.Take()
  51. assert.True(t, ok)
  52. assert.Equal(t, string(element), string(body.([]byte)))
  53. }
  54. }
  55. func TestPutMoreWithHeaderNotZero(t *testing.T) {
  56. elements := [][]byte{
  57. []byte("hello"),
  58. []byte("world"),
  59. []byte("again"),
  60. }
  61. queue := NewQueue(4)
  62. for i := range elements {
  63. queue.Put(elements[i])
  64. }
  65. // take 1
  66. body, ok := queue.Take()
  67. assert.True(t, ok)
  68. element, ok := body.([]byte)
  69. assert.True(t, ok)
  70. assert.Equal(t, element, []byte("hello"))
  71. // put more
  72. queue.Put([]byte("b4"))
  73. queue.Put([]byte("b5")) // will store in elements[0]
  74. queue.Put([]byte("b6")) // cause expansion
  75. results := [][]byte{
  76. []byte("world"),
  77. []byte("again"),
  78. []byte("b4"),
  79. []byte("b5"),
  80. []byte("b6"),
  81. }
  82. for _, element := range results {
  83. body, ok := queue.Take()
  84. assert.True(t, ok)
  85. assert.Equal(t, string(element), string(body.([]byte)))
  86. }
  87. }