diff --git a/flatqueue.go b/flatqueue.go index d61f22f..758ca25 100644 --- a/flatqueue.go +++ b/flatqueue.go @@ -99,3 +99,9 @@ func (q *FlatQueue) Peek() int { func (q *FlatQueue) PeekValue() float64 { return q.values[0] } + +func (q *FlatQueue) Clear() { + q.length = 0 + q.ids = q.ids[:0] + q.values = q.values[:0] +} diff --git a/flatqueue_test.go b/flatqueue_test.go index 76d204e..fc2c40d 100644 --- a/flatqueue_test.go +++ b/flatqueue_test.go @@ -211,6 +211,40 @@ func TestPopEmpty(t *testing.T) { New().Pop() } +func TestClear(t *testing.T) { + var q FlatQueue + + q.Clear() // ok to clear empty queue + + q.Push(1, 1) + q.Push(2, 2) + + if q.Len() != 2 { + t.Fatal() + } + + q.Clear() + + if q.Len() != 0 { + t.Fatal() + } + + q.Push(3, 3) + q.Push(4, 4) + + if q.Pop() != 3 { + t.Fatal() + } + + if q.Pop() != 4 { + t.Fatal() + } + + if q.Len() != 0 { + t.Fatal() + } +} + func BenchmarkPush(b *testing.B) { q := New()