The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# vim: set sw=2 sts=2 ts=2 expandtab smarttab:
use strict;
use warnings;
use Test::More 0.96;
use Time::Local () ; # core

use Time::Stamp -parsers;

my $seconds = Time::Local::timegm(33, 22, 11, 17,  5, 93);

foreach my $test (
  [default => '1993-06-17T11:22:33Z'],
  [easy    => '1993-06-17 11:22:33 Z'],
  [numeric => '19930617112233'],
  [compact => '19930617_112233Z'],
){
  my ($name, $stamp) = @$test;
  $name = "gmtime $name";
  is(parsegm($stamp), $seconds, "parsed $name format");
  (my $fracstamp = $stamp) =~ s/(\d)(\D?Z?)$/$1.3456789$2/;
  is(parsegm($fracstamp), "$seconds.3456789", "parsed $name format with fraction");
  is(int(parsegm($fracstamp)), $seconds, "int $name format with fraction");
}

$seconds = Time::Local::timelocal(33, 22, 11, 17,  5, 93);

foreach my $test (
  [default => '1993-06-17T11:22:33'],
  [easy    => '1993-06-17 11:22:33'],
  [numeric => '19930617112233'],
  [compact => '19930617_112233'],
){
  my ($name, $stamp) = @$test;
  $name = "localtime $name";
  is(parselocal($stamp), $seconds, "parsed $name format");
  is(parselocal("$stamp.4560"), "$seconds.4560", "parsed $name format with fraction");
  is(int(parselocal("$stamp.4560")), $seconds, "int $name format with fraction");
}

is(scalar parsegm('oops'), undef, 'parsegm failed to parse');
is_deeply([parsegm('oops')], [],  'parsegm failed to parse');

done_testing;