The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use Test::Inter;
$t = new Test::Inter 'date :: calc (date,delta)';
$testdir = '';
$testdir = $t->testdir();

use Date::Manip;
if (DateManipVersion() >= 6.00) {
   $t->feature("DM6",1);
}

$t->skip_all('Date::Manip 6.xx required','DM6');


sub test {
  (@test)=@_;

  $err = $obj1->parse(shift(@test));
  return $$obj1{"err"}  if ($err);
  $err = $obj2->parse(shift(@test));
  return $$obj2{"err"}  if ($err);

  my $obj3 = $obj1->calc($obj2,@test);
  return   if (! defined $obj3);
  $err = $obj3->err();
  return $err  if ($err);
  $ret = $obj3->value();
  return $ret;
}

$obj1 = new Date::Manip::Date;
$obj1->config("forcedate","now,America/New_York");
$obj2 = $obj1->new_delta();

$tests="

'1996-02-07 08:00' +1:1:1:1 0 => 1996020809:01:01

'1996-02-07 08:00' +1:1:1:1 1 => 1996020606:58:59

'1996-02-07 08:00' +1:1:1:1 2 => 1996020606:58:59

'1996-11-20 12:00:00' +0:5:0:0 0 => 1996112017:00:00

'1996-11-20 12:00:00' +0:5:0:0 1 => 1996112007:00:00

'1996-11-20 12:00:00' +0:5:0:0 2 => 1996112007:00:00

'1996-11-20 12:00:00' +0:13:0:0 0 => 1996112101:00:00

'1996-11-20 12:00:00' +0:13:0:0 1 => 1996111923:00:00

'1996-11-20 12:00:00' +0:13:0:0 2 => 1996111923:00:00

'1996-11-20 12:00:00' +3:2:0:0 0 => 1996112314:00:00

'1996-11-20 12:00:00' +3:2:0:0 1 => 1996111710:00:00

'1996-11-20 12:00:00' +3:2:0:0 2 => 1996111710:00:00

'1996-11-20 12:00:00' -3:2:0:0 0 => 1996111710:00:00

'1996-11-20 12:00:00' -3:2:0:0 1 => 1996112314:00:00

'1996-11-20 12:00:00' -3:2:0:0 2 => 1996112314:00:00

'1996-11-20 12:00:00' +3:13:0:0 0 => 1996112401:00:00

'1996-11-20 12:00:00' +3:13:0:0 1 => 1996111623:00:00

'1996-11-20 12:00:00' +3:13:0:0 2 => 1996111623:00:00

'1996-11-20 12:00:00' +6:2:0:0 0 => 1996112614:00:00

'1996-11-20 12:00:00' +6:2:0:0 1 => 1996111410:00:00

'1996-11-20 12:00:00' +6:2:0:0 2 => 1996111410:00:00

'1996-12-31 12:00:00' +1:2:0:0 0 => 1997010114:00:00

'2009-05-13 12:00:00' '+10 weeks' 0 => 2009072212:00:00

'2009-05-13 12:00:00' '+10 weeks' 1 => 2009030412:00:00

'2009-05-13 12:00:00' '+10 weeks' 2 => 2009030412:00:00

'2009-05-13 12:00:00' '-10 weeks' 0 => 2009030412:00:00

'2009-05-13 12:00:00' '-10 weeks' 1 => 2009072212:00:00

'2009-05-13 12:00:00' '-10 weeks' 2 => 2009072212:00:00

# Approximate deltas

'2009-05-13 12:00:00' '+ 1 year' 0 => 2010051312:00:00

'2009-05-13 12:00:00' '+ 1 year' 1 => 2008051312:00:00

'2009-05-13 12:00:00' '+ 1 year' 2 => 2008051312:00:00

2008022912:00:00 '+ 1 year' 0 => 2009022812:00:00

'2009-05-13 12:00:00' '+ 13 months' 0 => 2010061312:00:00

'2009-05-13 12:00:00' '+ 13 months' 1 => 2008041312:00:00

'2009-05-13 12:00:00' '+ 13 months' 2 => 2008041312:00:00

# Handle subtraction

'1998-11-28 00:00:00' 1:1:1:0:0:0:0 0 => 2000010400:00:00

'1998-11-28 00:00:00' 1:1:1:0:0:0:0 1 => 1997102100:00:00

'1998-11-28 00:00:00' 1:1:1:0:0:0:0 2 => 1997102100:00:00

'1999-01-04 00:00:00' 0:1:1:0:0:0:0 0 => 1999021100:00:00

'1999-01-04 00:00:00' 0:1:1:0:0:0:0 1 => 1998112700:00:00

'1999-01-04 00:00:00' 0:1:1:0:0:0:0 2 => 1998112800:00:00

1998112800:00:00 -0:1:1:0:0:0:0 0 => 1998102100:00:00

1998112800:00:00 -0:1:1:0:0:0:0 1 => 1999010400:00:00

1998112800:00:00 -0:1:1:0:0:0:0 2 => 1999010500:00:00

# Handle large deltas

'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  0 => 3268082700:00:00

'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 0 => 0731050801:03:58

'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 0 => 0733072301:03:58

'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  1 => 0731050801:03:58

'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 1 => 3268082700:00:00

'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 1 => 3266061200:00:00

'2000-01-01 00:00:00' 1:1:1:0:11111111:0:0  2 => 0731050701:03:58

'2000-01-01 00:00:00' -1:1:1:0:11111111:0:0 2 => 3268082700:00:00

'2000-01-01 00:00:00' 1:1:1:0:-11111111:0:0 2 => 3266061300:00:00

'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  0 => 3264102200:00:00

'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 0 => 0727070601:03:58

'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 0 => 0729091701:03:58

'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  1 => 0727070601:03:58

'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 1 => 3264102200:00:00

'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 1 => 3262081000:00:00

'1996-02-29 00:00:00' 1:1:1:0:11111111:0:0  2 => 0727070501:03:58

'1996-02-29 00:00:00' -1:1:1:0:11111111:0:0 2 => 3264102400:00:00

'1996-02-29 00:00:00' 1:1:1:0:-11111111:0:0 2 => 3262081000:00:00

'2000-01-01 00:00:00' 1:1:1:0:11111111111:0:0  0 => '[calc] Delta too large'

";

$t->tests(func  => \&test,
          tests => $tests);
$t->done_testing();

#Local Variables:
#mode: cperl
#indent-tabs-mode: nil
#cperl-indent-level: 3
#cperl-continued-statement-offset: 2
#cperl-continued-brace-offset: 0
#cperl-brace-offset: 0
#cperl-brace-imaginary-offset: 0
#cperl-label-offset: 0
#End: