Skip to content

Commit

Permalink
fixes nim-lang#23275; Add == for Deque
Browse files Browse the repository at this point in the history
  • Loading branch information
demotomohiro committed Feb 5, 2024
1 parent dd753b3 commit 39a4d37
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
20 changes: 20 additions & 0 deletions lib/pure/collections/deques.nim
Original file line number Diff line number Diff line change
Expand Up @@ -455,3 +455,23 @@ proc `$`*[T](deq: Deque[T]): string =
if result.len > 1: result.add(", ")
result.addQuoted(x)
result.add("]")

func `==`*[T](deq1, deq2: Deque[T]): bool =
## The `==` operator for Deque.
## Returns `true` if both deques contains the same values in the same order.
runnableExamples:
var a, b = initDeque[int]()
a.addFirst(2)
a.addFirst(1)
b.addLast(1)
b.addLast(2)
doAssert a == b

if deq1.count != deq2.count:
return false

for i in 0 ..< deq1.count:
if deq1.data[(deq1.head + i) and deq1.mask] != deq2.data[(deq2.head + i) and deq2.mask]:
return false

true
40 changes: 40 additions & 0 deletions tests/stdlib/tdeques.nim
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,46 @@ proc main() =
a.shrink(fromFirst = 0, fromLast = 1)
doAssert $a == "[10, 20, 30]"

block:
var a, b: Deque[int]
for i in 1 .. 256:
a.addLast(i)
for i in 1 .. 255:
a.popLast
b.addLast(1)
doAssert a == b

block:
# Issue 23275
# Test `==`.
block:
var a, b = initDeque[int]()
doAssert a == b
a.addFirst(1)
doAssert a != b
b.addLast(1)
doAssert a == b
a.popFirst
b.popLast
doAssert a == b
a.addLast 2
doAssert a != b
b.addFirst 2
doAssert a == b

block:
var a, b = initDeque[int]()
for i in countDown(100, 1):
a.addFirst(i)
for i in 1..100:
b.addLast(i)
doAssert a == b
for i in 1..99:
a.popLast
doAssert a == [1].toDeque
var c = initDeque[int]()
c.addLast(1)
doAssert a == c

static: main()
main()

0 comments on commit 39a4d37

Please sign in to comment.