Data-Checks
view release on metacpan or search on metacpan
src/constraints.c view on Meta::CPAN
if(sv_has_overload(value, numer_amg))
return true;
return false;
}
else if(SvPOK(value)) {
if(!looks_like_number(value))
return false;
// reject NaN
if(SvPVX(value)[0] == 'N' || SvPVX(value)[0] == 'n')
return false;
return true;
}
else {
// reject NaN
if(SvNOK(value) && Perl_isnan(SvNV(value)))
return false;
return true;
}
}
enum {
NUMBOUND_LOWER_INCLUSIVE = (1<<0),
NUMBOUND_UPPER_INCLUSIVE = (1<<1),
t/11constraints-num.t view on Meta::CPAN
use warnings;
use Test2::V0;
use lib "t";
use testcase "t::test", qw( test_constraint );
use Data::Checks qw( Num NumGT NumGE NumLE NumLT NumRange NumEq );
use constant {
NAN => 0+"NaN",
};
# Num
test_constraint Num => Num,
[
'plain integer' => 1234,
'plain float' => 5.67,
'stringified number' => "89",
'object with numify' => ClassWithNumOverload->new,
],
[
'object with stringifty' => ClassWithStrOverload->new,
'not-a-number' => NAN,
'"NaN"' => NAN . "",
'"nan"' => "nan",
];
# Num bounded
{
my $checker_gt = t::test::make_checkdata( NumGT(0), "Value" );
ok( t::test::check_value( $checker_gt, 123 ), 'NumGT accepts plain integer' );
ok( !t::test::check_value( $checker_gt, 0 ), 'NumGT rejects bound' );
ok( !t::test::check_value( $checker_gt, -123 ), 'NumGT rejects negative integer' );
( run in 0.346 second using v1.01-cache-2.11-cpan-4d50c553e7e )