Files
quic-go/internal/utils/ringbuffer/ringbuffer_test.go
2023-12-31 20:50:26 -08:00

51 lines
1.2 KiB
Go

package ringbuffer
import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("RingBuffer", func() {
It("push, peek and pop", func() {
r := RingBuffer[int]{}
Expect(len(r.ring)).To(Equal(0))
Expect(func() { r.PopFront() }).To(Panic())
r.PushBack(1)
r.PushBack(2)
r.PushBack(3)
Expect(r.PeekFront()).To(Equal(1))
Expect(r.PeekFront()).To(Equal(1))
Expect(r.PopFront()).To(Equal(1))
Expect(r.PeekFront()).To(Equal(2))
Expect(r.PopFront()).To(Equal(2))
r.PushBack(4)
r.PushBack(5)
Expect(r.Len()).To(Equal(3))
r.PushBack(6)
Expect(r.Len()).To(Equal(4))
Expect(r.PopFront()).To(Equal(3))
Expect(r.PopFront()).To(Equal(4))
Expect(r.PopFront()).To(Equal(5))
Expect(r.PopFront()).To(Equal(6))
})
It("panics when Peek or Pop are called on an empty buffer", func() {
r := RingBuffer[string]{}
Expect(r.Empty()).To(BeTrue())
Expect(r.Len()).To(BeZero())
Expect(func() { r.PeekFront() }).To(Panic())
Expect(func() { r.PopFront() }).To(Panic())
})
It("clearing", func() {
r := RingBuffer[int]{}
r.Init(2)
r.PushBack(1)
r.PushBack(2)
Expect(r.full).To(BeTrue())
r.Clear()
Expect(r.full).To(BeFalse())
Expect(r.Len()).To(Equal(0))
})
})