list $v1 $v2 $l1 $l2
} {d c {a b} {c d x}}
+ test {RPOPLPUSH against non existing key} {
+ $r del mylist
+ $r del newlist
+ set v1 [$r rpoplpush mylist newlist]
+ list $v1 [$r exists mylist] [$r exists newlist]
+ } {{} 0 0}
+
+ test {RPOPLPUSH against non list src key} {
+ $r del mylist
+ $r del newlist
+ $r set mylist x
+ catch {$r rpoplpush mylist newlist} err
+ list [$r type mylist] [$r exists newlist] [string range $err 0 2]
+ } {string 0 ERR}
+
+ test {RPOPLPUSH against non list dst key} {
+ $r del mylist
+ $r del newlist
+ $r rpush mylist a
+ $r rpush mylist b
+ $r rpush mylist c
+ $r rpush mylist d
+ $r set newlist x
+ catch {$r rpoplpush mylist newlist} err
+ list [$r lrange mylist 0 -1] [$r type newlist] [string range $err 0 2]
+ } {{a b c d} string ERR}
+
test {RENAME basic usage} {
$r set mykey hello
$r rename mykey mykey1
$r zadd mytestzset c 30
$r save
} {OK}
+
+ test {SRANDMEMBER} {
+ $r del myset
+ $r sadd myset a
+ $r sadd myset b
+ $r sadd myset c
+ unset -nocomplain myset
+ array set myset {}
+ for {set i 0} {$i < 100} {incr i} {
+ set myset([$r srandmember myset]) 1
+ }
+ lsort [array names myset]
+ } {a b c}
test {Create a random list} {
set tosort {}
$r sort mylist
} [lsort -real {1.1 5.10 3.10 7.44 2.1 5.75 6.12 0.25 1.15}]
+ test {SORT with GET #} {
+ $r del mylist
+ $r lpush mylist 1
+ $r lpush mylist 2
+ $r lpush mylist 3
+ $r mset weight_1 10 weight_2 5 weight_3 30
+ $r sort mylist BY weight_* GET #
+ } {2 1 3}
+
test {LREM, remove all the occurrences} {
$r flushdb
$r rpush mylist foo
format $delta
} {0}
+ test {ZINCRBY - can create a new sorted set} {
+ $r del zset
+ $r zincrby zset 1 foo
+ list [$r zrange zset 0 -1] [$r zscore zset foo]
+ } {foo 1}
+
+ test {ZINCRBY - increment and decrement} {
+ $r zincrby zset 2 foo
+ $r zincrby zset 1 bar
+ set v1 [$r zrange zset 0 -1]
+ $r zincrby zset 10 bar
+ $r zincrby zset -5 foo
+ $r zincrby zset -5 bar
+ set v2 [$r zrange zset 0 -1]
+ list $v1 $v2 [$r zscore zset foo] [$r zscore zset bar]
+ } {{bar foo} {foo bar} -2 6}
+
+ test {EXPIRE - don't set timeouts multiple times} {
+ $r set x foobar
+ set v1 [$r expire x 5]
+ set v2 [$r ttl x]
+ set v3 [$r expire x 10]
+ set v4 [$r ttl x]
+ list $v1 $v2 $v3 $v4
+ } {1 5 0 5}
+
+ test {EXPIRE - It should be still possible to read 'x'} {
+ $r get x
+ } {foobar}
+
+ test {EXPIRE - After 6 seconds the key should no longer be here} {
+ after 6000
+ list [$r get x] [$r exists x]
+ } {{} 0}
+
+ test {EXPIRE - Delete on write policy} {
+ $r del x
+ $r lpush x foo
+ $r expire x 1000
+ $r lpush x bar
+ $r lrange x 0 -1
+ } {bar}
+
+ test {EXPIREAT - Check for EXPIRE alike behavior} {
+ $r del x
+ $r set x foo
+ $r expireat x [expr [clock seconds]+15]
+ $r ttl x
+ } {1[345]}
+
test {ZSETs skiplist implementation backlink consistency test} {
set diff 0
set elements 10000