use warnings;
use strict;
use Test::More tests => 21;
BEGIN {
use_ok "Time::TAI::Now",
qw(now_tai_rat now_tai_gsna now_tai_flt now_tai_dec);
}
my @rat = now_tai_rat();
is scalar(@rat), 2;
isa_ok $rat[0], "Math::BigRat";
ok $rat[0] >= 0;
SKIP: {
skip "no inaccuracy bound", 2 unless defined $rat[1];
isa_ok $rat[1], "Math::BigRat";
ok $rat[1] >= 0;
}
sub is_int($) {
my($arg) = @_;
return 0 unless ref(\$arg) eq "SCALAR" && defined($arg);
return $arg =~ /\A(?:0|-?[1-9][0-9]*)\z/;
}
sub is_gsna($) {
my($arg) = @_;
return 0 unless ref($arg) eq "ARRAY" && @$arg == 4;
foreach(@$arg) {
return 0 unless is_int($_);
}
foreach(@{$arg}[1..3]) {
return 0 unless $_ >= 0 && $_ < 1000000000;
}
return 1;
}
my @gsna = now_tai_gsna();
is scalar(@gsna), 2;
ok is_gsna($gsna[0]);
ok $gsna[0]->[0] >= 0;
SKIP: {
skip "no inaccuracy bound", 2 unless defined $gsna[1];
ok is_gsna($gsna[1]);
ok $gsna[1]->[0] >= 0;
}
sub is_num($) {
my($arg) = @_;
return 0 unless ref(\$arg) eq "SCALAR" && defined($arg);
my $warned;
local $SIG{__WARN__} = sub { $warned = 1; };
{ no warnings "void"; 0 + $arg; }
return !$warned;
}
my @flt = now_tai_flt();
is scalar(@flt), 2;
ok is_num($flt[0]);
ok $flt[0] >= 0;
SKIP: {
skip "no inaccuracy bound", 2 unless defined $flt[1];
ok is_num($flt[1]);
ok $flt[1] >= 0;
}
sub is_dec($) {
my($arg) = @_;
return 0 unless ref(\$arg) eq "SCALAR" && defined($arg);
return $arg =~ /\A(?:-(?!0\z))?(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?\z/;
}
my @dec = now_tai_dec();
is scalar(@dec), 2;
ok is_dec($dec[0]);
ok $dec[0] !~ /\A-/;
SKIP: {
skip "no inaccuracy bound", 2 unless defined $dec[1];
ok is_dec($dec[1]);
ok $dec[1] !~ /\A-/;
}
1;