mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 00:28:26 -05:00
Regression test for the dictScan() issue #4906.
This commit is contained in:
parent
be899b824e
commit
27beaf2f22
@ -236,4 +236,42 @@ start_server {tags {"scan"}} {
|
||||
set first_score [lindex $res 1]
|
||||
assert {$first_score != 0}
|
||||
}
|
||||
|
||||
test "SCAN regression test for issue #4906" {
|
||||
r del set
|
||||
set toremove {}
|
||||
array set found {}
|
||||
for {set j 0} {$j < 500} {incr j} {
|
||||
r sadd set $j
|
||||
if {$j >= 100} {
|
||||
lappend toremove $j
|
||||
}
|
||||
}
|
||||
|
||||
# Start scanning
|
||||
set cursor 0
|
||||
set iteration 0
|
||||
while {!($cursor == 0 && $iteration != 0)} {
|
||||
lassign [r sscan set $cursor] cursor items
|
||||
|
||||
# Mark found items. We expect to find from 0 to 99 at the end
|
||||
# since those elements will never be removed during the scanning.
|
||||
foreach i $items {
|
||||
set found($i) 1
|
||||
}
|
||||
incr iteration
|
||||
# At some point remove most of the items to trigger the
|
||||
# rehashing to a smaller hash table.
|
||||
if {$iteration == 1} {
|
||||
r srem set {*}$toremove
|
||||
}
|
||||
}
|
||||
|
||||
# Verify that SSCAN reported everything from 0 to 99
|
||||
for {set j 0} {$j < 100} {incr j} {
|
||||
if {![info exists found($j)]} {
|
||||
fail "SSCAN element missing $j"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user