]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
More tests for external charater sequences representing NaNs.
authorThomas Schwinge <thomas@codesourcery.com>
Fri, 5 Apr 2013 18:28:47 +0000 (20:28 +0200)
committerThomas Schwinge <thomas@codesourcery.com>
Fri, 5 Apr 2013 20:41:20 +0000 (22:41 +0200)
ChangeLog
stdio-common/tstdiomisc.c
stdlib/Makefile
stdlib/tst-strtod6.c

index 1bdbdf3cb68daeef57418f083e98a67526a8b674..256ce451a2115061cea2e69ab2f52094c185ba72 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2013-04-05  Thomas Schwinge  <thomas@codesourcery.com>
 
+       * stdio-common/tstdiomisc.c (snanval, msnanval, lsnanval)
+       (lmsnanval): New variables.
+       (F): Add conversion tests.
+       * stdlib/tst-strtod6.c (do_test): Add issignaling tests.
+       * stdlib/Makefile ($(objpfx)tst-strtod6): Depend on $(link-libm).
+
        * stdio-common/tstdiomisc.c (F): Properly collect individual
        tests' results.
 
index fa07aa5a891b2c1bb6256c50d5558cf351ac9892..5c046bbef3d527aa9b72fb3dea6256384b560360 100644 (file)
@@ -47,8 +47,14 @@ t2 (void)
 }
 
 volatile double qnanval;
-volatile double infval;
 volatile long double lqnanval;
+/* A sNaN is only guaranteed to be representable in variables with static (or
+   thread-local) storage duration.  */
+static volatile double snanval = __builtin_nans("");
+static volatile double msnanval = -__builtin_nans("");
+static volatile long double lsnanval = __builtin_nansl("");
+static volatile long double lmsnanval = -__builtin_nansl("");
+volatile double infval;
 volatile long double linfval;
 
 
@@ -74,6 +80,19 @@ F (void)
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
          buf);
 
+  snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
+           snanval, snanval, snanval, snanval,
+           snanval, snanval, snanval, snanval);
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
+
+  snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
+           msnanval, msnanval, msnanval, msnanval,
+           msnanval, msnanval, msnanval, msnanval);
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
+         buf);
+
   infval = DBL_MAX * DBL_MAX;
 
   snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
@@ -101,6 +120,19 @@ F (void)
   printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
          wbuf);
 
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
+           snanval, snanval, snanval, snanval,
+           snanval, snanval, snanval, snanval);
+  result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
+           msnanval, msnanval, msnanval, msnanval,
+           msnanval, msnanval, msnanval, msnanval);
+  result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
+         wbuf);
+
   swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]), L"%a %A %e %E %f %F %g %G",
            infval, infval, infval, infval, infval, infval, infval, infval);
   result |= wcscmp (wbuf, L"inf INF inf INF inf INF inf INF") != 0;
@@ -128,6 +160,19 @@ F (void)
   printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
          buf);
 
+  snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
+           lsnanval, lsnanval, lsnanval, lsnanval,
+           lsnanval, lsnanval, lsnanval, lsnanval);
+  result |= strcmp (buf, "nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected \"nan NAN nan NAN nan NAN nan NAN\", got \"%s\"\n", buf);
+
+  snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
+           lmsnanval, lmsnanval, lmsnanval, lmsnanval,
+           lmsnanval, lmsnanval, lmsnanval, lmsnanval);
+  result |= strcmp (buf, "-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected \"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got \"%s\"\n",
+         buf);
+
   linfval = LDBL_MAX * LDBL_MAX;
 
   snprintf (buf, sizeof buf, "%La %LA %Le %LE %Lf %LF %Lg %LG",
@@ -158,6 +203,21 @@ F (void)
   printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
          wbuf);
 
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
+           L"%La %LA %Le %LE %Lf %LF %Lg %LG",
+           lsnanval, lsnanval, lsnanval, lsnanval,
+           lsnanval, lsnanval, lsnanval, lsnanval);
+  result |= wcscmp (wbuf, L"nan NAN nan NAN nan NAN nan NAN") != 0;
+  printf ("expected L\"nan NAN nan NAN nan NAN nan NAN\", got L\"%S\"\n", wbuf);
+
+  swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
+           L"%La %LA %Le %LE %Lf %LF %Lg %LG",
+           lmsnanval, lmsnanval, lmsnanval, lmsnanval,
+           lmsnanval, lmsnanval, lmsnanval, lmsnanval);
+  result |= wcscmp (wbuf, L"-nan -NAN -nan -NAN -nan -NAN -nan -NAN") != 0;
+  printf ("expected L\"-nan -NAN -nan -NAN -nan -NAN -nan -NAN\", got L\"%S\"\n",
+         wbuf);
+
   swprintf (wbuf, sizeof wbuf / sizeof (wbuf[0]),
            L"%La %LA %Le %LE %Lf %LF %Lg %LG",
            linfval, linfval, linfval, linfval,
index 6f98c71c649eaa116f86422f1e869b348c816ff1..27765d15b79dacb241b54c1c49199d4aad6ffd2e 100644 (file)
@@ -157,6 +157,7 @@ $(objpfx)bug-getcontext: $(link-libm)
 $(objpfx)tst-strtod-round: $(link-libm)
 $(objpfx)tst-tininess: $(link-libm)
 $(objpfx)tst-strtod-underflow: $(link-libm)
+$(objpfx)tst-strtod6: $(link-libm)
 
 tst-tls-atexit-lib.so-no-z-defs = yes
 
index fdb104f9ca1df89bf6a51527fa4b471ee9bcb093..1d87266a273ebaaf5ce4e936a083f27474ceb5a2 100644 (file)
@@ -16,6 +16,11 @@ do_test (void)
       puts ("strtod did not return NAN");
       result = 1;
     }
+  if (issignaling (d))
+    {
+      puts ("strtod returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtod set incorrect end pointer");
@@ -28,6 +33,11 @@ do_test (void)
       puts ("strtof did not return NAN");
       result = 1;
     }
+  if (issignaling (f))
+    {
+      puts ("strtof returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtof set incorrect end pointer");
@@ -40,6 +50,11 @@ do_test (void)
       puts ("strtold did not return NAN");
       result = 1;
     }
+  if (issignaling (ld))
+    {
+      puts ("strtold returned a sNAN");
+      result = 1;
+    }
   if (strcmp (endp, "something") != 0)
     {
       puts  ("strtold set incorrect end pointer");