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 )