DateTimeX-Lite
view release on metacpan or search on metacpan
t/38local-subtract.t view on Meta::CPAN
is( DateTimeX::Lite->compare( $dt2->clone->add_duration($dur2), $dt1 ), 0,
'subtraction is reversible' );
is( DateTimeX::Lite->compare( $dt1->clone->subtract_duration($dur2), $dt2 ), 0,
'subtraction is doubly reversible' );
}
{
my $dt1 = DateTimeX::Lite->new( year => 2003, month => 4, day => 6,
hour => 1, minute => 58,
time_zone => "America/Chicago",
);
my $dt2 = DateTimeX::Lite->new( year => 2003, month => 4, day => 6,
hour => 3, minute => 1,
time_zone => "America/Chicago",
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 0, 'delta_days is 0' );
is( $deltas{minutes}, 3, 'delta_minutes is 3' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is( DateTimeX::Lite->compare( $dt1->clone->add_duration($dur), $dt2 ), 0,
'subtraction is reversible' );
is( DateTimeX::Lite->compare( $dt2->clone->subtract_duration($dur), $dt1), 0,
'subtraction is doubly reversible' );
}
{
my $dt1 = DateTimeX::Lite->new( year => 2003, month => 4, day => 5,
hour => 1, minute => 58,
time_zone => "America/Chicago",
);
my $dt2 = DateTimeX::Lite->new( year => 2003, month => 4, day => 6,
hour => 3, minute => 1,
time_zone => "America/Chicago",
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 1, 'delta_days is 1' );
is( $deltas{minutes}, 3, 'delta_minutes is 3' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is( DateTimeX::Lite->compare( $dt1->clone->add_duration($dur), $dt2 ), 0,
'dt1 + dur = dt2' );
# this are two examples from the docs
is( DateTimeX::Lite->compare( $dt2->clone->subtract_duration($dur),
$dt1->clone->add( hours => 1 ) ),
0,
'dt2 - dur != dt1 (not reversible)' );
is( DateTimeX::Lite->compare( $dt2->clone->subtract_duration( $dur->clock_duration )
->subtract_duration( $dur->calendar_duration ),
$dt1 ),
0,
'dt2 - dur->clock - dur->cal = dt1 (reversible when componentized)' );
my $dur2 = $dt1->subtract_datetime($dt2);
my %deltas2 = $dur2->deltas;
is( $deltas2{months}, 0, 'delta_months is 0' );
is( $deltas2{days}, -1, 'delta_days is 1' );
is( $deltas2{minutes}, -3, 'delta_minutes is 3' );
is( $deltas2{seconds}, 0, 'delta_seconds is 0' );
is( $deltas2{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is( $dt2->clone->add_duration($dur2)->iso8601, '2003-04-05T02:58:00', 'dt2 + dur2 != dt1' );
is( DateTimeX::Lite->compare( $dt2->clone->add_duration( $dur2->clock_duration )
->add_duration( $dur2->calendar_duration ),
$dt1 ),
0,
'dt2 + dur2->clock + dur2->cal = dt1' );
is( DateTimeX::Lite->compare( $dt1->clone->subtract_duration($dur2), $dt2 ), 0,
'dt1 - dur2 = dt2' );
}
# These tests makes sure that days with DST changes are "normal" when
# they're the smaller operand
{
my $dt1 = DateTimeX::Lite->new( year => 2003, month => 4, day => 6,
hour => 3, minute => 1,
time_zone => "America/Chicago",
);
my $dt2 = DateTimeX::Lite->new( year => 2003, month => 4, day => 7,
hour => 3, minute => 2,
time_zone => "America/Chicago",
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 1, 'delta_days is 1' );
is( $deltas{minutes}, 1, 'delta_minutes is 1' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
my $dur2 = $dt1->subtract_datetime($dt2);
my %deltas2 = $dur2->deltas;
is( $deltas2{months}, 0, 'delta_months is 0' );
is( $deltas2{days}, -1, 'delta_days is -1' );
is( $deltas2{minutes}, -1, 'delta_minutes is -1' );
is( $deltas2{seconds}, 0, 'delta_seconds is 0' );
is( $deltas2{nanoseconds}, 0, 'delta_nanoseconds is 0' );
}
{
my $dt1 = DateTimeX::Lite->new( year => 2003, month => 4, day => 5,
hour => 1, minute => 58,
time_zone => "America/Chicago",
);
my $dt2 = DateTimeX::Lite->new( year => 2003, month => 4, day => 7,
hour => 2, minute => 1,
time_zone => "America/Chicago",
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 2, 'delta_days is 2' );
is( $deltas{minutes}, 3, 'delta_minutes is 3' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
( run in 1.827 second using v1.01-cache-2.11-cpan-ff9377addf4 )