#!perl -w
BEGIN { eval { require bytes; }; }
use strict;
no strict "vars";
BEGIN { $Date::Calc::XS_DISABLE = $Date::Calc::XS_DISABLE = 1; }
use Date::Calc qw(:all);
# ======================================================================
# ($year,$month,$day, $hour,$min,$sec) = Time_to_Date([time]);
# $time = Date_to_Time($year,$month,$day, $hour,$min,$sec);
# ======================================================================
# ($year,$month,$day, $hour,$min,$sec, $doy,$dow,$dst) = Gmtime([time]);
# ($year,$month,$day, $hour,$min,$sec, $doy,$dow,$dst) = Localtime([time]);
# $time = Mktime($year,$month,$day, $hour,$min,$sec);
# ======================================================================
# Unix epoch is Thu 1-Jan-1970 00:00:00 (GMT)
# Classic MacOS epoch is Fri 1-Jan-1904 00:00:00 (local time)
#
# Unix time overflow is Tue 19-Jan-2038 03:14:07 (time=0x7FFFFFFF)
# MacOS time overflow is Mon 6-Feb-2040 06:28:15 (time=0xFFFFFFFF)
if ($^O eq 'MacOS')
{
$max_time = 0xFFFFFFFF;
$epoch_vec = [1904,1,1,0,0,0,1,5];
$max_vec = [2040,2,6,6,28,15,37,1];
$match_vec = [1935,6,10,15,42,30,161,1];
}
else
{
$max_time = 0x7FFFFFFF;
$epoch_vec = [1970,1,1,0,0,0,1,4];
$max_vec = [2038,1,19,3,14,7,19,2];
$match_vec = [2001,6,10,15,42,30,161,7];
}
if (@ARGV and $ARGV[0])
{
$all = 1;
print "1..38\n";
}
else
{
$all = 0;
print "1..30\n";
}
$n = 1;
@date = Time_to_Date(0);
for ( $i = 0; $i < 6; $i++ )
{
if ($date[$i] == $epoch_vec->[$i])
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
}
if (Date_to_Time(@date) == 0)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
@date = Time_to_Date($max_time);
for ( $i = 0; $i < 6; $i++ )
{
if ($date[$i] == $max_vec->[$i])
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
}
if (Date_to_Time(@date) == $max_time)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
$time = 992187750;
@date = Time_to_Date($time);
for ( $i = 0; $i < 6; $i++ )
{
if ($date[$i] == $match_vec->[$i])
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
}
if (Date_to_Time(@date) == $time)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval { @date = Gmtime(); };
unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (Date_to_Days(@date[0..2]) > Date_to_Days(@{$match_vec}[0..2]))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval { @date = Time_to_Date(); };
unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (Date_to_Days(@date[0..2]) > Date_to_Days(@{$match_vec}[0..2]))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval { @date = Localtime(); };
unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (check_date(@date[0..2]) and check_time(@date[3..5]))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if (Date_to_Days(@date[0..2]) > Date_to_Days(@{$match_vec}[0..2]))
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval { $time = Mktime(@date[0..5]); };
unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($time > 992187750)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ($all)
{
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1], $max_vec->[2],
$max_vec->[3], $max_vec->[4], $max_vec->[5] );
};
unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
if ( ($secs <= $max_time) and ($secs >= $max_time-86400) )
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1], $max_vec->[2],
$max_vec->[3], $max_vec->[4], $max_vec->[5]+1 );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1], $max_vec->[2],
$max_vec->[3], $max_vec->[4]+1, $max_vec->[5] );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1], $max_vec->[2],
$max_vec->[3]+1, $max_vec->[4], $max_vec->[5] );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1], $max_vec->[2]+1,
$max_vec->[3], $max_vec->[4], $max_vec->[5] );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0], $max_vec->[1]+1, $max_vec->[2],
$max_vec->[3], $max_vec->[4], $max_vec->[5] );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
eval
{
$secs = Mktime( $max_vec->[0]+1, $max_vec->[1], $max_vec->[2],
$max_vec->[3], $max_vec->[4], $max_vec->[5] );
};
if ($@ =~ /\bDate::Calc::Mktime\(\): date out of range\b/)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;
}
__END__