annotate tests/test-signbit.c @ 40186:8964917f9574

autoupdate
author Karl Berry <karl@freefriends.org>
date Mon, 18 Feb 2019 08:02:49 -0800
parents b06060465f09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of signbit() substitute.
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 19484
diff changeset
2 Copyright (C) 2007-2019 Free Software Foundation, Inc.
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
4 This program is free software: you can redistribute it and/or modify
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
7 (at your option) any later version.
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
19190
9759915b2aca all: prefer https: URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 18626
diff changeset
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <config.h>
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include <math.h>
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
12489
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12421
diff changeset
23 /* signbit must be a macro. */
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12421
diff changeset
24 #ifndef signbit
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12421
diff changeset
25 # error missing declaration
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12421
diff changeset
26 #endif
33ab12a7cea2 tests: add signature checks
Eric Blake <ebb9@byu.net>
parents: 12421
diff changeset
27
10601
ca053fa79cd3 Use a more portable replacement expression for -0.0L.
Bruno Haible <bruno@clisp.org>
parents: 10596
diff changeset
28 #include <float.h>
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #include <limits.h>
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
13834
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
31 #include "minus-zero.h"
15595
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
32 #include "infinity.h"
12496
a48d3d749ca5 Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents: 12489
diff changeset
33 #include "macros.h"
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 float zerof = 0.0f;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 double zerod = 0.0;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 long double zerol = 0.0L;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 static void
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 test_signbitf ()
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 /* Finite values. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 ASSERT (!signbit (3.141f));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 ASSERT (!signbit (3.141e30f));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 ASSERT (!signbit (3.141e-30f));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 ASSERT (signbit (-2.718f));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 ASSERT (signbit (-2.718e30f));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 ASSERT (signbit (-2.718e-30f));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
49 /* Zeros. */
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
50 ASSERT (!signbit (0.0f));
13834
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
51 if (1.0f / minus_zerof < 0)
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
52 ASSERT (signbit (minus_zerof));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
53 else
13834
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
54 ASSERT (!signbit (minus_zerof));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 /* Infinite values. */
15595
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
56 ASSERT (!signbit (Infinityf ()));
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
57 ASSERT (signbit (- Infinityf ()));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 /* Quiet NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 (void) signbit (zerof / zerof);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 /* Signalling NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 #define NWORDS \
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 typedef union { float value; unsigned int word[NWORDS]; } memory_float;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 memory_float m;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 m.value = zerof / zerof;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 # if FLT_EXPBIT0_BIT > 0
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 # else
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 # endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 if (FLT_EXPBIT0_WORD < NWORDS / 2)
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75 m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 else
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 m.word[0] |= (unsigned int) 1;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 (void) signbit (m.value);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 #undef NWORDS
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 #endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 static void
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 test_signbitd ()
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 /* Finite values. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 ASSERT (!signbit (3.141));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 ASSERT (!signbit (3.141e30));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90 ASSERT (!signbit (3.141e-30));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 ASSERT (signbit (-2.718));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 ASSERT (signbit (-2.718e30));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93 ASSERT (signbit (-2.718e-30));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
94 /* Zeros. */
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
95 ASSERT (!signbit (0.0));
13834
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
96 if (1.0 / minus_zerod < 0)
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
97 ASSERT (signbit (minus_zerod));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
98 else
13834
108bbfd6f03b frexp, tests: work around ICC bug with -zero
Eric Blake <eblake@redhat.com>
parents: 12559
diff changeset
99 ASSERT (!signbit (minus_zerod));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100 /* Infinite values. */
15595
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
101 ASSERT (!signbit (Infinityd ()));
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
102 ASSERT (signbit (- Infinityd ()));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
103 /* Quiet NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104 (void) signbit (zerod / zerod);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
105 #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
106 /* Signalling NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
107 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
108 #define NWORDS \
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
109 ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
110 typedef union { double value; unsigned int word[NWORDS]; } memory_double;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
111 memory_double m;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
112 m.value = zerod / zerod;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
113 # if DBL_EXPBIT0_BIT > 0
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
114 m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
115 # else
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
116 m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
117 ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
118 # endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
119 m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
120 |= (unsigned int) 1 << DBL_EXPBIT0_BIT;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
121 (void) signbit (m.value);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
122 #undef NWORDS
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
123 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
124 #endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
125 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
126
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
127 static void
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
128 test_signbitl ()
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
130 /* Finite values. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131 ASSERT (!signbit (3.141L));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
132 ASSERT (!signbit (3.141e30L));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
133 ASSERT (!signbit (3.141e-30L));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
134 ASSERT (signbit (-2.718L));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
135 ASSERT (signbit (-2.718e30L));
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
136 ASSERT (signbit (-2.718e-30L));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
137 /* Zeros. */
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
138 ASSERT (!signbit (0.0L));
10601
ca053fa79cd3 Use a more portable replacement expression for -0.0L.
Bruno Haible <bruno@clisp.org>
parents: 10596
diff changeset
139 if (1.0L / minus_zerol < 0)
ca053fa79cd3 Use a more portable replacement expression for -0.0L.
Bruno Haible <bruno@clisp.org>
parents: 10596
diff changeset
140 ASSERT (signbit (minus_zerol));
9840
bb59cc79cbdb Test signbit behavior on zeros.
Eric Blake <ebb9@byu.net>
parents: 9309
diff changeset
141 else
10601
ca053fa79cd3 Use a more portable replacement expression for -0.0L.
Bruno Haible <bruno@clisp.org>
parents: 10596
diff changeset
142 ASSERT (!signbit (minus_zerol));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
143 /* Infinite values. */
15595
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
144 ASSERT (!signbit (Infinityl ()));
328819af1c02 Support for MSVC compiler: Avoid division by a literal 0.
Bruno Haible <bruno@clisp.org>
parents: 14079
diff changeset
145 ASSERT (signbit (- Infinityl ()));
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
146 /* Quiet NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
147 (void) signbit (zerol / zerol);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
148 #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
149 /* Signalling NaN. */
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
150 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
151 #define NWORDS \
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
152 ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
153 typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double;
17684
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
154
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
155 #if defined __powerpc__ && LDBL_MANT_DIG == 106
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
156 /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
157 represented as the corresponding 64-bit IEEE values in the first double;
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
158 the second is ignored. Manipulate only the first double. */
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
159 #undef NWORDS
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
160 #define NWORDS \
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
161 ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
162 #endif
3f834754d62a isfinite, isinf, isnan tests: fix for little-endian PowerPC
Ulrich Weigand <uweigand@de.ibm.com>
parents: 17576
diff changeset
163
8653
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
164 memory_long_double m;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
165 m.value = zerol / zerol;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
166 # if LDBL_EXPBIT0_BIT > 0
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
167 m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
168 # else
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
169 m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
170 ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
171 # endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
172 m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
173 |= (unsigned int) 1 << LDBL_EXPBIT0_BIT;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
174 (void) signbit (m.value);
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
175 #undef NWORDS
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
176 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
177 #endif
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
178 }
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
179
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
180 int
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
181 main ()
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
182 {
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
183 test_signbitf ();
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
184 test_signbitd ();
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
185 test_signbitl ();
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
186 return 0;
02c040ba84bf Tests for module 'signbit'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
187 }