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

BEGIN { eval { require bytes; }; }
use strict;
no strict "vars";

use Date::Pcalc qw( Add_Delta_YMD );

# ======================================================================
#   ($year,$mm,$dd) = Add_Delta_YMD($year,  $mm,    $dd,
#                                   $y_offs,$m_offs,$d_offs);
# ======================================================================

print "1..23\n";

$n = 1;
eval { ($year,$mm,$dd) = Add_Delta_YMD(0,0,0,0,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(0,2,28,0,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1997,0,28,0,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1997,2,0,0,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1997,2,29,0,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1996,2,29,0,0,0)) &&
($year==1996) && ($mm==2) && ($dd==29))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1992,2,29,4,0,0)) &&
($year==1996) && ($mm==2) && ($dd==29))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1996,2,29,1,0,0)) &&
($year==1997) && ($mm==3) && ($dd==1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1997,1,29,0,1,0)) &&
($year==1997) && ($mm==3) && ($dd==1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1996,2,28,0,0,1)) &&
($year==1996) && ($mm==2) && ($dd==29))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1997,2,28,0,0,1)) &&
($year==1997) && ($mm==3) && ($dd==1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1,1,1,0,0,-1); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1,1,1,0,-1,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { ($year,$mm,$dd) = Add_Delta_YMD(1,1,1,-1,0,0); };
if ($@ =~ /not a valid date/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

($year,$mm,$dd) = (1997,2,26); ($y,$m,$d) = (0,-1,17);

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, $y,$m,$d)) &&
($year==1997) && ($mm==2) && ($dd==12))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, -$y,-$m,-$d)) &&
($year==1997) && ($mm==2) && ($dd==23))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

($year,$mm,$dd) = (1997,2,15); ($y,$m,$d) = (0,1,-17);

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, $y,$m,$d)) &&
($year==1997) && ($mm==2) && ($dd==26))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, -$y,-$m,-$d)) &&
($year==1997) && ($mm==2) && ($dd==12))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

($year,$mm,$dd) = (1997,2,15); ($y,$m,$d) = (1,-24,14);

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, $y,$m,$d)) &&
($year==1996) && ($mm==2) && ($dd==29))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD($year,$mm,$dd, -$y,-$m,-$d)) &&
($year==1997) && ($mm==2) && ($dd==15))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(1998,1,30,0,1,0)) &&
($year==1998) && ($mm==3) && ($dd==2))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(2000,1,30,0,1,0)) &&
($year==2000) && ($mm==3) && ($dd==1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ((($year,$mm,$dd) = Add_Delta_YMD(2000,1,31,0,3,0)) &&
($year==2000) && ($mm==5) && ($dd==1))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

__END__