use strict;
use warnings;
use Test::More;
my @in_out = (
[ 1, 3 => '33%' ],
[ 1, 30 => '3%' ],
# [ 888, 1000 => '88%' ], # Use if we want truncation
# [ -888, 1000 => '-88%' ], # Use if we want truncation
[ 888, 1000 => '89%' ], # Use if we want rounding
[ -888, 1000 => '-89%' ], # Use if we want rounding
);
my @code = (
[ f1 => sub { int(100 * $_[0]) . '%' } ],
[ f2 => sub { sprintf '%02d%%', 100 * $_[0] } ],
[ f3 => sub { sprintf '%2d%%', 100 * $_[0] } ],
[ f4 => sub { sprintf '%d%%', 100 * $_[0] } ],
[ f5 => sub { sprintf '%.0f%%', 100 * $_[0] } ],
);
plan tests => @in_out * @code;
foreach (@code) {
my ($name, $sub) = @$_;
foreach (@in_out) {
my ($numer, $denom, $expected) = @$_;
my $frac = $numer / $denom;
my $percent = $sub->($frac);
is($percent, $expected, "$name($numer/$denom)");
# print "$name '$numer/$denom'\t'$expected'\t'$percent'\n";
}
print "\n";
}