/usr/share/perl5/Test/Deep/Fuzzy/Number.pm is in libtest-deep-fuzzy-perl 0.01-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package Test::Deep::Fuzzy::Number;
use strict;
use warnings;
use Test::Deep::Cmp;
use B ();
use Scalar::Util qw/looks_like_number/;
use Math::Round qw/nearest/;
our $RANGE = 0.000001;
sub init {
my ($self, $value, $range) = @_;
$self->{value} = $value;
$self->{range} = $range;
}
sub range { defined $_[0]->{range} ? $_[0]->{range} : $RANGE }
sub is_number {
my $value = shift;
return !!0 unless looks_like_number($value);
$value += 0.0; # numify
my $flags = B::svref_2object(\$value)->FLAGS;
return !!($flags & B::SVp_NOK & ~B::SVp_POK);
}
sub descend {
my ($self, $got) = @_;
my $expected = $self->{value};
$got = nearest($self->range, $got) if is_number($got);
$expected = nearest($self->range, $expected) if is_number($expected);
return $got == $expected;
}
sub diag_message {
my ($self, $where) = @_;
my $value = $self->{value};
my $range = $self->{range} || $RANGE;
return "Comparing $where equals $value (in range: $range)";
}
sub renderExp {
my $self = shift;
return $self->renderGot($self->{value});
}
sub renderGot {
my ($self, $got) = @_;
my $value = is_number($got) ? nearest($self->range, $got) : $got;
return "$value (".Test::Deep::render_val($got).")";
}
1;
__END__
|