my
$redis_backend
=
$ENV
{REDIS_BACKEND} ||
'Redis'
;
eval
"use $redis_backend"
;
my
$redis_server
=
eval
{ Test::RedisServer->new } or plan
skip_all
=>
'redis-server is required in PATH to run this test'
;
my
$redis
=
$redis_backend
->new(
$redis_server
->connect_info );
subtest
'do not use script, use normal key'
=>
sub
{
my
$l
= Redis::LeaderBoardMulti->new(
redis
=>
$redis
,
key
=>
'sortable-member'
,
use_script
=> 0,
use_hash
=> 0,
order
=> [
'asc'
,
'asc'
],
);
$redis
->flushall;
test_leader_board(
$l
);
};
subtest
'do not use script, use hash key'
=>
sub
{
my
$l
= Redis::LeaderBoardMulti->new(
redis
=>
$redis
,
key
=>
'sortable-member'
,
use_script
=> 0,
use_hash
=> 1,
order
=> [
'asc'
,
'asc'
],
);
$redis
->flushall;
test_leader_board(
$l
);
};
subtest
'use script, use normal key'
=>
sub
{
my
$l
= Redis::LeaderBoardMulti->new(
redis
=>
$redis
,
key
=>
'sortable-member'
,
use_script
=> 1,
use_hash
=> 0,
order
=> [
'asc'
,
'asc'
],
);
$redis
->flushall;
test_leader_board(
$l
);
};
subtest
'use script, use hash key'
=>
sub
{
my
$l
= Redis::LeaderBoardMulti->new(
redis
=>
$redis
,
key
=>
'sortable-member'
,
use_script
=> 1,
use_hash
=> 1,
order
=> [
'asc'
,
'asc'
],
);
$redis
->flushall;
test_leader_board(
$l
);
};
sub
test_leader_board {
my
$l
=
shift
;
note
'set_score'
;
$l
->set_score(
'z'
, [1, 1]);
$l
->set_score(
'y'
, [2, 1]);
$l
->set_score(
'x'
, [2, 1]);
$l
->set_score(
'w'
, [2, 2]);
note
'get_rank'
;
is
$l
->get_rank(
'z'
), 1;
is
$l
->get_rank(
'y'
), 2;
is
$l
->get_rank(
'x'
), 2;
is
$l
->get_rank(
'w'
), 4;
note
'get_sorted_order'
;
is
$l
->get_sorted_order(
'z'
), 0;
is
$l
->get_sorted_order(
'y'
), 2;
is
$l
->get_sorted_order(
'x'
), 1;
is
$l
->get_sorted_order(
'w'
), 3;
note
'get_rank_with_score'
;
is_deeply [
$l
->get_rank_with_score(
'z'
)], [1, 1, 1];
is_deeply [
$l
->get_rank_with_score(
'y'
)], [2, 2, 1];
is_deeply [
$l
->get_rank_with_score(
'x'
)], [2, 2, 1];
is_deeply [
$l
->get_rank_with_score(
'w'
)], [4, 2, 2];
note
'get_rank_by_score'
;
is
$l
->get_rank_by_score([1, 1]), 1;
is
$l
->get_rank_by_score([2, 1]), 2;
is
$l
->get_rank_by_score([2, 2]), 4;
note
'modify the score of existing key by set_score'
;
$l
->set_score(
'z'
, [3, 1]);
is
$l
->get_rank(
'w'
), 3;
is
$l
->get_rank(
'z'
), 4;
note
'remove'
;
$l
->remove(
'w'
);
is
$l
->get_rank(
'z'
), 3;
}
done_testing;