+ test {RANDOMKEY} {
+ $r flushall
+ $r set foo x
+ $r set bar y
+ set foo_seen 0
+ set bar_seen 0
+ for {set i 0} {$i < 100} {incr i} {
+ set rkey [$r randomkey]
+ if {$rkey eq {foo}} {
+ set foo_seen 1
+ }
+ if {$rkey eq {bar}} {
+ set bar_seen 1
+ }
+ }
+ list $foo_seen $bar_seen
+ } {1 1}
+
+ test {RANDOMKEY against empty DB} {
+ $r flushall
+ $r randomkey
+ } {}
+
+ test {RANDOMKEY regression 1} {
+ $r flushall
+ $r set x 10
+ $r del x
+ $r randomkey
+ } {}
+
+ test {GETSET (set new value)} {
+ list [$r getset foo xyz] [$r get foo]
+ } {{} xyz}
+
+ test {GETSET (replace old value)} {
+ $r set foo bar
+ list [$r getset foo xyz] [$r get foo]
+ } {bar xyz}
+
+ test {SMOVE basics} {
+ $r sadd myset1 a
+ $r sadd myset1 b
+ $r sadd myset1 c
+ $r sadd myset2 x
+ $r sadd myset2 y
+ $r sadd myset2 z
+ $r smove myset1 myset2 a
+ list [lsort [$r smembers myset2]] [lsort [$r smembers myset1]]
+ } {{a x y z} {b c}}
+
+ test {SMOVE non existing key} {
+ list [$r smove myset1 myset2 foo] [lsort [$r smembers myset2]] [lsort [$r smembers myset1]]
+ } {0 {a x y z} {b c}}
+
+ test {SMOVE non existing src set} {
+ list [$r smove noset myset2 foo] [lsort [$r smembers myset2]]
+ } {0 {a x y z}}
+
+ test {SMOVE non existing dst set} {
+ list [$r smove myset2 myset3 y] [lsort [$r smembers myset2]] [lsort [$r smembers myset3]]
+ } {1 {a x z} y}
+
+ test {SMOVE wrong src key type} {
+ $r set x 10
+ catch {$r smove x myset2 foo} err
+ format $err
+ } {ERR*}
+
+ test {SMOVE wrong dst key type} {
+ $r set x 10
+ catch {$r smove myset2 x foo} err
+ format $err
+ } {ERR*}
+
+ foreach fuzztype {binary alpha compr} {
+ test "FUZZ stresser with data model $fuzztype" {
+ set err 0
+ for {set i 0} {$i < 1000} {incr i} {
+ set fuzz [randstring 0 512 $fuzztype]
+ $r set foo $fuzz
+ set got [$r get foo]
+ if {$got ne $fuzz} {
+ incr err
+ break
+ }
+ }
+ format $err
+ } {0}
+ }
+