diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-01-20 18:43:45 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-20 11:43:45 +0100 |
commit | b82b5d44afbd860075f806f71a62d595f2376d6e (patch) | |
tree | be6cc41260d5f09e34eb7ab698904ae45da8ae53 | |
parent | 4c74b9b54ceac22865a0104970edb4d9c5376f96 (diff) | |
download | Nim-b82b5d44afbd860075f806f71a62d595f2376d6e.tar.gz |
fixes #21278; `deques.shrink` off by one bug (#21284)
fixes #21278; deques.shrink off ny one bug
-rw-r--r-- | lib/pure/collections/deques.nim | 2 | ||||
-rw-r--r-- | tests/stdlib/tdeques.nim | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/pure/collections/deques.nim b/lib/pure/collections/deques.nim index 7e9ed32f3..60e0fd351 100644 --- a/lib/pure/collections/deques.nim +++ b/lib/pure/collections/deques.nim @@ -440,7 +440,7 @@ proc shrink*[T](deq: var Deque[T], fromFirst = 0, fromLast = 0) = deq.head = (deq.head + 1) and deq.mask for i in 0 ..< fromLast: - destroy(deq.data[deq.tail]) + destroy(deq.data[(deq.tail - 1) and deq.mask]) deq.tail = (deq.tail - 1) and deq.mask dec deq.count, fromFirst + fromLast diff --git a/tests/stdlib/tdeques.nim b/tests/stdlib/tdeques.nim index 8a788d337..fcfc278a9 100644 --- a/tests/stdlib/tdeques.nim +++ b/tests/stdlib/tdeques.nim @@ -183,6 +183,12 @@ proc main() = clear(a) doAssert len(a) == 0 + block: # bug #21278 + var a = [10, 20, 30, 40].toDeque + + a.shrink(fromFirst = 0, fromLast = 1) + doAssert $a == "[10, 20, 30]" + static: main() main() |