diff --git a/tests/support/util.tcl b/tests/support/util.tcl index 96af279d8..48d06b741 100644 --- a/tests/support/util.tcl +++ b/tests/support/util.tcl @@ -95,6 +95,14 @@ proc randomInt {max} { expr {int(rand()*$max)} } +proc randomSignedInt {max} { + set i [randomInt $max] + if {rand() > 0.5} { + set i -$i + } + return $i +} + proc randpath args { set path [expr {int(rand()*[llength $args])}] uplevel 1 [lindex $args $path] @@ -103,13 +111,13 @@ proc randpath args { proc randomValue {} { randpath { # Small enough to likely collide - randomInt 1000 + randomSignedInt 1000 } { # 32 bit compressible signed/unsigned - randpath {randomInt 2000000000} {randomInt 4000000000} + randpath {randomSignedInt 2000000000} {randomSignedInt 4000000000} } { # 64 bit - randpath {randomInt 1000000000000} + randpath {randomSignedInt 1000000000000} } { # Random string randpath {randstring 0 256 alpha} \ diff --git a/tests/unit/type/hash.tcl b/tests/unit/type/hash.tcl index 950805d1b..dbc1c4cc3 100644 --- a/tests/unit/type/hash.tcl +++ b/tests/unit/type/hash.tcl @@ -419,4 +419,15 @@ start_server {tags {"hash"}} { } } } + + test {Stress test the hash ziplist -> hashtable encoding conversion} { + r config set hash-max-ziplist-entries 32 + for {set j 0} {$j < 100} {incr j} { + r del myhash + for {set i 0} {$i < 64} {incr i} { + r hset myhash [randomValue] [randomValue] + } + assert {[r object encoding myhash] eq {hashtable}} + } + } }