NAME
Test::Approximate -- compare two number for approximate equality, deeply
SYNOPSIS
use
Test::Approximate;
is_approx(1, 1.0001,
'approximate equal'
,
'1%'
);
is_approx(0.0001001,
'1e-04'
,
'str vs num'
,
'1%'
);
is_approx(1000, 1000.01,
'absolute tolerance'
,
'0.1'
);
use
Test::Deep;
use
Test::Approximate;
$got
= [ 1.00001, 2, 3, 4 ];
$expect
= [ 1, 2, 3, 4 ];
cmp_deeply(
$got
, approx(
$expect
,
'1%'
),
'array'
);
$got
= {
a
=> 1,
b
=> 1e-3,
c
=> [ 1.1, 2.5, 5, 1e-9 ] };
$expect
= {
a
=> 1.0001,
b
=> 1e-03,
c
=> [ 1.1, 2.5, 5, 1.00001e-9 ] };
cmp_deeply(
$got
, approx(
$expect
,
'0.01%'
),
'hash mix array'
);
DESCRIPTION
This module can test two scalar string or number numberic approximate equal, and deeply test two array or hash or array of hash etc.
There is already a nice module do this -- Test::Approx. I wrote this one because Test::Approx can't do a deeply test, and I have not found a module do the same thing.
FUNCTIONS
- is_approx($got, $expected, [$msg, $tolerance])
-
Test $got and $expected 's difference.
This function is partly borrowed from Test::Approx, without the string Levenshtein difference. Only do a numeric difference; If you compare two string, the test will pass only when the two string is equal.
$test_name
defaults to'got' =~ 'expected'
$tolerance
is used to determine how different the scalars can be, it defaults to1%
. It can also be set as a number representing a threshold. To determine which:$tolerance
=
'6%'
;
# threshold = calculated at 6%
$tolerance
= 0.06;
# threshold = 0.06
- approx($aoh, $tolerance)
-
This function is used to do a deelpy approximate test, with Test::Deep
cmp_deeply(
$got
, approx(
$expected
,
'1%'
),
'test msg'
)
This will do a approximate compare every element of an array, and every value of a hash with the given tolerance, If the data is an complicate structure like hash of array , array of hash etc, it will walk all the element , and do a deep compare as you wish.
It is useful when you want do a deep approximate compare with a big data.
EXPORTS
is_approx
, approx
AUTHOR
tadegenban <tadegenban@gmail.com>
COPYRIGHT
Copyright (c) 2014 tadegenban. Released under the same terms as Perl itself.