use strict;
use warnings;
use Test::More 0.88; END { done_testing }
use Test::Exception 0.29;
# Work around buffering that can show diags out of order
Test::More->builder->failure_output(*STDOUT) if $ENV{HARNESS_VERBOSE};
my ($obj);
require_ok( 'Version::Next' );
can_ok( 'Version::Next', 'next_version' );
eval "use Version::Next 'next_version'";
can_ok( 'main', 'next_version' );
is( next_version(1), 2, "1 + 1 == 2");
throws_ok { next_version('abc') } qr/Doesn't look like a version number: 'abc' at/, "throws error on bad input";
for my $case ( <DATA> ) {
chomp $case;
next if $case =~ m{\A(?:#|\s*\z)};
my ($input, $output) = split ' ', $case;
is( next_version($input), $output, "$input -> $output" );
}
__DATA__
# Decimals
0 1
1 2
9 10
0.0 0.1
0.1 0.2
0.2 0.3
0.9 1.0
1.0 1.1
0.00 0.01
0.01 0.02
0.09 0.10
0.10 0.11
0.90 0.91
0.99 1.00
1.00 1.01
1.009 1.010
1.999 2.000
1.1000 1.1001
1.1999 1.2000
# Alpha decimals
0.0_1 0.0_2
0.0_1 0.0_2
0.0_2 0.0_3
0.0_9 0.1_0
1.0_0 1.0_1
0.0_00 0.0_01
0.0_01 0.0_02
0.0_09 0.0_10
0.0_10 0.0_11
0.0_90 0.0_91
0.0_99 0.1_00
1.0_00 1.0_01
1.0_009 1.0_010
1.0_999 1.1_000
1.0_1000 1.0_1001
1.0_1999 1.0_2000
1.23_01 1.23_02
1.23_09 1.23_10
1.23_99 1.24_00
# Dotted Decimals
v0 v1
v1 v2
v9 v10
v0.0 v0.1
v0.1 v0.2
v0.9 v0.10
v0.10 v0.11
v0.99 v0.100
v0.999 v1.0
v0.1000 v1.0
0.0.0 0.0.1
0.0.1 0.0.2
0.0.9 0.0.10
0.0.10 0.0.11
0.0.99 0.0.100
0.0.999 0.1.0
0.0.1000 0.1.0
v0.0.0 v0.0.1
v0.0.1 v0.0.2
v0.0.9 v0.0.10
v0.0.10 v0.0.11
v0.0.99 v0.0.100
v0.0.999 v0.1.0
v0.0.1000 v0.1.0
v0.999.0 v0.999.1
v1.999.999 v2.0.0
v1.1000.1000 v2.0.0
# Alpha dotted decimals
v0.0_0 v0.0_1
v0.0_1 v0.0_2
v0.0_9 v0.0_10
v0.0_10 v0.0_11
v0.0_99 v0.0_100
v0.0_999 v0.1_0
v0.0_1000 v0.1_0
v0.1.2_0 v0.1.2_1
v0.1.2_1 v0.1.2_2
v0.1.2_9 v0.1.2_10
v0.1.2_10 v0.1.2_11
v0.1.2_99 v0.1.2_100
v0.1.2_999 v0.1.3_0
v0.1.2_1000 v0.1.3_0
v0.999_0 v0.999_1
v1.999_999 v2.0_0
v1.1000_1000 v2.0_0
v0.1.999_0 v0.1.999_1
v1.1.999_999 v1.2.0_0
v1.1.1000_1000 v1.2.0_0
# dotted decimals with leading zeros
v0.00.00 v0.0.1
v0.00.01 v0.0.2
v0.00.09 v0.0.10
v0.00.010 v0.0.11
v0.00.099 v0.0.100
v0.000.999 v0.1.0
v0.0.01000 v0.1.0
v0.0_00 v0.0_1
v0.0_01 v0.0_2
v0.0_09 v0.0_10
v0.0_010 v0.0_11
v0.0_099 v0.0_100
v0.0_0999 v0.1_0
v0.0_01000 v0.1_0