moving averages! dashes!
This commit is contained in:
parent
e4c410621d
commit
96e957daaf
6 changed files with 483 additions and 7 deletions
162
ring_buffer_test.go
Normal file
162
ring_buffer_test.go
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
package chart
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/blendlabs/go-assert"
|
||||
)
|
||||
|
||||
func TestRingBuffer(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
buffer := NewRingBuffer()
|
||||
|
||||
buffer.Enqueue(1)
|
||||
assert.Equal(1, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(1, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(2)
|
||||
assert.Equal(2, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(2, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(3)
|
||||
assert.Equal(3, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(3, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(4)
|
||||
assert.Equal(4, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(4, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(5)
|
||||
assert.Equal(5, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(5, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(6)
|
||||
assert.Equal(6, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(6, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(7)
|
||||
assert.Equal(7, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(7, buffer.PeekBack())
|
||||
|
||||
buffer.Enqueue(8)
|
||||
assert.Equal(8, buffer.Len())
|
||||
assert.Equal(1, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value := buffer.Dequeue()
|
||||
assert.Equal(1, value)
|
||||
assert.Equal(7, buffer.Len())
|
||||
assert.Equal(2, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(2, value)
|
||||
assert.Equal(6, buffer.Len())
|
||||
assert.Equal(3, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(3, value)
|
||||
assert.Equal(5, buffer.Len())
|
||||
assert.Equal(4, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(4, value)
|
||||
assert.Equal(4, buffer.Len())
|
||||
assert.Equal(5, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(5, value)
|
||||
assert.Equal(3, buffer.Len())
|
||||
assert.Equal(6, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(6, value)
|
||||
assert.Equal(2, buffer.Len())
|
||||
assert.Equal(7, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(7, value)
|
||||
assert.Equal(1, buffer.Len())
|
||||
assert.Equal(8, buffer.Peek())
|
||||
assert.Equal(8, buffer.PeekBack())
|
||||
|
||||
value = buffer.Dequeue()
|
||||
assert.Equal(8, value)
|
||||
assert.Equal(0, buffer.Len())
|
||||
assert.Nil(buffer.Peek())
|
||||
assert.Nil(buffer.PeekBack())
|
||||
}
|
||||
|
||||
func TestRingBufferClear(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
buffer := NewRingBuffer()
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(1)
|
||||
|
||||
assert.Equal(8, buffer.Len())
|
||||
|
||||
buffer.Clear()
|
||||
assert.Equal(0, buffer.Len())
|
||||
assert.Nil(buffer.Peek())
|
||||
assert.Nil(buffer.PeekBack())
|
||||
}
|
||||
|
||||
func TestRingBufferAsSlice(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
buffer := NewRingBuffer()
|
||||
buffer.Enqueue(1)
|
||||
buffer.Enqueue(2)
|
||||
buffer.Enqueue(3)
|
||||
buffer.Enqueue(4)
|
||||
buffer.Enqueue(5)
|
||||
|
||||
contents := buffer.AsSlice()
|
||||
assert.Len(contents, 5)
|
||||
assert.Equal(1, contents[0])
|
||||
assert.Equal(2, contents[1])
|
||||
assert.Equal(3, contents[2])
|
||||
assert.Equal(4, contents[3])
|
||||
assert.Equal(5, contents[4])
|
||||
}
|
||||
|
||||
func TestRingBufferEach(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
buffer := NewRingBuffer()
|
||||
|
||||
for x := 1; x < 17; x++ {
|
||||
buffer.Enqueue(x)
|
||||
}
|
||||
|
||||
called := 0
|
||||
buffer.Each(func(v interface{}) {
|
||||
if typed, isTyped := v.(int); isTyped {
|
||||
if typed == (called + 1) {
|
||||
called++
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
assert.Equal(16, called)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue