1package seq 2 3import ( 4 "testing" 5 6 "github.com/blend/go-sdk/assert" 7) 8 9func TestBuffer(t *testing.T) { 10 assert := assert.New(t) 11 12 buffer := NewBuffer() 13 14 buffer.Enqueue(1) 15 assert.Equal(1, buffer.Len()) 16 assert.Equal(1, buffer.Peek()) 17 assert.Equal(1, buffer.PeekBack()) 18 19 buffer.Enqueue(2) 20 assert.Equal(2, buffer.Len()) 21 assert.Equal(1, buffer.Peek()) 22 assert.Equal(2, buffer.PeekBack()) 23 24 buffer.Enqueue(3) 25 assert.Equal(3, buffer.Len()) 26 assert.Equal(1, buffer.Peek()) 27 assert.Equal(3, buffer.PeekBack()) 28 29 buffer.Enqueue(4) 30 assert.Equal(4, buffer.Len()) 31 assert.Equal(1, buffer.Peek()) 32 assert.Equal(4, buffer.PeekBack()) 33 34 buffer.Enqueue(5) 35 assert.Equal(5, buffer.Len()) 36 assert.Equal(1, buffer.Peek()) 37 assert.Equal(5, buffer.PeekBack()) 38 39 buffer.Enqueue(6) 40 assert.Equal(6, buffer.Len()) 41 assert.Equal(1, buffer.Peek()) 42 assert.Equal(6, buffer.PeekBack()) 43 44 buffer.Enqueue(7) 45 assert.Equal(7, buffer.Len()) 46 assert.Equal(1, buffer.Peek()) 47 assert.Equal(7, buffer.PeekBack()) 48 49 buffer.Enqueue(8) 50 assert.Equal(8, buffer.Len()) 51 assert.Equal(1, buffer.Peek()) 52 assert.Equal(8, buffer.PeekBack()) 53 54 value := buffer.Dequeue() 55 assert.Equal(1, value) 56 assert.Equal(7, buffer.Len()) 57 assert.Equal(2, buffer.Peek()) 58 assert.Equal(8, buffer.PeekBack()) 59 60 value = buffer.Dequeue() 61 assert.Equal(2, value) 62 assert.Equal(6, buffer.Len()) 63 assert.Equal(3, buffer.Peek()) 64 assert.Equal(8, buffer.PeekBack()) 65 66 value = buffer.Dequeue() 67 assert.Equal(3, value) 68 assert.Equal(5, buffer.Len()) 69 assert.Equal(4, buffer.Peek()) 70 assert.Equal(8, buffer.PeekBack()) 71 72 value = buffer.Dequeue() 73 assert.Equal(4, value) 74 assert.Equal(4, buffer.Len()) 75 assert.Equal(5, buffer.Peek()) 76 assert.Equal(8, buffer.PeekBack()) 77 78 value = buffer.Dequeue() 79 assert.Equal(5, value) 80 assert.Equal(3, buffer.Len()) 81 assert.Equal(6, buffer.Peek()) 82 assert.Equal(8, buffer.PeekBack()) 83 84 value = buffer.Dequeue() 85 assert.Equal(6, value) 86 assert.Equal(2, buffer.Len()) 87 assert.Equal(7, buffer.Peek()) 88 assert.Equal(8, buffer.PeekBack()) 89 90 value = buffer.Dequeue() 91 assert.Equal(7, value) 92 assert.Equal(1, buffer.Len()) 93 assert.Equal(8, buffer.Peek()) 94 assert.Equal(8, buffer.PeekBack()) 95 96 value = buffer.Dequeue() 97 assert.Equal(8, value) 98 assert.Equal(0, buffer.Len()) 99 assert.Zero(buffer.Peek()) 100 assert.Zero(buffer.PeekBack()) 101} 102 103func TestBufferClear(t *testing.T) { 104 assert := assert.New(t) 105 106 buffer := NewBuffer() 107 buffer.Enqueue(1) 108 buffer.Enqueue(1) 109 buffer.Enqueue(1) 110 buffer.Enqueue(1) 111 buffer.Enqueue(1) 112 buffer.Enqueue(1) 113 buffer.Enqueue(1) 114 buffer.Enqueue(1) 115 116 assert.Equal(8, buffer.Len()) 117 118 buffer.Clear() 119 assert.Equal(0, buffer.Len()) 120 assert.Zero(buffer.Peek()) 121 assert.Zero(buffer.PeekBack()) 122} 123 124func TestBufferArray(t *testing.T) { 125 assert := assert.New(t) 126 127 buffer := NewBuffer() 128 buffer.Enqueue(1) 129 buffer.Enqueue(2) 130 buffer.Enqueue(3) 131 buffer.Enqueue(4) 132 buffer.Enqueue(5) 133 134 contents := buffer.Array() 135 assert.Len(5, contents) 136 assert.Equal(1, contents[0]) 137 assert.Equal(2, contents[1]) 138 assert.Equal(3, contents[2]) 139 assert.Equal(4, contents[3]) 140 assert.Equal(5, contents[4]) 141} 142 143func TestBufferEach(t *testing.T) { 144 assert := assert.New(t) 145 146 buffer := NewBuffer() 147 148 for x := 1; x < 17; x++ { 149 buffer.Enqueue(float64(x)) 150 } 151 152 called := 0 153 buffer.Each(func(_ int, v float64) { 154 if v == float64(called+1) { 155 called++ 156 } 157 }) 158 159 assert.Equal(16, called) 160} 161 162func TestNewBuffer(t *testing.T) { 163 assert := assert.New(t) 164 165 empty := NewBuffer() 166 assert.NotNil(empty) 167 assert.Zero(empty.Len()) 168 assert.Equal(bufferDefaultCapacity, empty.Capacity()) 169 assert.Zero(empty.Peek()) 170 assert.Zero(empty.PeekBack()) 171} 172 173func TestNewBufferWithValues(t *testing.T) { 174 assert := assert.New(t) 175 176 values := NewBuffer(1, 2, 3, 4, 5) 177 assert.NotNil(values) 178 assert.Equal(5, values.Len()) 179 assert.Equal(1, values.Peek()) 180 assert.Equal(5, values.PeekBack()) 181} 182 183func TestBufferGrowth(t *testing.T) { 184 assert := assert.New(t) 185 186 values := NewBuffer(1, 2, 3, 4, 5) 187 for i := 0; i < 1<<10; i++ { 188 values.Enqueue(float64(i)) 189 } 190 191 assert.Equal(1<<10-1, values.PeekBack()) 192} 193