]> git.saurik.com Git - redis.git/commitdiff
improved random dataset creation in test: del, sunionstore, zunionstore
authorantirez <antirez@gmail.com>
Tue, 6 Jul 2010 16:30:38 +0000 (18:30 +0200)
committerantirez <antirez@gmail.com>
Tue, 6 Jul 2010 16:30:38 +0000 (18:30 +0200)
tests/support/util.tcl

index 36bc90d98b42e04be6b0371f8886a8e4c91fbf0e..ae758f4cb3ff041745d81773335437e3038f3a73 100644 (file)
@@ -127,9 +127,23 @@ proc randomKey {} {
     }
 }
 
+proc findKeyWithType {r type} {
+    for {set j 0} {$j < 20} {incr j} {
+        set k [$r randomkey]
+        if {$k eq {}} {
+            return {}
+        }
+        if {[$r type $k] eq $type} {
+            return $k
+        }
+    }
+    return {}
+}
+
 proc createComplexDataset {r ops} {
     for {set j 0} {$j < $ops} {incr j} {
         set k [randomKey]
+        set k2 [randomKey]
         set f [randomValue]
         set v [randomValue]
         randpath {
@@ -158,6 +172,8 @@ proc createComplexDataset {r ops} {
                 $r zadd $k $d $v
             } {
                 $r hset $k $f $v
+            } {
+                $r del $k
             }
             set t [$r type $k]
         }
@@ -175,11 +191,23 @@ proc createComplexDataset {r ops} {
             }
             {set} {
                 randpath {$r sadd $k $v} \
-                        {$r srem $k $v}
+                        {$r srem $k $v} \
+                        {
+                            set otherset [findKeyWithType r set]
+                            if {$otherset ne {}} {
+                                $r sunionstore $k2 $k $otherset
+                            }
+                        }
             }
             {zset} {
                 randpath {$r zadd $k $d $v} \
-                        {$r zrem $k $v}
+                        {$r zrem $k $v} \
+                        {
+                            set otherzset [findKeyWithType r zset]
+                            if {$otherzset ne {}} {
+                                $r zunionstore $k2 2 $k $otherzset
+                            }
+                        }
             }
             {hash} {
                 randpath {$r hset $k $f $v} \