From c47ca6ffee0e21fc3733c0b4237d18d2e00cc111 Mon Sep 17 00:00:00 2001 From: maohuazhu <34360891+neal-zhu@users.noreply.github.com> Date: Sat, 21 Mar 2020 23:01:58 +0800 Subject: [PATCH] Fix Reset() and add TestResetFullQueue (#213) --- queue/bytes_queue.go | 1 + queue/bytes_queue_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/queue/bytes_queue.go b/queue/bytes_queue.go index 9619550a..b45387b9 100644 --- a/queue/bytes_queue.go +++ b/queue/bytes_queue.go @@ -78,6 +78,7 @@ func (q *BytesQueue) Reset() { q.head = leftMarginIndex q.rightMargin = leftMarginIndex q.count = 0 + q.full = false } // Push copies entry at the end of queue and moves tail pointer. Allocates more space if needed. diff --git a/queue/bytes_queue_test.go b/queue/bytes_queue_test.go index eb29cefc..3b197cc8 100644 --- a/queue/bytes_queue_test.go +++ b/queue/bytes_queue_test.go @@ -71,6 +71,32 @@ func TestPeek(t *testing.T) { assertEqual(t, entry, read) } +func TestResetFullQueue(t *testing.T) { + t.Parallel() + + // given + queue := NewBytesQueue(10, 20, false) + + // when + queue.Push(blob('a', 3)) + queue.Push(blob('b', 4)) + + // when + assertEqual(t, blob('a', 3), pop(queue)) // space freed at the beginning + _, err := queue.Push(blob('a', 3)) // will set q.full to true + + // then + assertEqual(t, err, nil) + + // when + queue.Reset() + queue.Push(blob('c', 8)) // should not trigger a re-allocation + + // then + assertEqual(t, blob('c', 8), pop(queue)) + assertEqual(t, queue.Capacity(), 10) +} + func TestReset(t *testing.T) { t.Parallel()