use strict;
use warnings;
use Test::Builder::Tester tests => 30;
use Test::More;
# Test using the module.
use_ok 'Test::Numeric';
# Test that the _split_format function works.
my %good_formats = (
'0.0' => [ 0, 0, 0, 0 ],
'1.1' => [ 1, 1, 1, 1 ],
'1-2.3-4' => [ 1, 2, 3, 4 ],
'1-.2-' => [ 1, undef, 2, undef ]
);
my @bad_formats = qw(
.
1.
.1
-1.1
);
ok( test_split( $_, $good_formats{$_} ), "Testing good format '$_'" )
for sort keys %good_formats;
{
# Suppress the bad format warnings.
no warnings 'redefine';
local *Test::Numeric::_split_format_error = sub { 0 };
ok( Test::Numeric::_split_format($_) == 0, "Testing bad format '$_'" )
for @bad_formats;
}
sub test_split {
my $format = shift;
my $expected = shift;
my @actual = Test::Numeric::_split_format($format);
return eq_array( \@actual, $expected );
}
# Test the is_formatted function
my %good_tests = (
'1.1' => [ '0.0', '1.2' ],
'0.1' => ['.1'],
'1.2-3' => [ '1.12', '1.123' ],
'1.2-' => [ '1.12', '1.123', '1.123456789' ],
);
my %bad_tests = (
'1.1' => [ '1.12', '12.1', '12.12' ],
'1.2-3' => [ '1.1', '1.1234' ],
'1.2-' => [ '1.1', '1.' ],
);
foreach my $format ( sort keys %good_tests ) {
ok Test::Numeric::_test_formatted( $format, $_ ),
"Testing good format '$format' with '$_'"
for @{ $good_tests{$format} };
}
foreach my $format ( sort keys %bad_tests ) {
ok !Test::Numeric::_test_formatted( $format, $_ ),
"Testing bad format '$format' with '$_'"
for @{ $bad_tests{$format} };
}
test_out('ok 1 - foo');
is_formatted( '1.1', '1.1', 'foo' );
test_test("is_formatted");
test_out('not ok 1 - foo');
test_fail(+1);
is_formatted( '1.1', '12.12', 'foo' );
test_test("is_formatted");
test_out('ok 1 - foo');
isnt_formatted( '1.1', '12.12', 'foo' );
test_test("isnt_formatted");
test_out('not ok 1 - foo');
test_fail(+1);
isnt_formatted( '1.1', '1.1', 'foo' );
test_test("isnt_formatted");
# Test with bad formats.
test_out('not ok 1 - foo');
test_diag("The format 'bad' is not valid");
test_fail(+1);
is_formatted( 'bad', '12.12', 'foo' );
test_test("is_formatted with bad format");
test_out('not ok 1 - foo');
test_diag("The format 'bad' is not valid");
test_fail(+1);
isnt_formatted( 'bad', '1.1', 'foo' );
test_test("isnt_formatted with bad format");