diff options
-rw-r--r-- | t/02-number-handling.t | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/t/02-number-handling.t b/t/02-number-handling.t new file mode 100644 index 00000000..0bc786da --- /dev/null +++ b/t/02-number-handling.t @@ -0,0 +1,125 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Test::More 'no_plan'; +use Math::BigFloat; + +use LedgerSMB::Form; + +my $form = new Form; +my %myconfig; +ok(defined $form); +isa_ok($form, 'Form'); + +my $expected; +foreach my $value ('0.01', '0.05', '0.015', '0.025', '1.1', '1.5', '1.9', + '10.01', '4', '5', '5.1', '5.4', '5.5', '5.6', '6', '0', + '0.000', '10.155', '55', '0.001', '14.5', '15.5', '4.5') { + foreach my $places ('3', '2', '1', '0') { + Math::BigFloat->round_mode('+inf'); + $expected = Math::BigFloat->new($value)->ffround(-$places); + is($form->round_amount($value, $places), $expected, + "$value to $places decimal places - $expected"); + + Math::BigFloat->round_mode('-inf'); + $expected = Math::BigFloat->new(-$value)->ffround(-$places); + is($form->round_amount(-$value, $places), $expected, + "-$value to $places decimal places - $expected"); + } + foreach my $places ('-1', '-2') { + Math::BigFloat->round_mode('+inf'); + $expected = Math::BigFloat->new($value)->ffround(-($places-1)); + is($form->round_amount($value, $places), $expected, + "$value to $places decimal places - $expected"); + + Math::BigFloat->round_mode('-inf'); + $expected = Math::BigFloat->new(-$value)->ffround(-($places-1)); + is($form->round_amount(-$value, $places), $expected, + "-$value to $places decimal places - $expected"); + } +} + +# TODO Number formatting still needs work for l10n +my @formats = (['1,000.00', ',', '.'], ["1'000.00", "'", '.'], + ['1.000,00', '.', ','], ['1000,00', '', ','], + ['1000.00', '', '.'], ['1 000.00', ' ', '.']); +my %myfooconfig = (numberformat => '1000.00'); +foreach my $format (0 .. 5) { + %myconfig = (numberformat => $formats[$format][0]); + my $thou = $formats[$format][1]; + my $dec = $formats[$format][2]; + foreach my $rawValue ('10t000d00', '9t999d99', '333d33', + '7t777t777d77', '-12d34') { + $expected = $rawValue; + $expected =~ s/t/$thou/gx; + $expected =~ s/d/$dec/gx; + my $value = $rawValue; + $value =~ s/t//gx; + $value =~ s/d/\./gx; + ##$value = Math::BigFloat->new($value); + $value = $form->parse_amount(\%myfooconfig,$value); + is($form->format_amount(\%myconfig, $value, 2, 'x'), $expected, + "$value formatted as $formats[$format][0] - $expected"); + } +} + +foreach my $format (0 .. 5) { + %myconfig = (numberformat => $formats[$format][0]); + my $thou = $formats[$format][1]; + my $dec = $formats[$format][2]; + foreach my $rawValue ('10t000d00', '9t999d99', '333d33', + '7t777t777d77', '-12d34') { + $expected = $rawValue; + $expected =~ s/t/$thou/gx; + $expected =~ s/d/$dec/gx; + my $value = $rawValue; + $value =~ s/t//gx; + $value =~ s/d/\./gx; + #my $ovalue = $value; + $value = $form->parse_amount(\%myfooconfig,$value); + #$value = $form->parse_amount(\%myconfig,$value); + is($form->format_amount(\%myconfig, + $form->format_amount(\%myconfig, $value, 2, 'x'), + 2, 'x'), + $expected, "Double formatting of $value as $formats[$format][0] - $expected"); + } +} + +foreach my $format (0 .. 5) { + %myconfig = ('numberformat' => $formats[$format][0]); + my $thou = $formats[$format][1]; + my $dec = $formats[$format][2]; + foreach my $rawValue ('10t000d00', '9t999d99', '333d33', + '7t777t777d77', '-12d34') { + $expected = $rawValue; + $expected =~ s/t/$thou/gx; + $expected =~ s/d/$dec/gx; + my $value = $rawValue; + $value =~ s/t//gx; + $value =~ s/d/\./gx; + $value = sprintf("%.2f", $value); + cmp_ok($form->parse_amount(\%myconfig, $expected), '==', $value, + "$expected parsed as $formats[$format][0] - $value"); + } +} + +foreach my $format (0 .. 5) { + %myconfig = ('numberformat' => $formats[$format][0]); + my $thou = $formats[$format][1]; + my $dec = $formats[$format][2]; + foreach my $rawValue ('10t000d00', '9t999d99', '333d33', + '7t777t777d77', '-12d34') { + $expected = $rawValue; + $expected =~ s/t/$thou/gx; + $expected =~ s/d/$dec/gx; + my $value = $rawValue; + $value =~ s/t//gx; + $value =~ s/d/\./gx; + $value = sprintf("%.2f", $value); + cmp_ok($form->parse_amount(\%myconfig, + $form->parse_amount(\%myconfig, $expected)), + '==', $value, + "$expected parsed as $formats[$format][0] - $value"); + } +} |