1use strict; 2use warnings; 3 4package Test::Deep::Number; 5 6use Test::Deep::Cmp; 7 8use Scalar::Util; 9 10sub init 11{ 12 my $self = shift; 13 14 $self->{val} = shift(@_) + 0; 15 $self->{tolerance} = shift; 16} 17 18sub descend 19{ 20 my $self = shift; 21 my $got = shift; 22 $self->data->{got_string} = $got; 23 { 24 no warnings 'numeric'; 25 $got += 0; 26 } 27 28 $self->data->{got} = $got; 29 if (defined(my $tolerance = $self->{tolerance})) 30 { 31 return abs($got - $self->{val}) <= $tolerance; 32 } 33 else 34 { 35 return $got == $self->{val}; 36 } 37} 38 39sub diag_message 40{ 41 my $self = shift; 42 43 my $where = shift; 44 45 return "Comparing $where as a number"; 46} 47 48sub renderGot 49{ 50 my $self = shift; 51 my $val = shift; 52 53 my $got_string = $self->data->{got_string}; 54 if ("$val" ne "$got_string") 55 { 56 $got_string = $self->SUPER::renderGot($got_string); 57 return "$val ($got_string)" 58 } 59 else 60 { 61 return $val; 62 } 63} 64sub renderExp 65{ 66 my $self = shift; 67 68 my $exp = $self->{val}; 69 70 if (defined(my $tolerance = $self->{tolerance})) 71 { 72 return "$exp +/- $tolerance"; 73 } 74 else 75 { 76 return $exp; 77 } 78} 79 801; 81