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