6
0
mirror of https://git.mills.io/prologic/msgbus.git synced 2024-06-20 13:59:01 +00:00
prologic-msgbus/queue_test.go

124 lines
1.9 KiB
Go
Raw Normal View History

2017-06-03 15:16:17 +00:00
package msgbus
import (
"fmt"
2017-06-03 15:16:17 +00:00
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2017-06-03 15:16:17 +00:00
)
func TestEmpty(t *testing.T) {
q := NewQueue()
assert.Zero(t, q.Len())
assert.True(t, q.Empty())
2017-06-03 15:16:17 +00:00
}
func TestSimple(t *testing.T) {
assert := assert.New(t)
2017-06-03 15:16:17 +00:00
q := NewQueue()
2017-06-03 15:16:17 +00:00
for i := 0; i < minCapacity; i++ {
q.Push(i)
}
assert.Equal(minCapacity, q.Len())
for i := 0; i < minCapacity; i++ {
assert.Equal(q.Peek(), i)
assert.Equal(q.Pop(), i)
}
2017-06-03 15:16:17 +00:00
}
func TestForEach(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
q := NewQueue()
ys := []int{0, 1, 2, 3}
for _, y := range ys {
q.Push(y)
}
assert.Equal(4, q.Len())
var xs []int
err := q.ForEach(func(e interface{}) error {
i, ok := e.(int)
if !ok {
return fmt.Errorf("unexpected type %T", e)
}
xs = append(xs, i)
return nil
})
require.NoError(err)
assert.Equal(ys, xs)
}
func TestMaxLen(t *testing.T) {
q := Queue{maxlen: minCapacity}
assert.Equal(t, q.MaxLen(), minCapacity)
2017-06-03 15:16:17 +00:00
}
func TestFull(t *testing.T) {
q := Queue{maxlen: minCapacity}
for i := 0; i < minCapacity; i++ {
2017-06-03 15:16:17 +00:00
q.Push(i)
}
assert.True(t, q.Full())
2017-06-03 15:16:17 +00:00
}
func TestBufferWrap(t *testing.T) {
q := NewQueue()
for i := 0; i < minCapacity; i++ {
q.Push(i)
}
for i := 0; i < 3; i++ {
q.Pop()
q.Push(minCapacity + i)
}
for i := 0; i < minCapacity; i++ {
assert.Equal(t, q.Peek().(int), i+3)
q.Pop()
2017-06-03 15:16:17 +00:00
}
}
func TestLen(t *testing.T) {
assert := assert.New(t)
q := NewQueue()
assert.Zero(q.Len())
for i := 0; i < 1000; i++ {
q.Push(i)
assert.Equal(q.Len(), i+1)
}
for i := 0; i < 1000; i++ {
q.Pop()
assert.Equal(q.Len(), 1000-i-1)
2017-06-03 15:16:17 +00:00
}
}
func BenchmarkPush(b *testing.B) {
q := NewQueue()
2017-06-03 15:16:17 +00:00
for i := 0; i < b.N; i++ {
q.Push(i)
2017-06-03 15:16:17 +00:00
}
}
func BenchmarkPushPop(b *testing.B) {
q := NewQueue()
2017-06-03 15:16:17 +00:00
for i := 0; i < b.N; i++ {
q.Push(i)
}
for i := 0; i < b.N; i++ {
q.Pop()
}
}