]> git.ipfire.org Git - thirdparty/glibc.git/blame - math/test-misc.c
Fix the inaccuracy of j0f/j1f/y0f/y1f [BZ #14469, #14470, #14471, #14472]
[thirdparty/glibc.git] / math / test-misc.c
CommitLineData
9861985f 1/* Miscellaneous tests which don't fit anywhere else.
2b778ceb 2 Copyright (C) 2000-2021 Free Software Foundation, Inc.
9861985f
UD
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9861985f
UD
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
9861985f 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6 16 License along with the GNU C Library; if not, see
5a82c748 17 <https://www.gnu.org/licenses/>. */
9861985f 18
b210e4cc 19#include <fenv.h>
eec40917 20#include <float.h>
ddc3ed9d 21#include <ieee754.h>
9861985f
UD
22#include <math.h>
23#include <stdio.h>
6d0c4914 24#include <string.h>
94f2c076 25#include <math-tests.h>
9861985f
UD
26
27
29955b5d
AS
28static int
29do_test (void)
9861985f
UD
30{
31 int result = 0;
32
5e4e1063 33#if LDBL_MANT_DIG > DBL_MANT_DIG
a5fe041c
UD
34 {
35 long double x = 0x100000001ll + (long double) 0.5;
36 long double q;
37 long double r;
38
39 r = modfl (x, &q);
40 if (q != (long double) 0x100000001ll || r != 0.5)
41 {
42 printf ("modfl (%Lg, ...) failed\n", x);
43 result = 1;
44 }
45 }
79569444 46
79569444 47 {
0df757b1 48 long double x;
79569444 49 long double m;
0df757b1
UD
50 long double r;
51 int e;
79569444
UD
52 int i;
53
d68f5d2c 54# if LDBL_MANT_DIG == 64
79569444 55 m = 0xf.fffffffffffffffp-4L;
d68f5d2c 56# elif LDBL_MANT_DIG == 106
5ce98c3f
UD
57 /* This has to match the mantissa of LDBL_MAX which actually does have a
58 missing bit in the middle. */
59 m = 0x1.fffffffffffff7ffffffffffff8p-1L;
d68f5d2c 60# elif LDBL_MANT_DIG == 113
7b84d129 61 m = 0x1.ffffffffffffffffffffffffffffp-1L;
d68f5d2c 62# else
5e4e1063 63# error "Unsupported LDBL_MANT_DIG, please adjust"
d68f5d2c 64# endif
79569444 65
0df757b1 66 for (i = LDBL_MAX_EXP, x = LDBL_MAX; i >= LDBL_MIN_EXP; --i, x /= 2.0L)
79569444 67 {
0df757b1 68 printf ("2^%d: ", i);
79569444
UD
69
70 r = frexpl (x, &e);
71 if (r != m)
72 {
73 printf ("mantissa incorrect: %.20La\n", r);
74 result = 1;
75 continue;
76 }
0df757b1 77 if (e != i)
79569444
UD
78 {
79 printf ("exponent wrong %d (%.20Lg)\n", e, x);
80 result = 1;
81 continue;
82 }
83 puts ("ok");
84 }
601d2942
UD
85
86 for (i = LDBL_MIN_EXP, x = LDBL_MIN; i >= LDBL_MIN_EXP - LDBL_MANT_DIG + 1;
87 --i, x /= 2.0L)
88 {
89 printf ("2^%d: ", i);
90
91 r = frexpl (x, &e);
92 if (r != 0.5L)
93 {
94 printf ("mantissa incorrect: %.20La\n", r);
95 result = 1;
96 continue;
97 }
98 if (e != i)
99 {
100 printf ("exponent wrong %d (%.20Lg)\n", e, x);
101 result = 1;
102 continue;
103 }
104 puts ("ok");
105 }
106
79569444 107 }
6d0c4914 108
d68f5d2c 109# if 0
6d0c4914
UD
110 {
111 int e;
112 long double r = frexpl (LDBL_MIN * LDBL_EPSILON, &e);
113
114 if (r != 0.5)
115 {
116 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): mantissa wrong: %Lg\n",
117 r);
118 result = 1;
119 }
120 else if (e != -16444)
121 {
122 printf ("frexpl (LDBL_MIN * LDBL_EPSILON, ...): exponent wrong: %d\n",
123 e);
124 result = 1;
125 }
126 }
d68f5d2c 127# endif
a5fe041c 128#endif
9861985f
UD
129
130 {
131 double x = 0x100000001ll + (double) 0.5;
132 double q;
133 double r;
134
135 r = modf (x, &q);
136 if (q != (double) 0x100000001ll || r != 0.5)
137 {
138 printf ("modf (%g, ...) failed\n", x);
139 result = 1;
140 }
141 }
142
cc46d0cf 143 {
ddc3ed9d
UD
144 union ieee754_float v1;
145 union ieee754_float v2;
cc46d0cf
UD
146 float f;
147
ddc3ed9d 148 v1.f = f = FLT_MIN;
cc46d0cf
UD
149 if (fpclassify (f) != FP_NORMAL)
150 {
151 printf ("fpclassify (FLT_MIN) failed: %d\n", fpclassify (f));
152 result = 1;
153 }
154 f = nextafterf (f, FLT_MIN / 2.0f);
155 if (fpclassify (f) != FP_SUBNORMAL)
156 {
157 printf ("fpclassify (FLT_MIN-epsilon) failed: %d\n", fpclassify (f));
158 result = 1;
159 }
ddc3ed9d 160 v2.f = f = nextafterf (f, FLT_MIN);
cc46d0cf
UD
161 if (fpclassify (f) != FP_NORMAL)
162 {
244cd531 163 printf ("fpclassify (FLT_MIN-epsilon+epsilon) failed: %d\n",
cc46d0cf
UD
164 fpclassify (f));
165 result = 1;
166 }
167
ddc3ed9d
UD
168 if (v1.ieee.mantissa != v2.ieee.mantissa)
169 {
170 printf ("FLT_MIN: mantissa differs: %8x vs %8x\n",
171 v1.ieee.mantissa, v2.ieee.mantissa);
172 result = 1;
173 }
174 if (v1.ieee.exponent != v2.ieee.exponent)
175 {
176 printf ("FLT_MIN: exponent differs: %4x vs %4x\n",
177 v1.ieee.exponent, v2.ieee.exponent);
178 result = 1;
179 }
180 if (v1.ieee.negative != v2.ieee.negative)
181 {
182 printf ("FLT_MIN: negative differs: %d vs %d\n",
183 v1.ieee.negative, v2.ieee.negative);
184 result = 1;
185 }
186
187 v1.f = f = -FLT_MIN;
cc46d0cf
UD
188 if (fpclassify (f) != FP_NORMAL)
189 {
190 printf ("fpclassify (-FLT_MIN) failed: %d\n", fpclassify (f));
191 result = 1;
192 }
193 f = nextafterf (f, -FLT_MIN / 2.0f);
194 if (fpclassify (f) != FP_SUBNORMAL)
195 {
196 printf ("fpclassify (-FLT_MIN-epsilon) failed: %d\n", fpclassify (f));
197 result = 1;
198 }
ddc3ed9d 199 v2.f = f = nextafterf (f, -FLT_MIN);
cc46d0cf
UD
200 if (fpclassify (f) != FP_NORMAL)
201 {
244cd531 202 printf ("fpclassify (-FLT_MIN-epsilon+epsilon) failed: %d\n",
cc46d0cf
UD
203 fpclassify (f));
204 result = 1;
205 }
244cd531 206
ddc3ed9d
UD
207 if (v1.ieee.mantissa != v2.ieee.mantissa)
208 {
209 printf ("-FLT_MIN: mantissa differs: %8x vs %8x\n",
210 v1.ieee.mantissa, v2.ieee.mantissa);
211 result = 1;
212 }
213 if (v1.ieee.exponent != v2.ieee.exponent)
214 {
215 printf ("-FLT_MIN: exponent differs: %4x vs %4x\n",
216 v1.ieee.exponent, v2.ieee.exponent);
217 result = 1;
218 }
219 if (v1.ieee.negative != v2.ieee.negative)
220 {
221 printf ("-FLT_MIN: negative differs: %d vs %d\n",
222 v1.ieee.negative, v2.ieee.negative);
223 result = 1;
224 }
225
244cd531
UD
226 f = FLT_MAX;
227 if (fpclassify (f) != FP_NORMAL)
228 {
229 printf ("fpclassify (FLT_MAX) failed: %d\n", fpclassify (f));
230 result = 1;
231 }
232 f = nextafterf (f, INFINITY);
233 if (fpclassify (f) != FP_INFINITE)
234 {
235 printf ("fpclassify (FLT_MAX+epsilon) failed: %d\n", fpclassify (f));
236 result = 1;
237 }
238
239 f = -FLT_MAX;
240 if (fpclassify (f) != FP_NORMAL)
241 {
242 printf ("fpclassify (-FLT_MAX) failed: %d\n", fpclassify (f));
243 result = 1;
244 }
245 f = nextafterf (f, -INFINITY);
246 if (fpclassify (f) != FP_INFINITE)
247 {
248 printf ("fpclassify (-FLT_MAX-epsilon) failed: %d\n", fpclassify (f));
249 result = 1;
250 }
e3bb40e6
UD
251
252 v1.f = f = 0.0625;
253 f = nextafterf (f, 0.0);
254 v2.f = f = nextafterf (f, 1.0);
255
256 if (v1.ieee.mantissa != v2.ieee.mantissa)
257 {
258 printf ("0.0625f down: mantissa differs: %8x vs %8x\n",
259 v1.ieee.mantissa, v2.ieee.mantissa);
260 result = 1;
261 }
262 if (v1.ieee.exponent != v2.ieee.exponent)
263 {
264 printf ("0.0625f down: exponent differs: %4x vs %4x\n",
265 v1.ieee.exponent, v2.ieee.exponent);
266 result = 1;
267 }
268 if (v1.ieee.negative != v2.ieee.negative)
269 {
270 printf ("0.0625f down: negative differs: %d vs %d\n",
271 v1.ieee.negative, v2.ieee.negative);
272 result = 1;
273 }
274
275 v1.f = f = 0.0625;
276 f = nextafterf (f, 1.0);
277 v2.f = f = nextafterf (f, 0.0);
278
279 if (v1.ieee.mantissa != v2.ieee.mantissa)
280 {
281 printf ("0.0625f up: mantissa differs: %8x vs %8x\n",
282 v1.ieee.mantissa, v2.ieee.mantissa);
283 result = 1;
284 }
285 if (v1.ieee.exponent != v2.ieee.exponent)
286 {
287 printf ("0.0625f up: exponent differs: %4x vs %4x\n",
288 v1.ieee.exponent, v2.ieee.exponent);
289 result = 1;
290 }
291 if (v1.ieee.negative != v2.ieee.negative)
292 {
293 printf ("0.0625f up: negative differs: %d vs %d\n",
294 v1.ieee.negative, v2.ieee.negative);
295 result = 1;
296 }
297
298 v1.f = f = -0.0625;
299 f = nextafterf (f, 0.0);
300 v2.f = f = nextafterf (f, -1.0);
301
302 if (v1.ieee.mantissa != v2.ieee.mantissa)
303 {
304 printf ("-0.0625f up: mantissa differs: %8x vs %8x\n",
305 v1.ieee.mantissa, v2.ieee.mantissa);
306 result = 1;
307 }
308 if (v1.ieee.exponent != v2.ieee.exponent)
309 {
310 printf ("-0.0625f up: exponent differs: %4x vs %4x\n",
311 v1.ieee.exponent, v2.ieee.exponent);
312 result = 1;
313 }
314 if (v1.ieee.negative != v2.ieee.negative)
315 {
316 printf ("-0.0625f up: negative differs: %d vs %d\n",
317 v1.ieee.negative, v2.ieee.negative);
318 result = 1;
319 }
320
321 v1.f = f = -0.0625;
322 f = nextafterf (f, -1.0);
323 v2.f = f = nextafterf (f, 0.0);
324
325 if (v1.ieee.mantissa != v2.ieee.mantissa)
326 {
327 printf ("-0.0625f down: mantissa differs: %8x vs %8x\n",
328 v1.ieee.mantissa, v2.ieee.mantissa);
329 result = 1;
330 }
331 if (v1.ieee.exponent != v2.ieee.exponent)
332 {
333 printf ("-0.0625f down: exponent differs: %4x vs %4x\n",
334 v1.ieee.exponent, v2.ieee.exponent);
335 result = 1;
336 }
337 if (v1.ieee.negative != v2.ieee.negative)
338 {
339 printf ("-0.0625f down: negative differs: %d vs %d\n",
340 v1.ieee.negative, v2.ieee.negative);
341 result = 1;
342 }
343
344 v1.f = f = 0.0f;
345 f = nextafterf (f, 1.0);
346 v2.f = nextafterf (f, -1.0);
347
348 if (v1.ieee.mantissa != v2.ieee.mantissa)
349 {
350 printf ("0.0f up: mantissa differs: %8x vs %8x\n",
351 v1.ieee.mantissa, v2.ieee.mantissa);
352 result = 1;
353 }
354 if (v1.ieee.exponent != v2.ieee.exponent)
355 {
356 printf ("0.0f up: exponent differs: %4x vs %4x\n",
357 v1.ieee.exponent, v2.ieee.exponent);
358 result = 1;
359 }
360 if (0 != v2.ieee.negative)
361 {
362 printf ("0.0f up: negative differs: 0 vs %d\n",
363 v2.ieee.negative);
364 result = 1;
365 }
366
367 v1.f = f = 0.0f;
368 f = nextafterf (f, -1.0);
369 v2.f = nextafterf (f, 1.0);
370
371 if (v1.ieee.mantissa != v2.ieee.mantissa)
372 {
373 printf ("0.0f down: mantissa differs: %8x vs %8x\n",
374 v1.ieee.mantissa, v2.ieee.mantissa);
375 result = 1;
376 }
377 if (v1.ieee.exponent != v2.ieee.exponent)
378 {
379 printf ("0.0f down: exponent differs: %4x vs %4x\n",
380 v1.ieee.exponent, v2.ieee.exponent);
381 result = 1;
382 }
383 if (1 != v2.ieee.negative)
384 {
385 printf ("0.0f down: negative differs: 1 vs %d\n",
386 v2.ieee.negative);
387 result = 1;
388 }
636ccfc8
UD
389
390 if (nextafterf (0.0f, INFINITY) != nextafterf (0.0f, 1.0f)
391 || nextafterf (-0.0f, INFINITY) != nextafterf (-0.0f, 1.0f)
392 || nextafterf (0.0f, -INFINITY) != nextafterf (0.0f, -1.0f)
393 || nextafterf (-0.0f, -INFINITY) != nextafterf (-0.0f, -1.0f))
394 {
395 printf ("nextafterf (+-0, +-Inf) != nextafterf (+-0, +-1)\n");
396 result = 1;
397 }
398
399 if (nexttowardf (0.0f, INFINITY) != nexttowardf (0.0f, 1.0f)
400 || nexttowardf (-0.0f, INFINITY) != nexttowardf (-0.0f, 1.0f)
401 || nexttowardf (0.0f, -INFINITY) != nexttowardf (0.0f, -1.0f)
402 || nexttowardf (-0.0f, -INFINITY) != nexttowardf (-0.0f, -1.0f))
403 {
404 printf ("nexttowardf (+-0, +-Inf) != nexttowardf (+-0, +-1)\n");
405 result = 1;
406 }
cc46d0cf 407 }
e3bb40e6 408
cc46d0cf 409 {
ddc3ed9d
UD
410 union ieee754_double v1;
411 union ieee754_double v2;
cc46d0cf
UD
412 double d;
413
ddc3ed9d 414 v1.d = d = DBL_MIN;
cc46d0cf
UD
415 if (fpclassify (d) != FP_NORMAL)
416 {
417 printf ("fpclassify (DBL_MIN) failed: %d\n", fpclassify (d));
418 result = 1;
419 }
420 d = nextafter (d, DBL_MIN / 2.0);
421 if (fpclassify (d) != FP_SUBNORMAL)
422 {
423 printf ("fpclassify (DBL_MIN-epsilon) failed: %d\n", fpclassify (d));
424 result = 1;
425 }
ddc3ed9d 426 v2.d = d = nextafter (d, DBL_MIN);
cc46d0cf
UD
427 if (fpclassify (d) != FP_NORMAL)
428 {
429 printf ("fpclassify (DBL_MIN-epsilon+epsilon) failed: %d\n",
430 fpclassify (d));
431 result = 1;
432 }
433
ddc3ed9d
UD
434 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
435 {
436 printf ("DBL_MIN: mantissa0 differs: %8x vs %8x\n",
437 v1.ieee.mantissa0, v2.ieee.mantissa0);
438 result = 1;
439 }
440 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
441 {
442 printf ("DBL_MIN: mantissa1 differs: %8x vs %8x\n",
443 v1.ieee.mantissa1, v2.ieee.mantissa1);
444 result = 1;
445 }
446 if (v1.ieee.exponent != v2.ieee.exponent)
447 {
448 printf ("DBL_MIN: exponent differs: %4x vs %4x\n",
449 v1.ieee.exponent, v2.ieee.exponent);
450 result = 1;
451 }
452 if (v1.ieee.negative != v2.ieee.negative)
453 {
454 printf ("DBL_MIN: negative differs: %d vs %d\n",
455 v1.ieee.negative, v2.ieee.negative);
456 result = 1;
457 }
458
459 v1.d = d = -DBL_MIN;
cc46d0cf
UD
460 if (fpclassify (d) != FP_NORMAL)
461 {
462 printf ("fpclassify (-DBL_MIN) failed: %d\n", fpclassify (d));
463 result = 1;
464 }
465 d = nextafter (d, -DBL_MIN / 2.0);
466 if (fpclassify (d) != FP_SUBNORMAL)
467 {
468 printf ("fpclassify (-DBL_MIN-epsilon) failed: %d\n", fpclassify (d));
469 result = 1;
470 }
ddc3ed9d 471 v2.d = d = nextafter (d, -DBL_MIN);
cc46d0cf
UD
472 if (fpclassify (d) != FP_NORMAL)
473 {
474 printf ("fpclassify (-DBL_MIN-epsilon+epsilon) failed: %d\n",
475 fpclassify (d));
476 result = 1;
477 }
244cd531 478
ddc3ed9d
UD
479 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
480 {
481 printf ("-DBL_MIN: mantissa0 differs: %8x vs %8x\n",
482 v1.ieee.mantissa0, v2.ieee.mantissa0);
483 result = 1;
484 }
485 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
486 {
487 printf ("-DBL_MIN: mantissa1 differs: %8x vs %8x\n",
488 v1.ieee.mantissa1, v2.ieee.mantissa1);
489 result = 1;
490 }
491 if (v1.ieee.exponent != v2.ieee.exponent)
492 {
493 printf ("-DBL_MIN: exponent differs: %4x vs %4x\n",
494 v1.ieee.exponent, v2.ieee.exponent);
495 result = 1;
496 }
497 if (v1.ieee.negative != v2.ieee.negative)
498 {
499 printf ("-DBL_MIN: negative differs: %d vs %d\n",
500 v1.ieee.negative, v2.ieee.negative);
501 result = 1;
502 }
503
244cd531
UD
504 d = DBL_MAX;
505 if (fpclassify (d) != FP_NORMAL)
506 {
507 printf ("fpclassify (DBL_MAX) failed: %d\n", fpclassify (d));
508 result = 1;
509 }
510 d = nextafter (d, INFINITY);
511 if (fpclassify (d) != FP_INFINITE)
512 {
513 printf ("fpclassify (DBL_MAX+epsilon) failed: %d\n", fpclassify (d));
514 result = 1;
515 }
516
517 d = -DBL_MAX;
518 if (fpclassify (d) != FP_NORMAL)
519 {
520 printf ("fpclassify (-DBL_MAX) failed: %d\n", fpclassify (d));
521 result = 1;
522 }
523 d = nextafter (d, -INFINITY);
524 if (fpclassify (d) != FP_INFINITE)
525 {
526 printf ("fpclassify (-DBL_MAX-epsilon) failed: %d\n", fpclassify (d));
527 result = 1;
528 }
e3bb40e6
UD
529
530 v1.d = d = 0.0625;
531 d = nextafter (d, 0.0);
532 v2.d = d = nextafter (d, 1.0);
533
534 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
535 {
536 printf ("0.0625 down: mantissa0 differs: %8x vs %8x\n",
537 v1.ieee.mantissa0, v2.ieee.mantissa0);
538 result = 1;
539 }
540 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
541 {
542 printf ("0.0625 down: mantissa1 differs: %8x vs %8x\n",
543 v1.ieee.mantissa1, v2.ieee.mantissa1);
544 result = 1;
545 }
546 if (v1.ieee.exponent != v2.ieee.exponent)
547 {
548 printf ("0.0625 down: exponent differs: %4x vs %4x\n",
549 v1.ieee.exponent, v2.ieee.exponent);
550 result = 1;
551 }
552 if (v1.ieee.negative != v2.ieee.negative)
553 {
554 printf ("0.0625 down: negative differs: %d vs %d\n",
555 v1.ieee.negative, v2.ieee.negative);
556 result = 1;
557 }
558
559 v1.d = d = 0.0625;
560 d = nextafter (d, 1.0);
561 v2.d = d = nextafter (d, 0.0);
562
563 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
564 {
565 printf ("0.0625 up: mantissa0 differs: %8x vs %8x\n",
566 v1.ieee.mantissa0, v2.ieee.mantissa0);
567 result = 1;
568 }
569 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
570 {
571 printf ("0.0625 up: mantissa1 differs: %8x vs %8x\n",
572 v1.ieee.mantissa1, v2.ieee.mantissa1);
573 result = 1;
574 }
575 if (v1.ieee.exponent != v2.ieee.exponent)
576 {
577 printf ("0.0625 up: exponent differs: %4x vs %4x\n",
578 v1.ieee.exponent, v2.ieee.exponent);
579 result = 1;
580 }
581 if (v1.ieee.negative != v2.ieee.negative)
582 {
583 printf ("0.0625 up: negative differs: %d vs %d\n",
584 v1.ieee.negative, v2.ieee.negative);
585 result = 1;
586 }
587
588 v1.d = d = -0.0625;
589 d = nextafter (d, 0.0);
590 v2.d = d = nextafter (d, -1.0);
591
592 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
593 {
594 printf ("-0.0625 up: mantissa0 differs: %8x vs %8x\n",
595 v1.ieee.mantissa0, v2.ieee.mantissa0);
596 result = 1;
597 }
598 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
599 {
600 printf ("-0.0625 up: mantissa1 differs: %8x vs %8x\n",
601 v1.ieee.mantissa1, v2.ieee.mantissa1);
602 result = 1;
603 }
604 if (v1.ieee.exponent != v2.ieee.exponent)
605 {
606 printf ("-0.0625 up: exponent differs: %4x vs %4x\n",
607 v1.ieee.exponent, v2.ieee.exponent);
608 result = 1;
609 }
610 if (v1.ieee.negative != v2.ieee.negative)
611 {
612 printf ("-0.0625 up: negative differs: %d vs %d\n",
613 v1.ieee.negative, v2.ieee.negative);
614 result = 1;
615 }
616
617 v1.d = d = -0.0625;
618 d = nextafter (d, -1.0);
619 v2.d = d = nextafter (d, 0.0);
620
621 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
622 {
623 printf ("-0.0625 down: mantissa0 differs: %8x vs %8x\n",
624 v1.ieee.mantissa0, v2.ieee.mantissa0);
625 result = 1;
626 }
627 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
628 {
629 printf ("-0.0625 down: mantissa1 differs: %8x vs %8x\n",
630 v1.ieee.mantissa1, v2.ieee.mantissa1);
631 result = 1;
632 }
633 if (v1.ieee.exponent != v2.ieee.exponent)
634 {
635 printf ("-0.0625 down: exponent differs: %4x vs %4x\n",
636 v1.ieee.exponent, v2.ieee.exponent);
637 result = 1;
638 }
639 if (v1.ieee.negative != v2.ieee.negative)
640 {
641 printf ("-0.0625 down: negative differs: %d vs %d\n",
642 v1.ieee.negative, v2.ieee.negative);
643 result = 1;
644 }
645
646 v1.d = d = 0.0;
647 d = nextafter (d, 1.0);
648 v2.d = nextafter (d, -1.0);
649
650 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
651 {
652 printf ("0.0 up: mantissa0 differs: %8x vs %8x\n",
653 v1.ieee.mantissa0, v2.ieee.mantissa0);
654 result = 1;
655 }
656 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
657 {
658 printf ("0.0 up: mantissa1 differs: %8x vs %8x\n",
659 v1.ieee.mantissa1, v2.ieee.mantissa1);
660 result = 1;
661 }
662 if (v1.ieee.exponent != v2.ieee.exponent)
663 {
664 printf ("0.0 up: exponent differs: %4x vs %4x\n",
665 v1.ieee.exponent, v2.ieee.exponent);
666 result = 1;
667 }
668 if (0 != v2.ieee.negative)
669 {
670 printf ("0.0 up: negative differs: 0 vs %d\n",
671 v2.ieee.negative);
672 result = 1;
673 }
674
675 v1.d = d = 0.0;
676 d = nextafter (d, -1.0);
677 v2.d = nextafter (d, 1.0);
678
679 if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
680 {
681 printf ("0.0 down: mantissa0 differs: %8x vs %8x\n",
682 v1.ieee.mantissa0, v2.ieee.mantissa0);
683 result = 1;
684 }
685 if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
686 {
687 printf ("0.0 down: mantissa1 differs: %8x vs %8x\n",
688 v1.ieee.mantissa1, v2.ieee.mantissa1);
689 result = 1;
690 }
691 if (v1.ieee.exponent != v2.ieee.exponent)
692 {
693 printf ("0.0 down: exponent differs: %4x vs %4x\n",
694 v1.ieee.exponent, v2.ieee.exponent);
695 result = 1;
696 }
697 if (1 != v2.ieee.negative)
698 {
699 printf ("0.0 down: negative differs: 1 vs %d\n",
700 v2.ieee.negative);
701 result = 1;
702 }
636ccfc8
UD
703
704 if (nextafter (0.0, INFINITY) != nextafter (0.0, 1.0)
705 || nextafter (-0.0, INFINITY) != nextafter (-0.0, 1.0)
706 || nextafter (0.0, -INFINITY) != nextafter (0.0, -1.0)
707 || nextafter (-0.0, -INFINITY) != nextafter (-0.0, -1.0))
708 {
709 printf ("nextafter (+-0, +-Inf) != nextafter (+-0, +-1)\n");
710 result = 1;
711 }
712
713 if (nexttoward (0.0, INFINITY) != nexttoward (0.0, 1.0)
714 || nexttoward (-0.0, INFINITY) != nexttoward (-0.0, 1.0)
715 || nexttoward (0.0, -INFINITY) != nexttoward (0.0, -1.0)
716 || nexttoward (-0.0, -INFINITY) != nexttoward (-0.0, -1.0))
717 {
718 printf ("nexttoward (+-0, +-Inf) != nexttoward (+-0, +-1)\n");
719 result = 1;
720 }
cc46d0cf 721 }
e3bb40e6 722
5e4e1063 723#if LDBL_MANT_DIG > DBL_MANT_DIG
cc46d0cf 724 {
1b6adf88 725 long double v1, v2;
cc46d0cf 726
1b6adf88
AM
727 v1 = LDBL_MIN;
728 if (fpclassify (v1) != FP_NORMAL)
cc46d0cf 729 {
1b6adf88
AM
730 printf ("fpclassify (LDBL_MIN) failed: %d (%La)\n",
731 fpclassify (v1), v1);
cc46d0cf
UD
732 result = 1;
733 }
1b6adf88
AM
734 v2 = nextafterl (v1, LDBL_MIN / 2.0);
735 if (fpclassify (v2) != FP_SUBNORMAL)
cc46d0cf
UD
736 {
737 printf ("fpclassify (LDBL_MIN-epsilon) failed: %d (%La)\n",
1b6adf88 738 fpclassify (v2), v2);
cc46d0cf
UD
739 result = 1;
740 }
1b6adf88
AM
741 v2 = nextafterl (v2, LDBL_MIN);
742 if (fpclassify (v2) != FP_NORMAL)
cc46d0cf
UD
743 {
744 printf ("fpclassify (LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
1b6adf88 745 fpclassify (v2), v2);
cc46d0cf
UD
746 result = 1;
747 }
748
1b6adf88 749 if (v1 != v2)
ddc3ed9d 750 {
1b6adf88 751 printf ("LDBL_MIN-epsilon+epsilon != LDBL_MIN: %La vs %La\n", v2, v1);
ddc3ed9d
UD
752 result = 1;
753 }
754
1b6adf88
AM
755 v1 = -LDBL_MIN;
756 if (fpclassify (v1) != FP_NORMAL)
cc46d0cf 757 {
1b6adf88
AM
758 printf ("fpclassify (-LDBL_MIN) failed: %d (%La)\n",
759 fpclassify (v1), v1);
cc46d0cf
UD
760 result = 1;
761 }
1b6adf88
AM
762 v2 = nextafterl (v1, -LDBL_MIN / 2.0);
763 if (fpclassify (v2) != FP_SUBNORMAL)
cc46d0cf
UD
764 {
765 printf ("fpclassify (-LDBL_MIN-epsilon) failed: %d (%La)\n",
1b6adf88 766 fpclassify (v2), v2);
cc46d0cf
UD
767 result = 1;
768 }
1b6adf88
AM
769 v2 = nextafterl (v2, -LDBL_MIN);
770 if (fpclassify (v2) != FP_NORMAL)
cc46d0cf
UD
771 {
772 printf ("fpclassify (-LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
1b6adf88 773 fpclassify (v2), v2);
cc46d0cf
UD
774 result = 1;
775 }
244cd531 776
1b6adf88 777 if (v1 != v2)
ddc3ed9d 778 {
1b6adf88 779 printf ("-LDBL_MIN-epsilon+epsilon != -LDBL_MIN: %La vs %La\n", v2, v1);
ddc3ed9d
UD
780 result = 1;
781 }
782
1b6adf88
AM
783 v1 = LDBL_MAX;
784 if (fpclassify (v1) != FP_NORMAL)
244cd531 785 {
1b6adf88
AM
786 printf ("fpclassify (LDBL_MAX) failed: %d (%La)\n",
787 fpclassify (v1), v1);
244cd531
UD
788 result = 1;
789 }
1b6adf88
AM
790 v2 = nextafterl (v1, INFINITY);
791 if (fpclassify (v2) != FP_INFINITE)
244cd531 792 {
1b6adf88
AM
793 printf ("fpclassify (LDBL_MAX+epsilon) failed: %d (%La)\n",
794 fpclassify (v2), v2);
244cd531
UD
795 result = 1;
796 }
797
1b6adf88
AM
798 v1 = -LDBL_MAX;
799 if (fpclassify (v1) != FP_NORMAL)
244cd531 800 {
1b6adf88
AM
801 printf ("fpclassify (-LDBL_MAX) failed: %d (%La)\n",
802 fpclassify (v1), v1);
244cd531
UD
803 result = 1;
804 }
1b6adf88
AM
805 v2 = nextafterl (v1, -INFINITY);
806 if (fpclassify (v2) != FP_INFINITE)
244cd531 807 {
1b6adf88
AM
808 printf ("fpclassify (-LDBL_MAX-epsilon) failed: %d (%La)\n",
809 fpclassify (v2), v2);
244cd531
UD
810 result = 1;
811 }
e3bb40e6 812
1b6adf88
AM
813 v1 = 0.0625;
814 v2 = nextafterl (v1, 0.0);
815 v2 = nextafterl (v2, 1.0);
e3bb40e6 816
1b6adf88 817 if (v1 != v2)
e3bb40e6 818 {
1b6adf88 819 printf ("0.0625L-epsilon+epsilon != 0.0625L: %La vs %La\n", v2, v1);
e3bb40e6
UD
820 result = 1;
821 }
822
1b6adf88
AM
823 v1 = 0.0625;
824 v2 = nextafterl (v1, 1.0);
825 v2 = nextafterl (v2, 0.0);
e3bb40e6 826
1b6adf88 827 if (v1 != v2)
e3bb40e6 828 {
1b6adf88 829 printf ("0.0625L+epsilon-epsilon != 0.0625L: %La vs %La\n", v2, v1);
e3bb40e6
UD
830 result = 1;
831 }
832
1b6adf88
AM
833 v1 = -0.0625;
834 v2 = nextafterl (v1, 0.0);
835 v2 = nextafterl (v2, -1.0);
e3bb40e6 836
1b6adf88 837 if (v1 != v2)
e3bb40e6 838 {
1b6adf88 839 printf ("-0.0625L+epsilon-epsilon != -0.0625L: %La vs %La\n", v2, v1);
e3bb40e6
UD
840 result = 1;
841 }
842
1b6adf88
AM
843 v1 = -0.0625;
844 v2 = nextafterl (v1, -1.0);
845 v2 = nextafterl (v2, 0.0);
e3bb40e6 846
1b6adf88 847 if (v1 != v2)
e3bb40e6 848 {
1b6adf88 849 printf ("-0.0625L-epsilon+epsilon != -0.0625L: %La vs %La\n", v2, v1);
e3bb40e6
UD
850 result = 1;
851 }
852
1b6adf88
AM
853 v1 = 0.0;
854 v2 = nextafterl (v1, 1.0);
855 v2 = nextafterl (v2, -1.0);
e3bb40e6 856
1b6adf88 857 if (v1 != v2)
e3bb40e6 858 {
1b6adf88 859 printf ("0.0+epsilon-epsilon != 0.0L: %La vs %La\n", v2, v1);
e3bb40e6
UD
860 result = 1;
861 }
1b6adf88 862 if (signbit (v2))
e3bb40e6 863 {
1b6adf88 864 printf ("0.0+epsilon-epsilon is negative\n");
e3bb40e6
UD
865 result = 1;
866 }
867
1b6adf88
AM
868 v1 = 0.0;
869 v2 = nextafterl (v1, -1.0);
870 v2 = nextafterl (v2, 1.0);
e3bb40e6 871
1b6adf88 872 if (v1 != v2)
e3bb40e6 873 {
1b6adf88 874 printf ("0.0-epsilon+epsilon != 0.0L: %La vs %La\n", v2, v1);
e3bb40e6
UD
875 result = 1;
876 }
1b6adf88 877 if (!signbit (v2))
e3bb40e6 878 {
1b6adf88 879 printf ("0.0-epsilon+epsilon is positive\n");
e3bb40e6
UD
880 result = 1;
881 }
636ccfc8
UD
882
883 if (nextafterl (0.0, INFINITY) != nextafterl (0.0, 1.0)
884 || nextafterl (-0.0, INFINITY) != nextafterl (-0.0, 1.0)
885 || nextafterl (0.0, -INFINITY) != nextafterl (0.0, -1.0)
886 || nextafterl (-0.0, -INFINITY) != nextafterl (-0.0, -1.0))
887 {
888 printf ("nextafterl (+-0, +-Inf) != nextafterl (+-0, +-1)\n");
889 result = 1;
890 }
891
892 if (nexttowardl (0.0L, INFINITY) != nexttowardl (0.0L, 1.0L)
893 || nexttowardl (-0.0L, INFINITY) != nexttowardl (-0.0L, 1.0L)
894 || nexttowardl (0.0L, -INFINITY) != nexttowardl (0.0L, -1.0L)
895 || nexttowardl (-0.0L, -INFINITY) != nexttowardl (-0.0L, -1.0L))
896 {
897 printf ("nexttowardl (+-0, +-Inf) != nexttowardl (+-0, +-1)\n");
898 result = 1;
899 }
cc46d0cf 900 }
0df757b1
UD
901#endif
902
903 if (! isnormal (FLT_MIN))
904 {
905 puts ("isnormal (FLT_MIN) failed");
906 result = 1;
907 }
908 if (! isnormal (DBL_MIN))
909 {
910 puts ("isnormal (DBL_MIN) failed");
911 result = 1;
912 }
5e4e1063 913#if LDBL_MANT_DIG > DBL_MANT_DIG
0df757b1
UD
914 if (! isnormal (LDBL_MIN))
915 {
916 puts ("isnormal (LDBL_MIN) failed");
917 result = 1;
918 }
919#endif
920
64487e12 921#if defined (__i386__) || defined (__x86_64__)
fd8f4d46
UD
922 /* This is a test for the strange long doubles in x86 FPUs. */
923 {
924 union
925 {
926 char b[10];
927 long double d;
928 } u =
929 { .b = { 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0 } };
930
931 if (fpclassify (u.d) != FP_NORMAL)
932 {
933 printf ("fpclassify (0x00008000000000000000) failed: %d (%Lg)\n",
934 fpclassify (u.d), u.d);
935 result = 1;
936 }
937 }
6d0c4914 938
67e971f1 939 /* Special qNaNs in x86 long double. Test for scalbl. */
6d0c4914
UD
940 {
941 union
942 {
943 char b[10];
944 long double d;
945 } u =
946 { .b = { 0, 1, 0, 0, 0, 0, 0, 0xc0, 0xff, 0x7f } };
947 long double r;
948
949 r = scalbl (u.d, 0.0);
950 if (!isnan (r))
951 {
67e971f1 952 puts ("scalbl (qNaN, 0) does not return NaN");
6d0c4914
UD
953 result = 1;
954 }
955 else if (memcmp (&r, &u.d, sizeof (double)) != 0)
956 {
67e971f1 957 puts ("scalbl (qNaN, 0) does not return the same NaN");
6d0c4914
UD
958 result = 1;
959 }
960 }
fd8f4d46
UD
961#endif
962
5e4e1063 963#if LDBL_MANT_DIG > DBL_MANT_DIG
b210e4cc
UD
964 {
965 long double r;
966
967 feclearexcept (FE_ALL_EXCEPT);
968 r = scalbl (LDBL_MIN, 2147483647);
969 if (! isinf (r))
970 {
971 puts ("scalbl (LDBL_MIN, 2147483647) does not return Inf");
972 result = 1;
973 }
974 else if (signbit (r) != 0)
975 {
976 puts ("scalbl (LDBL_MIN, 2147483647) returns -Inf");
977 result = 1;
978 }
f6dcefbe 979# ifdef FE_UNDERFLOW
b210e4cc
UD
980 else if (fetestexcept (FE_UNDERFLOW))
981 {
e015e27b 982 puts ("scalbl (LDBL_MIN, 2147483647) raises underflow exception");
b210e4cc
UD
983 result = 1;
984 }
f6dcefbe 985# endif
b210e4cc
UD
986
987 feclearexcept (FE_ALL_EXCEPT);
988 r = scalbl (LDBL_MAX, -2147483647);
989 if (r != 0.0)
990 {
991 puts ("scalbl (LDBL_MAX, -2147483647) does not return 0");
992 result = 1;
993 }
994 else if (signbit (r) != 0)
995 {
996 puts ("scalbl (LDBL_MAX, -2147483647) returns -Inf");
997 result = 1;
998 }
f6dcefbe 999# ifdef FE_OVERFLOW
b210e4cc
UD
1000 else if (fetestexcept (FE_OVERFLOW))
1001 {
e015e27b 1002 puts ("scalbl (LDBL_MAX, -2147483647) raises overflow exception");
b210e4cc
UD
1003 result = 1;
1004 }
f6dcefbe 1005# endif
b210e4cc
UD
1006 }
1007#endif
1008
88764ae2
UD
1009 /* The tests here are very similar to tests earlier in this file,
1010 the important difference is just that there are no intervening
1011 union variables that cause some GCC versions to hide possible
1012 bugs in nextafter* implementation. */
1013 if (nextafterf (nextafterf (FLT_MIN, FLT_MIN / 2.0), FLT_MIN) != FLT_MIN)
1014 {
1015 puts ("nextafterf FLT_MIN test failed");
1016 result = 1;
1017 }
1018 if (nextafterf (nextafterf (-FLT_MIN, -FLT_MIN / 2.0), -FLT_MIN)
1019 != -FLT_MIN)
1020 {
1021 puts ("nextafterf -FLT_MIN test failed");
1022 result = 1;
1023 }
1024 if (nextafter (nextafter (DBL_MIN, DBL_MIN / 2.0), DBL_MIN) != DBL_MIN)
1025 {
1026 puts ("nextafter DBL_MIN test failed");
1027 result = 1;
1028 }
1029 if (nextafter (nextafter (-DBL_MIN, -DBL_MIN / 2.0), -DBL_MIN) != -DBL_MIN)
1030 {
1031 puts ("nextafter -DBL_MIN test failed");
1032 result = 1;
1033 }
5e4e1063 1034#if LDBL_MANT_DIG > DBL_MANT_DIG
88764ae2
UD
1035 if (nextafterl (nextafterl (LDBL_MIN, LDBL_MIN / 2.0), LDBL_MIN)
1036 != LDBL_MIN)
1037 {
1038 puts ("nextafterl LDBL_MIN test failed");
1039 result = 1;
1040 }
1041 if (nextafterl (nextafterl (-LDBL_MIN, -LDBL_MIN / 2.0), -LDBL_MIN)
1042 != -LDBL_MIN)
1043 {
1044 puts ("nextafterl -LDBL_MIN test failed");
1045 result = 1;
1046 }
1047#endif
1048
d68f5d2c
JJ
1049 volatile float f1 = FLT_MAX;
1050 volatile float f2 = FLT_MAX / 2;
1051 (void) &f1;
1052 (void) &f2;
1053 feclearexcept (FE_ALL_EXCEPT);
1054 f2 += f1;
0af797de 1055#if defined(FE_OVERFLOW) && defined(FE_INEXACT)
d68f5d2c 1056 int fe = fetestexcept (FE_ALL_EXCEPT);
94f2c076 1057 if (EXCEPTION_TESTS (float) && fe != (FE_OVERFLOW | FE_INEXACT))
d68f5d2c
JJ
1058 {
1059 printf ("float overflow test failed: %x\n", fe);
1060 result = 1;
1061 }
0af797de 1062#endif
d68f5d2c
JJ
1063
1064 volatile double d1 = DBL_MAX;
1065 volatile double d2 = DBL_MAX / 2;
1066 (void) &d1;
1067 (void) &d2;
1068 feclearexcept (FE_ALL_EXCEPT);
1069 d2 += d1;
0af797de 1070#if defined(FE_OVERFLOW) && defined(FE_INEXACT)
d68f5d2c 1071 fe = fetestexcept (FE_ALL_EXCEPT);
94f2c076 1072 if (EXCEPTION_TESTS (double) && fe != (FE_OVERFLOW | FE_INEXACT))
d68f5d2c
JJ
1073 {
1074 printf ("double overflow test failed: %x\n", fe);
1075 result = 1;
1076 }
0af797de 1077#endif
d68f5d2c 1078
5e4e1063 1079#if LDBL_MANT_DIG > DBL_MANT_DIG
d68f5d2c
JJ
1080 volatile long double ld1 = LDBL_MAX;
1081 volatile long double ld2 = LDBL_MAX / 2;
1082 (void) &ld1;
1083 (void) &ld2;
1084 feclearexcept (FE_ALL_EXCEPT);
1085 ld2 += ld1;
0af797de 1086# if defined(FE_OVERFLOW) && defined(FE_INEXACT)
d68f5d2c 1087 fe = fetestexcept (FE_ALL_EXCEPT);
94f2c076 1088 if (EXCEPTION_TESTS (long double) && fe != (FE_OVERFLOW | FE_INEXACT))
d68f5d2c
JJ
1089 {
1090 printf ("long double overflow test failed: %x\n", fe);
1091 result = 1;
1092 }
0af797de 1093# endif
d68f5d2c 1094
5e4e1063 1095# if LDBL_MANT_DIG == 113
d68f5d2c
JJ
1096 volatile long double ld3 = 0x1.0000000000010000000100000001p+1;
1097 volatile long double ld4 = 0x1.0000000000000000000000000001p+1;
1098 (void) &ld3;
1099 (void) &ld4;
1100 ld3 -= ld4;
1101 if (ld3 != 0x1.0p-47)
1102 {
1103 printf ("long double subtraction test failed %.28La\n", ld3);
1104 result = 1;
1105 }
5e4e1063 1106# endif
d68f5d2c 1107
43b76828
UD
1108/* Skip testing IBM long double format, for 2 reasons:
1109 1) it only supports FE_TONEAREST
1110 2) nextafter (0.0, 1.0) == nextafterl (0.0L, 1.0L), so
1111 nextafter (0.0, 1.0) / 16.0L will be 0.0L. */
5e4e1063 1112# if LDBL_MANT_DIG >= DBL_MANT_DIG + 4 && LDBL_MANT_DIG != 106
37002cbc
JJ
1113 int oldmode = fegetround ();
1114 int j;
1115 for (j = 0; j < 4; j++)
002f0b0b 1116 {
37002cbc
JJ
1117 int mode;
1118 int i;
1119 int k = 0;
1120 const char *mstr;
1121 switch (j)
002f0b0b 1122 {
37002cbc
JJ
1123#ifdef FE_TONEAREST
1124 case 0:
1125 mode = FE_TONEAREST;
1126 mstr = "nearest";
1127 k = 8;
1128 break;
1129#endif
1130#ifdef FE_DOWNWARD
1131 case 1:
1132 mode = FE_DOWNWARD;
1133 mstr = "-inf";
1134 break;
1135#endif
1136#ifdef FE_UPWARD
1137 case 2:
1138 mode = FE_UPWARD;
1139 mstr = "+inf";
1140 k = 15;
1141 break;
1142#endif
1143#ifdef FE_TOWARDZERO
1144 case 3:
1145 mode = FE_TOWARDZERO;
1146 mstr = "0";
1147 break;
1148#endif
1149 default:
1150 continue;
1151 }
1152
1153 volatile long double ld5 = nextafter (0.0, 1.0) / 16.0L;
1154 volatile double d5;
1155 (void) &ld5;
1156 for (i = 0; i <= 32; i++)
1157 {
1158 if (fesetround (mode))
1159 {
1160 printf ("failed to set rounding mode to %s\n", mstr);
b8c792af
JM
1161 if (ROUNDING_TESTS (long double, mode)
1162 && ROUNDING_TESTS (double, mode))
1163 result = 1;
1164 else
1165 puts ("ignoring this failure");
37002cbc
JJ
1166 break;
1167 }
1168 d5 = ld5 * i;
1169 (void) &d5;
1170 fesetround (oldmode);
1171 if (d5 != ((j == 0 && i == 8) ? 0 : (i + k) / 16)
1172 * nextafter (0.0, 1.0))
1173 {
1174 printf ("%La incorrectly rounded to %s as %a\n",
1175 ld5 * i, mstr, d5);
1a846317
JM
1176 if (ROUNDING_TESTS (long double, mode)
1177 && ROUNDING_TESTS (double, mode))
1178 result = 1;
1179 else
1180 puts ("ignoring this failure");
37002cbc 1181 }
002f0b0b 1182 }
37002cbc
JJ
1183 }
1184
f6dcefbe 1185# ifdef FE_UPWARD
37002cbc
JJ
1186 volatile long double ld7 = nextafterl (0.0L, 1.0L);
1187 volatile double d7;
1188 (void) &ld7;
1189 fesetround (FE_UPWARD);
1190 d7 = ld7;
1191 (void) &d7;
1192 fesetround (oldmode);
1193
1194 if (d7 != nextafter (0.0, 1.0))
1195 {
1196 printf ("%La incorrectly rounded upward to %a\n", ld7, d7);
1a846317
JM
1197 if (ROUNDING_TESTS (long double, FE_UPWARD)
1198 && ROUNDING_TESTS (double, FE_UPWARD))
1199 result = 1;
1200 else
1201 puts ("ignoring this failure");
37002cbc 1202 }
f6dcefbe 1203# endif
5e4e1063 1204# endif
002f0b0b
JJ
1205#endif
1206
9861985f
UD
1207 return result;
1208}
29955b5d
AS
1209
1210#define TEST_FUNCTION do_test ()
1211#include "../test-skeleton.c"