xref: /openbsd-src/gnu/usr.bin/perl/t/op/numify.t (revision 256a93a44f36679bee503f12e49566c2183f6181)
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