summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-02-24 19:16:00 +0000
committerBruno Haible <bruno@clisp.org>2007-02-24 19:16:00 +0000
commitb595b5dbc06a2fa40ff4aa61ca25b77c9486b983 (patch)
tree77ec6859162b5895c32beedab2df5b58eeb02ee3
parentba40cb572a7580ec1aafd0c2c1fbf3751caabdb6 (diff)
downloadgnulib-b595b5dbc06a2fa40ff4aa61ca25b77c9486b983.tar.gz
Tests for module 'isnanl-nolibm'.
-rw-r--r--ChangeLog3
-rw-r--r--modules/isnanl-nolibm-tests12
-rw-r--r--tests/test-isnanl.c77
3 files changed, 92 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index af4c2d93d0..38f95959ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2007-02-24 Bruno Haible <bruno@clisp.org>
+ * modules/isnanl-nolibm-tests: New file.
+ * tests/test-isnanl.c: New file.
+
* modules/isnanl-nolibm: New file.
* lib/isnanl.h: New file.
* lib/isnanl.c: New file.
diff --git a/modules/isnanl-nolibm-tests b/modules/isnanl-nolibm-tests
new file mode 100644
index 0000000000..e416d14a49
--- /dev/null
+++ b/modules/isnanl-nolibm-tests
@@ -0,0 +1,12 @@
+Files:
+tests/test-isnanl.c
+
+Depends-on:
+
+configure.ac:
+gl_LONG_DOUBLE_EXPONENT_LOCATION
+
+Makefile.am:
+TESTS += test-isnanl
+check_PROGRAMS += test-isnanl
+
diff --git a/tests/test-isnanl.c b/tests/test-isnanl.c
new file mode 100644
index 0000000000..534f15b177
--- /dev/null
+++ b/tests/test-isnanl.c
@@ -0,0 +1,77 @@
+/* Test of isnanl() substitute.
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
+
+#include <config.h>
+
+#if HAVE_LONG_DOUBLE
+
+#include "isnanl.h"
+
+#include <limits.h>
+#include <stdlib.h>
+
+#define ASSERT(expr) if (!(expr)) abort ();
+
+int
+main ()
+{
+ /* Finite values. */
+ ASSERT (!isnanl (3.141L));
+ ASSERT (!isnanl (3.141e30L));
+ ASSERT (!isnanl (3.141e-30L));
+ ASSERT (!isnanl (-2.718L));
+ ASSERT (!isnanl (-2.718e30L));
+ ASSERT (!isnanl (-2.718e-30L));
+ /* Infinite values. */
+ ASSERT (!isnanl (1.0L / 0.0L));
+ ASSERT (!isnanl (-1.0L / 0.0L));
+ /* Quiet NaN. */
+ ASSERT (isnanl (0.0L / 0.0L));
+#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT
+ /* Signalling NaN. */
+ {
+ #define NWORDS \
+ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+ typedef union { long double value; unsigned int word[NWORDS]; }
+ memory_long_double;
+ memory_long_double m;
+ m.value = 0.0L / 0.0L;
+# if LDBL_EXPBIT0_BIT > 0
+ m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1);
+# else
+ m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
+ ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+# endif
+ m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
+ |= (unsigned int) 1 << LDBL_EXPBIT0_BIT;
+ ASSERT (isnanl (m.value));
+ }
+#endif
+ return 0;
+}
+
+#else
+
+int
+main ()
+{
+ return 0;
+}
+
+#endif