1 /* Test of isfinite() substitute.
2 Copyright (C) 2007-2024 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
17 /* Written by Ben Pfaff, 2007, using Bruno Haible's code as a
24 /* isfinite must be a macro. */
26 # error missing declaration
38 long double zerol
= 0.0L;
44 ASSERT (isfinite (0.0f
));
45 /* Subnormal values. */
46 ASSERT (isfinite (FLT_MIN
/ 2));
47 ASSERT (isfinite (-FLT_MIN
/ 2));
49 ASSERT (isfinite (3.141f
));
50 ASSERT (isfinite (3.141e30f
));
51 ASSERT (isfinite (3.141e-30f
));
52 ASSERT (isfinite (-2.718f
));
53 ASSERT (isfinite (-2.718e30f
));
54 ASSERT (isfinite (-2.718e-30f
));
55 /* Infinite values. */
56 ASSERT (!isfinite (Infinityf ()));
57 ASSERT (!isfinite (- Infinityf ()));
59 ASSERT (!isfinite (zerof
/ zerof
));
62 ASSERT (!isfinite (SNaNf ()));
70 ASSERT (isfinite (0.0));
71 /* Subnormal values. */
72 ASSERT (isfinite (DBL_MIN
/ 2));
73 ASSERT (isfinite (-DBL_MIN
/ 2));
75 ASSERT (isfinite (3.141));
76 ASSERT (isfinite (3.141e30
));
77 ASSERT (isfinite (3.141e-30));
78 ASSERT (isfinite (-2.718));
79 ASSERT (isfinite (-2.718e30
));
80 ASSERT (isfinite (-2.718e-30));
81 /* Infinite values. */
82 ASSERT (!isfinite (Infinityd ()));
83 ASSERT (!isfinite (- Infinityd ()));
85 ASSERT (!isfinite (zerod
/ zerod
));
88 ASSERT (!isfinite (SNaNd ()));
96 ASSERT (isfinite (0.0L));
97 /* Subnormal values. */
98 ASSERT (isfinite (LDBL_MIN
/ 2));
99 ASSERT (isfinite (-LDBL_MIN
/ 2));
101 ASSERT (isfinite (3.141L));
102 ASSERT (isfinite (3.141e30L
));
103 ASSERT (isfinite (3.141e-30L));
104 ASSERT (isfinite (-2.718L));
105 ASSERT (isfinite (-2.718e30L
));
106 ASSERT (isfinite (-2.718e-30L));
107 /* Infinite values. */
108 ASSERT (!isfinite (Infinityl ()));
109 ASSERT (!isfinite (- Infinityl ()));
111 ASSERT (!isfinite (zerol
/ zerol
));
113 /* Signalling NaN. */
114 ASSERT (!isfinite (SNaNl ()));
117 #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
119 ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
120 typedef union { unsigned int word
[NWORDS
]; long double value
; }
122 /* Representation of an 80-bit 'long double' as an initializer for a sequence
123 of 'unsigned int' words. */
124 # ifdef WORDS_BIGENDIAN
125 # define LDBL80_WORDS(exponent,manthi,mantlo) \
126 { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
127 ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \
128 (unsigned int) (mantlo) << 16 \
131 # define LDBL80_WORDS(exponent,manthi,mantlo) \
132 { mantlo, manthi, exponent }
135 static memory_long_double x
=
136 { .word
= LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
137 ASSERT (!isfinite (x
.value
));
140 /* Signalling NaN. */
141 static memory_long_double x
=
142 { .word
= LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
143 ASSERT (!isfinite (x
.value
));
145 /* isfinite should return something for noncanonical values. */
147 static memory_long_double x
=
148 { .word
= LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
149 ASSERT (isfinite (x
.value
) || !isfinite (x
.value
));
151 { /* Pseudo-Infinity. */
152 static memory_long_double x
=
153 { .word
= LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
154 ASSERT (isfinite (x
.value
) || !isfinite (x
.value
));
157 static memory_long_double x
=
158 { .word
= LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
159 ASSERT (isfinite (x
.value
) || !isfinite (x
.value
));
161 { /* Unnormalized number. */
162 static memory_long_double x
=
163 { .word
= LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
164 ASSERT (isfinite (x
.value
) || !isfinite (x
.value
));
166 { /* Pseudo-Denormal. */
167 static memory_long_double x
=
168 { .word
= LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
169 ASSERT (isfinite (x
.value
) || !isfinite (x
.value
));
181 return test_exit_status
;