From c645dba038f3d801afe1b9c842bd49bd9455b410 Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Wed, 29 Jul 2020 22:18:27 +0800 Subject: [PATCH] fixes #14139 (#15107) * fix #14139 * Update lib/pure/collections/heapqueue.nim Co-authored-by: Andreas Rumpf Co-authored-by: Clyybber --- lib/pure/collections/heapqueue.nim | 6 +++--- tests/stdlib/t14139.nim | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 tests/stdlib/t14139.nim diff --git a/lib/pure/collections/heapqueue.nim b/lib/pure/collections/heapqueue.nim index 608fd2920..c2952cf1b 100644 --- a/lib/pure/collections/heapqueue.nim +++ b/lib/pure/collections/heapqueue.nim @@ -156,10 +156,10 @@ proc replace*[T](heap: var HeapQueue[T], item: T): T = proc pushpop*[T](heap: var HeapQueue[T], item: T): T = ## Fast version of a push followed by a pop. - if heap.len > 0 and heapCmp(heap[0], item): - swap(item, heap[0]) + result = item + if heap.len > 0 and heapCmp(heap.data[0], item): + swap(result, heap.data[0]) siftup(heap, 0) - return item proc clear*[T](heap: var HeapQueue[T]) = ## Remove all elements from `heap`, making it empty. diff --git a/tests/stdlib/t14139.nim b/tests/stdlib/t14139.nim new file mode 100644 index 000000000..78e0f6645 --- /dev/null +++ b/tests/stdlib/t14139.nim @@ -0,0 +1,9 @@ +import heapqueue + +var test_queue : HeapQueue[int] + +test_queue.push(7) +test_queue.push(3) +test_queue.push(9) +let i = test_queue.pushpop(10) +assert i == 3