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