summaryrefslogtreecommitdiff
path: root/Data-MultiValued/t/tags-ranges-setting.t
blob: e25a9f1d07b0681ee8a4ca945be3304a5b9d14ff (plain)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!perl 
use strict;
use warnings;
use Test::Most 'die';
use Data::Printer;
use Data::MultiValued::TagsAndRanges;
 
my $obj = Data::MultiValued::TagsAndRanges->new();
ok($obj,'constructor works');
 
my @tags = (undef,'tag1','tag2');
my @ranges = ([10,20,2],[30,50,2]);
 
sub _t $_[0] ? ( tag => $_[0] ) : () }
 
for my $tag (@tags) {
    for my $range (@ranges) {
        $obj->set({
            _t($tag),
            from => $range->[0],
            to => $range->[1],
            value => $range->[2],
        });
    }
}
 
for my $tag (@tags) {
    for my $range (@ranges) {
        cmp_ok(
            $obj->get({
                _t($tag),
                at => ($range->[0]+$range->[1])/2,
            }),
            '==',
            $range->[2],
            "tag @{[ $tag // 'default' ]}, range @$range[0,1]",
        );
    }
}
 
for my $range (@ranges) {
    dies_ok {
        $obj->get({
            tag => 'not there',
            from => $range->[0],
            to => $range->[1],
        })
    "no such tag, range @$range[0,1]";
}
 
for my $tag (@tags) {
    for my $range (@ranges) {
        dies_ok {
            $obj->get({
                _t($tag),
                at => $range->[0]-1,
            })
        "tag @{[ $tag // 'default' ]}, out-of-range (left)";
        dies_ok {
            $obj->get({
                _t($tag),
                at => $range->[1],
            })
        "tag @{[ $tag // 'default' ]}, out-of-range (right)";
    }
}
 
$obj->clear({tag=>$tags[1],from=>$ranges[0]->[0],to=>$ranges[0]->[1]});
dies_ok {
    $obj->get({
        tag=>$tags[1],
        at => $ranges[0]->[0]+1,
    })
'getting deleted range from inside tag dies';
 
cmp_ok(
    $obj->get({
        tag => $tags[1],
        at => $ranges[1]->[0]+1,
    }),
    '==',
    $ranges[1]->[2],
    'other ranges in same tag are still there');
 
done_testing();