提交 2812b945 编写于 作者: A antirez

Test for SRANDMEMBER with <count>.

上级 31fe053a
......@@ -271,6 +271,118 @@ start_server {
}
}
test "SRANDMEMBER with <count> against non existing key" {
r srandmember nonexisting_key 100
} {}
foreach {type contents} {
hashtable {
1 5 10 50 125 50000 33959417 4775547 65434162
12098459 427716 483706 2726473884 72615637475
MARY PATRICIA LINDA BARBARA ELIZABETH JENNIFER MARIA
SUSAN MARGARET DOROTHY LISA NANCY KAREN BETTY HELEN
SANDRA DONNA CAROL RUTH SHARON MICHELLE LAURA SARAH
KIMBERLY DEBORAH JESSICA SHIRLEY CYNTHIA ANGELA MELISSA
BRENDA AMY ANNA REBECCA VIRGINIA KATHLEEN
}
intset {
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
}
} {
test "SRANDMEMBER with <count> - $type" {
create_set myset $contents
unset -nocomplain myset
array set myset {}
foreach ele [r smembers myset] {
set myset($ele) 1
}
assert_equal [lsort $contents] [lsort [array names myset]]
# Make sure that a count of 0 is handled correctly.
assert_equal [r srandmember myset 0] {}
# We'll stress different parts of the code, see the implementation
# of SRANDMEMBER for more information, but basically there are
# four different code paths.
#
# PATH 1: Use negative count.
#
# 1) Check that it returns repeated elements.
set res [r srandmember myset -100]
assert_equal [llength $res] 100
# 2) Check that all the elements actually belong to the
# original set.
foreach ele $res {
assert {[info exists myset($ele)]}
}
# 3) Check that eventually all the elements are returned.
unset -nocomplain auxset
set iterations 1000
while {$iterations != 0} {
incr iterations -1
set res [r srandmember myset -10]
foreach ele $res {
set auxset($ele) 1
}
if {[lsort [array names myset]] eq
[lsort [array names auxset]]} {
break;
}
}
assert {$iterations != 0}
# PATH 2: positive count (unique behavior) with requested size
# equal or greater than set size.
foreach size {50 100} {
set res [r srandmember myset $size]
assert_equal [llength $res] 50
assert_equal [lsort $res] [lsort [array names myset]]
}
# PATH 3: Ask almost as elements as there are in the set.
# In this case the implementation will duplicate the original
# set and will remove random elements up to the requested size.
#
# PATH 4: Ask a number of elements definitely smaller than
# the set size.
#
# We can test both the code paths just changing the size but
# using the same code.
foreach size {45 5} {
set res [r srandmember myset $size]
assert_equal [llength $res] $size
# 1) Check that all the elements actually belong to the
# original set.
foreach ele $res {
assert {[info exists myset($ele)]}
}
# 2) Check that eventually all the elements are returned.
unset -nocomplain auxset
set iterations 1000
while {$iterations != 0} {
incr iterations -1
set res [r srandmember myset -10]
foreach ele $res {
set auxset($ele) 1
}
if {[lsort [array names myset]] eq
[lsort [array names auxset]]} {
break;
}
}
assert {$iterations != 0}
}
}
}
proc setup_move {} {
r del myset3 myset4
create_set myset1 {1 a b}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册