diff --git a/tests/unit/scan.tcl b/tests/unit/scan.tcl index 280d3141131135058d704ec83a7c0a066a604435..02519ff7c8e4267aa38c7b8c631194d511f9ea89 100644 --- a/tests/unit/scan.tcl +++ b/tests/unit/scan.tcl @@ -86,4 +86,44 @@ start_server {tags {"scan"}} { assert_equal 100 [llength $keys] } } + + foreach enc {ziplist hashtable} { + test "HSCAN with encoding $enc" { + # Create the Hash + r del hash + if {$enc eq {ziplist}} { + set count 30 + } else { + set count 1000 + } + set elements {} + for {set j 0} {$j < $count} {incr j} { + lappend elements key:$j $j + } + r hmset hash {*}$elements + + # Verify that the encoding matches. + assert {[r object encoding hash] eq $enc} + + # Test HSCAN + set cur 0 + set keys {} + while 1 { + set res [r hscan hash $cur] + set cur [lindex $res 0] + set k [lindex $res 1] + lappend keys {*}$k + if {$cur == 0} break + } + + set keys2 {} + foreach {k v} $keys { + assert {$k eq "key:$v"} + lappend keys2 $k + } + + set keys2 [lsort -unique $keys2] + assert_equal $count [llength $keys2] + } + } }