]> git.saurik.com Git - redis.git/commitdiff
New test: hash ziplist -> hashtable encoding conversion.
authorantirez <antirez@gmail.com>
Mon, 11 Jun 2012 13:19:46 +0000 (15:19 +0200)
committerantirez <antirez@gmail.com>
Mon, 11 Jun 2012 13:21:44 +0000 (15:21 +0200)
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.

tests/support/util.tcl
tests/unit/type/hash.tcl

index 96af279d84118cbcbe9ea0855ceb9d14c682b914..48d06b741575f31839371b8a7ae962d47f8d1c7f 100644 (file)
@@ -95,6 +95,14 @@ proc randomInt {max} {
     expr {int(rand()*$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]
 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
 proc randomValue {} {
     randpath {
         # Small enough to likely collide
-        randomInt 1000
+        randomSignedInt 1000
     } {
         # 32 bit compressible signed/unsigned
     } {
         # 32 bit compressible signed/unsigned
-        randpath {randomInt 2000000000} {randomInt 4000000000}
+        randpath {randomSignedInt 2000000000} {randomSignedInt 4000000000}
     } {
         # 64 bit
     } {
         # 64 bit
-        randpath {randomInt 1000000000000}
+        randpath {randomSignedInt 1000000000000}
     } {
         # Random string
         randpath {randstring 0 256 alpha} \
     } {
         # Random string
         randpath {randstring 0 256 alpha} \
index 950805d1bdd3b7d23cb0a685bd21bfec3809bca5..dbc1c4cc31b8c363cd45a0aff99dc630184d63f5 100644 (file)
@@ -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}}
+        }
+    }
 }
 }