DateTimeX-Lite

 view release on metacpan or  search on metacpan

t/11duration.t  view on Meta::CPAN


    while ( my ($unit, $val) = each %pairs )
    {
        is( $dur->$unit(), $val, "$unit should be $val" );
    }

    is( $dur->delta_months, 14, "delta_months" );
    is( $dur->delta_days, 25, "delta_days" );
    is( $dur->delta_minutes, 367, "delta_minutes" );
    is( $dur->delta_seconds, 8, "delta_seconds" );
    is( $dur->delta_nanoseconds, 9, "delta_nanoseconds" );

    is( $dur->in_units( 'months' ), 14, "in_units months" );
    is( $dur->in_units( 'days' ), 25, "in_units days" );
    is( $dur->in_units( 'minutes' ), 367, "in_units minutes" );
    is( $dur->in_units( 'seconds' ), 8, "in_units seconds" );
    is( $dur->in_units( 'nanoseconds', 'seconds' ), 9,
        "in_units nanoseconds, seconds" );

    is( $dur->in_units( 'years' ), 1, "in_units years" );
    is( $dur->in_units( 'months', 'years' ), 2, "in_units months, years" );
    is( $dur->in_units( 'weeks' ), 3, "in_units weeks" );
    is( $dur->in_units( 'days', 'weeks' ), 4, "in_units days, weeks" );
    is( $dur->in_units( 'hours' ), 6, "in_units hours" );
    is( $dur->in_units( 'minutes', 'hours' ), 7, "in_units minutes, hours" );
    is( $dur->in_units( 'nanoseconds' ), 8_000_000_009, "in_units nanoseconds" );

    my ( $years, $months, $weeks, $days, $hours,
         $minutes, $seconds, $nanoseconds) =
             $dur->in_units( qw( years months weeks days hours
                                 minutes seconds nanoseconds ) );

    is( $years,       1, "in_units years, list context" );
    is( $months,      2, "in_units months, list context" );
    is( $weeks,       3, "in_units weeks, list context" );
    is( $days,        4, "in_units days, list context" );
    is( $hours,       6, "in_units hours, list context" );
    is( $minutes,     7, "in_units minutes, list context" );
    is( $seconds,     8, "in_units seconds, list context" );
    is( $nanoseconds, 9, "in_units nanoseconds, list context" );

    ok( $dur->is_positive, "should be positive" );
    ok( ! $dur->is_zero, "should not be zero" );
    ok( ! $dur->is_negative, "should not be negative" );

    ok( $dur->is_wrap_mode, "wrap mode" );
}
{
    my %pairs = ( years   => 1,
                  months  => 2,
                  weeks   => 3,
                  days    => 4,
                  hours   => 6,
                  minutes => 7,
                  seconds => 8,
                  nanoseconds => 9,
                );

    my $dur = DateTimeX::Lite::Duration->new( %pairs, end_of_month => 'limit' );

    my $calendar_dur = $dur->calendar_duration;
    is( $calendar_dur->delta_months, 14, "date - delta_months is 14" );
    is( $calendar_dur->delta_minutes, 0, "date - delta_minutes is 0" );
    is( $calendar_dur->delta_seconds, 0, "date - delta_seconds is 0" );
    is( $calendar_dur->delta_nanoseconds, 0, "date - delta_nanoseconds is 0" );
    ok( $calendar_dur->is_limit_mode, "limit mode" );

    my $clock_dur = $dur->clock_duration;
    is( $clock_dur->delta_months, 0, "time  - delta_months is 0" );
    is( $clock_dur->delta_minutes, 367, "time  - delta_minutes is 367" );
    is( $clock_dur->delta_seconds, 8, "time  - delta_seconds is 8" );
    is( $clock_dur->delta_nanoseconds, 9, "time  - delta_nanoseconds is 9" );
    ok( $clock_dur->is_limit_mode, "limit mode" );
}

{
    my $dur = DateTimeX::Lite::Duration->new( days => 1, end_of_month => 'limit' );
    ok( $dur->is_limit_mode, "limit mode" );
}

{
    my $dur = DateTimeX::Lite::Duration->new( days => 1, end_of_month => 'preserve' );
    ok( $dur->is_preserve_mode, "preserve mode" );
}

my $leap_day = DateTimeX::Lite->new( year => 2004, month => 2, day => 29,
                              time_zone => 'UTC',
                            );

{
    my $new =
        $leap_day + DateTimeX::Lite::Duration->new( years => 1,
                                             end_of_month => 'wrap' );

    is( $new->ymd, '2005-03-01', "new date should be 2005-03-01" );
}

{
    my $new =
        $leap_day + DateTimeX::Lite::Duration->new( years => 1,
                                             end_of_month => 'limit' );

    is( $new->ymd, '2005-02-28', "new date should be 2005-02-28" );
}


{
    my $new =
        $leap_day + DateTimeX::Lite::Duration->new( years => 1,
                                             end_of_month => 'preserve' );

    is( $new->ymd, '2005-02-28', "new date should be 2005-02-28" );

    my $new2 =
        $leap_day + DateTimeX::Lite::Duration->new( months => 1,
                                             end_of_month => 'preserve' );
    is( $new2->ymd, '2004-03-31', "new date should be 2004-03-31" );
}

{
    my $inverse =
        DateTimeX::Lite::Duration->new( years => 1, months => 1,
                                 weeks => 1, days => 1,
                                 hours => 1, minutes => 2, seconds => 3, )->inverse;

    is( $inverse->years, 1, 'inverse years should be positive' );



( run in 0.771 second using v1.01-cache-2.11-cpan-5a3173703d6 )