The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

use Data::WeightedRoundRobin;

subtest 'emply' => sub {
    my $dwr = Data::WeightedRoundRobin->new;
    ok !$dwr->replace(), 'replace';
    is_deeply $dwr->{rrlist}, [], 'rrlist';
    is $dwr->{weights}, 0, 'weights';
};

subtest 'not found' => sub {
    my $dwr = Data::WeightedRoundRobin->new;
    ok !$dwr->replace('foo'), 'replace';
    is_deeply $dwr->{rrlist}, [], 'rrlist';
    is $dwr->{weights}, 0, 'weights';
};

subtest 'replaced foo' => sub {
    my $dwr = Data::WeightedRoundRobin->new([qw/foo/]);
    ok $dwr->replace('foo'), 'replace';
    is_deeply $dwr->{rrlist}, [
        { key => 'foo', value => 'foo', weight => 100, range => 0 },
    ], 'rrlist';
    is $dwr->{weights}, 100, 'weights';
};

subtest 'replaced foo with weight' => sub {
    my $dwr = Data::WeightedRoundRobin->new([qw/foo/]);
    ok $dwr->replace({ value => 'foo', weight => 50 }), 'replace';
    is_deeply $dwr->{rrlist}, [
        { key => 'foo', value => 'foo', weight => 50, range => 0 },
    ], 'rrlist';
    is $dwr->{weights}, 50, 'weights';
};

subtest 'referenced data' => sub {
    my $dwr = Data::WeightedRoundRobin->new([qw/foo/]);
    ok $dwr->replace({ key => 'foo', value => [qw/f o o/], weight => 50 }), 'replace';
    is_deeply $dwr->{rrlist}, [
        { key => 'foo', value => [qw/f o o/], weight => 50, range => 0 },
    ], 'rrlist';
    is $dwr->{weights}, 50, 'weights';
};

done_testing;