} {
$r zadd $k $d $v
} {
- puts "hset $k $f $v"
$r hset $k $f $v
}
set t [$r type $k]
}
{hash} {
randpath {$r hset $k $f $v} \
- {puts "$r hdel $k $f"; $r hdel $k $f}
+ {$r hdel $k $f}
}
}
}
} else {
set aux [::sha1::sha1 -hex [$r zrange $k 0 -1]]
}
+ } {hash} {
+ if {[$r hlen $k] == 0} {
+ set aux {}
+ } else {
+ set aux [::sha1::sha1 -hex [lsort [$r hgetall $k]]]
+ }
} default {
error "Type not supported: $t"
}
# The following AUTH test should be enabled only when requirepass
# <PASSWORD> is set in redis.conf and redis-server was started with
- # redis.conf as the first argument.
+ # redis.conf as the first argument.
#test {AUTH with requirepass in redis.conf} {
# $r auth foobared
$r incrby novar 17179869184
} {34359738368}
- test {INCR against key with spaces (no integer encoded)} {
+ test {INCR fails against key with spaces (no integer encoded)} {
$r set novar " 11 "
- $r incr novar
- } {12}
+ catch {$r incr novar} err
+ format $err
+ } {ERR*}
+
+ test {INCR fails against a key holding a list} {
+ $r rpush mylist 1
+ catch {$r incr novar} err
+ $r rpop mylist
+ format $err
+ } {ERR*}
test {DECRBY over 32bit value with over 32bit increment, negative res} {
$r set novar 17179869184
test {SUNION with two sets} {
lsort [$r sunion set1 set2]
} [lsort -uniq "[$r smembers set1] [$r smembers set2]"]
-
+
test {SINTERSTORE with two sets} {
$r sinterstore setres set1 set2
lsort [$r smembers setres]
$r lpush mysavelist world
$r set myemptykey {}
$r set mynormalkey {blablablba}
- $r zadd mytestzset a 10
- $r zadd mytestzset b 20
- $r zadd mytestzset c 30
+ $r zadd mytestzset 10 a
+ $r zadd mytestzset 20 b
+ $r zadd mytestzset 30 c
$r save
} {OK}
}
lsort [array names myset]
} {a b c}
-
+
test {Create a random list and a random set} {
set tosort {}
array set seenrand {}
list [$r zremrangebyrank zset 1 3] [$r zrange zset 0 -1]
} {3 {a e}}
+ test {ZUNION against non-existing key doesn't set destination} {
+ $r del zseta
+ list [$r zunion dst_key 1 zseta] [$r exists dst_key]
+ } {0 0}
+
test {ZUNION basics} {
$r del zseta zsetb zsetc
$r zadd zseta 1 a
set _ $err
} {}
+ test {HGET against non existing key} {
+ set rv {}
+ lappend rv [$r hget smallhash __123123123__]
+ lappend rv [$r hget bighash __123123123__]
+ set _ $rv
+ } {{} {}}
+
test {HSET in update and insert mode} {
set rv {}
set k [lindex [array names smallhash *] 0]
set _ $rv
} {0 newval1 1 0 newval2 1 1 1}
- test {HGET against non existing key} {
+ test {HMSET wrong number of args} {
+ catch {$r hmset smallhash key1 val1 key2} err
+ format $err
+ } {*wrong number*}
+
+ test {HMSET - small hash} {
+ set args {}
+ foreach {k v} [array get smallhash] {
+ set newval [randstring 0 8 alpha]
+ set smallhash($k) $newval
+ lappend args $k $newval
+ }
+ $r hmset smallhash {*}$args
+ } {OK}
+
+ test {HMSET - big hash} {
+ set args {}
+ foreach {k v} [array get bighash] {
+ set newval [randstring 0 8 alpha]
+ set bighash($k) $newval
+ lappend args $k $newval
+ }
+ $r hmset bighash {*}$args
+ } {OK}
+
+ test {HMGET against non existing key and fields} {
set rv {}
- lappend rv [$r hget smallhash __123123123__]
- lappend rv [$r hget bighash __123123123__]
+ lappend rv [$r hmget doesntexist __123123123__ __456456456__]
+ lappend rv [$r hmget smallhash __123123123__ __456456456__]
+ lappend rv [$r hmget bighash __123123123__ __456456456__]
set _ $rv
- } {{} {}}
+ } {{{} {}} {{} {}} {{} {}}}
+
+ test {HMGET - small hash} {
+ set keys {}
+ set vals {}
+ foreach {k v} [array get smallhash] {
+ lappend keys $k
+ lappend vals $v
+ }
+ set err {}
+ set result [$r hmget smallhash {*}$keys]
+ if {$vals ne $result} {
+ set err "$vals != $result"
+ break
+ }
+ set _ $err
+ } {}
+
+ test {HMGET - big hash} {
+ set keys {}
+ set vals {}
+ foreach {k v} [array get bighash] {
+ lappend keys $k
+ lappend vals $v
+ }
+ set err {}
+ set result [$r hmget bighash {*}$keys]
+ if {$vals ne $result} {
+ set err "$vals != $result"
+ break
+ }
+ set _ $err
+ } {}
test {HKEYS - small hash} {
lsort [$r hkeys smallhash]
$r debug object smallhash
} {*hashtable*}
+ test {HINCRBY against non existing database key} {
+ $r del htest
+ list [$r hincrby htest foo 2]
+ } {2}
+
+ test {HINCRBY against non existing hash key} {
+ set rv {}
+ $r hdel smallhash tmp
+ $r hdel bighash tmp
+ lappend rv [$r hincrby smallhash tmp 2]
+ lappend rv [$r hget smallhash tmp]
+ lappend rv [$r hincrby bighash tmp 2]
+ lappend rv [$r hget bighash tmp]
+ } {2 2 2 2}
+
+ test {HINCRBY against hash key created by hincrby itself} {
+ set rv {}
+ lappend rv [$r hincrby smallhash tmp 3]
+ lappend rv [$r hget smallhash tmp]
+ lappend rv [$r hincrby bighash tmp 3]
+ lappend rv [$r hget bighash tmp]
+ } {5 5 5 5}
+
+ test {HINCRBY against hash key originally set with HSET} {
+ $r hset smallhash tmp 100
+ $r hset bighash tmp 100
+ list [$r hincrby smallhash tmp 2] [$r hincrby bighash tmp 2]
+ } {102 102}
+
+ test {HINCRBY over 32bit value} {
+ $r hset smallhash tmp 17179869184
+ $r hset bighash tmp 17179869184
+ list [$r hincrby smallhash tmp 1] [$r hincrby bighash tmp 1]
+ } {17179869185 17179869185}
+
+ test {HINCRBY over 32bit value with over 32bit increment} {
+ $r hset smallhash tmp 17179869184
+ $r hset bighash tmp 17179869184
+ list [$r hincrby smallhash tmp 17179869184] [$r hincrby bighash tmp 17179869184]
+ } {34359738368 34359738368}
+
+ test {HINCRBY against key with spaces (no integer encoded)} {
+ $r hset smallhash tmp " 11 "
+ $r hset bighash tmp " 11 "
+ list [$r hincrby smallhash tmp 1] [$r hincrby bighash tmp 1]
+ } {12 12}
+
# TODO:
# Randomized test, small and big
# .rdb / AOF consistency test should include hashes