DateTime-Calendar-Christian

 view release on metacpan or  search on metacpan

t/08math.t  view on Meta::CPAN

use 5.008004;

use strict;
use warnings;

use Test::More 0.88;	# Because of done_testing();
use DateTime::Calendar::Christian;

#########################

my ($d, $d2);

$d = DateTime::Calendar::Christian->new( year  => 1582,
                                         month => 10,
                                         day   => 4,
                                         hour  => 22 );

$d2 = $d->clone;
$d2->add( hours => 3 );
is( $d2->datetime, '1582-10-15T01:00:00', 'adding hours around calendar change' );
$d2->subtract( hours => 3 );
is( $d2->datetime, '1582-10-04J22:00:00', 'subtracting hours around calendar change' );

$d2 = $d->clone;
$d2->add( days => 3 );
is( $d2->ymd, '1582-10-17', 'adding days around calendar change' );
$d2->subtract( days => 3 );
is( $d2->ymd, '1582-10-04', 'subtracting days around calendar change' );

$d2 = $d->clone;
$d2->add( months => 3 );
is( $d2->ymd, '1583-01-14', 'adding months around calendar change' );
$d2->subtract( months => 3 );
is( $d2->ymd, '1582-10-04', 'subtracting months around calendar change' );

$d2 = $d->clone;
$d2->add( years => 3 );
is( $d2->ymd, '1585-10-14', 'adding years around calendar change' );
$d2->subtract( years => 3 );
is( $d2->ymd, '1582-10-04', 'subtracting years around calendar change' );

$d2 = $d->clone;
$d2->add( years => 300 );
is( $d2->ymd, '1882-10-14', 'adding centuries around calendar change' );
$d2->subtract( years => 300 );
is( $d2->ymd, '1582-10-04', 'subtracting centuries around calendar change' );

$d = DateTime::Calendar::Christian->new( year  => 1285,
                                         month => 1,
                                         day   => 1 );

$d->add( years => 300 );
is( $d->ymd, '1585-01-11', 'adding centuries around calendar change' );

$d->subtract( years => 300 );
is( $d->ymd, '1285-01-01', 'subtracting centuries around calendar change' );

$d = DateTime::Calendar::Christian->new(
        year => 1582, month => 10, day => 30 );
$d2 = DateTime::Calendar::Christian->new(
        year => 1582, month => 10, day => 1 );

my $dur = $d - $d2;
isa_ok( $dur, 'DateTime::Duration' );
is( $dur->delta_days, 19, 'datetime - datetime' );

TODO: {
    # NOTE not simply local $TODO = ... because this code actually
    # throws an execption.
    todo_skip 'mixed math (with DateTime objects) not implemented', 2;
    $d = DateTime->new( year => 1582, month => 10, day => 30 );
    $dur = $d2->subtract_datetime($d);
    isa_ok( $dur, 'DateTime::Duration' );
    is( $dur->delta_days, 19, 'subtracting DateTime object' );
}

##############################################
# Some historical examples

# George Washington's birthday

$d = DateTime::Calendar::Christian->new(
                       year  => 1732,
                       month => 2,
                       day   => 11,
                       reform_date => 'uk' );

$d2 = $d->clone;
$d2->add( years => 60 );
is( $d2->ymd, '1792-02-22', "Washington's 60th birthday" );
$d2 = $d->clone;
$d2->add( years => 100 );
is( $d2->ymd, '1832-02-22', "Washington's 100th birthday" );
# (This is actually 1832-02-10 Julian!)

$d2 = $d->clone->add( years => 200 );
is( $d2->ymd, '1932-02-22', "Washington's 200th birthday" );

# George II's birthday (see Ben Franklin's Poor Richard's Almanac for
# November 1753, http://www.gettysburg.edu/~tshannon/his341/pra53nov.htm)

$d = DateTime::Calendar::Christian->new(
                       year  => 1683,
                       month => 10,
                       day   => 30,
                       reform_date => 'uk' );

$d2 = $d->add( years => 70 );
is( $d->ymd, '1753-11-10', "George II's 70th birthday" );

# Russian revolution (october revolution)

$d = DateTime::Calendar::Christian->new(
                       year  => 1917,
                       month => 10,
                       day   => 25,



( run in 1.819 second using v1.01-cache-2.11-cpan-99c4e6809bf )