This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
infnan: "nan(1)cy" should numify to $NaN, but also warn
authorJarkko Hietaniemi <jhi@iki.fi>
Tue, 10 Feb 2015 18:18:20 +0000 (13:18 -0500)
committerJarkko Hietaniemi <jhi@iki.fi>
Tue, 10 Feb 2015 23:45:10 +0000 (18:45 -0500)
More test cases.

numeric.c
t/op/infnan.t

index 9b1b2ae..91c298e 100644 (file)
--- a/numeric.c
+++ b/numeric.c
@@ -806,8 +806,11 @@ Perl_grok_nan_payload(pTHX_ const char* s, const char* send, bool signaling, int
      * "nan0xabc", or "nan(s123)" ("s" for signaling). */
 
     while (t > s && isSPACE(*t)) t--;
+
     if (*t != ')') {
-        return send;
+        U8 bytes[1] = { 0 };
+        nan_payload_set(nvp, bytes, 1, signaling);
+        return t;
     }
 
     if (++s == send) {
index e3cd7c9..4670398 100644 (file)
@@ -482,15 +482,30 @@ cmp_ok('-1e-9999', '==', 0,     "underflow to 0 (runtime) from neg");
          [ "nanxy",        1, $NaN ],
          [ "nan34",        1, $NaN ],
          [ "nan0x34",      1, $NaN ],
+         [ "nan 34",       1, $NaN ],
+         [ "nan 0x34",     1, $NaN ],
          [ "nanq",         0, $NaN ],
          # [ "nans",         0, $NaN, $PInf ], # Odd but valid.
          [ "nanx",         1, $NaN ],
          [ "nanqy",        1, $NaN ],
+         [ "nanxy",        1, $NaN ],
          [ "nan(123)",     0, $NaN ],
+         [ "nan(123)xy",   1, $NaN ],
          [ "nan(0x123)",   0, $NaN ],
          [ "nan(123xy)",   1, $NaN ],
+         [ "nan(123x)y",   1, $NaN ],
+         [ "nan(1)(2)",    1, $NaN ],
+         [ "nan(1xy2)",    1, $NaN ],
+         [ "nan(1)x(2)",   1, $NaN ],
+         [ "nan(1)x(2)",   1, $NaN ],
+         [ "nan(1)x(2)y",  1, $NaN ],
          [ "nan(0x123xy)", 1, $NaN ],
          [ "nanq(123)",    0, $NaN ],
+         [ "nanx(123)",    1, $NaN ],
+         [ "nanx(123)y",   1, $NaN ],
+         [ "nanx(123y)",   1, $NaN ],
+         [ "nanx(123y)z",  1, $NaN ],
+         [ "nan(123",      1, $NaN ],
          [ "1.#NANQ",      0, $NaN ],
          [ "1.#QNAN",      0, $NaN ],
          [ "1.#NANQx",     1, $NaN ],
@@ -501,6 +516,7 @@ cmp_ok('-1e-9999', '==', 0,     "underflow to 0 (runtime) from neg");
          [ " nan",         0, $NaN ],
          [ "nan ",         0, $NaN ],
          [ " nan ",        0, $NaN ],
+         [ " nan(123) ",   1, $NaN ],
         ];
 
     for my $t (@$T) {