]> git.saurik.com Git - redis.git/blobdiff - test-redis.tcl
An interesting refactoring + more expressive internal API
[redis.git] / test-redis.tcl
index 0db430d4e82f4a2ed30c83afa15ce77bf1b4b94a..00370a4c4b955f8bc442d135613dfad3661b7f4f 100644 (file)
@@ -178,7 +178,7 @@ proc createComplexDataset {r ops} {
 }
 
 proc datasetDigest r {
 }
 
 proc datasetDigest r {
-    set keys [lsort [split [$r keys *] " "]]
+    set keys [lsort [$r keys *]]
     set digest {}
     foreach k $keys {
         set t [$r type $k]
     set digest {}
     foreach k $keys {
         set t [$r type $k]
@@ -204,7 +204,7 @@ proc datasetDigest r {
                     set aux [::sha1::sha1 -hex [$r zrange $k 0 -1]]
                 }
             } default {
                     set aux [::sha1::sha1 -hex [$r zrange $k 0 -1]]
                 }
             } default {
-                error "Type not supported"
+                error "Type not supported: $t"
             }
         }
         if {$aux eq {}} continue
             }
         }
         if {$aux eq {}} continue
@@ -406,15 +406,20 @@ proc main {server port} {
     } {1}
 
     test {Basic LPUSH, RPUSH, LLENGTH, LINDEX} {
     } {1}
 
     test {Basic LPUSH, RPUSH, LLENGTH, LINDEX} {
-        $r lpush mylist a
-        $r lpush mylist b
-        $r rpush mylist c
-        set res [$r llen mylist]
+        set res [$r lpush mylist a]
+        append res [$r lpush mylist b]
+        append res [$r rpush mylist c]
+        append res [$r llen mylist]
+        append res [$r rpush anotherlist d]
+        append res [$r lpush anotherlist e]
+        append res [$r llen anotherlist]
         append res [$r lindex mylist 0]
         append res [$r lindex mylist 1]
         append res [$r lindex mylist 2]
         append res [$r lindex mylist 0]
         append res [$r lindex mylist 1]
         append res [$r lindex mylist 2]
+        append res [$r lindex anotherlist 0]
+        append res [$r lindex anotherlist 1]
         list $res [$r lindex mylist 100]
         list $res [$r lindex mylist 100]
-    } {3bac {}}
+    } {1233122baced {}}
 
     test {DEL a list} {
         $r del mylist
 
     test {DEL a list} {
         $r del mylist
@@ -1192,6 +1197,22 @@ proc main {server port} {
         $r zcard ztmp-blabla
     } {0}
 
         $r zcard ztmp-blabla
     } {0}
 
+    test {ZRANK basics} {
+        $r zadd zranktmp 10 x
+        $r zadd zranktmp 20 y
+        $r zadd zranktmp 30 z
+        list [$r zrank zranktmp x] [$r zrank zranktmp y] [$r zrank zranktmp z]
+    } {0 1 2}
+
+    test {ZREVRANK basics} {
+        list [$r zrevrank zranktmp x] [$r zrevrank zranktmp y] [$r zrevrank zranktmp z]
+    } {2 1 0}
+
+    test {ZRANK - after deletion} {
+        $r zrem zranktmp y
+        list [$r zrank zranktmp x] [$r zrank zranktmp z]
+    } {0 1}
+
     test {ZSCORE} {
         set aux {}
         set err {}
     test {ZSCORE} {
         set aux {}
         set err {}
@@ -1425,7 +1446,7 @@ proc main {server port} {
         $r zrangebyscore zset 20 50 LIMIT 2 3 withscores
     } {d 40 e 50}
 
         $r zrangebyscore zset 20 50 LIMIT 2 3 withscores
     } {d 40 e 50}
 
-    test {ZREMRANGE basics} {
+    test {ZREMRANGEBYSCORE basics} {
         $r del zset
         $r zadd zset 1 a
         $r zadd zset 2 b
         $r del zset
         $r zadd zset 1 a
         $r zadd zset 2 b
@@ -1435,7 +1456,7 @@ proc main {server port} {
         list [$r zremrangebyscore zset 2 4] [$r zrange zset 0 -1]
     } {3 {a e}}
 
         list [$r zremrangebyscore zset 2 4] [$r zrange zset 0 -1]
     } {3 {a e}}
 
-    test {ZREMRANGE from -inf to +inf} {
+    test {ZREMRANGEBYSCORE from -inf to +inf} {
         $r del zset
         $r zadd zset 1 a
         $r zadd zset 2 b
         $r del zset
         $r zadd zset 1 a
         $r zadd zset 2 b
@@ -1445,6 +1466,39 @@ proc main {server port} {
         list [$r zremrangebyscore zset -inf +inf] [$r zrange zset 0 -1]
     } {5 {}}
 
         list [$r zremrangebyscore zset -inf +inf] [$r zrange zset 0 -1]
     } {5 {}}
 
+    test {ZREMRANGEBYRANK basics} {
+        $r del zset
+        $r zadd zset 1 a
+        $r zadd zset 2 b
+        $r zadd zset 3 c
+        $r zadd zset 4 d
+        $r zadd zset 5 e
+        list [$r zremrangebyrank zset 1 3] [$r zrange zset 0 -1]
+    } {3 {a e}}
+
+    test {ZUNION basics} {
+        $r del zseta zsetb zsetc
+        $r zadd zseta 1 a
+        $r zadd zseta 2 b
+        $r zadd zseta 3 c
+        $r zadd zsetb 1 b
+        $r zadd zsetb 2 c
+        $r zadd zsetb 3 d
+        list [$r zunion zsetc 2 zseta zsetb] [$r zrange zsetc 0 -1 withscores]
+    } {4 {a 1 b 3 d 3 c 5}}
+
+    test {ZUNION with weights} {
+        list [$r zunion zsetc 2 zseta zsetb weights 2 3] [$r zrange zsetc 0 -1 withscores]
+    } {4 {a 2 b 7 d 9 c 12}}
+
+    test {ZINTER basics} {
+        list [$r zinter zsetc 2 zseta zsetb] [$r zrange zsetc 0 -1 withscores]
+    } {2 {b 3 c 5}}
+
+    test {ZINTER with weights} {
+        list [$r zinter zsetc 2 zseta zsetb weights 2 3] [$r zrange zsetc 0 -1 withscores]
+    } {2 {b 7 c 12}}
+
     test {SORT against sorted sets} {
         $r del zset
         $r zadd zset 1 a
     test {SORT against sorted sets} {
         $r del zset
         $r zadd zset 1 a
@@ -1516,6 +1570,31 @@ proc main {server port} {
         format $diff
     } {0}
 
         format $diff
     } {0}
 
+    test {ZSETs ZRANK augmented skip list stress testing} {
+        set err {}
+        $r del myzset
+        for {set k 0} {$k < 10000} {incr k} {
+            set i [expr {$k%1000}]
+            if {[expr rand()] < .2} {
+                $r zrem myzset $i
+            } else {
+                set score [expr rand()]
+                $r zadd myzset $score $i
+            }
+            set card [$r zcard myzset]
+            if {$card > 0} {
+                set index [randomInt $card]
+                set ele [lindex [$r zrange myzset $index $index] 0]
+                set rank [$r zrank myzset $ele]
+                if {$rank != $index} {
+                    set err "$ele RANK is wrong! ($rank != $index)"
+                    break
+                }
+            }
+        }
+        set _ $err
+    } {}
+
     foreach fuzztype {binary alpha compr} {
         test "FUZZ stresser with data model $fuzztype" {
             set err 0
     foreach fuzztype {binary alpha compr} {
         test "FUZZ stresser with data model $fuzztype" {
             set err 0
@@ -1533,6 +1612,7 @@ proc main {server port} {
     }
 
     test {BGSAVE} {
     }
 
     test {BGSAVE} {
+        waitForBgsave $r
         $r flushdb
         $r save
         $r set x 10
         $r flushdb
         $r save
         $r set x 10
@@ -1662,6 +1742,18 @@ proc main {server port} {
         list $v1 $v2 $v3
     } {QUEUED QUEUED {{a b c} PONG}}
 
         list $v1 $v2 $v3
     } {QUEUED QUEUED {{a b c} PONG}}
 
+    test {DISCARD} {
+        $r del mylist
+        $r rpush mylist a
+        $r rpush mylist b
+        $r rpush mylist c
+        $r multi
+        set v1 [$r del mylist]
+        set v2 [$r discard]
+        set v3 [$r lrange mylist 0 -1]
+        list $v1 $v2 $v3
+    } {QUEUED OK {a b c}}
+
     test {APPEND basics} {
         list [$r append foo bar] [$r get foo] \
              [$r append foo 100] [$r get foo]
     test {APPEND basics} {
         list [$r append foo bar] [$r get foo] \
              [$r append foo 100] [$r get foo]