# t/10_dadd.t - dadd tests # # Copyright (C) 2017 Libiquity LLC # # 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 qw(dadd dmul drhtz drhfz); my @tests; my $a; my $b; my $c; my $i; @tests = ( # a b c [ 2 , 2 , "4." ], [ 1 , 0.23, "1.23"], [ 0.23, 1 , "1.23"], [ 1 , -1 , "0." ], [-1 , 1 , "0." ], [ 1.23, 4.56, "5.79"], [-1.23, 4.56, "3.33"], [-1.23, -4.56, "-5.79"], [ 0.1 , 0.1 , ".2" ], [-0.1 , -0.1 , "-.2" ], [ 0.1 , -0.1 , ".0" ], [-0.1 , 0.1 , ".0" ], [ 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)");