# t/10_dadd.t - dadd tests # # Copyright (C) 2017 Patrick McDermott # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . use strict; use warnings; use Test::More; use Math::Decimal::FastPP; my @tests; my $a; my $b; my $c; my $i; @tests = ( # a b c [ 1.23, 4.56, 5.79], [-1.23, 4.56, 3.33], [-1.23, -4.56, -5.79], [ 9.95, 0.52, 10.47], ); plan("tests" => scalar(@tests) + 1); foreach (@tests) { ($a, $b, $c) = @{$_}; is(dadd($a, $b), $c, sprintf("%5.2f + %5.2f = %5.2f", $a, $b, $c)); } $a = 0; for ($i = 0; $i < 10000; ++$i) { $a = dadd($a, 0.01); } is($a, "100.00", "adding 0.01 10000 times"); $a = 0; for ($i = 0; $i < 10000; ++$i) { $a += 0.01; } note("Using native floating-point arithmetic, the result is " . $a . " (should be 100)");