File: parse_interval.t

package info (click to toggle)
libdatetime-format-pg-perl 0.16010-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 260 kB
  • ctags: 224
  • sloc: makefile: 492; perl: 369
file content (173 lines) | stat: -rw-r--r-- 7,313 bytes parent folder | download
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# $Id: parse_interval.t 3687 2007-05-27 15:32:27Z lestrrat $
use strict;
use Test::More;
use DateTime;
use DateTime::Duration;
use Data::Dumper;

my @positive_data;
my @negative_data;

BEGIN
{
    @negative_data = (
        '098:08:00',
        '1:08:00',
        '-012:00:00',
    );

    @positive_data = (
        [ '00:00:00' => DateTime::Duration->new() ],
        [ '-08:08:00' => DateTime::Duration->new( hours => -8, minutes => -8) ],
        [ '-98:08:00' => DateTime::Duration->new( hours => -98, minutes => -8) ],
        [ '-100:33:00' => DateTime::Duration->new( hours => -100, minutes => -33) ],
        [ '100:33:00' => DateTime::Duration->new( hours => 100, minutes => 33) ],
        [ '01:00:00'  => DateTime::Duration->new( hours => 1 )  ],
        [ '-08:00:00' => DateTime::Duration->new( hours => -8 ) ],
        [ '-1 days'   => DateTime::Duration->new(days => -1)    ],
        [ '-23:59'    => DateTime::Duration->new(hours => -23, minutes => -59) ],
        [ '-1 days -00:01' => DateTime::Duration->new( days => -1, minutes => -1) ],
        [ '1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
        [ '1 month -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
        [ '@ 1 mon -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
        [ '@ 1 month -1 days' => DateTime::Duration->new(months => 1)->add(days => -1) ],
        [ '-1 days +02:03:00' => DateTime::Duration->new(days => -1)
              ->add(
                  hours  => 2,
                  minutes => 3,
              )
        ],
        ['9 years 1 mon -12 days +13:14:00' => DateTime::Duration->new(
            years   => 9,
            months  => 1,
            hours   => 13,
            minutes => 14,
        )->add(days => -12)],
        [ '@ 1 day ago' => DateTime::Duration->new( days => -1 )],
        [ '@ 1 day 10 mins' => DateTime::Duration->new( days => 1, minutes => 10 )],
        [ '@ 23 hours 59 mins ago' => DateTime::Duration->new(
            hours => -23,
            minutes => -59
        )],
        [ '@ 1 day 1 min ago' => DateTime::Duration->new( days => -1, minutes => -1 )],
        [ '10 days' => DateTime::Duration->new(days => 10 ) ],
        [ '34 years' => DateTime::Duration->new(years => 34 )],
        [ '3 mon' => DateTime::Duration->new(months => 3 )],
        [ '3 mons' => DateTime::Duration->new(months => 3 )],
        [ '3 month' => DateTime::Duration->new(months => 3 )],
        [ '3 months' => DateTime::Duration->new(months => 3 )],
        [ '-00:00:14' => DateTime::Duration->new(seconds => -14 )],
        [ '1 day 02:03:04' => DateTime::Duration->new(
            days => 1,
            hours => 2,
            minutes => 3,
            seconds => 4,
        )],
    
        [ '5 mons 12:00:00' => DateTime::Duration->new( months => 5, hours => 12) ],
        [ '@ 1 min' => DateTime::Duration->new(minutes => 1 )],
        [ '@ 1 mins' => DateTime::Duration->new(minutes => 1 )],
        [ '@ 1 minute' => DateTime::Duration->new(minutes => 1 )],
        [ '@ 1 minutes' => DateTime::Duration->new(minutes => 1 )],
        [ '@ 5 hours' => DateTime::Duration->new( hours => 5 )],
        [ '@ 34 years' => DateTime::Duration->new(years => 34 )],
        [ '@ 3 mons' => DateTime::Duration->new(months => 3 )],
        [ '@ 14 sec ago' => DateTime::Duration->new( seconds => -14 )],
        [ '@ 14 secs ago' => DateTime::Duration->new( seconds => -14 )],
        [ '@ 14 second ago' => DateTime::Duration->new( seconds => -14 )],
        [ '@ 14 seconds ago' => DateTime::Duration->new( seconds => -14 )],
        [ '@ 1 day 2 hours 3 mins 4 secs' => DateTime::Duration->new(
            days => 1,
            hours => 2,
            minutes => 3,
            seconds => 4,
        )],
    
        [ '@ 5 mons 12 hours' => DateTime::Duration->new( hours => 12, months => 5) ],
        [ '@ 4541 years 4 mons 4 days 17 mins 31 secs' => DateTime::Duration->new(
            years => 4541,
            months => 4,
            days => 4,
            minutes => 17,
            seconds => 31,
        )],
    
        [ '@ 6 mons 5 days 4 hours 3 mins 2 secs' => DateTime::Duration->new(
            months => 6,
            days => 5,
            hours => 4,
            minutes => 3,
            seconds => 2,
        )],

        [ '1 days 02:03:00 ago' => DateTime::Duration->new(
            days => -1,
            hours => -2,
            minutes => -3,
        )],

        [ '1 millennium' => DateTime::Duration->new( years => 1000 )],
        [ '2 millennia' => DateTime::Duration->new( years => 2000 )],
        [ '3 millenniums' => DateTime::Duration->new( years => 3000 )],
        [ '1 mil' => DateTime::Duration->new( years => 1000 )],
        [ '2 mils' => DateTime::Duration->new( years => 2000 )],
        
        [ '1 century' => DateTime::Duration->new( years => 100 )],
        [ '2 centuries' => DateTime::Duration->new( years => 200 )],
        [ '1 cent' => DateTime::Duration->new( years => 100 )],
        [ '2 c' => DateTime::Duration->new( years => 200 )],
        
        [ '1 decade' => DateTime::Duration->new( years => 10 )],
        [ '2 decades' => DateTime::Duration->new( years => 20 )],
        [ '1 dec' => DateTime::Duration->new( years => 10 )],
        [ '2 decs' => DateTime::Duration->new( years => 20 )],

        [ '1 year' => DateTime::Duration->new( years => 1 )],
        [ '2 years' => DateTime::Duration->new( years => 2 )],
        [ '1 y' => DateTime::Duration->new( years => 1 )],
        [ '1 yr' => DateTime::Duration->new( years => 1 )],
        [ '2 yrs' => DateTime::Duration->new( years => 2 )],
        
        [ '1 mil 9 c 6 decade 2 yr' => DateTime::Duration->new( years => 1962 )],

        [ '1 month' => DateTime::Duration->new( months => 1 )],
        [ '2 months' => DateTime::Duration->new( months => 2 )],
        [ '1 mon' => DateTime::Duration->new( months => 1 )],
        [ '2 mons' => DateTime::Duration->new( months => 2 )],
        
        [ '1 week' => DateTime::Duration->new( weeks => 1 )],
        [ '2 weeks' => DateTime::Duration->new( weeks => 2 )],
        [ '1 w' => DateTime::Duration->new( weeks => 1 )],
        
        [ '1 day' => DateTime::Duration->new( days => 1 )],
        [ '2 days' => DateTime::Duration->new( days => 2 )],
        [ '1 d' => DateTime::Duration->new( days => 1 )],
        
        [ '1 mil 2 c 4 decade 8 yr 9 months 18 d ' => DateTime::Duration->new( years => 1248, months => 9, days => 18 )],
        [ '12 yr 42 w' => DateTime::Duration->new( years => 12, weeks => 42 )],
    );

    plan tests => @negative_data + @positive_data + 1;
    use_ok 'DateTime::Format::Pg' or die;
}

{ # Positive data
    for my $compare (@positive_data) {
        ok !DateTime::Duration->compare(
            DateTime::Format::Pg->parse_duration($compare->[0]),
            $compare->[1]
        ), "'$compare->[0]'"
            or diag 
                Dumper [
                    { DateTime::Format::Pg->parse_duration($compare->[0])->deltas },
                    { $compare->[1]->deltas }
                ]
        ;
    }
}

{ # Negative data
    for my $data (@negative_data) {
        ok(! eval { DateTime::Format::Pg->parse_duration($data) } && $@, "'$data' fails to parse");
    }
}