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::Calc::Object qw(:all);

# ======================================================================
#   $date = Date::Calc->time2date([TIME]);
#   $time = $date->date2time();
# ======================================================================
#   $date = Date::Calc->gmtime([TIME]);
#   $date = Date::Calc->localtime([TIME]);
#   $time = $date->mktime();
# ======================================================================

#          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];
    $epoch_str = 'Friday, January 1st 1904 00:00:00';
    $max_vec   = [2040,2,6,6,28,15];
    $max_str   = 'Monday, February 6th 2040 06:28:15';
    $match_vec = [1935,6,10,15,42,30];
    $match_str = 'Monday, June 10th 1935 15:42:30';
}
else
{
    $max_time  = 0x7FFFFFFF;
    $epoch_vec = [1970,1,1,0,0,0];
    $epoch_str = 'Thursday, January 1st 1970 00:00:00';
    $max_vec   = [2038,1,19,3,14,7];
    $max_str   = 'Tuesday, January 19th 2038 03:14:07';
    $match_vec = [2001,6,10,15,42,30];
    $match_str = 'Sunday, June 10th 2001 15:42:30';
}

print "1..18\n";

$n = 1;

$date = Date::Calc->time2date(0);

if ($date eq $epoch_vec)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

$date->date_format(3);

if ("$date" eq $epoch_str)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ($date->date2time() == 0)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

$date->time2date($max_time);

if ($date eq $max_vec)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ("$date" eq $max_str)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ($date->date2time() == $max_time)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

$time = 992187750;

$date->time2date($time);

if ($date eq $match_vec)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ("$date" eq $match_str)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ($date->date2time() == $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 gt $match_vec)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { $date->time2date(); };

unless ($@)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ($date gt $match_vec)
{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 ($date->is_valid())
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

if ($date gt $match_vec)
{print "ok $n\n";} else {print "not ok $n\n";}
$n++;

eval { $time = $date->mktime(); };

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++;

__END__