10 my $NInf = "-Inf" + 0;
13 my @PInf = ("Inf", "inf", "INF", "Infinity", "INFINITY",
15 my @NInf = map { "-$_" } @PInf;
17 my @NaN = ("NAN", "nan", "qnan", "SNAN", "NanQ", "NANS",
18 "1.#QNAN", "1#SNAN", "1.#NAN", "1#IND",
19 "NaN123", "NAN(123)", "nan%",
20 "nanonano"); # RIP, Robin Williams.
22 my $inf_tests = 6 + 6 * @PInf + 5;
23 my $nan_tests = 5 + 2 * @NaN + 3;
26 plan tests => $inf_tests + $nan_tests + $infnan_tests;
32 if ($PInf == 1 && $NINf == 1) {
33 skip $inf_tests, "no infinity found";
38 ok($PInf > 0, "positive infinity");
39 ok($NInf < 0, "negative infinity");
41 is($PInf, "Inf", "$PInf value stringifies as Inf");
42 is($NInf, "-Inf", "$PInf value stringifies as -Inf");
44 is(sprintf("%g", $PInf), "Inf", "$PInf sprintf %g is Inf");
45 is(sprintf("%a", $PInf), "Inf", "$PInf sprintf %a is Inf");
48 is($i + 0, $PInf, "$i is +Inf");
49 ok($i > 0, "$i is positive");
50 is("@{[$i+0]}", "Inf", "$i value stringifies as Inf");
54 is($i + 0, $NInf, "$i is -Inf");
55 ok($i < 0, "$i is negative");
56 is("@{[$i+0]}", "-Inf", "$i value stringifies as -Inf");
59 is($PInf + $PInf, $PInf, "+inf plus +inf is +inf");
60 is($NInf + $NInf, $NInf, "-inf plus -inf is -inf");
62 is(1/$PInf, 0, "one per +Inf is zero");
63 is(1/$NInf, 0, "one per -Inf is zero");
65 is(9**9**9, $PInf, "9**9**9 is +Inf");
70 skip $nan_tests, "no nan found";
75 ok($NaN != $NaN, "nan is not nan numerically");
76 ok($NaN eq $NaN, "nan is nan stringifically");
78 is("$NaN", "NaN", "$NaN value stringies as NaN");
80 is(sprintf("%g", $NaN), "NaN", "$NaN sprintf %g is NaN");
81 is(sprintf("%a", $NaN), "NaN", "$NaN sprintf %a is Inf");
84 cmp_ok($i + 0, '!=', $i + 0, "$i is nan");
85 is("@{[$i+0]}", "NaN", "$i value stringifies as NaN");
88 # is() okay with $NaN because eq is used.
89 is($NaN * 0, $NaN, "NaN times zero is NaN");
90 is($NaN * 2, $NaN, "NaN times two is NaN");
92 is(sin(9**9**9), $NaN, "sin(9**9**9) is NaN");
96 unless ($has_inf && $has_nan) {
97 skip $infnan_tests, "no both inf and nan";
100 # is() okay with $NaN because eq is used.
101 is($PInf * 0, $NaN, "inf times zero is nan");
102 is($PInf * $NaN, $NaN, "inf times nan is nan");
103 is($PInf + $NaN, $NaN, "inf plus nan is nan");
104 is($PInf - $PInf, $NaN, "inf minus inf is nan");