Skip to content

Commit

Permalink
New test: hash ziplist -> hashtable encoding conversion.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
antirez committed Jun 11, 2012
1 parent 80e808b commit c0de459
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
14 changes: 11 additions & 3 deletions tests/support/util.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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} \
Expand Down
11 changes: 11 additions & 0 deletions tests/unit/type/hash.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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}}
}
}
}

0 comments on commit c0de459

Please sign in to comment.