use strict;
use warnings;
use Test::Most 'die';
use Data::Printer;
use Data::TagsAndRanges;
my $obj = Data::TagsAndRanges->new();
ok($obj,'constructor works');
sub clear_it {
lives_ok { $obj->clear } 'clearing the object';
}
subtest 'no ranges or tags' => sub {
clear_it;
lives_ok {
$obj->set({
value => 1234,
});
} 'setting';
cmp_ok($obj->get({}),'==',1234,
'getting');
};
subtest 'tags' => sub {
clear_it;
lives_ok {
$obj->set({
tag => 'tag1',
value => 'a string',
});
} 'setting tag1';
lives_ok {
$obj->set({
tag => 'tag2',
value => 'another string',
});
} 'setting tag2';
cmp_ok($obj->get({tag => 'tag1'}),
'eq',
'a string',
'getting tag1');
cmp_ok($obj->get({tag => 'tag2'}),
'eq',
'another string',
'getting tag2');
dies_ok {
$obj->get({tag=>'no such tag'});
} 'getting non-existent tag';
dies_ok {
$obj->get({});
} 'default get dies';
};
subtest 'ranges' => sub {
clear_it;
lives_ok {
$obj->set({
from => 10,
to => 20,
value => [1,2,3],
});
} 'setting 10-20';
lives_ok {
$obj->set({
from => 30,
to => 50,
value => [4,5,6],
});
} 'setting 30-50';
cmp_deeply($obj->get({at => 15}),
[1,2,3],
'getting 15');
cmp_deeply($obj->get({at => 10}),
[1,2,3],
'getting 10');
cmp_deeply($obj->get({at => 19.999}),
[1,2,3],
'getting 19.999');
dies_ok {
$obj->get({at => 20})
} 'getting 20 dies';
cmp_deeply($obj->get({at => 40}),
[4,5,6],
'getting 40');
cmp_deeply($obj->get({at => 30}),
[4,5,6],
'getting 30');
cmp_deeply($obj->get({at => 49.999}),
[4,5,6],
'getting 49.999');
dies_ok {
$obj->get({at => 50})
} 'getting 50 dies';
dies_ok {
$obj->get({at => 0})
} 'getting 0 dies';
note p $obj;
dies_ok {
$obj->get({});
} 'default get dies';
};
done_testing();