}
test "ZSET element can't be set to NaN with ZADD - $encoding" {
- assert_error "*not a double*" {r zadd myzset nan abc}
+ assert_error "*not*float*" {r zadd myzset nan abc}
}
test "ZSET element can't be set to NaN with ZINCRBY" {
- assert_error "*not a double*" {r zadd myzset nan abc}
+ assert_error "*not*float*" {r zadd myzset nan abc}
}
test "ZINCRBY calls leading to NaN result in error" {
assert_error "*NaN*" {r zincrby myzset -inf abc}
}
+ test {ZADD - Variadic version base case} {
+ r del myzset
+ list [r zadd myzset 10 a 20 b 30 c] [r zrange myzset 0 -1 withscores]
+ } {3 {a 10 b 20 c 30}}
+
+ test {ZADD - Return value is the number of actually added items} {
+ list [r zadd myzset 5 x 20 b 30 c] [r zrange myzset 0 -1 withscores]
+ } {1 {x 5 a 10 b 20 c 30}}
+
+ test {ZADD - Variadic version does not add nothing on single parsing err} {
+ r del myzset
+ catch {r zadd myzset 10 a 20 b 30.badscore c} e
+ assert_match {*ERR*not*float*} $e
+ r exists myzset
+ } {0}
+
+ test {ZADD - Variadic version will raise error on missing arg} {
+ r del myzset
+ catch {r zadd myzset 10 a 20 b 30 c 40} e
+ assert_match {*ERR*syntax*} $e
+ }
+
+ test {ZINCRBY does not work variadic even if shares ZADD implementation} {
+ r del myzset
+ catch {r zincrby myzset 10 a 20 b 30 c} e
+ assert_match {*ERR*wrong*number*arg*} $e
+ }
+
test "ZCARD basics - $encoding" {
assert_equal 3 [r zcard ztmp]
assert_equal 0 [r zcard zdoesntexist]
assert_equal 0 [r exists ztmp]
}
+ test "ZREM variadic version" {
+ r del ztmp
+ r zadd ztmp 10 a 20 b 30 c
+ assert_equal 2 [r zrem ztmp x y a b k]
+ assert_equal 0 [r zrem ztmp foo bar]
+ assert_equal 1 [r zrem ztmp c]
+ r exists ztmp
+ } {0}
+
+ test "ZREM variadic version -- remove elements after key deletion" {
+ r del ztmp
+ r zadd ztmp 10 a 20 b 30 c
+ r zrem ztmp a b c d e f g
+ } {3}
+
test "ZRANGE basics - $encoding" {
r del ztmp
r zadd ztmp 1 a
}
test "ZRANGEBYSCORE with non-value min or max" {
- assert_error "*not a double*" {r zrangebyscore fooz str 1}
- assert_error "*not a double*" {r zrangebyscore fooz 1 str}
- assert_error "*not a double*" {r zrangebyscore fooz 1 NaN}
+ assert_error "*not*float*" {r zrangebyscore fooz str 1}
+ assert_error "*not*float*" {r zrangebyscore fooz 1 str}
+ assert_error "*not*float*" {r zrangebyscore fooz 1 NaN}
}
test "ZREMRANGEBYSCORE basics" {
}
test "ZREMRANGEBYSCORE with non-value min or max" {
- assert_error "*not a double*" {r zremrangebyscore fooz str 1}
- assert_error "*not a double*" {r zremrangebyscore fooz 1 str}
- assert_error "*not a double*" {r zremrangebyscore fooz 1 NaN}
+ assert_error "*not*float*" {r zremrangebyscore fooz str 1}
+ assert_error "*not*float*" {r zremrangebyscore fooz 1 str}
+ assert_error "*not*float*" {r zremrangebyscore fooz 1 NaN}
}
test "ZREMRANGEBYRANK basics" {
r zadd zsetinf1 1.0 key
r zadd zsetinf2 1.0 key
- assert_error "*weight value is not a double*" {
+ assert_error "*weight*not*float*" {
r $cmd zsetinf3 2 zsetinf1 zsetinf2 weights nan nan
}
}
r zinterstore set3 2 set1 set2
} {0}
+ test {ZUNIONSTORE regression, should not create NaN in scores} {
+ r zadd z -inf neginf
+ r zunionstore out 1 z weights 0
+ r zrange out 0 -1 withscores
+ } {neginf 0}
+
proc stressers {encoding} {
if {$encoding == "ziplist"} {
# Little extra to allow proper fuzzing in the sorting stresser
} elseif {$encoding == "skiplist"} {
r config set zset-max-ziplist-entries 0
r config set zset-max-ziplist-value 0
- set elements 1000
+ if {$::accurate} {set elements 1000} else {set elements 100}
} else {
puts "Unknown sorted set encoding"
exit