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$obj->config("ConfigFile","Manip.cnf");
12
13sub test {
14   my(@test)=@_;
15   my $err = $obj->parse(@test);
16   if ($err) {
17      return $obj->err();
18   } else {
19      my @dates = $obj->dates();
20      $err   = $obj->err();
21      return $err  if ($err);
22      my @ret   = ();
23      foreach my $d (@dates) {
24         my $v = $d->value();
25         push(@ret,$v);
26      }
27      return @ret;
28   }
29}
30
31my $tests="
32
331*1:1:1:0:0:0
34EASTER
35'Jan 1 1997'
36'Jan 1 1997'
37'Jan 1 2000'
38   =>
39   1997033000:00:00
40   1998041200:00:00
41   1999040400:00:00
42
43*1997-1999:1:1:1:0:0:0
44EASTER
45__undef__
46__undef__
47__undef__
48   =>
49   1997033000:00:00
50   1998041200:00:00
51   1999040400:00:00
52
53*1999:1:1,2:6:0:0:0
54CWD
55__undef__
56__undef__
57__undef__
58   =>
59   1999010400:00:00
60   1999010800:00:00
61
62*1999:1:1,2:6:0:0:0
63CWP
64__undef__
65__undef__
66__undef__
67   =>
68   1998123100:00:00
69   1999010800:00:00
70
71*1999:1:1,2:6:0:0:0
72CWN
73__undef__
74__undef__
75__undef__
76   =>
77   1999010400:00:00
78   1999010800:00:00
79
80*1999:1-4:2:0:12:00:00
81PD1,BD2,FW2
82__undef__
83__undef__
84__undef__
85   =>
86   1999010612:00:00
87   1999020312:00:00
88   1999030312:00:00
89   1999040712:00:00
90
91*1999:1-4:2:0:12:00:00
92PD1,BD2
93__undef__
94__undef__
95__undef__
96   =>
97   1999010212:00:00
98   1999013012:00:00
99   1999022712:00:00
100   1999040312:00:00
101
102*1999:1-4:2:0:12:00:00
103PD1
104__undef__
105__undef__
106__undef__
107   =>
108   1999010412:00:00
109   1999020112:00:00
110   1999030112:00:00
111   1999040512:00:00
112
113*1999:1-4:2:0:12:00:00
114PT1
115__undef__
116__undef__
117__undef__
118   =>
119   1999011112:00:00
120   1999020812:00:00
121   1999030812:00:00
122   1999041212:00:00
123
124*1999:1-2:2:0:12:00:00
125PD7
126__undef__
127__undef__
128__undef__
129   =>
130   1999011012:00:00
131   1999020712:00:00
132
133*1999:1-2:2:0:12:00:00
134   =>
135   1999011112:00:00
136   1999020812:00:00
137
1380:0:0:0:12:0:0
139'Jan 16 1998 at 12:00'
140'Jan 15 1998 at 00:00'
141'Jan 20 1998 at 00:00'
142   =>
143   1998011500:00:00
144   1998011512:00:00
145   1998011600:00:00
146   1998011612:00:00
147   1998011700:00:00
148   1998011712:00:00
149   1998011800:00:00
150   1998011812:00:00
151   1998011900:00:00
152   1998011912:00:00
153   1998012000:00:00
154
1550:0:0:1*12,14:0,30:0
156'Jan 16 1998 at 12:00'
157'Jan 15 1998 at 00:00'
158'Jan 20 1998 at 00:00'
159   =>
160   1998011512:00:00
161   1998011512:30:00
162   1998011514:00:00
163   1998011514:30:00
164   1998011612:00:00
165   1998011612:30:00
166   1998011614:00:00
167   1998011614:30:00
168   1998011712:00:00
169   1998011712:30:00
170   1998011714:00:00
171   1998011714:30:00
172   1998011812:00:00
173   1998011812:30:00
174   1998011814:00:00
175   1998011814:30:00
176   1998011912:00:00
177   1998011912:30:00
178   1998011914:00:00
179   1998011914:30:00
180
1810:0:0:1:6*0,30:0
182'Jan 16 1998 at 12:00'
183'Jan 15 1998 at 00:00'
184'Jan 20 1998 at 00:00'
185   =>
186   1998011506:00:00
187   1998011506:30:00
188   1998011612:00:00
189   1998011612:30:00
190   1998011718:00:00
191   1998011718:30:00
192   1998011900:00:00
193   1998011900:30:00
194
1952:0:0*045:0:0:0
196'Jan 1 1998'
197'Jan 1 1980'
198'Jan 1 1990'
199   =>
200   1980021400:00:00
201   1982021400:00:00
202   1984021400:00:00
203   1986021400:00:00
204   1988021400:00:00
205
2062:0:0*045-047:0:0:0
207'Jan 1 1998'
208'Jan 1 1980'
209'Jan 1 1990'
210   =>
211   1980021400:00:00
212   1980021500:00:00
213   1980021600:00:00
214   1982021400:00:00
215   1982021500:00:00
216   1982021600:00:00
217   1984021400:00:00
218   1984021500:00:00
219   1984021600:00:00
220   1986021400:00:00
221   1986021500:00:00
222   1986021600:00:00
223   1988021400:00:00
224   1988021500:00:00
225   1988021600:00:00
226
2272:1:0*0:0:0:0
228'Jan 1 1985'
229'Jan 1 1980'
230'Jan 1 1990'
231   =>
232   1980110100:00:00
233   1982120100:00:00
234   1985010100:00:00
235   1987020100:00:00
236   1989030100:00:00
237
2380:0:2*2:0:0:0
239'Jan 16 1998'
240'Jan  1 1998'
241'Feb 28 1998'
242   =>
243   1998011300:00:00
244   1998012700:00:00
245   1998021000:00:00
246   1998022400:00:00
247
2480:0:2*2,4:0:0:0
249'Jan 16 1998'
250'Jan  1 1998'
251'Feb 28 1998'
252   =>
253   1998010100:00:00
254   1998011300:00:00
255   1998011500:00:00
256   1998012700:00:00
257   1998012900:00:00
258   1998021000:00:00
259   1998021200:00:00
260   1998022400:00:00
261   1998022600:00:00
262
2630:1:0*2,31:0:0:0
264'Jan 1 1998'
265'Jan 1 1998'
266'Jul 1 1998'
267   =>
268   1998010200:00:00
269   1998013100:00:00
270   1998020200:00:00
271   1998030200:00:00
272   1998033100:00:00
273   1998040200:00:00
274   1998050200:00:00
275   1998053100:00:00
276   1998060200:00:00
277
2780:1:0*-2,-31:0:0:0
279'Jan 1 1998'
280'Jan 1 1998'
281'Jul 1 1998'
282   =>
283   1998010100:00:00
284   1998013000:00:00
285   1998022700:00:00
286   1998030100:00:00
287   1998033000:00:00
288   1998042900:00:00
289   1998050100:00:00
290   1998053000:00:00
291   1998062900:00:00
292   1998070100:00:00
293
2940:1*2,-1:0:0:0:0
295'Jan 1 1998'
296'Jan 1 1998'
297'Mar 31 1998'
298   =>
299   1998011200:00:00
300   1998012600:00:00
301   1998020900:00:00
302   1998022300:00:00
303   1998030900:00:00
304   1998033000:00:00
305
3060:1*2,-2:2:0:0:0
307'Jan 1 1998'
308'Jan 1 1998'
309'Jul 1 1998'
310   =>
311   1998011300:00:00
312   1998012000:00:00
313   1998021000:00:00
314   1998021700:00:00
315   1998031000:00:00
316   1998032400:00:00
317   1998041400:00:00
318   1998042100:00:00
319   1998051200:00:00
320   1998051900:00:00
321   1998060900:00:00
322   1998062300:00:00
323
3242:0*10:0:0:0:0
325'Jan 1 1985'
326'Jan 1 1980'
327'Jan 1 1990'
328   =>
329   1981030200:00:00
330   1983030700:00:00
331   1985030400:00:00
332   1987030200:00:00
333   1989030600:00:00
334
3352:0*10:2:0:0:0
336'Jan 1 1985'
337'Jan 1 1980'
338'Jan 1 1990'
339   =>
340   1981031000:00:00
341   1983030800:00:00
342   1985030500:00:00
343   1987031000:00:00
344   1989030700:00:00
345
3462*3:0:2,30:0:0:0
347'Jan 1 1985'
348'Jan 1 1980'
349'Jan 1 1990'
350   =>
351   1981030200:00:00
352   1981033000:00:00
353   1983030200:00:00
354   1983033000:00:00
355   1985030200:00:00
356   1985033000:00:00
357   1987030200:00:00
358   1987033000:00:00
359   1989030200:00:00
360   1989033000:00:00
361
3622*3:0:0:0:0:0
363'Jan 1 1985'
364'Jan 1 1980'
365'Jan 1 1990'
366   =>
367   1981030100:00:00
368   1983030100:00:00
369   1985030100:00:00
370   1987030100:00:00
371   1989030100:00:00
372
3733*2,5:2,-2:0:0:0:0
374'Jan 1 1985'
375'Jan 1 1980'
376'Jan 1 1986'
377   =>
378   1982020800:00:00
379   1982021500:00:00
380   1982051000:00:00
381   1982052400:00:00
382   1985021100:00:00
383   1985021800:00:00
384   1985051300:00:00
385   1985052000:00:00
386
3873*5,2:2,-2:0:0:0:0
388'Jan 1 1985'
389'Jan 1 1980'
390'Jan 1 1986'
391   =>
392   1982020800:00:00
393   1982021500:00:00
394   1982051000:00:00
395   1982052400:00:00
396   1985021100:00:00
397   1985021800:00:00
398   1985051300:00:00
399   1985052000:00:00
400
4013*2,5:2:2:0:0:0
402'Jan 1 1985'
403'Jan 1 1980'
404'Jan 1 1990'
405   =>
406   1982020900:00:00
407   1982051100:00:00
408   1985021200:00:00
409   1985051400:00:00
410   1988020900:00:00
411   1988051000:00:00
412
4131*2:2:0:0:0:0
414'Jan 1 1980'
415'Jan 1 1980'
416'Dec 1 1982'
417   =>
418   1980021100:00:00
419   1981020900:00:00
420   1982020800:00:00
421
4221*2:2:2:0:0:0
423'Jan 1 1980'
424'Jan 1 1980'
425'Dec 1 1982'
426   =>
427   1980021200:00:00
428   1981021000:00:00
429   1982020900:00:00
430
431*2000:2:1:1:0:0:0
432   =>
433   2000020700:00:00
434
435*2000:2:1:7:0:0:0
436   =>
437   2000020600:00:00
438
439*2000:2:1:0:0:0:0
440   =>
441   2000020700:00:00
442
443*2000:2:-1:1:0:0:0
444   =>
445   2000022800:00:00
446
447*2000:2:-1:7:0:0:0
448   =>
449   2000022700:00:00
450
451*2000:2:-1:0:0:0:0
452   =>
453   2000022800:00:00
454
455*2000:0:0:0:0:0:0
456   =>
457   2000010100:00:00
458
459*2000:0:0:61:0:0:0
460   =>
461   2000030100:00:00
462
463*2000:0:0:-1:0:0:0
464   =>
465   2000123100:00:00
466
467*2000:2:0:2:0:0:0
468   =>
469   2000020200:00:00
470
471*2000:2:0:-2:0:0:0
472   =>
473   2000022800:00:00
474
475*2000:0:2:2:0:0:0
476   =>
477   2000011100:00:00
478
479*2000:0:2:6:0:0:0
480   =>
481   2000010800:00:00
482
483*2000:0:-2:2:0:0:0
484   =>
485   2000121900:00:00
486
487*2000:0:-2:6:0:0:0
488   =>
489   2000122300:00:00
490
491*2000:0:2:0:0:0:0
492   =>
493   2000011000:00:00
494
495*2000:0:-2:0:0:0:0
496   =>
497   2000121800:00:00
498
499*1990,1992:0:0:45:0:0:0
500   =>
501   1990021400:00:00
502   1992021400:00:00
503
504*1990,1992:0:0:0:0:0:0
505   =>
506   1990010100:00:00
507   1992010100:00:00
508
509*1990,1992:5:0:0:0:0:0
510   =>
511   1990050100:00:00
512   1992050100:00:00
513
514*1990,1992:5:0:12:0:0:0
515   =>
516   1990051200:00:00
517   1992051200:00:00
518
519*1998:0:12,14:0:0:0:0
520   =>
521   1998031600:00:00
522   1998033000:00:00
523
524*1998:0:12,14:2:0:0:0
525   =>
526   1998032400:00:00
527   1998040700:00:00
528
529*1998:2:2,-2:0:0:0:0
530   =>
531   1998020900:00:00
532   1998021600:00:00
533
534*1998:2:2,-2:2:0:0:0
535   =>
536   1998021000:00:00
537   1998021700:00:00
538
539*1998:2:2,-2:2:0:0:0
5401998021000:00:00
5411998021000:00:00
5421998021200:00:00
543   =>
544   1998021000:00:00
545
5461*2:0:-1:0:0:0
5472000-01-01
5482000-01-01
5492005-12-31
550   =>
551   2000022900:00:00
552   2001022800:00:00
553   2002022800:00:00
554   2003022800:00:00
555   2004022900:00:00
556   2005022800:00:00
557
5581:0*2:0:0:0:0
5592000-01-01
5602000-01-01
5612000-12-31
562   =>
563   2000011000:00:00
564
5651:0*-2:0:0:0:0
5662000-01-01
5672000-01-01
5682000-12-31
569   =>
570   2000121800:00:00
571
5721:0*2:1:0:0:0
5732000-01-01
5742000-01-01
5752000-12-31
576   =>
577   2000011000:00:00
578
5791:0*-2:1:0:0:0
5802000-01-01
5812000-01-01
5822000-12-31
583   =>
584   2000121800:00:00
585
5861:1*2:0:0:0:0
587'Jan  1 2000'
588'Jan 10 2000'
589'Dec 31 2002'
590   =>
591   2000011000:00:00
592   2001021200:00:00
593   2002031100:00:00
594
5951:1*-2:0:0:0:0
596'Jan  1 2000'
597'Jan 10 2000'
598'Dec 31 2002'
599   =>
600   2000012400:00:00
601   2001021900:00:00
602   2002031800:00:00
603
6041:1*2:1:0:0:0
605'Jan 10 2000'
606'Jan  1 2000'
607'Dec 31 2002'
608   =>
609   2000011000:00:00
610   2001021200:00:00
611   2002031100:00:00
612
6131:1*-2:1:0:0:0
614'Jan 10 2000'
615'Jan  1 2000'
616'Dec 31 2002'
617   =>
618   2000012400:00:00
619   2001021900:00:00
620   2002031800:00:00
621
6221:1:1*0:0:0:0
623'Jan  4 2000'
624'Jan  1 2000'
625'Dec 31 2002'
626   =>
627   2000010300:00:00
628   2001020500:00:00
629   2002031100:00:00
630
6311:0:0*15:0:0:0
632'Jan  1 2000'
633'Jan  1 2000'
634'Dec 31 2002'
635   =>
636   2000011500:00:00
637   2001011500:00:00
638   2002011500:00:00
639
6401:0:0*-10:0:0:0
641'Jan  1 2000'
642'Jan  1 2000'
643'Dec 31 2002'
644   =>
645   2000122200:00:00
646   2001122200:00:00
647   2002122200:00:00
648
6491:1:1*2:0:0:0
650'Jan  4 2000'
651'Jan  1 2000'
652'Dec 31 2002'
653   =>
654   2000010400:00:00
655   2001020600:00:00
656   2002031200:00:00
657
6581:1:0*10:0:0:0
659'Jan  1 2000'
660'Jan  4 2000'
661'Dec 31 2002'
662   =>
663   2000011000:00:00
664   2001021000:00:00
665   2002031000:00:00
666
667*2000-2009:0:0:366:0:0:0
668   =>
669   2000123100:00:00
670   2004123100:00:00
671   2008123100:00:00
672
673*2000:1-5:0:31:0:0:0
674   =>
675   2000013100:00:00
676   2000033100:00:00
677   2000053100:00:00
678
679*2000-2009:0:53:1:0:0:0
680   =>
681   2001123100:00:00
682   2007123100:00:00
683
684*2000-2009:0:-53:1:0:0:0
685   =>
686   2001010100:00:00
687   2007010100:00:00
688
6891*1-4:0:31:0:0:0
690'Jan  1 2000'
691'Jan  1 2000'
692'Dec 31 2000'
693   =>
694   2000013100:00:00
695   2000033100:00:00
696
6971*1-4:0:-31:0:0:0
698'Jan  1 2000'
699'Jan  1 2000'
700'Dec 31 2000'
701   =>
702   2000010100:00:00
703   2000030100:00:00
704
7051:1:0*-10:0:0:0
706'Jan  1 2000'
707'Jan  4 2000'
708'Dec 31 2002'
709   =>
710   2000012200:00:00
711   2001021900:00:00
712   2002032200:00:00
713
714*2000:1-5:5:2:0:0:0
715   =>
716   2000022900:00:00
717   2000053000:00:00
718
719*2000:1-5:-5:2:0:0:0
720   =>
721   2000020100:00:00
722   2000050200:00:00
723
724*2000:1-5:5:0:0:0:0
725   =>
726   2000013100:00:00
727   2000052900:00:00
728
729*2000:1-5:-5:0:0:0:0
730   =>
731   2000010300:00:00
732   2000050100:00:00
733
7341*1-5:5:2:0:0:0
735'Jan 1 2000'
736'Jan 1 2000'
737'Dec 1 2000'
738   =>
739   2000022900:00:00
740   2000053000:00:00
741
7421*1-5:-5:2:0:0:0
743'Jan 1 2000'
744'Jan 1 2000'
745'Dec 1 2000'
746   =>
747   2000020100:00:00
748   2000050200:00:00
749
7501*1-5:5:0:0:0:0
751'Jan 1 2000'
752'Jan 1 2000'
753'Dec 1 2000'
754   =>
755   2000013100:00:00
756   2000052900:00:00
757
7581*1-5:-5:0:0:0:0
759'Jan 1 2000'
760'Jan 1 2000'
761'Dec 1 2000'
762   =>
763   2000010300:00:00
764   2000050100:00:00
765
7661:0*53:1:0:0:0
767'Jan 1 2000'
768'Jan 1 2000'
769'Jan 1 2010'
770   =>
771   2001123100:00:00
772   2007123100:00:00
773
7741:0*-53:1:0:0:0
775'Jan 1 2000'
776'Jan 1 2000'
777'Jan 1 2010'
778   =>
779   2001010100:00:00
780   2007010100:00:00
781
7821:0:0*366:0:0:0
783'Jan 1 2000'
784'Jan 1 2000'
785'Jan 1 2010'
786   =>
787   2000123100:00:00
788   2004123100:00:00
789   2008123100:00:00
790
7911:0:0*-366:0:0:0
792'Jan 1 2000'
793'Jan 1 2000'
794'Jan 1 2010'
795   =>
796   2000010100:00:00
797   2004010100:00:00
798   2008010100:00:00
799
800'4th day of each month in 1999'
801   =>
802   1999010400:00:00
803   1999020400:00:00
804   1999030400:00:00
805   1999040400:00:00
806   1999050400:00:00
807   1999060400:00:00
808   1999070400:00:00
809   1999080400:00:00
810   1999090400:00:00
811   1999100400:00:00
812   1999110400:00:00
813   1999120400:00:00
814
815'2nd tuesday of every month in 1999'
816   =>
817   1999011200:00:00
818   1999020900:00:00
819   1999030900:00:00
820   1999041300:00:00
821   1999051100:00:00
822   1999060800:00:00
823   1999071300:00:00
824   1999081000:00:00
825   1999091400:00:00
826   1999101200:00:00
827   1999110900:00:00
828   1999121400:00:00
829
830'every 2nd tuesday in June 1999'
831   =>
832   1999060800:00:00
833
834";
835
836$::ti->tests(func  => \&test,
837             tests => $tests);
838$::ti->done_testing();
839
840#Local Variables:
841#mode: cperl
842#indent-tabs-mode: nil
843#cperl-indent-level: 3
844#cperl-continued-statement-offset: 2
845#cperl-continued-brace-offset: 0
846#cperl-brace-offset: 0
847#cperl-brace-imaginary-offset: 0
848#cperl-label-offset: 0
849#End:
850