use strict;
use warnings;
use Test::More;
use DateTime;
undef $ENV{PERL_DATETIME_DEFAULT_TZ};
{
my $t = DateTime->new(
year => 1972, month => 7, day => 1,
hour => 0, minute => 59, second => 58,
time_zone => '+0100',
);
is( $t->second, 58, 'second value for leap second T-2, +0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-2'
);
is(
$t->{utc_rd_secs}, 86398,
'UTC RD seconds for leap second T-2'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second T-2'
);
is(
$t->{local_rd_secs}, 3598,
'local RD seconds for leap second T-2'
);
}
{
my $t = DateTime->new(
year => 1972, month => 7, day => 1,
hour => 0, minute => 59, second => 59,
time_zone => '+0100',
);
is( $t->second, 59, 'second value for leap second T-1, +0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-1'
);
is(
$t->{utc_rd_secs}, 86399,
'UTC RD seconds for leap second T-1'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second T-1'
);
is(
$t->{local_rd_secs}, 3599,
'local RD seconds for leap second T-1'
);
}
{
my $t = eval {
DateTime->new(
year => 1972, month => 7, day => 1,
hour => 0, minute => 59, second => 60,
time_zone => '+0100',
);
};
ok( !$@, 'constructor for second = 60' );
SKIP:
{
skip 'constructor failed - no object to test', 5
unless $t;
is( $t->second, 60, 'second value for leap second T-0, +0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-0'
);
is(
$t->{utc_rd_secs}, 86400,
'UTC RD seconds for leap second T-0'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second T-0'
);
is(
$t->{local_rd_secs}, 3600,
'local RD seconds for leap second T-0'
);
}
}
{
my $t = DateTime->new(
year => 1972, month => 7, day => 1,
hour => 1, minute => 0, second => 0,
time_zone => '+0100',
);
is( $t->second, 0, 'second value for leap second T+1, +0100' );
is(
$t->{utc_rd_days}, 720075,
'UTC RD days for leap second T+1'
);
is(
$t->{utc_rd_secs}, 0,
'UTC RD seconds for leap second T+1'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second T+1'
);
is(
$t->{local_rd_secs}, 3601,
'local RD seconds for leap second T+1'
);
}
{
my $t = DateTime->new(
year => 1972, month => 7, day => 1,
hour => 1, minute => 0, second => 1,
time_zone => '+0100',
);
is( $t->second, 1, 'second value for leap second T+2, +0100' );
is(
$t->{utc_rd_days}, 720075,
'UTC RD days for leap second T+2'
);
is(
$t->{utc_rd_secs}, 1,
'UTC RD seconds for leap second T+2'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second T+2'
);
is(
$t->{local_rd_secs}, 3602,
'local RD seconds for leap second T+2'
);
}
{
my $t = DateTime->new(
year => 1972, month => 7, day => 1,
hour => 23, minute => 59, second => 59,
time_zone => '+0100',
);
is( $t->second, 59, 'second value for end of leap second day, +0100' );
is(
$t->{utc_rd_days}, 720075,
'UTC RD days for end of leap second day'
);
is(
$t->{utc_rd_secs}, 82799,
'UTC RD seconds for end of leap second day'
);
is(
$t->{local_rd_days}, 720075,
'local RD days for leap second day'
);
is(
$t->{local_rd_secs}, 86400,
'local RD seconds for end of leap second day'
);
}
{
my $t = DateTime->new(
year => 1972, month => 6, day => 30,
hour => 22, minute => 59, second => 58,
time_zone => '-0100',
);
is( $t->second, 58, 'second value for leap second T-2, -0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-2'
);
is(
$t->{utc_rd_secs}, 86398,
'UTC RD seconds for leap second T-2'
);
is(
$t->{local_rd_days}, 720074,
'local RD days for leap second T-2'
);
is(
$t->{local_rd_secs}, 82798,
'local RD seconds for leap second T-2'
);
}
{
my $t = DateTime->new(
year => 1972, month => 6, day => 30,
hour => 22, minute => 59, second => 59,
time_zone => '-0100',
);
is( $t->second, 59, 'second value for leap second T-1, -0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-1'
);
is(
$t->{utc_rd_secs}, 86399,
'UTC RD seconds for leap second T-1'
);
is(
$t->{local_rd_days}, 720074,
'local RD days for leap second T-1'
);
is(
$t->{local_rd_secs}, 82799,
'local RD seconds for leap second T-1'
);
}
{
my $t = eval {
DateTime->new(
year => 1972, month => 6, day => 30,
hour => 22, minute => 59, second => 60,
time_zone => '-0100',
);
};
ok( !$@, 'constructor for second = 60' );
SKIP:
{
skip 'constructor failed - no object to test', 5
unless $t;
is( $t->second, 60, 'second value for leap second T-0, -0100' );
is(
$t->{utc_rd_days}, 720074,
'UTC RD days for leap second T-0'
);
is(
$t->{utc_rd_secs}, 86400,
'UTC RD seconds for leap second T-0'
);
is(
$t->{local_rd_days}, 720074,
'local RD days for leap second T-0'
);
is(
$t->{local_rd_secs}, 82800,
'local RD seconds for leap second T-0'
);
}
}
{
my $t = DateTime->new(
year => 1972, month => 6, day => 30,
hour => 23, minute => 0, second => 0,
time_zone => '-0100',
);
is( $t->second, 0, 'second value for leap second T+1, -0100' );
is(
$t->{utc_rd_days}, 720075,
'UTC RD days for leap second T+1'
);
is(
$t->{utc_rd_secs}, 0,
'UTC RD seconds for leap second T+1'
);
is(
$t->{local_rd_days}, 720074,
'local RD days for leap second T+1'
);
is(
$t->{local_rd_secs}, 82801,
'local RD seconds for leap second T+1'
);
}
{
my $t = DateTime->new(
year => 1972, month => 6, day => 30,
hour => 23, minute => 0, second => 1,
time_zone => '-0100',
);
is( $t->second, 1, 'second value for leap second T+2, -0100' );
is(
$t->{utc_rd_days}, 720075,
'UTC RD days for leap second T+2'
);
is(
$t->{utc_rd_secs}, 1,
'UTC RD seconds for leap second T+2'
);
is(
$t->{local_rd_days}, 720074,
'local RD days for leap second T+2'
);
is(
$t->{local_rd_secs}, 82802,
'local RD seconds for leap second T+2'
);
}
done_testing();