]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - math/test-snan.c
New <math.h> macro named issignaling to check for a signaling NaN (sNaN).
[thirdparty/glibc.git] / math / test-snan.c
index f185cbb45c19fa50c1023d2d52c81963e0f6079a..82f1dbe2093335c29ba5bdd6302faf675c5e06dd 100644 (file)
@@ -1,4 +1,4 @@
-/* Test signaling NaNs in isnan, isinf, and similar functions.
+/* Test signaling NaNs in issignaling, isnan, isinf, and similar functions.
    Copyright (C) 2008-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2005.
@@ -117,6 +117,48 @@ NAME (void)                                                                      \
                                                                              \
   feclearexcept(FE_ALL_EXCEPT);                                                      \
   feenableexcept (FE_ALL_EXCEPT);                                            \
+  if (sigsetjmp(sigfpe_buf, 0))                                                      \
+    {                                                                        \
+      printf (#FLOAT " issignaling (qNaN) raised SIGFPE\n");                 \
+      errors++;                                                                      \
+    } else {                                                                 \
+      check (#FLOAT " issignaling (qNaN)", !issignaling (qNaN_var));         \
+    }                                                                        \
+                                                                             \
+  feclearexcept(FE_ALL_EXCEPT);                                                      \
+  feenableexcept (FE_ALL_EXCEPT);                                            \
+  if (sigsetjmp(sigfpe_buf, 0))                                                      \
+    {                                                                        \
+      printf (#FLOAT " issignaling (-qNaN) raised SIGFPE\n");                \
+      errors++;                                                                      \
+    } else {                                                                 \
+      check (#FLOAT " issignaling (-qNaN)", !issignaling (-qNaN_var));       \
+    }                                                                        \
+                                                                             \
+  feclearexcept(FE_ALL_EXCEPT);                                                      \
+  feenableexcept (FE_ALL_EXCEPT);                                            \
+  if (sigsetjmp(sigfpe_buf, 0))                                                      \
+    {                                                                        \
+      printf (#FLOAT " issignaling (sNaN) raised SIGFPE\n");                 \
+      errors++;                                                                      \
+    } else {                                                                 \
+      check (#FLOAT " issignaling (sNaN)",                                   \
+            SNAN_TESTS (FLOAT) ? issignaling (sNaN_var) : 1);                \
+    }                                                                        \
+                                                                             \
+  feclearexcept(FE_ALL_EXCEPT);                                                      \
+  feenableexcept (FE_ALL_EXCEPT);                                            \
+  if (sigsetjmp(sigfpe_buf, 0))                                                      \
+    {                                                                        \
+      printf (#FLOAT " issignaling (-sNaN) raised SIGFPE\n");                \
+      errors++;                                                                      \
+    } else {                                                                 \
+      check (#FLOAT " issignaling (-sNaN)",                                  \
+            SNAN_TESTS (FLOAT) ? issignaling (minus_sNaN_var) : 1);          \
+    }                                                                        \
+                                                                             \
+  feclearexcept(FE_ALL_EXCEPT);                                                      \
+  feenableexcept (FE_ALL_EXCEPT);                                            \
   if (sigsetjmp(sigfpe_buf, 0))                                                      \
     {                                                                        \
       printf (#FLOAT " isnan (qNaN) raised SIGFPE\n");                       \