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  }