1#!/usr/bin/perl
2
3use warnings;
4use strict;
5use Test::Inter;
6$::ti = new Test::Inter $0;
7require "tests.pl";
8
9our $obj1 = new Date::Manip::Date;
10$obj1->config("forcedate","now,America/New_York");
11our $obj2 = $obj1->new_delta();
12
13sub test {
14   my(@test)=@_;
15
16   my $err = $obj1->parse(shift(@test));
17   return $$obj1{"err"}  if ($err);
18   $err = $obj2->parse(shift(@test));
19   return $$obj2{"err"}  if ($err);
20
21   my $obj3 = $obj1->calc($obj2,@test);
22   return   if (! defined $obj3);
23   $err = $obj3->err();
24   return $err  if ($err);
25   my $ret = $obj3->value();
26   return $ret;
27}
28
29my $tests="
30
31'1996-02-07 08:00' +1:1:1:1 0 => 1996020809:01:01
32
33'1996-02-07 08:00' +1:1:1:1 1 => 1996020606:58:59
34
35'1996-02-07 08:00' +1:1:1:1 2 => 1996020606:58:59
36
37'1996-11-20 12:00:00' +0:5:0:0 0 => 1996112017:00:00
38
39'1996-11-20 12:00:00' +0:5:0:0 1 => 1996112007:00:00
40
41'1996-11-20 12:00:00' +0:5:0:0 2 => 1996112007:00:00
42
43'1996-11-20 12:00:00' +0:13:0:0 0 => 1996112101:00:00
44
45'1996-11-20 12:00:00' +0:13:0:0 1 => 1996111923:00:00
46
47'1996-11-20 12:00:00' +0:13:0:0 2 => 1996111923:00:00
48
49'1996-11-20 12:00:00' +3:2:0:0 0 => 1996112314:00:00
50
51'1996-11-20 12:00:00' +3:2:0:0 1 => 1996111710:00:00
52
53'1996-11-20 12:00:00' +3:2:0:0 2 => 1996111710:00:00
54
55'1996-11-20 12:00:00' -3:2:0:0 0 => 1996111710:00:00
56
57'1996-11-20 12:00:00' -3:2:0:0 1 => 1996112314:00:00
58
59'1996-11-20 12:00:00' -3:2:0:0 2 => 1996112314:00:00
60
61'1996-11-20 12:00:00' +3:13:0:0 0 => 1996112401:00:00
62
63'1996-11-20 12:00:00' +3:13:0:0 1 => 1996111623:00:00
64
65'1996-11-20 12:00:00' +3:13:0:0 2 => 1996111623:00:00
66
67'1996-11-20 12:00:00' +6:2:0:0 0 => 1996112614:00:00
68
69'1996-11-20 12:00:00' +6:2:0:0 1 => 1996111410:00:00
70
71'1996-11-20 12:00:00' +6:2:0:0 2 => 1996111410:00:00
72
73'1996-12-31 12:00:00' +1:2:0:0 0 => 1997010114:00:00
74
75'2009-05-13 12:00:00' '+10 weeks' 0 => 2009072212:00:00
76
77'2009-05-13 12:00:00' '+10 weeks' 1 => 2009030412:00:00
78
79'2009-05-13 12:00:00' '+10 weeks' 2 => 2009030412:00:00
80
81'2009-05-13 12:00:00' '-10 weeks' 0 => 2009030412:00:00
82
83'2009-05-13 12:00:00' '-10 weeks' 1 => 2009072212:00:00
84
85'2009-05-13 12:00:00' '-10 weeks' 2 => 2009072212:00:00
86
87# Approximate deltas
88
89'2009-05-13 12:00:00' '+ 1 year' 0 => 2010051312:00:00
90
91'2009-05-13 12:00:00' '+ 1 year' 1 => 2008051312:00:00
92
93'2009-05-13 12:00:00' '+ 1 year' 2 => 2008051312:00:00
94
952008022912:00:00 '+ 1 year' 0 => 2009022812:00:00
96
97'2009-05-13 12:00:00' '+ 13 months' 0 => 2010061312:00:00
98
99'2009-05-13 12:00:00' '+ 13 months' 1 => 2008041312:00:00
100
101'2009-05-13 12:00:00' '+ 13 months' 2 => 2008041312:00:00
102
103# Handle subtraction
104
105'1998-11-28 00:00:00' 1:1:1:0:0:0:0 0 => 2000010400:00:00
106
107'1998-11-28 00:00:00' 1:1:1:0:0:0:0 1 => 1997102100:00:00
108
109'1998-11-28 00:00:00' 1:1:1:0:0:0:0 2 => 1997102100:00:00
110
111'1999-01-04 00:00:00' 0:1:1:0:0:0:0 0 => 1999021100:00:00
112
113'1999-01-04 00:00:00' 0:1:1:0:0:0:0 1 => 1998112700:00:00
114
115'1999-01-04 00:00:00' 0:1:1:0:0:0:0 2 => 1998112800:00:00
116
1171998112800:00:00 -0:1:1:0:0:0:0 0 => 1998102100:00:00
118
1191998112800:00:00 -0:1:1:0:0:0:0 1 => 1999010400:00:00
120
1211998112800:00:00 -0:1:1:0:0:0:0 2 => 1999010500:00:00
122
123# Handle large deltas
124
125'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  0 => 3268082623:00:00
126
127'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 0 => 0731050801:00:00
128
129'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 0 => 0733072301:00:00
130
131'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  1 => 0731050801:00:00
132
133'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 1 => 3268082623:00:00
134
135'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 1 => 3266061123:00:00
136
137'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  2 => 0731050701:00:00
138
139'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 2 => 3268082623:00:00
140
141'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 2 => 3266061223:00:00
142
143'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  0 => 3264102123:00:00
144
145'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 0 => 0727070601:00:00
146
147'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 0 => 0729091701:00:00
148
149'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  1 => 0727070601:00:00
150
151'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 1 => 3264102123:00:00
152
153'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 1 => 3262080923:00:00
154
155'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  2 => 0727070501:00:00
156
157'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 2 => 3264102323:00:00
158
159'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 2 => 3262080923:00:00
160
161'2000-01-01 00:00:00' 1:1:1:0:11111111111:0:0  0 => '[calc] Delta too large'
162
163";
164
165$::ti->tests(func  => \&test,
166             tests => $tests);
167$::ti->done_testing();
168
169#Local Variables:
170#mode: cperl
171#indent-tabs-mode: nil
172#cperl-indent-level: 3
173#cperl-continued-statement-offset: 2
174#cperl-continued-brace-offset: 0
175#cperl-brace-offset: 0
176#cperl-brace-imaginary-offset: 0
177#cperl-label-offset: 0
178#End:
179