The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More 0.88 tests => 38;

use Time::Duration::Parse;

sub ok_duration {
    my($spec, $seconds) = @_;
    is parse_duration($spec), $seconds, "$spec = $seconds";
}

sub fail_duration {
    my $spec = shift;
    eval { parse_duration($spec) };
    ok $@, $@;
}

ok_duration '3', 3;
ok_duration '3 seconds', 3;
ok_duration '3 Seconds', 3;
ok_duration '3 s', 3;
ok_duration '6 minutes', 360;
ok_duration '6 minutes and 3 seconds', 363;
ok_duration '6 Minutes and 3 seconds', 363;
ok_duration '1 day', 86400;
ok_duration '1 day, and 3 seconds', 86403;
ok_duration '-1 seconds', -1;
ok_duration '-6 minutes', -360;

ok_duration '1 hr', 3600;
ok_duration '3s', 3;
ok_duration '1hr', 3600;
ok_duration '+2h', 7200;

ok_duration '1d 2:03', 93780;
ok_duration '1d 2:03:01', 93781;
ok_duration '1d -24:00', 0;
ok_duration '2:03', 7380;

ok_duration ' 1s   ', 1;
ok_duration '   1  ', 1;
ok_duration '  1.3 ', 1;

ok_duration '1.5h', 5400;
ok_duration '1,5h', 5400;
ok_duration '1.5h 30m', 7200;
ok_duration '1.9s', 2;          # Check rounding
ok_duration '1.3s', 1;
ok_duration '1.3', 1;
ok_duration '1.9', 2;

ok_duration '1h,30m, 3s', 5403;
ok_duration '1h and 30m,3s', 5403;
ok_duration '1,5h, 3s', 5403;
ok_duration '1,5h and 3s', 5403;
ok_duration '1.5h, 3s', 5403;
ok_duration '1.5h and 3s', 5403;

fail_duration '3 sss';
fail_duration '6 minutes and 3 sss';
fail_duration '6 minutes, and 3 seconds a';