123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- package collection
- import (
- "testing"
- "github.com/stretchr/testify/assert"
- )
- func TestFifo(t *testing.T) {
- elements := [][]byte{
- []byte("hello"),
- []byte("world"),
- []byte("again"),
- }
- queue := NewQueue(8)
- for i := range elements {
- queue.Put(elements[i])
- }
- for _, element := range elements {
- body, ok := queue.Take()
- assert.True(t, ok)
- assert.Equal(t, string(element), string(body.([]byte)))
- }
- }
- func TestTakeTooMany(t *testing.T) {
- elements := [][]byte{
- []byte("hello"),
- []byte("world"),
- []byte("again"),
- }
- queue := NewQueue(8)
- for i := range elements {
- queue.Put(elements[i])
- }
- for range elements {
- queue.Take()
- }
- assert.True(t, queue.Empty())
- _, ok := queue.Take()
- assert.False(t, ok)
- }
- func TestPutMore(t *testing.T) {
- elements := [][]byte{
- []byte("hello"),
- []byte("world"),
- []byte("again"),
- }
- queue := NewQueue(2)
- for i := range elements {
- queue.Put(elements[i])
- }
- for _, element := range elements {
- body, ok := queue.Take()
- assert.True(t, ok)
- assert.Equal(t, string(element), string(body.([]byte)))
- }
- }
- func TestPutMoreWithHeaderNotZero(t *testing.T) {
- elements := [][]byte{
- []byte("hello"),
- []byte("world"),
- []byte("again"),
- }
- queue := NewQueue(4)
- for i := range elements {
- queue.Put(elements[i])
- }
- // take 1
- body, ok := queue.Take()
- assert.True(t, ok)
- element, ok := body.([]byte)
- assert.True(t, ok)
- assert.Equal(t, element, []byte("hello"))
- // put more
- queue.Put([]byte("b4"))
- queue.Put([]byte("b5")) // will store in elements[0]
- queue.Put([]byte("b6")) // cause expansion
- results := [][]byte{
- []byte("world"),
- []byte("again"),
- []byte("b4"),
- []byte("b5"),
- []byte("b6"),
- }
- for _, element := range results {
- body, ok := queue.Take()
- assert.True(t, ok)
- assert.Equal(t, string(element), string(body.([]byte)))
- }
- }
|