mirror of
https://github.com/fluencelabs/redis
synced 2025-03-18 16:40:50 +00:00
more tests for zrange and zrevrange; fix behavior for out-of-range negative end index
This commit is contained in:
parent
d5096a28d7
commit
184d74abc6
5
redis.c
5
redis.c
@ -6662,11 +6662,10 @@ static void zrangeGenericCommand(redisClient *c, int reverse) {
|
||||
if (start < 0) start = llen+start;
|
||||
if (end < 0) end = llen+end;
|
||||
if (start < 0) start = 0;
|
||||
if (end < 0) end = 0;
|
||||
|
||||
/* indexes sanity checks */
|
||||
/* Invariant: start >= 0, so this test will be true when end < 0.
|
||||
* The range is empty when start > end or start >= length. */
|
||||
if (start > end || start >= llen) {
|
||||
/* Out of range start or start > end result in empty list */
|
||||
addReply(c,shared.emptymultibulk);
|
||||
return;
|
||||
}
|
||||
|
@ -17,6 +17,66 @@ start_server {tags {"zset"}} {
|
||||
r zcard ztmp-blabla
|
||||
} {0}
|
||||
|
||||
test "ZRANGE basics" {
|
||||
r del ztmp
|
||||
r zadd ztmp 1 a
|
||||
r zadd ztmp 2 b
|
||||
r zadd ztmp 3 c
|
||||
r zadd ztmp 4 d
|
||||
|
||||
assert_equal {a b c d} [r zrange ztmp 0 -1]
|
||||
assert_equal {a b c} [r zrange ztmp 0 -2]
|
||||
assert_equal {b c d} [r zrange ztmp 1 -1]
|
||||
assert_equal {b c} [r zrange ztmp 1 -2]
|
||||
assert_equal {c d} [r zrange ztmp -2 -1]
|
||||
assert_equal {c} [r zrange ztmp -2 -2]
|
||||
|
||||
# out of range start index
|
||||
assert_equal {a b c} [r zrange ztmp -5 2]
|
||||
assert_equal {a b} [r zrange ztmp -5 1]
|
||||
assert_equal {} [r zrange ztmp 5 -1]
|
||||
assert_equal {} [r zrange ztmp 5 -2]
|
||||
|
||||
# out of range end index
|
||||
assert_equal {a b c d} [r zrange ztmp 0 5]
|
||||
assert_equal {b c d} [r zrange ztmp 1 5]
|
||||
assert_equal {} [r zrange ztmp 0 -5]
|
||||
assert_equal {} [r zrange ztmp 1 -5]
|
||||
|
||||
# withscores
|
||||
assert_equal {a 1 b 2 c 3 d 4} [r zrange ztmp 0 -1 withscores]
|
||||
}
|
||||
|
||||
test "ZREVRANGE basics" {
|
||||
r del ztmp
|
||||
r zadd ztmp 1 a
|
||||
r zadd ztmp 2 b
|
||||
r zadd ztmp 3 c
|
||||
r zadd ztmp 4 d
|
||||
|
||||
assert_equal {d c b a} [r zrevrange ztmp 0 -1]
|
||||
assert_equal {d c b} [r zrevrange ztmp 0 -2]
|
||||
assert_equal {c b a} [r zrevrange ztmp 1 -1]
|
||||
assert_equal {c b} [r zrevrange ztmp 1 -2]
|
||||
assert_equal {b a} [r zrevrange ztmp -2 -1]
|
||||
assert_equal {b} [r zrevrange ztmp -2 -2]
|
||||
|
||||
# out of range start index
|
||||
assert_equal {d c b} [r zrevrange ztmp -5 2]
|
||||
assert_equal {d c} [r zrevrange ztmp -5 1]
|
||||
assert_equal {} [r zrevrange ztmp 5 -1]
|
||||
assert_equal {} [r zrevrange ztmp 5 -2]
|
||||
|
||||
# out of range end index
|
||||
assert_equal {d c b a} [r zrevrange ztmp 0 5]
|
||||
assert_equal {c b a} [r zrevrange ztmp 1 5]
|
||||
assert_equal {} [r zrevrange ztmp 0 -5]
|
||||
assert_equal {} [r zrevrange ztmp 1 -5]
|
||||
|
||||
# withscores
|
||||
assert_equal {d 4 c 3 b 2 a 1} [r zrevrange ztmp 0 -1 withscores]
|
||||
}
|
||||
|
||||
test {ZRANK basics} {
|
||||
r zadd zranktmp 10 x
|
||||
r zadd zranktmp 20 y
|
||||
@ -69,15 +129,6 @@ start_server {tags {"zset"}} {
|
||||
set _ $err
|
||||
} {}
|
||||
|
||||
test {ZRANGE and ZREVRANGE basics} {
|
||||
list [r zrange ztmp 0 -1] [r zrevrange ztmp 0 -1] \
|
||||
[r zrange ztmp 1 -1] [r zrevrange ztmp 1 -1]
|
||||
} {{y x z} {z x y} {x z} {x y}}
|
||||
|
||||
test {ZRANGE WITHSCORES} {
|
||||
r zrange ztmp 0 -1 withscores
|
||||
} {y 1 x 10 z 30}
|
||||
|
||||
test {ZSETs stress tester - sorting is working well?} {
|
||||
set delta 0
|
||||
for {set test 0} {$test < 2} {incr test} {
|
||||
|
Loading…
x
Reference in New Issue
Block a user