1#!/usr/bin/perl
2
3use warnings;
4use strict;
5use Test::Inter;
6$::ti = new Test::Inter $0;
7require "tests.pl";
8
9my $obj = new Date::Manip::Recur;
10$obj->config("forcedate","2000-01-21-00:00:00,America/New_York");
11
12sub test {
13   my ($op,$arg) = @_;
14   my ($date,$err);
15
16   if ($op eq 'freq') {
17      $err = $obj->frequency($arg);
18      return $obj->err()  if ($err);
19      return 0;
20
21   } elsif ($op eq 'basedate') {
22      $err = $obj->basedate($arg);
23      return $obj->err()  if ($err);
24      return 0;
25
26   } elsif ($op eq 'start') {
27      $err = $obj->start($arg);
28      return $obj->err()  if ($err);
29      return 0;
30
31   } elsif ($op eq 'end') {
32      $err = $obj->end($arg);
33      return $obj->err()  if ($err);
34      return 0;
35
36   } elsif ($op eq 'next') {
37      ($date,$err)   = $obj->next($arg);
38      return $err   if ($err);
39      return $date  if (! defined($date));
40      my $val = $date->value();
41      return $val;
42
43   } elsif ($op eq 'prev') {
44      ($date,$err)   = $obj->prev($arg);
45      return $err   if ($err);
46      return $date  if (! defined($date));
47      my $val = $date->value();
48      return $val;
49
50   } elsif ($op eq 'nth') {
51      ($date,$err)   = $obj->nth($arg);
52      return $err   if ($err);
53      return $date  if (! defined($date));
54      my $val = $date->value();
55      return $val;
56   }
57}
58
59my $tests="
60
61freq 1*2:0:4:12:0:0       => 0
62
63basedate 1999-12-30-00:00:00  => 0
64
65nth 0                      => 1999020412:00:00
66
67nth 2                      => 2001020412:00:00
68
69nth -2                     => 1997020412:00:00
70
71# 31st of every month
72
73freq 0:1*0:31:12:0:0      => 0
74
75basedate 2005-01-27-00:00:00  => 0
76
77nth 0                      => 2005013112:00:00
78
79nth 1                      => __undef__
80
81nth 2                      => 2005033112:00:00
82
83nth -1                     => 2004123112:00:00
84
85# d=15--15
86
87freq 0:1*0:15--15:12:0:0  => 0
88
89basedate 2005-01-27-00:00:00  => 0
90
91nth 0                      => 2005011512:00:00
92
93nth 1                      => 2005011612:00:00
94
95nth 2                      => 2005011712:00:00
96
97nth 3                      => 2005031512:00:00
98
99# DST transition dates
100
101freq 0:0:0:0:1*30:0       => 0
102
103basedate 2010-03-14-00:00:01  => 0
104
105nth 0                      => 2010031400:30:00
106
107nth 1                      => 2010031401:30:00
108
109nth 2                      => 2010031403:30:00
110
111freq 0:0:0:0:1*30:0       => 0
112
113basedate 2010-11-07-00:00:01  => 0
114
115nth 0                      => 2010110700:30:00
116
117nth 1                      => 2010110701:30:00
118
119nth 1                      => 2010110701:30:00
120
121freq 0:0:0:1*02:30:00     => 0
122
123basedate 2010-03-13-00:00:00  => 0
124
125nth 0                      => 2010031302:30:00
126
127nth 1                      => __undef__
128
129nth 2                      => 2010031502:30:00
130
131freq *2010:1:0:4-5:12-13:0:0 => 0
132
133nth 0                      => 2010010412:00:00
134
135nth 1                      => 2010010413:00:00
136
137nth 2                      => 2010010512:00:00
138
139nth 3                      => 2010010513:00:00
140
141nth -1                     => __undef__
142
143nth 4                      => __undef__
144
145freq *2010:1-4:0:31:12:0:0 => 0
146
147nth 0                      => 2010013112:00:00
148
149nth 1                      => 2010033112:00:00
150
151nth 2                      => __undef__
152
153nth -1                     => __undef__
154
155freq *2010:1-4:0:31:12:0:0 => 0
156
157next                       => 2010013112:00:00
158
159next                       => 2010033112:00:00
160
161next                       => __undef__
162
163prev                       => 2010033112:00:00
164
165prev                       => 2010013112:00:00
166
167prev                       => __undef__
168
169freq *2010:1-4:0:31:12:0:0 => 0
170
171prev                       => 2010033112:00:00
172
173prev                       => 2010013112:00:00
174
175prev                       => __undef__
176
177freq 0:1*0:31:12:0:0      => 0
178
179basedate 2005-01-27-00:00:00  => 0
180
181next                       => 2005013112:00:00
182
183next                       => 2005033112:00:00
184
185prev                       => 2005013112:00:00
186
187freq 0:1*0:31:12:0:0      => 0
188
189basedate 2005-01-27-00:00:00  => 0
190
191prev                       => 2004123112:00:00
192
193freq 0:1*0:31:12:0:0      => 0
194
195basedate 2005-02-27-00:00:00  => 0
196
197next                       => 2005033112:00:00
198
199freq 0:1*0:31:12:0:0      => 0
200
201basedate 2005-02-27-00:00:00  => 0
202
203prev                       => 2005013112:00:00
204
205freq 0:1*0:31:12:0:0      => 0
206
207basedate 2005-01-27-00:00:00  => 0
208
209start 2007-01-01-00:00:00 => 0
210
211end   2007-12-31-00:00:00 => 0
212
213next                      => 2007013112:00:00
214
215freq 0:1*0:31:12:0:0      => 0
216
217basedate 2005-01-27-00:00:00  => 0
218
219start 2007-01-01-00:00:00 => 0
220
221end   2007-12-31-23:59:59 => 0
222
223prev                      => 2007123112:00:00
224
225";
226
227$::ti->tests(func  => \&test,
228             tests => $tests);
229$::ti->done_testing();
230
231#Local Variables:
232#mode: cperl
233#indent-tabs-mode: nil
234#cperl-indent-level: 3
235#cperl-continued-statement-offset: 2
236#cperl-continued-brace-offset: 0
237#cperl-brace-offset: 0
238#cperl-brace-imaginary-offset: 0
239#cperl-label-offset: 0
240#End:
241