From: antirez Date: Mon, 11 Jun 2012 13:19:46 +0000 (+0200) Subject: New test: hash ziplist -> hashtable encoding conversion. X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/a85c89854f31b26cede276c730d67de954e8182f?ds=sidebyside;hp=1a3e9d951be14fecf29cb7ad3d5f068e151b66f1 New test: hash ziplist -> hashtable encoding conversion. A new stress test was added to stress test the code converting a ziplist into an hash table. In this commit also randomValue helper function was modified to also return negative values. --- diff --git a/tests/support/util.tcl b/tests/support/util.tcl index 96af279d..48d06b74 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 950805d1..dbc1c4cc 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}} + } + } }