1*256a93a4Safresh1#! ./perl 2*256a93a4Safresh1 3*256a93a4Safresh1# Test string-to-number conversions. 4*256a93a4Safresh1 5*256a93a4Safresh1BEGIN { 6*256a93a4Safresh1 chdir 't' if -d 't'; 7*256a93a4Safresh1 require './test.pl'; 8*256a93a4Safresh1 set_up_inc('../lib'); 9*256a93a4Safresh1} 10*256a93a4Safresh1 11*256a93a4Safresh1use strict; 12*256a93a4Safresh1use warnings; 13*256a93a4Safresh1 14*256a93a4Safresh1# Quick test if NV supports infinities. 15*256a93a4Safresh1# Note that this would be $Config{d_double_has_inf}, but this is only valid 16*256a93a4Safresh1# if NV is configured as double. 17*256a93a4Safresh1my $nv_has_inf = do { no warnings; 'inf' > 0 }; 18*256a93a4Safresh1 19*256a93a4Safresh1foreach ([' +3', 3, 0], 20*256a93a4Safresh1 ["10.\t", 10, 0], 21*256a93a4Safresh1 ['abc', 0, 1], 22*256a93a4Safresh1 ['- +3', 0, 1], # GH 18584 23*256a93a4Safresh1 ['++4', 0, 1], 24*256a93a4Safresh1 ['0x123', 0, 1], 25*256a93a4Safresh1 ['1x123', 1, 1], 26*256a93a4Safresh1 ['+0x456', 0, 1], 27*256a93a4Safresh1 ['- 0x789', 0, 1], 28*256a93a4Safresh1 ['0b101', 0, 1], 29*256a93a4Safresh1 ['-3.14', -3.14, 0], 30*256a93a4Safresh1 ['- 3.14', 0, 1], 31*256a93a4Safresh1 ($nv_has_inf ? 32*256a93a4Safresh1 (['+infinity ', '+Inf', 0], 33*256a93a4Safresh1 [' -infin', '-Inf', 1], 34*256a93a4Safresh1 ['+ inf', 0, 1], 35*256a93a4Safresh1 ['+-inf', 0, 1]) : 36*256a93a4Safresh1 ()) 37*256a93a4Safresh1 ) { 38*256a93a4Safresh1 my ($str, $num, $warn) = @$_; 39*256a93a4Safresh1 40*256a93a4Safresh1 my $code = sub { 41*256a93a4Safresh1 cmp_ok($str + 0, '==', $num, "numifying '$str'"); 42*256a93a4Safresh1 }; 43*256a93a4Safresh1 44*256a93a4Safresh1 if ($warn) { 45*256a93a4Safresh1 warning_like($code, qr/^Argument ".*" isn't numeric/, 46*256a93a4Safresh1 "numifying '$str' trigger a warning"); 47*256a93a4Safresh1 } 48*256a93a4Safresh1 else { 49*256a93a4Safresh1 warning_is($code, undef, 50*256a93a4Safresh1 "numifying '$str' does not trigger warnings"); 51*256a93a4Safresh1 } 52*256a93a4Safresh1} 53*256a93a4Safresh1 54*256a93a4Safresh1done_testing(); 55