]> git.ipfire.org Git - thirdparty/glibc.git/blob - math/libm-test.inc
Fix atan2 spurious exceptions (bug 11451).
[thirdparty/glibc.git] / math / libm-test.inc
1 /* Copyright (C) 1997-2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Andreas Jaeger <aj@suse.de>, 1997.
4
5 The GNU C Library is free software; you can redistribute it and/or
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.
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
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
18
19 /* Part of testsuite for libm.
20
21 This file is processed by a perl script. The resulting file has to
22 be included by a master file that defines:
23
24 Macros:
25 FUNC(function): converts general function name (like cos) to
26 name with correct suffix (e.g. cosl or cosf)
27 MATHCONST(x): like FUNC but for constants (e.g convert 0.0 to 0.0L)
28 FLOAT: floating point type to test
29 - TEST_MSG: informal message to be displayed
30 CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
31 chooses one of the parameters as delta for testing
32 equality
33 PRINTF_EXPR Floating point conversion specification to print a variable
34 of type FLOAT with printf. PRINTF_EXPR just contains
35 the specifier, not the percent and width arguments,
36 e.g. "f".
37 PRINTF_XEXPR Like PRINTF_EXPR, but print in hexadecimal format.
38 PRINTF_NEXPR Like PRINTF_EXPR, but print nice. */
39
40 /* This testsuite has currently tests for:
41 acos, acosh, asin, asinh, atan, atan2, atanh,
42 cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
43 fabs, fdim, floor, fma, fmax, fmin, fmod, fpclassify,
44 frexp, gamma, hypot,
45 ilogb, isfinite, isinf, isnan, isnormal,
46 isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
47 j0, j1, jn,
48 ldexp, lgamma, log, log10, log1p, log2, logb,
49 modf, nearbyint, nextafter,
50 pow, remainder, remquo, rint, lrint, llrint,
51 round, lround, llround,
52 scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
53 y0, y1, yn, significand
54
55 and for the following complex math functions:
56 cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
57 ccos, ccosh, cexp, clog, cpow, cproj, csin, csinh, csqrt, ctan, ctanh.
58
59 At the moment the following functions aren't tested:
60 drem, nan
61
62 Parameter handling is primitive in the moment:
63 --verbose=[0..3] for different levels of output:
64 0: only error count
65 1: basic report on failed tests (default)
66 2: full report on all tests
67 -v for full output (equals --verbose=3)
68 -u for generation of an ULPs file
69 */
70
71 /* "Philosophy":
72
73 This suite tests some aspects of the correct implementation of
74 mathematical functions in libm. Some simple, specific parameters
75 are tested for correctness but there's no exhaustive
76 testing. Handling of specific inputs (e.g. infinity, not-a-number)
77 is also tested. Correct handling of exceptions is checked
78 against. These implemented tests should check all cases that are
79 specified in ISO C99.
80
81 Exception testing: At the moment only divide-by-zero and invalid
82 exceptions are tested. Overflow/underflow and inexact exceptions
83 aren't checked at the moment.
84
85 NaN values: There exist signalling and quiet NaNs. This implementation
86 only uses quiet NaN as parameter but does not differenciate
87 between the two kinds of NaNs as result.
88
89 Inline functions: Inlining functions should give an improvement in
90 speed - but not in precission. The inlined functions return
91 reasonable values for a reasonable range of input values. The
92 result is not necessarily correct for all values and exceptions are
93 not correctly raised in all cases. Problematic input and return
94 values are infinity, not-a-number and minus zero. This suite
95 therefore does not check these specific inputs and the exception
96 handling for inlined mathematical functions - just the "reasonable"
97 values are checked.
98
99 Beware: The tests might fail for any of the following reasons:
100 - Tests are wrong
101 - Functions are wrong
102 - Floating Point Unit not working properly
103 - Compiler has errors
104
105 With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
106
107
108 To Do: All parameter should be numbers that can be represented as
109 exact floating point values. Currently some values cannot be
110 represented exactly and therefore the result is not the expected
111 result. For this we will use 36 digits so that numbers can be
112 represented exactly. */
113
114 #ifndef _GNU_SOURCE
115 # define _GNU_SOURCE
116 #endif
117
118 #include "libm-test-ulps.h"
119 #include <complex.h>
120 #include <math.h>
121 #include <float.h>
122 #include <fenv.h>
123 #include <limits.h>
124
125 #include <errno.h>
126 #include <stdlib.h>
127 #include <stdio.h>
128 #include <string.h>
129 #include <argp.h>
130
131 /* Possible exceptions */
132 #define NO_EXCEPTION 0x0
133 #define INVALID_EXCEPTION 0x1
134 #define DIVIDE_BY_ZERO_EXCEPTION 0x2
135 /* The next flags signals that those exceptions are allowed but not required. */
136 #define INVALID_EXCEPTION_OK 0x4
137 #define DIVIDE_BY_ZERO_EXCEPTION_OK 0x8
138 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
139 /* Some special test flags, passed togther with exceptions. */
140 #define IGNORE_ZERO_INF_SIGN 0x10
141
142 /* Various constants (we must supply them precalculated for accuracy). */
143 #define M_PI_6l .52359877559829887307710723054658383L
144 #define M_E2l 7.389056098930650227230427460575008L
145 #define M_E3l 20.085536923187667740928529654581719L
146 #define M_2_SQRT_PIl 3.5449077018110320545963349666822903L /* 2 sqrt (M_PIl) */
147 #define M_SQRT_PIl 1.7724538509055160272981674833411451L /* sqrt (M_PIl) */
148 #define M_LOG_SQRT_PIl 0.57236494292470008707171367567652933L /* log(sqrt(M_PIl)) */
149 #define M_LOG_2_SQRT_PIl 1.265512123484645396488945797134706L /* log(2*sqrt(M_PIl)) */
150 #define M_PI_34l (M_PIl - M_PI_4l) /* 3*pi/4 */
151 #define M_PI_34_LOG10El (M_PIl - M_PI_4l) * M_LOG10El
152 #define M_PI2_LOG10El M_PI_2l * M_LOG10El
153 #define M_PI4_LOG10El M_PI_4l * M_LOG10El
154 #define M_PI_LOG10El M_PIl * M_LOG10El
155 #define M_SQRT_2_2 0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
156
157 static FILE *ulps_file; /* File to document difference. */
158 static int output_ulps; /* Should ulps printed? */
159
160 static int noErrors; /* number of errors */
161 static int noTests; /* number of tests (without testing exceptions) */
162 static int noExcTests; /* number of tests for exception flags */
163 static int noXFails; /* number of expected failures. */
164 static int noXPasses; /* number of unexpected passes. */
165
166 static int verbose;
167 static int output_max_error; /* Should the maximal errors printed? */
168 static int output_points; /* Should the single function results printed? */
169 static int ignore_max_ulp; /* Should we ignore max_ulp? */
170
171 static FLOAT minus_zero, plus_zero;
172 static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
173
174 static FLOAT max_error, real_max_error, imag_max_error;
175
176
177 #define BUILD_COMPLEX(real, imag) \
178 ({ __complex__ FLOAT __retval; \
179 __real__ __retval = (real); \
180 __imag__ __retval = (imag); \
181 __retval; })
182
183 #define BUILD_COMPLEX_INT(real, imag) \
184 ({ __complex__ int __retval; \
185 __real__ __retval = (real); \
186 __imag__ __retval = (imag); \
187 __retval; })
188
189
190 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
191 (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
192
193 static void
194 init_max_error (void)
195 {
196 max_error = 0;
197 real_max_error = 0;
198 imag_max_error = 0;
199 feclearexcept (FE_ALL_EXCEPT);
200 }
201
202 static void
203 set_max_error (FLOAT current, FLOAT *curr_max_error)
204 {
205 if (current > *curr_max_error)
206 *curr_max_error = current;
207 }
208
209
210 /* Should the message print to screen? This depends on the verbose flag,
211 and the test status. */
212 static int
213 print_screen (int ok, int xfail)
214 {
215 if (output_points
216 && (verbose > 1
217 || (verbose == 1 && ok == xfail)))
218 return 1;
219 return 0;
220 }
221
222
223 /* Should the message print to screen? This depends on the verbose flag,
224 and the test status. */
225 static int
226 print_screen_max_error (int ok, int xfail)
227 {
228 if (output_max_error
229 && (verbose > 1
230 || ((verbose == 1) && (ok == xfail))))
231 return 1;
232 return 0;
233 }
234
235 /* Update statistic counters. */
236 static void
237 update_stats (int ok, int xfail)
238 {
239 ++noTests;
240 if (ok && xfail)
241 ++noXPasses;
242 else if (!ok && xfail)
243 ++noXFails;
244 else if (!ok && !xfail)
245 ++noErrors;
246 }
247
248 static void
249 print_ulps (const char *test_name, FLOAT ulp)
250 {
251 if (output_ulps)
252 {
253 fprintf (ulps_file, "Test \"%s\":\n", test_name);
254 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
255 CHOOSE("ldouble", "double", "float",
256 "ildouble", "idouble", "ifloat"),
257 FUNC(ceil) (ulp));
258 }
259 }
260
261 static void
262 print_function_ulps (const char *function_name, FLOAT ulp)
263 {
264 if (output_ulps)
265 {
266 fprintf (ulps_file, "Function: \"%s\":\n", function_name);
267 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
268 CHOOSE("ldouble", "double", "float",
269 "ildouble", "idouble", "ifloat"),
270 FUNC(ceil) (ulp));
271 }
272 }
273
274
275 static void
276 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
277 FLOAT imag_ulp)
278 {
279 if (output_ulps)
280 {
281 if (real_ulp != 0.0)
282 {
283 fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
284 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
285 CHOOSE("ldouble", "double", "float",
286 "ildouble", "idouble", "ifloat"),
287 FUNC(ceil) (real_ulp));
288 }
289 if (imag_ulp != 0.0)
290 {
291 fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
292 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
293 CHOOSE("ldouble", "double", "float",
294 "ildouble", "idouble", "ifloat"),
295 FUNC(ceil) (imag_ulp));
296 }
297
298
299 }
300 }
301
302
303
304 /* Test if Floating-Point stack hasn't changed */
305 static void
306 fpstack_test (const char *test_name)
307 {
308 #ifdef i386
309 static int old_stack;
310 int sw;
311
312 asm ("fnstsw" : "=a" (sw));
313 sw >>= 11;
314 sw &= 7;
315
316 if (sw != old_stack)
317 {
318 printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
319 test_name, sw, old_stack);
320 ++noErrors;
321 old_stack = sw;
322 }
323 #endif
324 }
325
326
327 static void
328 print_max_error (const char *func_name, FLOAT allowed, int xfail)
329 {
330 int ok = 0;
331
332 if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
333 {
334 ok = 1;
335 }
336
337 if (!ok)
338 print_function_ulps (func_name, max_error);
339
340
341 if (print_screen_max_error (ok, xfail))
342 {
343 printf ("Maximal error of `%s'\n", func_name);
344 printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
345 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
346 }
347
348 update_stats (ok, xfail);
349 }
350
351
352 static void
353 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
354 __complex__ int xfail)
355 {
356 int ok = 0;
357
358 if ((real_max_error == 0 && imag_max_error == 0)
359 || (real_max_error <= __real__ allowed
360 && imag_max_error <= __imag__ allowed
361 && !ignore_max_ulp))
362 {
363 ok = 1;
364 }
365
366 if (!ok)
367 print_complex_function_ulps (func_name, real_max_error, imag_max_error);
368
369
370 if (print_screen_max_error (ok, xfail))
371 {
372 printf ("Maximal error of real part of: %s\n", func_name);
373 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
374 FUNC(ceil) (real_max_error));
375 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
376 FUNC(ceil) (__real__ allowed));
377 printf ("Maximal error of imaginary part of: %s\n", func_name);
378 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
379 FUNC(ceil) (imag_max_error));
380 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
381 FUNC(ceil) (__imag__ allowed));
382 }
383
384 update_stats (ok, xfail);
385 }
386
387
388 /* Test whether a given exception was raised. */
389 static void
390 test_single_exception (const char *test_name,
391 int exception,
392 int exc_flag,
393 int fe_flag,
394 const char *flag_name)
395 {
396 #ifndef TEST_INLINE
397 int ok = 1;
398 if (exception & exc_flag)
399 {
400 if (fetestexcept (fe_flag))
401 {
402 if (print_screen (1, 0))
403 printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
404 }
405 else
406 {
407 ok = 0;
408 if (print_screen (0, 0))
409 printf ("Failure: %s: Exception \"%s\" not set\n",
410 test_name, flag_name);
411 }
412 }
413 else
414 {
415 if (fetestexcept (fe_flag))
416 {
417 ok = 0;
418 if (print_screen (0, 0))
419 printf ("Failure: %s: Exception \"%s\" set\n",
420 test_name, flag_name);
421 }
422 else
423 {
424 if (print_screen (1, 0))
425 printf ("%s: Exception \"%s\" not set\n", test_name,
426 flag_name);
427 }
428 }
429 if (!ok)
430 ++noErrors;
431
432 #endif
433 }
434
435
436 /* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
437 allowed but not required exceptions.
438 */
439 static void
440 test_exceptions (const char *test_name, int exception)
441 {
442 ++noExcTests;
443 #ifdef FE_DIVBYZERO
444 if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
445 test_single_exception (test_name, exception,
446 DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
447 "Divide by zero");
448 #endif
449 #ifdef FE_INVALID
450 if ((exception & INVALID_EXCEPTION_OK) == 0)
451 test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
452 "Invalid operation");
453 #endif
454 feclearexcept (FE_ALL_EXCEPT);
455 }
456
457
458 static void
459 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
460 FLOAT max_ulp, int xfail, int exceptions,
461 FLOAT *curr_max_error)
462 {
463 int ok = 0;
464 int print_diff = 0;
465 FLOAT diff = 0;
466 FLOAT ulp = 0;
467
468 test_exceptions (test_name, exceptions);
469 if (isnan (computed) && isnan (expected))
470 ok = 1;
471 else if (isinf (computed) && isinf (expected))
472 {
473 /* Test for sign of infinities. */
474 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
475 && signbit (computed) != signbit (expected))
476 {
477 ok = 0;
478 printf ("infinity has wrong sign.\n");
479 }
480 else
481 ok = 1;
482 }
483 /* Don't calc ulp for NaNs or infinities. */
484 else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
485 ok = 0;
486 else
487 {
488 diff = FUNC(fabs) (computed - expected);
489 switch (fpclassify (expected))
490 {
491 case FP_ZERO:
492 /* ilogb (0) isn't allowed. */
493 ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
494 break;
495 case FP_NORMAL:
496 ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
497 break;
498 case FP_SUBNORMAL:
499 ulp = (FUNC(ldexp) (diff, MANT_DIG)
500 / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
501 break;
502 default:
503 /* It should never happen. */
504 abort ();
505 break;
506 }
507 set_max_error (ulp, curr_max_error);
508 print_diff = 1;
509 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
510 && computed == 0.0 && expected == 0.0
511 && signbit(computed) != signbit (expected))
512 ok = 0;
513 else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
514 ok = 1;
515 else
516 {
517 ok = 0;
518 print_ulps (test_name, ulp);
519 }
520
521 }
522 if (print_screen (ok, xfail))
523 {
524 if (!ok)
525 printf ("Failure: ");
526 printf ("Test: %s\n", test_name);
527 printf ("Result:\n");
528 printf (" is: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
529 computed, computed);
530 printf (" should be: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
531 expected, expected);
532 if (print_diff)
533 {
534 printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
535 "\n", diff, diff);
536 printf (" ulp : % .4" PRINTF_NEXPR "\n", ulp);
537 printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
538 }
539 }
540 update_stats (ok, xfail);
541
542 fpstack_test (test_name);
543 }
544
545
546 static void
547 check_float (const char *test_name, FLOAT computed, FLOAT expected,
548 FLOAT max_ulp, int xfail, int exceptions)
549 {
550 check_float_internal (test_name, computed, expected, max_ulp, xfail,
551 exceptions, &max_error);
552 }
553
554
555 static void
556 check_complex (const char *test_name, __complex__ FLOAT computed,
557 __complex__ FLOAT expected,
558 __complex__ FLOAT max_ulp, __complex__ int xfail,
559 int exception)
560 {
561 FLOAT part_comp, part_exp, part_max_ulp;
562 int part_xfail;
563 char str[200];
564
565 sprintf (str, "Real part of: %s", test_name);
566 part_comp = __real__ computed;
567 part_exp = __real__ expected;
568 part_max_ulp = __real__ max_ulp;
569 part_xfail = __real__ xfail;
570
571 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
572 exception, &real_max_error);
573
574 sprintf (str, "Imaginary part of: %s", test_name);
575 part_comp = __imag__ computed;
576 part_exp = __imag__ expected;
577 part_max_ulp = __imag__ max_ulp;
578 part_xfail = __imag__ xfail;
579
580 /* Don't check again for exceptions, just pass through the
581 zero/inf sign test. */
582 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
583 exception & IGNORE_ZERO_INF_SIGN,
584 &imag_max_error);
585 }
586
587
588 /* Check that computed and expected values are equal (int values). */
589 static void
590 check_int (const char *test_name, int computed, int expected, int max_ulp,
591 int xfail, int exceptions)
592 {
593 int diff = computed - expected;
594 int ok = 0;
595
596 test_exceptions (test_name, exceptions);
597 noTests++;
598 if (abs (diff) <= max_ulp)
599 ok = 1;
600
601 if (!ok)
602 print_ulps (test_name, diff);
603
604 if (print_screen (ok, xfail))
605 {
606 if (!ok)
607 printf ("Failure: ");
608 printf ("Test: %s\n", test_name);
609 printf ("Result:\n");
610 printf (" is: %d\n", computed);
611 printf (" should be: %d\n", expected);
612 }
613
614 update_stats (ok, xfail);
615 fpstack_test (test_name);
616 }
617
618
619 /* Check that computed and expected values are equal (long int values). */
620 static void
621 check_long (const char *test_name, long int computed, long int expected,
622 long int max_ulp, int xfail, int exceptions)
623 {
624 long int diff = computed - expected;
625 int ok = 0;
626
627 test_exceptions (test_name, exceptions);
628 noTests++;
629 if (labs (diff) <= max_ulp)
630 ok = 1;
631
632 if (!ok)
633 print_ulps (test_name, diff);
634
635 if (print_screen (ok, xfail))
636 {
637 if (!ok)
638 printf ("Failure: ");
639 printf ("Test: %s\n", test_name);
640 printf ("Result:\n");
641 printf (" is: %ld\n", computed);
642 printf (" should be: %ld\n", expected);
643 }
644
645 update_stats (ok, xfail);
646 fpstack_test (test_name);
647 }
648
649
650 /* Check that computed value is true/false. */
651 static void
652 check_bool (const char *test_name, int computed, int expected,
653 long int max_ulp, int xfail, int exceptions)
654 {
655 int ok = 0;
656
657 test_exceptions (test_name, exceptions);
658 noTests++;
659 if ((computed == 0) == (expected == 0))
660 ok = 1;
661
662 if (print_screen (ok, xfail))
663 {
664 if (!ok)
665 printf ("Failure: ");
666 printf ("Test: %s\n", test_name);
667 printf ("Result:\n");
668 printf (" is: %d\n", computed);
669 printf (" should be: %d\n", expected);
670 }
671
672 update_stats (ok, xfail);
673 fpstack_test (test_name);
674 }
675
676
677 /* check that computed and expected values are equal (long int values) */
678 static void
679 check_longlong (const char *test_name, long long int computed,
680 long long int expected,
681 long long int max_ulp, int xfail,
682 int exceptions)
683 {
684 long long int diff = computed - expected;
685 int ok = 0;
686
687 test_exceptions (test_name, exceptions);
688 noTests++;
689 if (llabs (diff) <= max_ulp)
690 ok = 1;
691
692 if (!ok)
693 print_ulps (test_name, diff);
694
695 if (print_screen (ok, xfail))
696 {
697 if (!ok)
698 printf ("Failure:");
699 printf ("Test: %s\n", test_name);
700 printf ("Result:\n");
701 printf (" is: %lld\n", computed);
702 printf (" should be: %lld\n", expected);
703 }
704
705 update_stats (ok, xfail);
706 fpstack_test (test_name);
707 }
708
709
710
711 /* This is to prevent messages from the SVID libm emulation. */
712 int
713 matherr (struct exception *x __attribute__ ((unused)))
714 {
715 return 1;
716 }
717
718
719 /****************************************************************************
720 Tests for single functions of libm.
721 Please keep them alphabetically sorted!
722 ****************************************************************************/
723
724 static void
725 acos_test (void)
726 {
727 errno = 0;
728 FUNC(acos) (0);
729 if (errno == ENOSYS)
730 /* Function not implemented. */
731 return;
732
733 START (acos);
734
735 TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
736 TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
737 TEST_f_f (acos, nan_value, nan_value);
738
739 /* |x| > 1: */
740 TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
741 TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
742
743 TEST_f_f (acos, 0, M_PI_2l);
744 TEST_f_f (acos, minus_zero, M_PI_2l);
745 TEST_f_f (acos, 1, 0);
746 TEST_f_f (acos, -1, M_PIl);
747 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
748 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
749 TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
750 TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
751 TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
752 END (acos);
753 }
754
755 static void
756 acosh_test (void)
757 {
758 errno = 0;
759 FUNC(acosh) (7);
760 if (errno == ENOSYS)
761 /* Function not implemented. */
762 return;
763
764 START (acosh);
765
766 TEST_f_f (acosh, plus_infty, plus_infty);
767 TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
768
769 /* x < 1: */
770 TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
771
772 TEST_f_f (acosh, 1, 0);
773 TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
774
775 END (acosh);
776 }
777
778 static void
779 asin_test (void)
780 {
781 errno = 0;
782 FUNC(asin) (0);
783 if (errno == ENOSYS)
784 /* Function not implemented. */
785 return;
786
787 START (asin);
788
789 TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
790 TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
791 TEST_f_f (asin, nan_value, nan_value);
792
793 /* asin x == NaN plus invalid exception for |x| > 1. */
794 TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
795 TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
796
797 TEST_f_f (asin, 0, 0);
798 TEST_f_f (asin, minus_zero, minus_zero);
799 TEST_f_f (asin, 0.5, M_PI_6l);
800 TEST_f_f (asin, -0.5, -M_PI_6l);
801 TEST_f_f (asin, 1.0, M_PI_2l);
802 TEST_f_f (asin, -1.0, -M_PI_2l);
803 TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
804
805 END (asin);
806 }
807
808 static void
809 asinh_test (void)
810 {
811 errno = 0;
812 FUNC(asinh) (0.7L);
813 if (errno == ENOSYS)
814 /* Function not implemented. */
815 return;
816
817 START (asinh);
818
819 TEST_f_f (asinh, 0, 0);
820 TEST_f_f (asinh, minus_zero, minus_zero);
821 #ifndef TEST_INLINE
822 TEST_f_f (asinh, plus_infty, plus_infty);
823 TEST_f_f (asinh, minus_infty, minus_infty);
824 #endif
825 TEST_f_f (asinh, nan_value, nan_value);
826 TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
827
828 END (asinh);
829 }
830
831 static void
832 atan_test (void)
833 {
834 errno = 0;
835 FUNC(atan) (0);
836 if (errno == ENOSYS)
837 /* Function not implemented. */
838 return;
839
840 START (atan);
841
842 TEST_f_f (atan, 0, 0);
843 TEST_f_f (atan, minus_zero, minus_zero);
844
845 TEST_f_f (atan, plus_infty, M_PI_2l);
846 TEST_f_f (atan, minus_infty, -M_PI_2l);
847 TEST_f_f (atan, nan_value, nan_value);
848
849 TEST_f_f (atan, 1, M_PI_4l);
850 TEST_f_f (atan, -1, -M_PI_4l);
851
852 TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
853
854 END (atan);
855 }
856
857
858
859 static void
860 atanh_test (void)
861 {
862 errno = 0;
863 FUNC(atanh) (0.7L);
864 if (errno == ENOSYS)
865 /* Function not implemented. */
866 return;
867
868 START (atanh);
869
870
871 TEST_f_f (atanh, 0, 0);
872 TEST_f_f (atanh, minus_zero, minus_zero);
873
874 TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
875 TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
876 TEST_f_f (atanh, nan_value, nan_value);
877
878 /* atanh (x) == NaN plus invalid exception if |x| > 1. */
879 TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
880 TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
881
882 TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
883
884 END (atanh);
885 }
886
887 static void
888 atan2_test (void)
889 {
890 errno = 0;
891 FUNC(atan2) (-0, 1);
892 if (errno == ENOSYS)
893 /* Function not implemented. */
894 return;
895
896 START (atan2);
897
898 /* atan2 (0,x) == 0 for x > 0. */
899 TEST_ff_f (atan2, 0, 1, 0);
900
901 /* atan2 (-0,x) == -0 for x > 0. */
902 TEST_ff_f (atan2, minus_zero, 1, minus_zero);
903
904 TEST_ff_f (atan2, 0, 0, 0);
905 TEST_ff_f (atan2, minus_zero, 0, minus_zero);
906
907 /* atan2 (+0,x) == +pi for x < 0. */
908 TEST_ff_f (atan2, 0, -1, M_PIl);
909
910 /* atan2 (-0,x) == -pi for x < 0. */
911 TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
912
913 TEST_ff_f (atan2, 0, minus_zero, M_PIl);
914 TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
915
916 /* atan2 (y,+0) == pi/2 for y > 0. */
917 TEST_ff_f (atan2, 1, 0, M_PI_2l);
918
919 /* atan2 (y,-0) == pi/2 for y > 0. */
920 TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
921
922 /* atan2 (y,+0) == -pi/2 for y < 0. */
923 TEST_ff_f (atan2, -1, 0, -M_PI_2l);
924
925 /* atan2 (y,-0) == -pi/2 for y < 0. */
926 TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
927
928 /* atan2 (y,inf) == +0 for finite y > 0. */
929 TEST_ff_f (atan2, 1, plus_infty, 0);
930
931 /* atan2 (y,inf) == -0 for finite y < 0. */
932 TEST_ff_f (atan2, -1, plus_infty, minus_zero);
933
934 /* atan2(+inf, x) == pi/2 for finite x. */
935 TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
936
937 /* atan2(-inf, x) == -pi/2 for finite x. */
938 TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
939
940 /* atan2 (y,-inf) == +pi for finite y > 0. */
941 TEST_ff_f (atan2, 1, minus_infty, M_PIl);
942
943 /* atan2 (y,-inf) == -pi for finite y < 0. */
944 TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
945
946 TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
947 TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
948 TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
949 TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
950 TEST_ff_f (atan2, nan_value, nan_value, nan_value);
951
952 TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
953
954 TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
955 TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
956 TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
957 TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
958 TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
959 TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
960
961 TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
962
963 END (atan2);
964 }
965
966 static void
967 cabs_test (void)
968 {
969 errno = 0;
970 FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
971 if (errno == ENOSYS)
972 /* Function not implemented. */
973 return;
974
975 START (cabs);
976
977 /* cabs (x + iy) is specified as hypot (x,y) */
978
979 /* cabs (+inf + i x) == +inf. */
980 TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
981 /* cabs (-inf + i x) == +inf. */
982 TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
983
984 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
985 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
986
987 TEST_c_f (cabs, nan_value, nan_value, nan_value);
988
989 /* cabs (x,y) == cabs (y,x). */
990 TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
991 /* cabs (x,y) == cabs (-x,y). */
992 TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
993 /* cabs (x,y) == cabs (-y,x). */
994 TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
995 /* cabs (x,y) == cabs (-x,-y). */
996 TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
997 /* cabs (x,y) == cabs (-y,-x). */
998 TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
999 /* cabs (x,0) == fabs (x). */
1000 TEST_c_f (cabs, -0.75L, 0, 0.75L);
1001 TEST_c_f (cabs, 0.75L, 0, 0.75L);
1002 TEST_c_f (cabs, -1.0L, 0, 1.0L);
1003 TEST_c_f (cabs, 1.0L, 0, 1.0L);
1004 TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1005 TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1006
1007 TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1008
1009 END (cabs);
1010 }
1011
1012
1013 static void
1014 cacos_test (void)
1015 {
1016 errno = 0;
1017 FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1018 if (errno == ENOSYS)
1019 /* Function not implemented. */
1020 return;
1021
1022 START (cacos);
1023
1024
1025 TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1026 TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1027 TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1028 TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1029
1030 TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1031 TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1032
1033 TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1034 TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1035
1036 TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1037 TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1038 TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1039 TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1040 TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1041 TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1042
1043 TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1044 TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1045 TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1046 TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1047
1048 TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1049 TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1050 TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1051 TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1052
1053 TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1054 TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1055
1056 TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1057 TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1058
1059 TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1060 TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1061
1062 TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1063 TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1064
1065 TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1066 TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1067
1068 TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1069
1070 TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1071 TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1072 TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1073 TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1074 TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1075 TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1076 TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1077 TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1078 TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1079 TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1080 TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1081 TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1082
1083 TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1084 TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1085 TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1086 TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1087 TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1088 TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1089 TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1090 TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1091 TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1092 TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1093 TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1094 TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1095
1096 TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
1097 TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
1098
1099 END (cacos, complex);
1100 }
1101
1102 static void
1103 cacosh_test (void)
1104 {
1105 errno = 0;
1106 FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
1107 if (errno == ENOSYS)
1108 /* Function not implemented. */
1109 return;
1110
1111 START (cacosh);
1112
1113
1114 TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1115 TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1116 TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1117 TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1118 TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1119 TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1120
1121 TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1122 TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1123
1124 TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1125 TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1126 TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1127 TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
1128 TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1129 TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1130
1131 TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1132 TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1133 TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1134 TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1135
1136 TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1137 TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1138 TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1139 TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1140
1141 TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1142 TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1143
1144 TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1145 TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1146
1147 TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1148 TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1149
1150 TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1151 TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1152
1153 TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1154 TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1155
1156 TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1157
1158 TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1159 TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1160 TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1161 TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1162 TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1163 TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1164 TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1165 TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1166 TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1167 TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1168 TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1169 TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1170
1171 TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
1172 TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
1173 TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
1174 TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
1175 TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
1176 TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
1177 TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
1178 TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
1179 TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
1180 TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
1181 TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
1182 TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
1183
1184 TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
1185 TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
1186
1187 END (cacosh, complex);
1188 }
1189
1190
1191 static void
1192 carg_test (void)
1193 {
1194 START (carg);
1195
1196 /* carg (x + iy) is specified as atan2 (y, x) */
1197
1198 /* carg (x + i 0) == 0 for x > 0. */
1199 TEST_c_f (carg, 2.0, 0, 0);
1200 /* carg (x - i 0) == -0 for x > 0. */
1201 TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1202
1203 TEST_c_f (carg, 0, 0, 0);
1204 TEST_c_f (carg, 0, minus_zero, minus_zero);
1205
1206 /* carg (x + i 0) == +pi for x < 0. */
1207 TEST_c_f (carg, -2.0, 0, M_PIl);
1208
1209 /* carg (x - i 0) == -pi for x < 0. */
1210 TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1211
1212 TEST_c_f (carg, minus_zero, 0, M_PIl);
1213 TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1214
1215 /* carg (+0 + i y) == pi/2 for y > 0. */
1216 TEST_c_f (carg, 0, 2.0, M_PI_2l);
1217
1218 /* carg (-0 + i y) == pi/2 for y > 0. */
1219 TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1220
1221 /* carg (+0 + i y) == -pi/2 for y < 0. */
1222 TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1223
1224 /* carg (-0 + i y) == -pi/2 for y < 0. */
1225 TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1226
1227 /* carg (inf + i y) == +0 for finite y > 0. */
1228 TEST_c_f (carg, plus_infty, 2.0, 0);
1229
1230 /* carg (inf + i y) == -0 for finite y < 0. */
1231 TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1232
1233 /* carg(x + i inf) == pi/2 for finite x. */
1234 TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1235
1236 /* carg(x - i inf) == -pi/2 for finite x. */
1237 TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1238
1239 /* carg (-inf + i y) == +pi for finite y > 0. */
1240 TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1241
1242 /* carg (-inf + i y) == -pi for finite y < 0. */
1243 TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1244
1245 TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1246
1247 TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1248
1249 TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1250
1251 TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1252
1253 TEST_c_f (carg, nan_value, nan_value, nan_value);
1254
1255 END (carg);
1256 }
1257
1258 static void
1259 casin_test (void)
1260 {
1261 errno = 0;
1262 FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
1263 if (errno == ENOSYS)
1264 /* Function not implemented. */
1265 return;
1266
1267 START (casin);
1268
1269 TEST_c_c (casin, 0, 0, 0.0, 0.0);
1270 TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1271 TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1272 TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1273
1274 TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1275 TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1276 TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1277 TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1278
1279 TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1280 TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1281 TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1282 TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1283 TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1284 TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
1285 TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1286 TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
1287
1288 TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1289 TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1290 TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1291 TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1292
1293 TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1294 TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1295 TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1296 TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1297
1298 TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1299 TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1300
1301 TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1302 TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1303
1304 TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1305 TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1306
1307 TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1308 TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1309
1310 TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1311 TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1312
1313 TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1314
1315 TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
1316 TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
1317 TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
1318 TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
1319 TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
1320 TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
1321 TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
1322 TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
1323 TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
1324 TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
1325 TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
1326 TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
1327
1328 TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
1329 TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
1330 TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
1331 TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
1332 TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
1333 TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
1334 TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
1335 TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
1336 TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
1337 TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
1338 TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
1339 TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
1340
1341 TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
1342 TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
1343
1344 END (casin, complex);
1345 }
1346
1347
1348 static void
1349 casinh_test (void)
1350 {
1351 errno = 0;
1352 FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
1353 if (errno == ENOSYS)
1354 /* Function not implemented. */
1355 return;
1356
1357 START (casinh);
1358
1359 TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1360 TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1361 TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1362 TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1363
1364 TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1365 TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1366 TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1367 TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1368
1369 TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1370 TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1371 TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1372 TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1373 TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1374 TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
1375 TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1376 TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1377
1378 TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1379 TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1380 TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1381 TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1382
1383 TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1384 TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1385 TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1386 TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1387
1388 TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1389 TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1390
1391 TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1392 TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1393
1394 TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1395 TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1396
1397 TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1398 TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1399
1400 TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1401 TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1402
1403 TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1404
1405 TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
1406 TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
1407 TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
1408 TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
1409 TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
1410 TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
1411 TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
1412 TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
1413 TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
1414 TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
1415 TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
1416 TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
1417
1418 TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
1419 TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
1420 TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
1421 TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
1422 TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
1423 TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
1424 TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
1425 TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
1426 TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
1427 TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
1428 TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
1429 TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
1430
1431 TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
1432 TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
1433
1434 END (casinh, complex);
1435 }
1436
1437
1438 static void
1439 catan_test (void)
1440 {
1441 errno = 0;
1442 FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
1443 if (errno == ENOSYS)
1444 /* Function not implemented. */
1445 return;
1446
1447 START (catan);
1448
1449 TEST_c_c (catan, 0, 0, 0, 0);
1450 TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1451 TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1452 TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1453
1454 TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1455 TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1456 TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1457 TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1458
1459
1460 TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1461 TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1462 TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1463 TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1464 TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1465 TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
1466 TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1467 TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
1468
1469 TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1470 TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1471 TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1472 TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1473
1474 TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1475 TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1476 TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1477 TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1478
1479 TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1480 TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1481
1482 TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1483 TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1484
1485 TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1486 TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1487
1488 TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1489 TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1490
1491 TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1492 TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1493
1494 TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1495 TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1496
1497 TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1498
1499 TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
1500 TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
1501
1502 END (catan, complex);
1503 }
1504
1505 static void
1506 catanh_test (void)
1507 {
1508 errno = 0;
1509 FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
1510 if (errno == ENOSYS)
1511 /* Function not implemented. */
1512 return;
1513
1514 START (catanh);
1515
1516 TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1517 TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1518 TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1519 TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1520
1521 TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1522 TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1523 TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1524 TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1525
1526 TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1527 TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1528 TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1529 TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1530 TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1531 TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
1532 TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1533 TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
1534
1535 TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1536 TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1537 TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1538 TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1539
1540 TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1541 TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1542 TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1543 TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1544
1545 TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1546 TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1547
1548 TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1549 TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1550
1551 TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1552 TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1553
1554 TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1555 TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1556
1557 TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1558 TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1559
1560 TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1561 TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1562
1563 TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1564
1565 TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
1566 TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
1567
1568 END (catanh, complex);
1569 }
1570
1571 static void
1572 cbrt_test (void)
1573 {
1574 errno = 0;
1575 FUNC(cbrt) (8);
1576 if (errno == ENOSYS)
1577 /* Function not implemented. */
1578 return;
1579
1580 START (cbrt);
1581
1582 TEST_f_f (cbrt, 0.0, 0.0);
1583 TEST_f_f (cbrt, minus_zero, minus_zero);
1584
1585 TEST_f_f (cbrt, plus_infty, plus_infty);
1586 TEST_f_f (cbrt, minus_infty, minus_infty);
1587 TEST_f_f (cbrt, nan_value, nan_value);
1588
1589 TEST_f_f (cbrt, -0.001L, -0.1L);
1590 TEST_f_f (cbrt, 8, 2);
1591 TEST_f_f (cbrt, -27.0, -3.0);
1592 TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1593 TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
1594
1595 END (cbrt);
1596 }
1597
1598
1599 static void
1600 ccos_test (void)
1601 {
1602 errno = 0;
1603 FUNC(ccos) (BUILD_COMPLEX (0, 0));
1604 if (errno == ENOSYS)
1605 /* Function not implemented. */
1606 return;
1607
1608 START (ccos);
1609
1610 TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1611 TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1612 TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1613 TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1614
1615 TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1616 TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1617 TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1618 TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1619
1620 TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1621 TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1622 TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1623 TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1624
1625 TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1626 TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1627 TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1628 TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1629
1630 TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1631 TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1632 TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1633 TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1634
1635 TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1636 TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1637 TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1638 TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1639
1640 TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1641 TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1642
1643 TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1644 TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1645
1646 TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1647 TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1648
1649 TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1650 TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1651
1652 TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1653 TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1654
1655 TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1656 TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1657
1658 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1659
1660 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
1661 TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
1662
1663 END (ccos, complex);
1664 }
1665
1666
1667 static void
1668 ccosh_test (void)
1669 {
1670 errno = 0;
1671 FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
1672 if (errno == ENOSYS)
1673 /* Function not implemented. */
1674 return;
1675
1676 START (ccosh);
1677
1678 TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1679 TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1680 TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1681 TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1682
1683 TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1684 TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1685 TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1686 TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1687
1688 TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1689 TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1690 TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1691 TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1692
1693 TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1694 TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1695 TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1696 TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1697
1698 TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1699 TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1700 TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1701 TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1702
1703 TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1704 TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1705 TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1706 TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1707
1708 TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1709 TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1710
1711 TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1712 TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1713
1714 TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1715 TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1716
1717 TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1718 TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1719
1720 TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1721 TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1722
1723 TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1724 TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1725
1726 TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1727
1728 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
1729
1730 TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
1731
1732 END (ccosh, complex);
1733 }
1734
1735
1736 static void
1737 ceil_test (void)
1738 {
1739 START (ceil);
1740
1741 TEST_f_f (ceil, 0.0, 0.0);
1742 TEST_f_f (ceil, minus_zero, minus_zero);
1743 TEST_f_f (ceil, plus_infty, plus_infty);
1744 TEST_f_f (ceil, minus_infty, minus_infty);
1745 TEST_f_f (ceil, nan_value, nan_value);
1746
1747 TEST_f_f (ceil, M_PIl, 4.0);
1748 TEST_f_f (ceil, -M_PIl, -3.0);
1749 TEST_f_f (ceil, 0.1, 1.0);
1750 TEST_f_f (ceil, 0.25, 1.0);
1751 TEST_f_f (ceil, 0.625, 1.0);
1752 TEST_f_f (ceil, -0.1, minus_zero);
1753 TEST_f_f (ceil, -0.25, minus_zero);
1754 TEST_f_f (ceil, -0.625, minus_zero);
1755
1756 #ifdef TEST_LDOUBLE
1757 /* The result can only be represented in long double. */
1758 TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1759 TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1760 TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1761 TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1762 TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1763
1764 TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1765 TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1766 TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1767 TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1768 TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1769
1770 # if LDBL_MANT_DIG > 100
1771 TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1772 TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1773 TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1774 TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1775 TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1776 TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1777 # endif
1778
1779 TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1780 TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1781 TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1782 TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1783 TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1784
1785 TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1786 TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1787 TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1788 TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1789 TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1790
1791 # if LDBL_MANT_DIG > 100
1792 TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1793 TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1794 TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1795 TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1796 TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1797 TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1798
1799 TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1800 TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1801 TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1802 TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1803 TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1804 TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1805 # endif
1806
1807 TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1808 TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1809 TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1810 TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1811 TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1812
1813 TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1814 TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1815 TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1816 TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1817 TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1818
1819 TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1820 TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1821 TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1822 TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1823 TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1824 #endif
1825
1826 END (ceil);
1827 }
1828
1829
1830 static void
1831 cexp_test (void)
1832 {
1833 errno = 0;
1834 FUNC(cexp) (BUILD_COMPLEX (0, 0));
1835 if (errno == ENOSYS)
1836 /* Function not implemented. */
1837 return;
1838
1839 START (cexp);
1840
1841 TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1842 TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1843 TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1844 TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1845
1846 TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1847 TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1848
1849 TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1850 TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1851
1852 TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1853 TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1854
1855 TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1856 TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1857
1858 TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1859 TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1860
1861 TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1862 TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1863
1864 TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1865 TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1866 TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1867 TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1868
1869 TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1870 TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1871
1872 TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1873 TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1874
1875 TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1876
1877 TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1878
1879 TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1880 TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1881
1882 TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1883 TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1884 TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1885 TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1886
1887 TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
1888 TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
1889
1890 END (cexp, complex);
1891 }
1892
1893
1894 static void
1895 cimag_test (void)
1896 {
1897 START (cimag);
1898 TEST_c_f (cimag, 1.0, 0.0, 0.0);
1899 TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1900 TEST_c_f (cimag, 1.0, nan_value, nan_value);
1901 TEST_c_f (cimag, nan_value, nan_value, nan_value);
1902 TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1903 TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1904 TEST_c_f (cimag, 2.0, 3.0, 3.0);
1905
1906 END (cimag);
1907 }
1908
1909 static void
1910 clog_test (void)
1911 {
1912 errno = 0;
1913 FUNC(clog) (BUILD_COMPLEX (-2, -3));
1914 if (errno == ENOSYS)
1915 /* Function not implemented. */
1916 return;
1917
1918 START (clog);
1919
1920 TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1921 TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1922
1923 TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1924 TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1925
1926 TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1927 TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1928
1929 TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1930 TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1931
1932 TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1933 TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1934 TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1935 TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1936 TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1937 TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1938 TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1939 TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1940
1941 TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1942 TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1943 TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1944 TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1945
1946 TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1947 TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1948 TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1949 TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1950
1951 TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1952 TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1953
1954 TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1955 TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1956
1957 TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1958 TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1959 TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1960 TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1961
1962 TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1963 TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1964 TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1965 TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1966
1967 TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
1968
1969 TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
1970 TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
1971
1972 END (clog, complex);
1973 }
1974
1975
1976 static void
1977 clog10_test (void)
1978 {
1979 errno = 0;
1980 FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
1981 if (errno == ENOSYS)
1982 /* Function not implemented. */
1983 return;
1984
1985 START (clog10);
1986
1987 TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1988 TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1989
1990 TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1991 TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1992
1993 TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
1994
1995 TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
1996 TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
1997
1998 TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
1999 TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
2000 TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
2001 TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
2002 TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
2003 TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
2004 TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
2005 TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
2006
2007 TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
2008 TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
2009 TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
2010 TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
2011
2012 TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
2013 TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
2014 TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
2015 TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
2016
2017 TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
2018 TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
2019
2020 TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
2021 TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
2022
2023 TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2024 TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2025 TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2026 TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2027
2028 TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2029 TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2030 TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2031 TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2032
2033 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
2034
2035 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
2036 TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
2037
2038 END (clog10, complex);
2039 }
2040
2041
2042 static void
2043 conj_test (void)
2044 {
2045 START (conj);
2046 TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
2047 TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
2048 TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
2049 TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
2050 TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
2051 TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
2052 TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
2053
2054 END (conj, complex);
2055 }
2056
2057
2058 static void
2059 copysign_test (void)
2060 {
2061 START (copysign);
2062
2063 TEST_ff_f (copysign, 0, 4, 0);
2064 TEST_ff_f (copysign, 0, -4, minus_zero);
2065 TEST_ff_f (copysign, minus_zero, 4, 0);
2066 TEST_ff_f (copysign, minus_zero, -4, minus_zero);
2067
2068 TEST_ff_f (copysign, plus_infty, 0, plus_infty);
2069 TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
2070 TEST_ff_f (copysign, minus_infty, 0, plus_infty);
2071 TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
2072
2073 TEST_ff_f (copysign, 0, plus_infty, 0);
2074 TEST_ff_f (copysign, 0, minus_zero, minus_zero);
2075 TEST_ff_f (copysign, minus_zero, plus_infty, 0);
2076 TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
2077
2078 /* XXX More correctly we would have to check the sign of the NaN. */
2079 TEST_ff_f (copysign, nan_value, 0, nan_value);
2080 TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
2081 TEST_ff_f (copysign, -nan_value, 0, nan_value);
2082 TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
2083
2084 END (copysign);
2085 }
2086
2087
2088 static void
2089 cos_test (void)
2090 {
2091 errno = 0;
2092 FUNC(cos) (0);
2093 if (errno == ENOSYS)
2094 /* Function not implemented. */
2095 return;
2096
2097 START (cos);
2098
2099 TEST_f_f (cos, 0, 1);
2100 TEST_f_f (cos, minus_zero, 1);
2101 errno = 0;
2102 TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
2103 check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
2104 errno = 0;
2105 TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
2106 check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
2107 errno = 0;
2108 TEST_f_f (cos, nan_value, nan_value);
2109 check_int ("errno for cos(NaN) unchanged", errno, 0, 0, 0, 0);
2110
2111 TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2112 TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2113 TEST_f_f (cos, M_PI_2l, 0);
2114
2115 TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
2116
2117 TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
2118 TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
2119
2120 #ifdef TEST_DOUBLE
2121 TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
2122 #endif
2123
2124 #ifndef TEST_FLOAT
2125 TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
2126 TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
2127 #endif
2128
2129 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2130 TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
2131 #endif
2132
2133 END (cos);
2134 }
2135
2136
2137 static void
2138 cos_test_tonearest (void)
2139 {
2140 int save_round_mode;
2141 errno = 0;
2142 FUNC(cos) (0);
2143 if (errno == ENOSYS)
2144 /* Function not implemented. */
2145 return;
2146
2147 START (cos_tonearest);
2148
2149 save_round_mode = fegetround ();
2150
2151 if (!fesetround (FE_TONEAREST))
2152 {
2153 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2154 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2155 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2156 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2157 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2158 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2159 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2160 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2161 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2162 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2163 }
2164
2165 fesetround (save_round_mode);
2166
2167 END (cos_tonearest);
2168 }
2169
2170
2171 static void
2172 cos_test_towardzero (void)
2173 {
2174 int save_round_mode;
2175 errno = 0;
2176 FUNC(cos) (0);
2177 if (errno == ENOSYS)
2178 /* Function not implemented. */
2179 return;
2180
2181 START (cos_towardzero);
2182
2183 save_round_mode = fegetround ();
2184
2185 if (!fesetround (FE_TOWARDZERO))
2186 {
2187 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2188 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2189 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2190 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2191 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2192 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2193 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2194 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2195 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2196 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2197 }
2198
2199 fesetround (save_round_mode);
2200
2201 END (cos_towardzero);
2202 }
2203
2204
2205 static void
2206 cos_test_downward (void)
2207 {
2208 int save_round_mode;
2209 errno = 0;
2210 FUNC(cos) (0);
2211 if (errno == ENOSYS)
2212 /* Function not implemented. */
2213 return;
2214
2215 START (cos_downward);
2216
2217 save_round_mode = fegetround ();
2218
2219 if (!fesetround (FE_DOWNWARD))
2220 {
2221 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2222 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2223 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2224 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2225 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2226 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2227 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2228 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2229 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2230 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2231 }
2232
2233 fesetround (save_round_mode);
2234
2235 END (cos_downward);
2236 }
2237
2238
2239 static void
2240 cos_test_upward (void)
2241 {
2242 int save_round_mode;
2243 errno = 0;
2244 FUNC(cos) (0);
2245 if (errno == ENOSYS)
2246 /* Function not implemented. */
2247 return;
2248
2249 START (cos_upward);
2250
2251 save_round_mode = fegetround ();
2252
2253 if (!fesetround (FE_UPWARD))
2254 {
2255 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2256 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2257 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2258 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2259 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2260 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2261 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2262 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2263 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2264 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2265 }
2266
2267 fesetround (save_round_mode);
2268
2269 END (cos_upward);
2270 }
2271
2272
2273 static void
2274 cosh_test (void)
2275 {
2276 errno = 0;
2277 FUNC(cosh) (0.7L);
2278 if (errno == ENOSYS)
2279 /* Function not implemented. */
2280 return;
2281
2282 START (cosh);
2283 TEST_f_f (cosh, 0, 1);
2284 TEST_f_f (cosh, minus_zero, 1);
2285
2286 #ifndef TEST_INLINE
2287 TEST_f_f (cosh, plus_infty, plus_infty);
2288 TEST_f_f (cosh, minus_infty, plus_infty);
2289 #endif
2290 TEST_f_f (cosh, nan_value, nan_value);
2291
2292 TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2293
2294 END (cosh);
2295 }
2296
2297
2298 static void
2299 cosh_test_tonearest (void)
2300 {
2301 int save_round_mode;
2302 errno = 0;
2303 FUNC(cosh) (0);
2304 if (errno == ENOSYS)
2305 /* Function not implemented. */
2306 return;
2307
2308 START (cosh_tonearest);
2309
2310 save_round_mode = fegetround ();
2311
2312 if (!fesetround (FE_TONEAREST))
2313 {
2314 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2315 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2316 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2317 }
2318
2319 fesetround (save_round_mode);
2320
2321 END (cosh_tonearest);
2322 }
2323
2324
2325 static void
2326 cosh_test_towardzero (void)
2327 {
2328 int save_round_mode;
2329 errno = 0;
2330 FUNC(cosh) (0);
2331 if (errno == ENOSYS)
2332 /* Function not implemented. */
2333 return;
2334
2335 START (cosh_towardzero);
2336
2337 save_round_mode = fegetround ();
2338
2339 if (!fesetround (FE_TOWARDZERO))
2340 {
2341 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2342 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2343 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2344 }
2345
2346 fesetround (save_round_mode);
2347
2348 END (cosh_towardzero);
2349 }
2350
2351
2352 static void
2353 cosh_test_downward (void)
2354 {
2355 int save_round_mode;
2356 errno = 0;
2357 FUNC(cosh) (0);
2358 if (errno == ENOSYS)
2359 /* Function not implemented. */
2360 return;
2361
2362 START (cosh_downward);
2363
2364 save_round_mode = fegetround ();
2365
2366 if (!fesetround (FE_DOWNWARD))
2367 {
2368 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2369 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2370 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2371 }
2372
2373 fesetround (save_round_mode);
2374
2375 END (cosh_downward);
2376 }
2377
2378
2379 static void
2380 cosh_test_upward (void)
2381 {
2382 int save_round_mode;
2383 errno = 0;
2384 FUNC(cosh) (0);
2385 if (errno == ENOSYS)
2386 /* Function not implemented. */
2387 return;
2388
2389 START (cosh_upward);
2390
2391 save_round_mode = fegetround ();
2392
2393 if (!fesetround (FE_UPWARD))
2394 {
2395 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2396 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2397 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2398 }
2399
2400 fesetround (save_round_mode);
2401
2402 END (cosh_upward);
2403 }
2404
2405
2406 static void
2407 cpow_test (void)
2408 {
2409 errno = 0;
2410 FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2411 if (errno == ENOSYS)
2412 /* Function not implemented. */
2413 return;
2414
2415 START (cpow);
2416
2417 TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2418 TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2419
2420 TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2421 TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2422
2423 TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2424
2425 TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2426 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2427 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
2428 TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2429
2430 END (cpow, complex);
2431 }
2432
2433
2434 static void
2435 cproj_test (void)
2436 {
2437 START (cproj);
2438 TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2439 TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2440 TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2441 TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2442
2443 TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2444
2445 TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2446 TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2447 TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2448 TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2449
2450 TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
2451 TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
2452
2453 END (cproj, complex);
2454 }
2455
2456
2457 static void
2458 creal_test (void)
2459 {
2460 START (creal);
2461 TEST_c_f (creal, 0.0, 1.0, 0.0);
2462 TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2463 TEST_c_f (creal, nan_value, 1.0, nan_value);
2464 TEST_c_f (creal, nan_value, nan_value, nan_value);
2465 TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2466 TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2467 TEST_c_f (creal, 2.0, 3.0, 2.0);
2468
2469 END (creal);
2470 }
2471
2472 static void
2473 csin_test (void)
2474 {
2475 errno = 0;
2476 FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
2477 if (errno == ENOSYS)
2478 /* Function not implemented. */
2479 return;
2480
2481 START (csin);
2482
2483 TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2484 TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2485 TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2486 TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2487
2488 TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2489 TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2490 TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2491 TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2492
2493 TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2494 TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2495 TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2496 TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2497
2498 TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2499 TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2500 TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2501 TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2502
2503 TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2504 TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2505 TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2506 TEST_c_c (csin, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2507
2508 TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2509 TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2510 TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2511 TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2512
2513 TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2514 TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2515
2516 TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2517 TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2518
2519 TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2520 TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2521
2522 TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2523 TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2524
2525 TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2526 TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2527
2528 TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2529 TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2530
2531 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2532
2533 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
2534 TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
2535
2536 END (csin, complex);
2537 }
2538
2539
2540 static void
2541 csinh_test (void)
2542 {
2543 errno = 0;
2544 FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
2545 if (errno == ENOSYS)
2546 /* Function not implemented. */
2547 return;
2548
2549 START (csinh);
2550
2551 TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2552 TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2553 TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2554 TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2555
2556 TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2557 TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2558 TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2559 TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2560
2561 TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2562 TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2563 TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2564 TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2565
2566 TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2567 TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2568 TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2569 TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2570
2571 TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2572 TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2573 TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2574 TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2575
2576 TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2577 TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2578 TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2579 TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2580
2581 TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2582 TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2583
2584 TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2585 TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2586
2587 TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2588 TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2589
2590 TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2591 TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2592
2593 TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2594 TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2595
2596 TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2597 TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2598
2599 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2600
2601 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
2602 TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
2603
2604 END (csinh, complex);
2605 }
2606
2607
2608 static void
2609 csqrt_test (void)
2610 {
2611 errno = 0;
2612 FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2613 if (errno == ENOSYS)
2614 /* Function not implemented. */
2615 return;
2616
2617 START (csqrt);
2618
2619 TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2620 TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2621 TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2622 TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2623
2624 TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2625 TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2626 TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2627 TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2628
2629 TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2630 TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2631 TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2632 TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2633
2634 TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2635 TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2636 TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2637 TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2638 TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2639 TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2640 TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2641 TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2642 TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2643 TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2644 TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2645 TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2646
2647 TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2648
2649 TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2650
2651 TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2652 TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2653 TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2654 TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2655
2656 TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2657 TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2658 TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2659 TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2660
2661 TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2662
2663 TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2664 TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2665 TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2666 TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2667 TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
2668 TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2669 TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
2670 /* Principal square root should be returned (i.e., non-negative real
2671 part). */
2672 TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
2673
2674 TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
2675 TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
2676 TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
2677 TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
2678
2679 #ifndef TEST_FLOAT
2680 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
2681 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
2682 TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
2683 TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
2684 #endif
2685
2686 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2687 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
2688 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
2689 TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
2690 #endif
2691
2692 END (csqrt, complex);
2693 }
2694
2695 static void
2696 ctan_test (void)
2697 {
2698 errno = 0;
2699 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
2700 if (errno == ENOSYS)
2701 /* Function not implemented. */
2702 return;
2703
2704 START (ctan);
2705
2706 TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2707 TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2708 TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2709 TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2710
2711 TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2712 TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2713 TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2714 TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2715
2716 TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2717 TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2718 TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2719 TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2720
2721 TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2722 TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2723 TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2724 TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2725 TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2726 TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2727 TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2728 TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2729
2730 TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2731 TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2732
2733 TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2734 TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2735
2736 TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2737 TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2738
2739 TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2740 TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2741 TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2742 TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2743
2744 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2745
2746 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
2747 TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
2748
2749 END (ctan, complex);
2750 }
2751
2752
2753 static void
2754 ctanh_test (void)
2755 {
2756 errno = 0;
2757 FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2758 if (errno == ENOSYS)
2759 /* Function not implemented. */
2760 return;
2761
2762 START (ctanh);
2763
2764 TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2765 TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2766 TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2767 TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2768
2769 TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2770 TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2771 TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2772 TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2773 TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2774 TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2775 TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2776 TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2777
2778 TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2779 TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2780 TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2781 TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2782 TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2783 TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2784 TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2785 TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2786
2787 TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2788 TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2789
2790 TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2791 TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2792
2793 TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2794 TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2795
2796 TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2797 TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2798 TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2799 TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2800
2801 TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2802
2803 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2804
2805 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
2806 TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
2807
2808 END (ctanh, complex);
2809 }
2810
2811
2812 static void
2813 erf_test (void)
2814 {
2815 errno = 0;
2816 FUNC(erf) (0);
2817 if (errno == ENOSYS)
2818 /* Function not implemented. */
2819 return;
2820
2821 START (erf);
2822
2823 TEST_f_f (erf, 0, 0);
2824 TEST_f_f (erf, minus_zero, minus_zero);
2825 TEST_f_f (erf, plus_infty, 1);
2826 TEST_f_f (erf, minus_infty, -1);
2827 TEST_f_f (erf, nan_value, nan_value);
2828
2829 TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2830 TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2831 TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2832 TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2833 TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2834 TEST_f_f (erf, 27.0L, 1.0L);
2835
2836 END (erf);
2837 }
2838
2839
2840 static void
2841 erfc_test (void)
2842 {
2843 errno = 0;
2844 FUNC(erfc) (0);
2845 if (errno == ENOSYS)
2846 /* Function not implemented. */
2847 return;
2848
2849 START (erfc);
2850
2851 TEST_f_f (erfc, plus_infty, 0.0);
2852 TEST_f_f (erfc, minus_infty, 2.0);
2853 TEST_f_f (erfc, 0.0, 1.0);
2854 TEST_f_f (erfc, minus_zero, 1.0);
2855 TEST_f_f (erfc, nan_value, nan_value);
2856
2857 TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2858 TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2859 TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2860 TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
2861 TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
2862 TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
2863 TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
2864 TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
2865 #ifdef TEST_LDOUBLE
2866 /* The result can only be represented in long double. */
2867 # if LDBL_MIN_10_EXP < -319
2868 TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
2869 # endif
2870 # if LDBL_MANT_DIG >= 106
2871 TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
2872 # endif
2873 #endif
2874
2875 END (erfc);
2876 }
2877
2878
2879 static void
2880 exp_test (void)
2881 {
2882 errno = 0;
2883 FUNC(exp) (0);
2884 if (errno == ENOSYS)
2885 /* Function not implemented. */
2886 return;
2887
2888 START (exp);
2889
2890 TEST_f_f (exp, 0, 1);
2891 TEST_f_f (exp, minus_zero, 1);
2892
2893 #ifndef TEST_INLINE
2894 TEST_f_f (exp, plus_infty, plus_infty);
2895 TEST_f_f (exp, minus_infty, 0);
2896 #endif
2897 TEST_f_f (exp, nan_value, nan_value);
2898 TEST_f_f (exp, 1, M_El);
2899
2900 TEST_f_f (exp, 2, M_E2l);
2901 TEST_f_f (exp, 3, M_E3l);
2902 TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
2903 TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
2904 TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
2905 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
2906 /* The result can only be represented in sane long double. */
2907 TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2908 #endif
2909
2910 END (exp);
2911 }
2912
2913
2914 static void
2915 exp_test_tonearest (void)
2916 {
2917 int save_round_mode;
2918 errno = 0;
2919 FUNC(exp) (0);
2920 if (errno == ENOSYS)
2921 /* Function not implemented. */
2922 return;
2923
2924 START (exp_tonearest);
2925
2926 save_round_mode = fegetround ();
2927
2928 if (!fesetround (FE_TONEAREST))
2929 {
2930 TEST_f_f (exp, 1, M_El);
2931 TEST_f_f (exp, 2, M_E2l);
2932 TEST_f_f (exp, 3, M_E3l);
2933 }
2934
2935 fesetround (save_round_mode);
2936
2937 END (exp_tonearest);
2938 }
2939
2940
2941 static void
2942 exp_test_towardzero (void)
2943 {
2944 int save_round_mode;
2945 errno = 0;
2946 FUNC(exp) (0);
2947 if (errno == ENOSYS)
2948 /* Function not implemented. */
2949 return;
2950
2951 START (exp_towardzero);
2952
2953 save_round_mode = fegetround ();
2954
2955 if (!fesetround (FE_TOWARDZERO))
2956 {
2957 TEST_f_f (exp, 1, M_El);
2958 TEST_f_f (exp, 2, M_E2l);
2959 TEST_f_f (exp, 3, M_E3l);
2960 }
2961
2962 fesetround (save_round_mode);
2963
2964 END (exp_towardzero);
2965 }
2966
2967
2968 static void
2969 exp_test_downward (void)
2970 {
2971 int save_round_mode;
2972 errno = 0;
2973 FUNC(exp) (0);
2974 if (errno == ENOSYS)
2975 /* Function not implemented. */
2976 return;
2977
2978 START (exp_downward);
2979
2980 save_round_mode = fegetround ();
2981
2982 if (!fesetround (FE_DOWNWARD))
2983 {
2984 TEST_f_f (exp, 1, M_El);
2985 TEST_f_f (exp, 2, M_E2l);
2986 TEST_f_f (exp, 3, M_E3l);
2987 }
2988
2989 fesetround (save_round_mode);
2990
2991 END (exp_downward);
2992 }
2993
2994
2995 static void
2996 exp_test_upward (void)
2997 {
2998 int save_round_mode;
2999 errno = 0;
3000 FUNC(exp) (0);
3001 if (errno == ENOSYS)
3002 /* Function not implemented. */
3003 return;
3004
3005 START (exp_upward);
3006
3007 save_round_mode = fegetround ();
3008
3009 if (!fesetround (FE_UPWARD))
3010 {
3011 TEST_f_f (exp, 1, M_El);
3012 TEST_f_f (exp, 2, M_E2l);
3013 TEST_f_f (exp, 3, M_E3l);
3014 }
3015
3016 fesetround (save_round_mode);
3017
3018 END (exp_upward);
3019 }
3020
3021
3022 static void
3023 exp10_test (void)
3024 {
3025 errno = 0;
3026 FUNC(exp10) (0);
3027 if (errno == ENOSYS)
3028 /* Function not implemented. */
3029 return;
3030
3031 START (exp10);
3032
3033 TEST_f_f (exp10, 0, 1);
3034 TEST_f_f (exp10, minus_zero, 1);
3035
3036 TEST_f_f (exp10, plus_infty, plus_infty);
3037 TEST_f_f (exp10, minus_infty, 0);
3038 TEST_f_f (exp10, nan_value, nan_value);
3039 TEST_f_f (exp10, 3, 1000);
3040 TEST_f_f (exp10, -1, 0.1L);
3041 TEST_f_f (exp10, 1e6, plus_infty);
3042 TEST_f_f (exp10, -1e6, 0);
3043 TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
3044
3045 END (exp10);
3046 }
3047
3048
3049 static void
3050 exp2_test (void)
3051 {
3052 errno = 0;
3053 FUNC(exp2) (0);
3054 if (errno == ENOSYS)
3055 /* Function not implemented. */
3056 return;
3057
3058 START (exp2);
3059
3060 TEST_f_f (exp2, 0, 1);
3061 TEST_f_f (exp2, minus_zero, 1);
3062 TEST_f_f (exp2, plus_infty, plus_infty);
3063 TEST_f_f (exp2, minus_infty, 0);
3064 TEST_f_f (exp2, nan_value, nan_value);
3065
3066 TEST_f_f (exp2, 10, 1024);
3067 TEST_f_f (exp2, -1, 0.5);
3068 TEST_f_f (exp2, 1e6, plus_infty);
3069 TEST_f_f (exp2, -1e6, 0);
3070 TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
3071
3072 END (exp2);
3073 }
3074
3075
3076 static void
3077 expm1_test (void)
3078 {
3079 errno = 0;
3080 FUNC(expm1) (0);
3081 if (errno == ENOSYS)
3082 /* Function not implemented. */
3083 return;
3084
3085 START (expm1);
3086
3087 TEST_f_f (expm1, 0, 0);
3088 TEST_f_f (expm1, minus_zero, minus_zero);
3089
3090 #ifndef TEST_INLINE
3091 TEST_f_f (expm1, plus_infty, plus_infty);
3092 TEST_f_f (expm1, minus_infty, -1);
3093 #endif
3094 TEST_f_f (expm1, nan_value, nan_value);
3095
3096 TEST_f_f (expm1, 1, M_El - 1.0);
3097 TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
3098
3099 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3100 TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
3101 #endif
3102
3103 errno = 0;
3104 TEST_f_f (expm1, 100000.0, plus_infty);
3105 check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
3106
3107 END (expm1);
3108 }
3109
3110
3111 static void
3112 fabs_test (void)
3113 {
3114 START (fabs);
3115
3116 TEST_f_f (fabs, 0, 0);
3117 TEST_f_f (fabs, minus_zero, 0);
3118
3119 TEST_f_f (fabs, plus_infty, plus_infty);
3120 TEST_f_f (fabs, minus_infty, plus_infty);
3121 TEST_f_f (fabs, nan_value, nan_value);
3122
3123 TEST_f_f (fabs, 38.0, 38.0);
3124 TEST_f_f (fabs, -M_El, M_El);
3125
3126 END (fabs);
3127 }
3128
3129
3130 static void
3131 fdim_test (void)
3132 {
3133 START (fdim);
3134
3135 TEST_ff_f (fdim, 0, 0, 0);
3136 TEST_ff_f (fdim, 9, 0, 9);
3137 TEST_ff_f (fdim, 0, 9, 0);
3138 TEST_ff_f (fdim, -9, 0, 0);
3139 TEST_ff_f (fdim, 0, -9, 9);
3140
3141 TEST_ff_f (fdim, plus_infty, 9, plus_infty);
3142 TEST_ff_f (fdim, plus_infty, -9, plus_infty);
3143 TEST_ff_f (fdim, minus_infty, 9, 0);
3144 TEST_ff_f (fdim, minus_infty, -9, 0);
3145 TEST_ff_f (fdim, 9, minus_infty, plus_infty);
3146 TEST_ff_f (fdim, -9, minus_infty, plus_infty);
3147 TEST_ff_f (fdim, 9, plus_infty, 0);
3148 TEST_ff_f (fdim, -9, plus_infty, 0);
3149
3150 TEST_ff_f (fdim, 0, nan_value, nan_value);
3151 TEST_ff_f (fdim, 9, nan_value, nan_value);
3152 TEST_ff_f (fdim, -9, nan_value, nan_value);
3153 TEST_ff_f (fdim, nan_value, 9, nan_value);
3154 TEST_ff_f (fdim, nan_value, -9, nan_value);
3155 TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
3156 TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
3157 TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
3158 TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
3159 TEST_ff_f (fdim, nan_value, nan_value, nan_value);
3160
3161 TEST_ff_f (fdim, plus_infty, plus_infty, 0);
3162
3163 END (fdim);
3164 }
3165
3166
3167 static void
3168 floor_test (void)
3169 {
3170 START (floor);
3171
3172 TEST_f_f (floor, 0.0, 0.0);
3173 TEST_f_f (floor, minus_zero, minus_zero);
3174 TEST_f_f (floor, plus_infty, plus_infty);
3175 TEST_f_f (floor, minus_infty, minus_infty);
3176 TEST_f_f (floor, nan_value, nan_value);
3177
3178 TEST_f_f (floor, M_PIl, 3.0);
3179 TEST_f_f (floor, -M_PIl, -4.0);
3180
3181 TEST_f_f (floor, 0.1, 0.0);
3182 TEST_f_f (floor, 0.25, 0.0);
3183 TEST_f_f (floor, 0.625, 0.0);
3184 TEST_f_f (floor, -0.1, -1.0);
3185 TEST_f_f (floor, -0.25, -1.0);
3186 TEST_f_f (floor, -0.625, -1.0);
3187
3188 #ifdef TEST_LDOUBLE
3189 /* The result can only be represented in long double. */
3190 TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
3191 TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
3192 TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
3193 TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
3194 TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
3195 # if LDBL_MANT_DIG > 100
3196 TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
3197 TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
3198 TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
3199 # endif
3200
3201 TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
3202 TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
3203 TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
3204 TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
3205 TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
3206 # if LDBL_MANT_DIG > 100
3207 TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
3208 TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
3209 TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
3210 # endif
3211
3212 TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
3213 TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
3214 TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
3215 TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
3216 TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
3217
3218 # if LDBL_MANT_DIG > 100
3219 TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
3220 TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
3221 TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
3222 TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
3223 TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
3224 TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
3225 # endif
3226
3227 TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
3228 TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
3229 TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
3230 TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
3231 TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
3232
3233 # if LDBL_MANT_DIG > 100
3234 TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
3235 TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
3236 TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
3237 TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
3238 TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
3239 TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
3240 # endif
3241
3242 TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
3243 TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
3244 TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
3245 TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
3246 TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
3247
3248 TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
3249 TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
3250 TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
3251 TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
3252 TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
3253
3254 TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
3255 TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
3256 TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
3257 TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
3258 TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
3259 #endif
3260
3261 END (floor);
3262 }
3263
3264
3265 static void
3266 fma_test (void)
3267 {
3268 START (fma);
3269
3270 TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
3271 TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
3272 TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
3273 TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3274 TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3275 TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3276 TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3277 TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3278 TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3279 TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3280 TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3281 TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3282
3283 TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3284 TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3285 TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3286 TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3287 TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3288 TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3289 TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3290 TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, nan_value, INVALID_EXCEPTION);
3291
3292 TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
3293
3294 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
3295 LDBL_MAX, DBL_MAX, FLT_MAX);
3296 TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
3297 TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
3298 TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
3299 TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
3300 TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
3301 TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
3302 TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
3303 TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
3304
3305 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
3306 TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
3307 TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
3308 TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
3309 TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
3310 TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
3311 TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
3312 TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
3313 #endif
3314 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
3315 TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
3316 TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
3317 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
3318 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
3319 TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
3320 TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
3321 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
3322 TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
3323 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
3324 TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0);
3325 TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022);
3326 TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022);
3327 TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022);
3328 TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022);
3329 TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022);
3330 TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022);
3331 TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022);
3332 TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022);
3333 TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022);
3334 TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
3335 #endif
3336 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
3337 TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
3338 TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
3339 TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
3340 TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
3341 TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
3342 TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L);
3343 #endif
3344 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
3345 TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
3346 TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L);
3347 TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L);
3348 TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
3349 TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
3350 TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
3351 TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
3352 TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
3353 TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
3354 TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
3355 TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
3356 TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
3357 TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
3358 #endif
3359
3360 END (fma);
3361 }
3362
3363
3364 static void
3365 fmax_test (void)
3366 {
3367 START (fmax);
3368
3369 TEST_ff_f (fmax, 0, 0, 0);
3370 TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
3371 TEST_ff_f (fmax, 9, 0, 9);
3372 TEST_ff_f (fmax, 0, 9, 9);
3373 TEST_ff_f (fmax, -9, 0, 0);
3374 TEST_ff_f (fmax, 0, -9, 0);
3375
3376 TEST_ff_f (fmax, plus_infty, 9, plus_infty);
3377 TEST_ff_f (fmax, 0, plus_infty, plus_infty);
3378 TEST_ff_f (fmax, -9, plus_infty, plus_infty);
3379 TEST_ff_f (fmax, plus_infty, -9, plus_infty);
3380
3381 TEST_ff_f (fmax, minus_infty, 9, 9);
3382 TEST_ff_f (fmax, minus_infty, -9, -9);
3383 TEST_ff_f (fmax, 9, minus_infty, 9);
3384 TEST_ff_f (fmax, -9, minus_infty, -9);
3385
3386 TEST_ff_f (fmax, 0, nan_value, 0);
3387 TEST_ff_f (fmax, 9, nan_value, 9);
3388 TEST_ff_f (fmax, -9, nan_value, -9);
3389 TEST_ff_f (fmax, nan_value, 0, 0);
3390 TEST_ff_f (fmax, nan_value, 9, 9);
3391 TEST_ff_f (fmax, nan_value, -9, -9);
3392 TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
3393 TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
3394 TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
3395 TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
3396 TEST_ff_f (fmax, nan_value, nan_value, nan_value);
3397
3398 END (fmax);
3399 }
3400
3401
3402 static void
3403 fmin_test (void)
3404 {
3405 START (fmin);
3406
3407 TEST_ff_f (fmin, 0, 0, 0);
3408 TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
3409 TEST_ff_f (fmin, 9, 0, 0);
3410 TEST_ff_f (fmin, 0, 9, 0);
3411 TEST_ff_f (fmin, -9, 0, -9);
3412 TEST_ff_f (fmin, 0, -9, -9);
3413
3414 TEST_ff_f (fmin, plus_infty, 9, 9);
3415 TEST_ff_f (fmin, 9, plus_infty, 9);
3416 TEST_ff_f (fmin, plus_infty, -9, -9);
3417 TEST_ff_f (fmin, -9, plus_infty, -9);
3418 TEST_ff_f (fmin, minus_infty, 9, minus_infty);
3419 TEST_ff_f (fmin, minus_infty, -9, minus_infty);
3420 TEST_ff_f (fmin, 9, minus_infty, minus_infty);
3421 TEST_ff_f (fmin, -9, minus_infty, minus_infty);
3422
3423 TEST_ff_f (fmin, 0, nan_value, 0);
3424 TEST_ff_f (fmin, 9, nan_value, 9);
3425 TEST_ff_f (fmin, -9, nan_value, -9);
3426 TEST_ff_f (fmin, nan_value, 0, 0);
3427 TEST_ff_f (fmin, nan_value, 9, 9);
3428 TEST_ff_f (fmin, nan_value, -9, -9);
3429 TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
3430 TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
3431 TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
3432 TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
3433 TEST_ff_f (fmin, nan_value, nan_value, nan_value);
3434
3435 END (fmin);
3436 }
3437
3438
3439 static void
3440 fmod_test (void)
3441 {
3442 errno = 0;
3443 FUNC(fmod) (6.5, 2.3L);
3444 if (errno == ENOSYS)
3445 /* Function not implemented. */
3446 return;
3447
3448 START (fmod);
3449
3450 /* fmod (+0, y) == +0 for y != 0. */
3451 TEST_ff_f (fmod, 0, 3, 0);
3452
3453 /* fmod (-0, y) == -0 for y != 0. */
3454 TEST_ff_f (fmod, minus_zero, 3, minus_zero);
3455
3456 /* fmod (+inf, y) == NaN plus invalid exception. */
3457 errno = 0;
3458 TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
3459 check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3460 /* fmod (-inf, y) == NaN plus invalid exception. */
3461 errno = 0;
3462 TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
3463 check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3464 /* fmod (x, +0) == NaN plus invalid exception. */
3465 errno = 0;
3466 TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
3467 check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
3468 /* fmod (x, -0) == NaN plus invalid exception. */
3469 TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
3470
3471 /* fmod (x, +inf) == x for x not infinite. */
3472 TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
3473 /* fmod (x, -inf) == x for x not infinite. */
3474 TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
3475
3476 TEST_ff_f (fmod, nan_value, nan_value, nan_value);
3477
3478 TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
3479 TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
3480 TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
3481 TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
3482
3483 END (fmod);
3484 }
3485
3486
3487 static void
3488 fpclassify_test (void)
3489 {
3490 START (fpclassify);
3491
3492 TEST_f_i (fpclassify, nan_value, FP_NAN);
3493 TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
3494 TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
3495 TEST_f_i (fpclassify, plus_zero, FP_ZERO);
3496 TEST_f_i (fpclassify, minus_zero, FP_ZERO);
3497 TEST_f_i (fpclassify, 1000, FP_NORMAL);
3498
3499 END (fpclassify);
3500 }
3501
3502
3503 static void
3504 frexp_test (void)
3505 {
3506 int x;
3507
3508 START (frexp);
3509
3510 TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
3511 TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
3512 TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
3513
3514 TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
3515 TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
3516
3517 TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
3518 TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
3519
3520 END (frexp);
3521 }
3522
3523
3524 static void
3525 gamma_test (void)
3526 {
3527 errno = 0;
3528 FUNC(gamma) (1);
3529
3530 if (errno == ENOSYS)
3531 /* Function not implemented. */
3532 return;
3533 feclearexcept (FE_ALL_EXCEPT);
3534
3535 START (gamma);
3536
3537 TEST_f_f (gamma, plus_infty, plus_infty);
3538 TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3539 TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3540 TEST_f_f (gamma, minus_infty, plus_infty);
3541 TEST_f_f (gamma, nan_value, nan_value);
3542
3543 TEST_f_f1 (gamma, 1, 0, 1);
3544 TEST_f_f1 (gamma, 3, M_LN2l, 1);
3545
3546 TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
3547 TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3548
3549 END (gamma);
3550 }
3551
3552 static void
3553 hypot_test (void)
3554 {
3555 errno = 0;
3556 FUNC(hypot) (0.7L, 12.4L);
3557 if (errno == ENOSYS)
3558 /* Function not implemented. */
3559 return;
3560
3561 START (hypot);
3562
3563 TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3564 TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3565
3566 #ifndef TEST_INLINE
3567 TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
3568 TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
3569 TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
3570 TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
3571 #endif
3572
3573 TEST_ff_f (hypot, nan_value, nan_value, nan_value);
3574
3575 /* hypot (x,y) == hypot (+-x, +-y) */
3576 TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
3577 TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
3578 TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
3579 TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
3580 TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
3581 TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
3582 TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
3583 TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
3584
3585 /* hypot (x,0) == fabs (x) */
3586 TEST_ff_f (hypot, 0.75L, 0, 0.75L);
3587 TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3588 TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
3589
3590 TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
3591
3592 #if !(defined TEST_FLOAT && defined TEST_INLINE)
3593 TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
3594 TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
3595 #endif
3596
3597 #ifndef TEST_FLOAT
3598 TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
3599 #endif
3600
3601 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
3602 TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
3603 #endif
3604
3605 END (hypot);
3606 }
3607
3608
3609 static void
3610 ilogb_test (void)
3611 {
3612 START (ilogb);
3613
3614 TEST_f_i (ilogb, 1, 0);
3615 TEST_f_i (ilogb, M_El, 1);
3616 TEST_f_i (ilogb, 1024, 10);
3617 TEST_f_i (ilogb, -2000, 10);
3618
3619 /* XXX We have a problem here: the standard does not tell us whether
3620 exceptions are allowed/required. ignore them for now. */
3621
3622 TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3623 TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
3624 TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3625 TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
3626
3627 END (ilogb);
3628 }
3629
3630 static void
3631 isfinite_test (void)
3632 {
3633 START (isfinite);
3634
3635 TEST_f_b (isfinite, 0, 1);
3636 TEST_f_b (isfinite, minus_zero, 1);
3637 TEST_f_b (isfinite, 10, 1);
3638 TEST_f_b (isfinite, plus_infty, 0);
3639 TEST_f_b (isfinite, minus_infty, 0);
3640 TEST_f_b (isfinite, nan_value, 0);
3641
3642 END (isfinite);
3643 }
3644
3645 static void
3646 isnormal_test (void)
3647 {
3648 START (isnormal);
3649
3650 TEST_f_b (isnormal, 0, 0);
3651 TEST_f_b (isnormal, minus_zero, 0);
3652 TEST_f_b (isnormal, 10, 1);
3653 TEST_f_b (isnormal, plus_infty, 0);
3654 TEST_f_b (isnormal, minus_infty, 0);
3655 TEST_f_b (isnormal, nan_value, 0);
3656
3657 END (isnormal);
3658 }
3659
3660 static void
3661 j0_test (void)
3662 {
3663 FLOAT s, c;
3664 errno = 0;
3665 FUNC (sincos) (0, &s, &c);
3666 if (errno == ENOSYS)
3667 /* Required function not implemented. */
3668 return;
3669 FUNC(j0) (0);
3670 if (errno == ENOSYS)
3671 /* Function not implemented. */
3672 return;
3673
3674 START (j0);
3675
3676 /* j0 is the Bessel function of the first kind of order 0 */
3677 TEST_f_f (j0, nan_value, nan_value);
3678 TEST_f_f (j0, plus_infty, 0);
3679 TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
3680 TEST_f_f (j0, 0.0, 1.0);
3681 TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3682 TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3683 TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3684 TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3685 TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3686 TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3687 TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
3688 TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3689 TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3690
3691 TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
3692
3693 #ifndef TEST_FLOAT
3694 TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
3695 #endif
3696
3697 END (j0);
3698 }
3699
3700
3701 static void
3702 j1_test (void)
3703 {
3704 FLOAT s, c;
3705 errno = 0;
3706 FUNC (sincos) (0, &s, &c);
3707 if (errno == ENOSYS)
3708 /* Required function not implemented. */
3709 return;
3710 FUNC(j1) (0);
3711 if (errno == ENOSYS)
3712 /* Function not implemented. */
3713 return;
3714
3715 /* j1 is the Bessel function of the first kind of order 1 */
3716
3717 START (j1);
3718
3719 TEST_f_f (j1, nan_value, nan_value);
3720 TEST_f_f (j1, plus_infty, 0);
3721
3722 TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
3723 TEST_f_f (j1, 0.0, 0.0);
3724 TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3725 TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3726 TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3727 TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3728 TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3729 TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3730 TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
3731
3732 TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
3733
3734 #ifndef TEST_FLOAT
3735 TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
3736 #endif
3737
3738 END (j1);
3739 }
3740
3741 static void
3742 jn_test (void)
3743 {
3744 FLOAT s, c;
3745 errno = 0;
3746 FUNC (sincos) (0, &s, &c);
3747 if (errno == ENOSYS)
3748 /* Required function not implemented. */
3749 return;
3750 FUNC(jn) (1, 1);
3751 if (errno == ENOSYS)
3752 /* Function not implemented. */
3753 return;
3754
3755 /* jn is the Bessel function of the first kind of order n. */
3756 START (jn);
3757
3758 /* jn (0, x) == j0 (x) */
3759 TEST_ff_f (jn, 0, nan_value, nan_value);
3760 TEST_ff_f (jn, 0, plus_infty, 0);
3761 TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
3762 TEST_ff_f (jn, 0, 0.0, 1.0);
3763 TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3764 TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3765 TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3766 TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3767 TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3768 TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3769 TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3770 TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3771 TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3772
3773 /* jn (1, x) == j1 (x) */
3774 TEST_ff_f (jn, 1, nan_value, nan_value);
3775 TEST_ff_f (jn, 1, plus_infty, 0);
3776 TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
3777 TEST_ff_f (jn, 1, 0.0, 0.0);
3778 TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3779 TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3780 TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3781 TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3782 TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3783 TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3784 TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
3785
3786 /* jn (3, x) */
3787 TEST_ff_f (jn, 3, nan_value, nan_value);
3788 TEST_ff_f (jn, 3, plus_infty, 0);
3789
3790 TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
3791 TEST_ff_f (jn, 3, 0.0, 0.0);
3792 TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3793 TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3794 TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3795 TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3796 TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
3797
3798 /* jn (10, x) */
3799 TEST_ff_f (jn, 10, nan_value, nan_value);
3800 TEST_ff_f (jn, 10, plus_infty, 0);
3801
3802 TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
3803 TEST_ff_f (jn, 10, 0.0, 0.0);
3804 TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3805 TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3806 TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3807 TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3808 TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
3809
3810 /* BZ #11589 .*/
3811 TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
3812 TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
3813 TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
3814 TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
3815 TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
3816 TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
3817 TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
3818 TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
3819
3820 TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
3821
3822 END (jn);
3823 }
3824
3825
3826 static void
3827 ldexp_test (void)
3828 {
3829 TEST_ff_f (ldexp, 0, 0, 0);
3830 TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3831
3832 TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3833 TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3834 TEST_ff_f (ldexp, nan_value, 1, nan_value);
3835
3836 TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3837 TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3838
3839 /* ldexp (x, 0) == x. */
3840 TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3841 }
3842
3843
3844 static void
3845 lgamma_test (void)
3846 {
3847 errno = 0;
3848 FUNC(lgamma) (0);
3849 if (errno == ENOSYS)
3850 /* Function not implemented. */
3851 return;
3852 feclearexcept (FE_ALL_EXCEPT);
3853
3854 START (lgamma);
3855
3856 TEST_f_f (lgamma, plus_infty, plus_infty);
3857 TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3858 check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
3859 TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3860 check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
3861 TEST_f_f (lgamma, nan_value, nan_value);
3862
3863 /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
3864 errno = 0;
3865 TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3866 check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
3867 TEST_f_f (lgamma, minus_infty, plus_infty);
3868
3869 TEST_f_f1 (lgamma, 1, 0, 1);
3870
3871 TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3872
3873 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3874 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3875 TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3876 TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
3877
3878 END (lgamma);
3879 }
3880
3881
3882 static void
3883 lrint_test (void)
3884 {
3885 /* XXX this test is incomplete. We need to have a way to specifiy
3886 the rounding method and test the critical cases. So far, only
3887 unproblematic numbers are tested. */
3888
3889 START (lrint);
3890
3891 TEST_f_l (lrint, 0.0, 0);
3892 TEST_f_l (lrint, minus_zero, 0);
3893 TEST_f_l (lrint, 0.2L, 0);
3894 TEST_f_l (lrint, -0.2L, 0);
3895
3896 TEST_f_l (lrint, 1.4L, 1);
3897 TEST_f_l (lrint, -1.4L, -1);
3898
3899 TEST_f_l (lrint, 8388600.3L, 8388600);
3900 TEST_f_l (lrint, -8388600.3L, -8388600);
3901
3902 TEST_f_l (lrint, 1071930.0008, 1071930);
3903 #ifndef TEST_FLOAT
3904 TEST_f_l (lrint, 1073741824.01, 1073741824);
3905 # if LONG_MAX > 281474976710656
3906 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3907 # endif
3908 #endif
3909
3910 END (lrint);
3911 }
3912
3913
3914 static void
3915 lrint_test_tonearest (void)
3916 {
3917 int save_round_mode;
3918 START (lrint_tonearest);
3919
3920 save_round_mode = fegetround ();
3921
3922 if (!fesetround (FE_TONEAREST))
3923 {
3924 TEST_f_l (lrint, 0.0, 0);
3925 TEST_f_l (lrint, minus_zero, 0);
3926 TEST_f_l (lrint, 0.2L, 0);
3927 TEST_f_l (lrint, -0.2L, 0);
3928 TEST_f_l (lrint, 0.5L, 0);
3929 TEST_f_l (lrint, -0.5L, 0);
3930 TEST_f_l (lrint, 0.8L, 1);
3931 TEST_f_l (lrint, -0.8L, -1);
3932
3933 TEST_f_l (lrint, 1.4L, 1);
3934 TEST_f_l (lrint, -1.4L, -1);
3935
3936 TEST_f_l (lrint, 8388600.3L, 8388600);
3937 TEST_f_l (lrint, -8388600.3L, -8388600);
3938
3939 TEST_f_l (lrint, 1071930.0008, 1071930);
3940 #ifndef TEST_FLOAT
3941 TEST_f_l (lrint, 1073741824.01, 1073741824);
3942 # if LONG_MAX > 281474976710656
3943 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3944 # endif
3945 #endif
3946 }
3947
3948 fesetround (save_round_mode);
3949
3950 END (lrint_tonearest);
3951 }
3952
3953
3954 static void
3955 lrint_test_towardzero (void)
3956 {
3957 int save_round_mode;
3958 START (lrint_towardzero);
3959
3960 save_round_mode = fegetround ();
3961
3962 if (!fesetround (FE_TOWARDZERO))
3963 {
3964 TEST_f_l (lrint, 0.0, 0);
3965 TEST_f_l (lrint, minus_zero, 0);
3966 TEST_f_l (lrint, 0.2L, 0);
3967 TEST_f_l (lrint, -0.2L, 0);
3968 TEST_f_l (lrint, 0.5L, 0);
3969 TEST_f_l (lrint, -0.5L, 0);
3970 TEST_f_l (lrint, 0.8L, 0);
3971 TEST_f_l (lrint, -0.8L, 0);
3972
3973 TEST_f_l (lrint, 1.4L, 1);
3974 TEST_f_l (lrint, -1.4L, -1);
3975
3976 TEST_f_l (lrint, 8388600.3L, 8388600);
3977 TEST_f_l (lrint, -8388600.3L, -8388600);
3978
3979 TEST_f_l (lrint, 1071930.0008, 1071930);
3980 #ifndef TEST_FLOAT
3981 TEST_f_l (lrint, 1073741824.01, 1073741824);
3982 # if LONG_MAX > 281474976710656
3983 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3984 # endif
3985 #endif
3986 }
3987
3988 fesetround (save_round_mode);
3989
3990 END (lrint_towardzero);
3991 }
3992
3993
3994 static void
3995 lrint_test_downward (void)
3996 {
3997 int save_round_mode;
3998 START (lrint_downward);
3999
4000 save_round_mode = fegetround ();
4001
4002 if (!fesetround (FE_DOWNWARD))
4003 {
4004 TEST_f_l (lrint, 0.0, 0);
4005 TEST_f_l (lrint, minus_zero, 0);
4006 TEST_f_l (lrint, 0.2L, 0);
4007 TEST_f_l (lrint, -0.2L, -1);
4008 TEST_f_l (lrint, 0.5L, 0);
4009 TEST_f_l (lrint, -0.5L, -1);
4010 TEST_f_l (lrint, 0.8L, 0);
4011 TEST_f_l (lrint, -0.8L, -1);
4012
4013 TEST_f_l (lrint, 1.4L, 1);
4014 TEST_f_l (lrint, -1.4L, -2);
4015
4016 TEST_f_l (lrint, 8388600.3L, 8388600);
4017 TEST_f_l (lrint, -8388600.3L, -8388601);
4018
4019 TEST_f_l (lrint, 1071930.0008, 1071930);
4020 #ifndef TEST_FLOAT
4021 TEST_f_l (lrint, 1073741824.01, 1073741824);
4022 # if LONG_MAX > 281474976710656
4023 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4024 # endif
4025 #endif
4026 }
4027
4028 fesetround (save_round_mode);
4029
4030 END (lrint_downward);
4031 }
4032
4033
4034 static void
4035 lrint_test_upward (void)
4036 {
4037 int save_round_mode;
4038 START (lrint_upward);
4039
4040 save_round_mode = fegetround ();
4041
4042 if (!fesetround (FE_UPWARD))
4043 {
4044 TEST_f_l (lrint, 0.0, 0);
4045 TEST_f_l (lrint, minus_zero, 0);
4046 TEST_f_l (lrint, 0.2L, 1);
4047 TEST_f_l (lrint, -0.2L, 0);
4048 TEST_f_l (lrint, 0.5L, 1);
4049 TEST_f_l (lrint, -0.5L, 0);
4050 TEST_f_l (lrint, 0.8L, 1);
4051 TEST_f_l (lrint, -0.8L, 0);
4052
4053 TEST_f_l (lrint, 1.4L, 2);
4054 TEST_f_l (lrint, -1.4L, -1);
4055
4056 TEST_f_l (lrint, 8388600.3L, 8388601);
4057 TEST_f_l (lrint, -8388600.3L, -8388600);
4058
4059 #ifndef TEST_FLOAT
4060 TEST_f_l (lrint, 1071930.0008, 1071931);
4061 TEST_f_l (lrint, 1073741824.01, 1073741825);
4062 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
4063 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4064 # endif
4065 #endif
4066 }
4067
4068 fesetround (save_round_mode);
4069
4070 END (lrint_upward);
4071 }
4072
4073
4074 static void
4075 llrint_test (void)
4076 {
4077 /* XXX this test is incomplete. We need to have a way to specifiy
4078 the rounding method and test the critical cases. So far, only
4079 unproblematic numbers are tested. */
4080
4081 START (llrint);
4082
4083 TEST_f_L (llrint, 0.0, 0);
4084 TEST_f_L (llrint, minus_zero, 0);
4085 TEST_f_L (llrint, 0.2L, 0);
4086 TEST_f_L (llrint, -0.2L, 0);
4087
4088 TEST_f_L (llrint, 1.4L, 1);
4089 TEST_f_L (llrint, -1.4L, -1);
4090
4091 TEST_f_L (llrint, 8388600.3L, 8388600);
4092 TEST_f_L (llrint, -8388600.3L, -8388600);
4093
4094 TEST_f_l (llrint, 1071930.0008, 1071930);
4095
4096 /* Test boundary conditions. */
4097 /* 0x1FFFFF */
4098 TEST_f_L (llrint, 2097151.0,2097151LL);
4099 /* 0x800000 */
4100 TEST_f_L (llrint, 8388608.0, 8388608LL);
4101 /* 0x1000000 */
4102 TEST_f_L (llrint, 16777216.0, 16777216LL);
4103 /* 0x20000000000 */
4104 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4105 /* 0x40000000000 */
4106 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4107 /* 0x1000000000000 */
4108 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4109 /* 0x10000000000000 */
4110 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4111 /* 0x10000080000000 */
4112 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4113 /* 0x20000000000000 */
4114 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4115 /* 0x80000000000000 */
4116 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4117 /* 0x100000000000000 */
4118 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4119 #ifdef TEST_LDOUBLE
4120 /* The input can only be represented in long double. */
4121 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4122 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4123 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4124 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4125 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4126
4127 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4128 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4129 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4130 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4131 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4132
4133 # if LDBL_MANT_DIG > 100
4134 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4135 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4136 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4137 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4138 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4139 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4140
4141 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4142 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4143 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4144 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4145 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4146 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4147 #endif
4148
4149 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4150 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4151 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4152 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4153 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4154
4155 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4156 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4157 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4158 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4159 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4160
4161 # if LDBL_MANT_DIG > 100
4162 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4163 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4164 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4165 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4166 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4167 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4168
4169 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4170 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4171 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4172 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4173 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4174 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4175 #endif
4176
4177 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4178 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4179 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4180 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4181 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4182
4183 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4184 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4185 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4186 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4187 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4188
4189 # if LDBL_MANT_DIG > 100
4190 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4191 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4192 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4193 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4194 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4195 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4196 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4197 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4198 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4199 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4200 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4201 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4202 # endif
4203 #endif
4204
4205 END (llrint);
4206 }
4207
4208 static void
4209 llrint_test_tonearest (void)
4210 {
4211 int save_round_mode;
4212 START (llrint_tonearest);
4213
4214 save_round_mode = fegetround ();
4215
4216 if (!fesetround (FE_TONEAREST))
4217 {
4218 TEST_f_L (llrint, 0.0, 0);
4219 TEST_f_L (llrint, minus_zero, 0);
4220 TEST_f_L (llrint, 0.2L, 0);
4221 TEST_f_L (llrint, -0.2L, 0);
4222
4223 TEST_f_L (llrint, 1.4L, 1);
4224 TEST_f_L (llrint, -1.4L, -1);
4225
4226 TEST_f_L (llrint, 8388600.3L, 8388600);
4227 TEST_f_L (llrint, -8388600.3L, -8388600);
4228
4229 TEST_f_l (llrint, 1071930.0008, 1071930);
4230
4231 /* Test boundary conditions. */
4232 /* 0x1FFFFF */
4233 TEST_f_L (llrint, 2097151.0,2097151LL);
4234 /* 0x800000 */
4235 TEST_f_L (llrint, 8388608.0, 8388608LL);
4236 /* 0x1000000 */
4237 TEST_f_L (llrint, 16777216.0, 16777216LL);
4238 /* 0x20000000000 */
4239 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4240 /* 0x40000000000 */
4241 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4242 /* 0x1000000000000 */
4243 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4244 /* 0x10000000000000 */
4245 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4246 /* 0x10000080000000 */
4247 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4248 /* 0x20000000000000 */
4249 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4250 /* 0x80000000000000 */
4251 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4252 /* 0x100000000000000 */
4253 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4254 #ifdef TEST_LDOUBLE
4255 /* The input can only be represented in long double. */
4256 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4257 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4258 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4259 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4260 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4261
4262 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4263 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4264 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4265 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4266 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4267
4268 # if LDBL_MANT_DIG > 100
4269 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4270 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4271 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4272 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4273 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4274 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4275
4276 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4277 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4278 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4279 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4280 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4281 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4282 #endif
4283
4284 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4285 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4286 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4287 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4288 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4289
4290 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4291 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4292 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4293 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4294 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4295
4296 # if LDBL_MANT_DIG > 100
4297 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4298 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4299 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4300 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4301 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4302 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4303
4304 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4305 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4306 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4307 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4308 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4309 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4310 #endif
4311
4312 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4313 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4314 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4315 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4316 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4317
4318 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4319 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4320 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4321 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4322 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4323
4324 # if LDBL_MANT_DIG > 100
4325 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4326 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4327 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4328 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4329 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4330 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4331 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4332 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4333 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4334 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4335 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4336 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4337 # endif
4338 #endif
4339 }
4340
4341 fesetround (save_round_mode);
4342
4343 END (llrint_tonearest);
4344 }
4345
4346 static void
4347 llrint_test_towardzero (void)
4348 {
4349 int save_round_mode;
4350 START (llrint_towardzero);
4351
4352 save_round_mode = fegetround ();
4353
4354 if (!fesetround (FE_TOWARDZERO))
4355 {
4356 TEST_f_L (llrint, 0.0, 0);
4357 TEST_f_L (llrint, minus_zero, 0);
4358 TEST_f_L (llrint, 0.2L, 0);
4359 TEST_f_L (llrint, -0.2L, 0);
4360
4361 TEST_f_L (llrint, 1.4L, 1);
4362 TEST_f_L (llrint, -1.4L, -1);
4363
4364 TEST_f_L (llrint, 8388600.3L, 8388600);
4365 TEST_f_L (llrint, -8388600.3L, -8388600);
4366
4367 TEST_f_l (llrint, 1071930.0008, 1071930);
4368
4369 /* Test boundary conditions. */
4370 /* 0x1FFFFF */
4371 TEST_f_L (llrint, 2097151.0,2097151LL);
4372 /* 0x800000 */
4373 TEST_f_L (llrint, 8388608.0, 8388608LL);
4374 /* 0x1000000 */
4375 TEST_f_L (llrint, 16777216.0, 16777216LL);
4376 /* 0x20000000000 */
4377 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4378 /* 0x40000000000 */
4379 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4380 /* 0x1000000000000 */
4381 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4382 /* 0x10000000000000 */
4383 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4384 /* 0x10000080000000 */
4385 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4386 /* 0x20000000000000 */
4387 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4388 /* 0x80000000000000 */
4389 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4390 /* 0x100000000000000 */
4391 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4392 #ifdef TEST_LDOUBLE
4393 /* The input can only be represented in long double. */
4394 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4395 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4396 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4397 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4398 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4399
4400 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4401 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4402 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4403 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4404 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4405
4406 # if LDBL_MANT_DIG > 100
4407 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4408 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4409 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4410 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4411 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4412 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4413
4414 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4415 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4416 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4417 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4418 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4419 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4420 #endif
4421
4422 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4423 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4424 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4425 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4426 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4427
4428 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4429 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4430 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4431 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4432 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4433
4434 # if LDBL_MANT_DIG > 100
4435 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4436 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4437 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4438 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4439 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4440 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4441
4442 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4443 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4444 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4445 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4446 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4447 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4448 #endif
4449
4450 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4451 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4452 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4453 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4454 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4455
4456 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4457 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4458 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4459 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4460 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4461
4462 # if LDBL_MANT_DIG > 100
4463 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4464 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4465 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4466 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4467 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4468 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4469 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4470 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4471 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4472 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4473 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4474 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4475 # endif
4476 #endif
4477 }
4478
4479 fesetround (save_round_mode);
4480
4481 END (llrint_towardzero);
4482 }
4483
4484 static void
4485 llrint_test_downward (void)
4486 {
4487 int save_round_mode;
4488 START (llrint_downward);
4489
4490 save_round_mode = fegetround ();
4491
4492 if (!fesetround (FE_DOWNWARD))
4493 {
4494 TEST_f_L (llrint, 0.0, 0);
4495 TEST_f_L (llrint, minus_zero, 0);
4496 TEST_f_L (llrint, 0.2L, 0);
4497 TEST_f_L (llrint, -0.2L, -1);
4498
4499 TEST_f_L (llrint, 1.4L, 1);
4500 TEST_f_L (llrint, -1.4L, -2);
4501
4502 TEST_f_L (llrint, 8388600.3L, 8388600);
4503 TEST_f_L (llrint, -8388600.3L, -8388601);
4504
4505 TEST_f_l (llrint, 1071930.0008, 1071930);
4506
4507 /* Test boundary conditions. */
4508 /* 0x1FFFFF */
4509 TEST_f_L (llrint, 2097151.0,2097151LL);
4510 /* 0x800000 */
4511 TEST_f_L (llrint, 8388608.0, 8388608LL);
4512 /* 0x1000000 */
4513 TEST_f_L (llrint, 16777216.0, 16777216LL);
4514 /* 0x20000000000 */
4515 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4516 /* 0x40000000000 */
4517 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4518 /* 0x1000000000000 */
4519 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4520 /* 0x10000000000000 */
4521 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4522 /* 0x10000080000000 */
4523 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4524 /* 0x20000000000000 */
4525 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4526 /* 0x80000000000000 */
4527 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4528 /* 0x100000000000000 */
4529 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4530 #ifdef TEST_LDOUBLE
4531 /* The input can only be represented in long double. */
4532 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4533 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4534 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4535 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4536 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4537
4538 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4539 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4540 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4541 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4542 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4543 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4544
4545 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4546 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
4547 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
4548 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4549 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4550
4551 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
4552 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
4553 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
4554 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4555 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4556 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4557
4558 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4559 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4560 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4561 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4562 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4563
4564 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4565 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4566 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4567 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4568 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4569 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4570
4571 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4572 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
4573 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
4574 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4575 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4576
4577 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
4578 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
4579 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
4580 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4581 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4582 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4583
4584 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4585 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4586 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4587 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4588 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4589
4590 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4591 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
4592 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
4593 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4594 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4595
4596 # if LDBL_MANT_DIG > 100
4597 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4598 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4599 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4600 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4601 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4602 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
4603 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4604 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
4605 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4606 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4607 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4608 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4609 # endif
4610 #endif
4611 }
4612
4613 fesetround (save_round_mode);
4614
4615 END (llrint_downward);
4616 }
4617
4618 static void
4619 llrint_test_upward (void)
4620 {
4621 int save_round_mode;
4622 START (llrint_upward);
4623
4624 save_round_mode = fegetround ();
4625
4626 if (!fesetround (FE_UPWARD))
4627 {
4628 TEST_f_L (llrint, 0.0, 0);
4629 TEST_f_L (llrint, minus_zero, 0);
4630 TEST_f_L (llrint, 0.2L, 1);
4631 TEST_f_L (llrint, -0.2L, 0);
4632
4633 TEST_f_L (llrint, 1.4L, 2);
4634 TEST_f_L (llrint, -1.4L, -1);
4635
4636 TEST_f_L (llrint, 8388600.3L, 8388601);
4637 TEST_f_L (llrint, -8388600.3L, -8388600);
4638 #ifndef TEST_FLOAT
4639 TEST_f_l (llrint, 1071930.0008, 1071931);
4640 #endif
4641 /* Test boundary conditions. */
4642 /* 0x1FFFFF */
4643 TEST_f_L (llrint, 2097151.0,2097151LL);
4644 /* 0x800000 */
4645 TEST_f_L (llrint, 8388608.0, 8388608LL);
4646 /* 0x1000000 */
4647 TEST_f_L (llrint, 16777216.0, 16777216LL);
4648 /* 0x20000000000 */
4649 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4650 /* 0x40000000000 */
4651 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4652 /* 0x1000000000000 */
4653 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4654 /* 0x10000000000000 */
4655 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4656 /* 0x10000080000000 */
4657 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4658 /* 0x20000000000000 */
4659 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4660 /* 0x80000000000000 */
4661 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4662 /* 0x100000000000000 */
4663 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4664 #ifdef TEST_LDOUBLE
4665 /* The input can only be represented in long double. */
4666 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4667 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
4668 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
4669 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4670 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4671
4672 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
4673 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
4674 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
4675 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4676 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4677 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4678
4679 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4680 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4681 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4682 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4683 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4684
4685 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4686 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4687 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4688 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4689 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4690 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4691
4692 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4693 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
4694 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
4695 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4696 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4697
4698 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
4699 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
4700 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
4701 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4702 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4703 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4704
4705 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4706 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4707 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4708 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4709 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4710
4711 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4712 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4713 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4714 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4715 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4716 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4717
4718 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4719 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
4720 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
4721 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4722 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4723
4724 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4725 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4726 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4727 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4728 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4729
4730 # if LDBL_MANT_DIG > 100
4731 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4732 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4733 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4734 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4735 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
4736 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4737 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
4738 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4739 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4740 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4741 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4742 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4743 # endif
4744 #endif
4745 }
4746
4747 fesetround (save_round_mode);
4748
4749 END (llrint_upward);
4750 }
4751
4752
4753 static void
4754 log_test (void)
4755 {
4756 errno = 0;
4757 FUNC(log) (1);
4758 if (errno == ENOSYS)
4759 /* Function not implemented. */
4760 return;
4761 START (log);
4762
4763 TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4764 TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4765
4766 TEST_f_f (log, 1, 0);
4767
4768 TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
4769 TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
4770 TEST_f_f (log, plus_infty, plus_infty);
4771 TEST_f_f (log, nan_value, nan_value);
4772
4773 TEST_f_f (log, M_El, 1);
4774 TEST_f_f (log, 1.0 / M_El, -1);
4775 TEST_f_f (log, 2, M_LN2l);
4776 TEST_f_f (log, 10, M_LN10l);
4777 TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
4778
4779 END (log);
4780 }
4781
4782
4783 static void
4784 log10_test (void)
4785 {
4786 errno = 0;
4787 FUNC(log10) (1);
4788 if (errno == ENOSYS)
4789 /* Function not implemented. */
4790 return;
4791
4792 START (log10);
4793
4794 TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4795 TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4796
4797 TEST_f_f (log10, 1, 0);
4798
4799 /* log10 (x) == NaN plus invalid exception if x < 0. */
4800 TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
4801 TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
4802
4803 TEST_f_f (log10, plus_infty, plus_infty);
4804 TEST_f_f (log10, nan_value, nan_value);
4805
4806 TEST_f_f (log10, 0.1L, -1);
4807 TEST_f_f (log10, 10.0, 1);
4808 TEST_f_f (log10, 100.0, 2);
4809 TEST_f_f (log10, 10000.0, 4);
4810 TEST_f_f (log10, M_El, M_LOG10El);
4811 TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
4812
4813 END (log10);
4814 }
4815
4816
4817 static void
4818 log1p_test (void)
4819 {
4820 errno = 0;
4821 FUNC(log1p) (0);
4822 if (errno == ENOSYS)
4823 /* Function not implemented. */
4824 return;
4825
4826 START (log1p);
4827
4828 TEST_f_f (log1p, 0, 0);
4829 TEST_f_f (log1p, minus_zero, minus_zero);
4830
4831 TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4832 TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
4833 TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
4834
4835 TEST_f_f (log1p, plus_infty, plus_infty);
4836 TEST_f_f (log1p, nan_value, nan_value);
4837
4838 TEST_f_f (log1p, M_El - 1.0, 1);
4839
4840 TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
4841 TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
4842
4843 END (log1p);
4844 }
4845
4846
4847 static void
4848 log2_test (void)
4849 {
4850 errno = 0;
4851 FUNC(log2) (1);
4852 if (errno == ENOSYS)
4853 /* Function not implemented. */
4854 return;
4855
4856 START (log2);
4857
4858 TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4859 TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4860
4861 TEST_f_f (log2, 1, 0);
4862
4863 TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
4864 TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
4865
4866 TEST_f_f (log2, plus_infty, plus_infty);
4867 TEST_f_f (log2, nan_value, nan_value);
4868
4869 TEST_f_f (log2, M_El, M_LOG2El);
4870 TEST_f_f (log2, 2.0, 1);
4871 TEST_f_f (log2, 16.0, 4);
4872 TEST_f_f (log2, 256.0, 8);
4873 TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
4874
4875 END (log2);
4876 }
4877
4878
4879 static void
4880 logb_test (void)
4881 {
4882 START (logb);
4883
4884 TEST_f_f (logb, plus_infty, plus_infty);
4885 TEST_f_f (logb, minus_infty, plus_infty);
4886
4887 TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4888
4889 TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4890 TEST_f_f (logb, nan_value, nan_value);
4891
4892 TEST_f_f (logb, 1, 0);
4893 TEST_f_f (logb, M_El, 1);
4894 TEST_f_f (logb, 1024, 10);
4895 TEST_f_f (logb, -2000, 10);
4896
4897 END (logb);
4898 }
4899
4900
4901 static void
4902 lround_test (void)
4903 {
4904 START (lround);
4905
4906 TEST_f_l (lround, 0, 0);
4907 TEST_f_l (lround, minus_zero, 0);
4908 TEST_f_l (lround, 0.2L, 0.0);
4909 TEST_f_l (lround, -0.2L, 0);
4910 TEST_f_l (lround, 0.5, 1);
4911 TEST_f_l (lround, -0.5, -1);
4912 TEST_f_l (lround, 0.8L, 1);
4913 TEST_f_l (lround, -0.8L, -1);
4914 TEST_f_l (lround, 1.5, 2);
4915 TEST_f_l (lround, -1.5, -2);
4916 TEST_f_l (lround, 22514.5, 22515);
4917 TEST_f_l (lround, -22514.5, -22515);
4918 TEST_f_l (lround, 1071930.0008, 1071930);
4919 #ifndef TEST_FLOAT
4920 TEST_f_l (lround, 1073741824.01, 1073741824);
4921 # if LONG_MAX > 281474976710656
4922 TEST_f_l (lround, 281474976710656.025, 281474976710656);
4923 TEST_f_l (lround, 18014398509481974, 18014398509481974);
4924 # endif
4925 TEST_f_l (lround, 2097152.5, 2097153);
4926 TEST_f_l (lround, -2097152.5, -2097153);
4927 /* nextafter(0.5,-1) */
4928 TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
4929 /* nextafter(-0.5,1) */
4930 TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
4931 #else
4932 /* nextafter(0.5,-1) */
4933 TEST_f_l (lround, 0x1.fffffp-2, 0);
4934 /* nextafter(-0.5,1) */
4935 TEST_f_l (lround, -0x1.fffffp-2, 0);
4936 TEST_f_l (lround, 0x1.fffffep+23, 16777215);
4937 TEST_f_l (lround, -0x1.fffffep+23, -16777215);
4938 #endif
4939 END (lround);
4940 }
4941
4942
4943 static void
4944 llround_test (void)
4945 {
4946 START (llround);
4947
4948 TEST_f_L (llround, 0, 0);
4949 TEST_f_L (llround, minus_zero, 0);
4950 TEST_f_L (llround, 0.2L, 0.0);
4951 TEST_f_L (llround, -0.2L, 0);
4952 TEST_f_L (llround, 0.5, 1);
4953 TEST_f_L (llround, -0.5, -1);
4954 TEST_f_L (llround, 0.8L, 1);
4955 TEST_f_L (llround, -0.8L, -1);
4956 TEST_f_L (llround, 1.5, 2);
4957 TEST_f_L (llround, -1.5, -2);
4958 TEST_f_L (llround, 22514.5, 22515);
4959 TEST_f_L (llround, -22514.5, -22515);
4960 TEST_f_l (llround, 1071930.0008, 1071930);
4961 #ifndef TEST_FLOAT
4962 TEST_f_L (llround, 2097152.5, 2097153);
4963 TEST_f_L (llround, -2097152.5, -2097153);
4964 TEST_f_L (llround, 34359738368.5, 34359738369ll);
4965 TEST_f_L (llround, -34359738368.5, -34359738369ll);
4966 TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
4967 #endif
4968
4969 /* Test boundary conditions. */
4970 /* 0x1FFFFF */
4971 TEST_f_L (llround, 2097151.0, 2097151LL);
4972 /* 0x800000 */
4973 TEST_f_L (llround, 8388608.0, 8388608LL);
4974 /* 0x1000000 */
4975 TEST_f_L (llround, 16777216.0, 16777216LL);
4976 /* 0x20000000000 */
4977 TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
4978 /* 0x40000000000 */
4979 TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
4980 /* 0x1000000000000 */
4981 TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
4982 /* 0x10000000000000 */
4983 TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
4984 /* 0x10000080000000 */
4985 TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
4986 /* 0x20000000000000 */
4987 TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
4988 /* 0x80000000000000 */
4989 TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
4990 /* 0x100000000000000 */
4991 TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
4992
4993 #ifndef TEST_FLOAT
4994 /* 0x100000000 */
4995 TEST_f_L (llround, 4294967295.5, 4294967296LL);
4996 /* 0x200000000 */
4997 TEST_f_L (llround, 8589934591.5, 8589934592LL);
4998
4999 /* nextafter(0.5,-1) */
5000 TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
5001 /* nextafter(-0.5,1) */
5002 TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
5003 /* On PowerPC an exponent of '52' is the largest incrementally
5004 * representable sequence of whole-numbers in the 'double' range. We test
5005 * lround to make sure that a guard bit set during the lround operation
5006 * hasn't forced an erroneous shift giving us an incorrect result. The odd
5007 * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
5008 * rightmost bit set. */
5009 /* +-(2^52+1) */
5010 TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
5011 TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
5012 /* +-(2^53-1): Input is the last (positive and negative) incrementally
5013 * representable whole-number in the 'double' range that might round
5014 * erroneously. */
5015 TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
5016 TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
5017 #else
5018 /* nextafter(0.5,-1) */
5019 TEST_f_L (llround, 0x1.fffffep-2, 0);
5020 /* nextafter(-0.5,1) */
5021 TEST_f_L (llround, -0x1.fffffep-2, 0);
5022 /* As above, on PowerPC an exponent of '23' is the largest incrementally
5023 * representable sequence of whole-numbers in the 'float' range.
5024 * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
5025 TEST_f_L (llround, 0x1.000002p+23,8388609);
5026 TEST_f_L (llround, -0x1.000002p+23,-8388609);
5027 TEST_f_L (llround, 0x1.fffffep+23, 16777215);
5028 TEST_f_L (llround, -0x1.fffffep+23, -16777215);
5029 #endif
5030
5031
5032 #ifdef TEST_LDOUBLE
5033 /* The input can only be represented in long double. */
5034 TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
5035 TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
5036 TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
5037 TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
5038 TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
5039
5040 # if LDBL_MANT_DIG > 100
5041 TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
5042 TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
5043 TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
5044 TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
5045 TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
5046 TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
5047
5048 TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
5049 TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
5050 TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
5051 TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
5052 TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
5053 TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
5054 # endif
5055
5056 TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
5057 TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
5058 TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
5059 TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
5060 TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
5061
5062 TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
5063 TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
5064 TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
5065 TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
5066 TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
5067
5068 # if LDBL_MANT_DIG > 100
5069 TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
5070 TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
5071 TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
5072 TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
5073 TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
5074 TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
5075
5076 TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
5077 TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
5078 TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
5079 TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
5080 TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
5081 TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
5082 # endif
5083
5084 TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
5085 TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
5086 TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
5087 TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
5088 TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
5089
5090 TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
5091 TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
5092 TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
5093 TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
5094 TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
5095
5096 TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
5097 TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
5098 TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
5099 TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
5100 TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
5101
5102 TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
5103 TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
5104 TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
5105 TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
5106 TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
5107 TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
5108 #endif
5109
5110 END (llround);
5111 }
5112
5113 static void
5114 modf_test (void)
5115 {
5116 FLOAT x;
5117
5118 START (modf);
5119
5120 TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
5121 TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
5122 TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
5123 TEST_fF_f1 (modf, 0, 0, 0);
5124 TEST_fF_f1 (modf, 1.5, 0.5, 1);
5125 TEST_fF_f1 (modf, 2.5, 0.5, 2);
5126 TEST_fF_f1 (modf, -2.5, -0.5, -2);
5127 TEST_fF_f1 (modf, 20, 0, 20);
5128 TEST_fF_f1 (modf, 21, 0, 21);
5129 TEST_fF_f1 (modf, 89.5, 0.5, 89);
5130
5131 END (modf);
5132 }
5133
5134
5135 static void
5136 nearbyint_test (void)
5137 {
5138 START (nearbyint);
5139
5140 TEST_f_f (nearbyint, 0.0, 0.0);
5141 TEST_f_f (nearbyint, minus_zero, minus_zero);
5142 TEST_f_f (nearbyint, plus_infty, plus_infty);
5143 TEST_f_f (nearbyint, minus_infty, minus_infty);
5144 TEST_f_f (nearbyint, nan_value, nan_value);
5145
5146 /* Subnormal values */
5147 TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
5148 TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
5149
5150 /* Default rounding mode is round to nearest. */
5151 TEST_f_f (nearbyint, 0.5, 0.0);
5152 TEST_f_f (nearbyint, 1.5, 2.0);
5153 TEST_f_f (nearbyint, -0.5, minus_zero);
5154 TEST_f_f (nearbyint, -1.5, -2.0);
5155
5156 TEST_f_f (nearbyint, 262144.75, 262145.0);
5157 TEST_f_f (nearbyint, 262142.75, 262143.0);
5158 TEST_f_f (nearbyint, 524286.75, 524287.0);
5159 TEST_f_f (nearbyint, 524288.75, 524289.0);
5160
5161 TEST_f_f (nearbyint, 1048576.75, 1048577.0);
5162 TEST_f_f (nearbyint, 2097152.75, 2097153.0);
5163 TEST_f_f (nearbyint, 2492472.75, 2492473.0);
5164 TEST_f_f (nearbyint, 2886220.75, 2886221.0);
5165 TEST_f_f (nearbyint, 3058792.75, 3058793.0);
5166 TEST_f_f (nearbyint, -1048576.75, -1048577.0);
5167 TEST_f_f (nearbyint, -2097152.75, -2097153.0);
5168 TEST_f_f (nearbyint, -2492472.75, -2492473.0);
5169 TEST_f_f (nearbyint, -2886220.75, -2886221.0);
5170 TEST_f_f (nearbyint, -3058792.75, -3058793.0);
5171 #ifndef TEST_FLOAT
5172 TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
5173 TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
5174 TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
5175 TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
5176 TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
5177 TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
5178 TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
5179 TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
5180 TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
5181 TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
5182 #endif
5183
5184 END (nearbyint);
5185 }
5186
5187 static void
5188 nextafter_test (void)
5189 {
5190
5191 START (nextafter);
5192
5193 TEST_ff_f (nextafter, 0, 0, 0);
5194 TEST_ff_f (nextafter, minus_zero, 0, 0);
5195 TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
5196 TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
5197
5198 TEST_ff_f (nextafter, 9, 9, 9);
5199 TEST_ff_f (nextafter, -9, -9, -9);
5200 TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
5201 TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
5202
5203 TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
5204 TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
5205 TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
5206
5207 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
5208 LDBL_MAX, DBL_MAX, FLT_MAX);
5209 TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
5210 TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
5211
5212 #ifdef TEST_LDOUBLE
5213 // XXX Enable once gcc is fixed.
5214 //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
5215 #endif
5216
5217 /* XXX We need the hexadecimal FP number representation here for further
5218 tests. */
5219
5220 END (nextafter);
5221 }
5222
5223
5224 static void
5225 nexttoward_test (void)
5226 {
5227 START (nexttoward);
5228 TEST_ff_f (nexttoward, 0, 0, 0);
5229 TEST_ff_f (nexttoward, minus_zero, 0, 0);
5230 TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
5231 TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
5232
5233 TEST_ff_f (nexttoward, 9, 9, 9);
5234 TEST_ff_f (nexttoward, -9, -9, -9);
5235 TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
5236 TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
5237
5238 TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
5239 TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
5240 TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
5241
5242 /* XXX We need the hexadecimal FP number representation here for further
5243 tests. */
5244
5245 END (nexttoward);
5246 }
5247
5248
5249 static void
5250 pow_test (void)
5251 {
5252
5253 errno = 0;
5254 FUNC(pow) (0, 0);
5255 if (errno == ENOSYS)
5256 /* Function not implemented. */
5257 return;
5258
5259 START (pow);
5260
5261 TEST_ff_f (pow, 0, 0, 1);
5262 TEST_ff_f (pow, 0, minus_zero, 1);
5263 TEST_ff_f (pow, minus_zero, 0, 1);
5264 TEST_ff_f (pow, minus_zero, minus_zero, 1);
5265
5266 TEST_ff_f (pow, 10, 0, 1);
5267 TEST_ff_f (pow, 10, minus_zero, 1);
5268 TEST_ff_f (pow, -10, 0, 1);
5269 TEST_ff_f (pow, -10, minus_zero, 1);
5270
5271 TEST_ff_f (pow, nan_value, 0, 1);
5272 TEST_ff_f (pow, nan_value, minus_zero, 1);
5273
5274
5275 #ifndef TEST_INLINE
5276 TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
5277 TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
5278 TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
5279 TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
5280
5281 TEST_ff_f (pow, 0.9L, plus_infty, 0);
5282 TEST_ff_f (pow, 1e-7L, plus_infty, 0);
5283 TEST_ff_f (pow, -0.9L, plus_infty, 0);
5284 TEST_ff_f (pow, -1e-7L, plus_infty, 0);
5285
5286 TEST_ff_f (pow, 1.1L, minus_infty, 0);
5287 TEST_ff_f (pow, plus_infty, minus_infty, 0);
5288 TEST_ff_f (pow, -1.1L, minus_infty, 0);
5289 TEST_ff_f (pow, minus_infty, minus_infty, 0);
5290
5291 TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
5292 TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
5293 TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
5294 TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
5295
5296 TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
5297 TEST_ff_f (pow, plus_infty, 1, plus_infty);
5298 TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
5299
5300 TEST_ff_f (pow, plus_infty, -1e-7L, 0);
5301 TEST_ff_f (pow, plus_infty, -1, 0);
5302 TEST_ff_f (pow, plus_infty, -1e7L, 0);
5303
5304 TEST_ff_f (pow, minus_infty, 1, minus_infty);
5305 TEST_ff_f (pow, minus_infty, 11, minus_infty);
5306 TEST_ff_f (pow, minus_infty, 1001, minus_infty);
5307
5308 TEST_ff_f (pow, minus_infty, 2, plus_infty);
5309 TEST_ff_f (pow, minus_infty, 12, plus_infty);
5310 TEST_ff_f (pow, minus_infty, 1002, plus_infty);
5311 TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
5312 TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
5313 TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
5314 TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
5315
5316 TEST_ff_f (pow, minus_infty, -1, minus_zero);
5317 TEST_ff_f (pow, minus_infty, -11, minus_zero);
5318 TEST_ff_f (pow, minus_infty, -1001, minus_zero);
5319
5320 TEST_ff_f (pow, minus_infty, -2, 0);
5321 TEST_ff_f (pow, minus_infty, -12, 0);
5322 TEST_ff_f (pow, minus_infty, -1002, 0);
5323 TEST_ff_f (pow, minus_infty, -0.1L, 0);
5324 TEST_ff_f (pow, minus_infty, -1.1L, 0);
5325 TEST_ff_f (pow, minus_infty, -11.1L, 0);
5326 TEST_ff_f (pow, minus_infty, -1001.1L, 0);
5327 #endif
5328
5329 TEST_ff_f (pow, nan_value, nan_value, nan_value);
5330 TEST_ff_f (pow, 0, nan_value, nan_value);
5331 TEST_ff_f (pow, 1, nan_value, 1);
5332 TEST_ff_f (pow, -1, nan_value, nan_value);
5333 TEST_ff_f (pow, nan_value, 1, nan_value);
5334 TEST_ff_f (pow, nan_value, -1, nan_value);
5335
5336 /* pow (x, NaN) == NaN. */
5337 TEST_ff_f (pow, 3.0, nan_value, nan_value);
5338 TEST_ff_f (pow, minus_zero, nan_value, nan_value);
5339 TEST_ff_f (pow, plus_infty, nan_value, nan_value);
5340 TEST_ff_f (pow, -3.0, nan_value, nan_value);
5341 TEST_ff_f (pow, minus_infty, nan_value, nan_value);
5342
5343 TEST_ff_f (pow, nan_value, 3.0, nan_value);
5344 TEST_ff_f (pow, nan_value, -3.0, nan_value);
5345 TEST_ff_f (pow, nan_value, plus_infty, nan_value);
5346 TEST_ff_f (pow, nan_value, minus_infty, nan_value);
5347 TEST_ff_f (pow, nan_value, 2.5, nan_value);
5348 TEST_ff_f (pow, nan_value, -2.5, nan_value);
5349
5350 TEST_ff_f (pow, 1, plus_infty, 1);
5351 TEST_ff_f (pow, -1, plus_infty, 1);
5352 TEST_ff_f (pow, 1, minus_infty, 1);
5353 TEST_ff_f (pow, -1, minus_infty, 1);
5354 TEST_ff_f (pow, 1, 1, 1);
5355 TEST_ff_f (pow, 1, -1, 1);
5356 TEST_ff_f (pow, 1, 1.25, 1);
5357 TEST_ff_f (pow, 1, -1.25, 1);
5358 TEST_ff_f (pow, 1, 0x1p62L, 1);
5359 TEST_ff_f (pow, 1, 0x1p63L, 1);
5360 TEST_ff_f (pow, 1, 0x1p64L, 1);
5361 TEST_ff_f (pow, 1, 0x1p72L, 1);
5362
5363 /* pow (x, +-0) == 1. */
5364 TEST_ff_f (pow, plus_infty, 0, 1);
5365 TEST_ff_f (pow, plus_infty, minus_zero, 1);
5366 TEST_ff_f (pow, minus_infty, 0, 1);
5367 TEST_ff_f (pow, minus_infty, minus_zero, 1);
5368 TEST_ff_f (pow, 32.75L, 0, 1);
5369 TEST_ff_f (pow, 32.75L, minus_zero, 1);
5370 TEST_ff_f (pow, -32.75L, 0, 1);
5371 TEST_ff_f (pow, -32.75L, minus_zero, 1);
5372 TEST_ff_f (pow, 0x1p72L, 0, 1);
5373 TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
5374 TEST_ff_f (pow, 0x1p-72L, 0, 1);
5375 TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
5376
5377 TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5378 TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5379 TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5380 TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5381
5382 errno = 0;
5383 TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5384 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5385 errno = 0;
5386 TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5387 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5388 errno = 0;
5389 TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5390 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5391 errno = 0;
5392 TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5393 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5394
5395 errno = 0;
5396 TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5397 check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5398 errno = 0;
5399 TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5400 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5401 errno = 0;
5402 TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5403 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5404 errno = 0;
5405 TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5406 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5407
5408 TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty);
5409 TEST_ff_f (pow, 10, -0x1p72L, 0);
5410 TEST_ff_f (pow, max_value, max_value, plus_infty);
5411 TEST_ff_f (pow, 10, -max_value, 0);
5412
5413 TEST_ff_f (pow, 0, 1, 0);
5414 TEST_ff_f (pow, 0, 11, 0);
5415
5416 TEST_ff_f (pow, minus_zero, 1, minus_zero);
5417 TEST_ff_f (pow, minus_zero, 11, minus_zero);
5418
5419 TEST_ff_f (pow, 0, 2, 0);
5420 TEST_ff_f (pow, 0, 11.1L, 0);
5421
5422 TEST_ff_f (pow, minus_zero, 2, 0);
5423 TEST_ff_f (pow, minus_zero, 11.1L, 0);
5424 TEST_ff_f (pow, 0, plus_infty, 0);
5425 TEST_ff_f (pow, minus_zero, plus_infty, 0);
5426
5427 #ifndef TEST_INLINE
5428 /* pow (x, +inf) == +inf for |x| > 1. */
5429 TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
5430
5431 /* pow (x, +inf) == +0 for |x| < 1. */
5432 TEST_ff_f (pow, 0.5, plus_infty, 0.0);
5433
5434 /* pow (x, -inf) == +0 for |x| > 1. */
5435 TEST_ff_f (pow, 1.5, minus_infty, 0.0);
5436
5437 /* pow (x, -inf) == +inf for |x| < 1. */
5438 TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
5439 #endif
5440
5441 /* pow (+inf, y) == +inf for y > 0. */
5442 TEST_ff_f (pow, plus_infty, 2, plus_infty);
5443
5444 /* pow (+inf, y) == +0 for y < 0. */
5445 TEST_ff_f (pow, plus_infty, -1, 0.0);
5446
5447 /* pow (-inf, y) == -inf for y an odd integer > 0. */
5448 TEST_ff_f (pow, minus_infty, 27, minus_infty);
5449
5450 /* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
5451 TEST_ff_f (pow, minus_infty, 28, plus_infty);
5452
5453 /* pow (-inf, y) == -0 for y an odd integer < 0. */
5454 TEST_ff_f (pow, minus_infty, -3, minus_zero);
5455 /* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
5456 TEST_ff_f (pow, minus_infty, -2.0, 0.0);
5457
5458 /* pow (+0, y) == +0 for y an odd integer > 0. */
5459 TEST_ff_f (pow, 0.0, 27, 0.0);
5460
5461 /* pow (-0, y) == -0 for y an odd integer > 0. */
5462 TEST_ff_f (pow, minus_zero, 27, minus_zero);
5463
5464 /* pow (+0, y) == +0 for y > 0 and not an odd integer. */
5465 TEST_ff_f (pow, 0.0, 4, 0.0);
5466
5467 /* pow (-0, y) == +0 for y > 0 and not an odd integer. */
5468 TEST_ff_f (pow, minus_zero, 4, 0.0);
5469
5470 TEST_ff_f (pow, 16, 0.25L, 2);
5471 TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
5472 TEST_ff_f (pow, 2, 4, 16);
5473 TEST_ff_f (pow, 256, 8, 0x1p64L);
5474
5475 TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
5476
5477 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
5478 TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
5479 #endif
5480
5481 END (pow);
5482 }
5483
5484
5485 static void
5486 pow_test_tonearest (void)
5487 {
5488 int save_round_mode;
5489 errno = 0;
5490 FUNC(pow) (0, 0);
5491 if (errno == ENOSYS)
5492 /* Function not implemented. */
5493 return;
5494
5495 START (pow_tonearest);
5496
5497 save_round_mode = fegetround ();
5498
5499 if (!fesetround (FE_TONEAREST))
5500 {
5501 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5502 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5503 }
5504
5505 fesetround (save_round_mode);
5506
5507 END (pow_tonearest);
5508 }
5509
5510
5511 static void
5512 pow_test_towardzero (void)
5513 {
5514 int save_round_mode;
5515 errno = 0;
5516 FUNC(pow) (0, 0);
5517 if (errno == ENOSYS)
5518 /* Function not implemented. */
5519 return;
5520
5521 START (pow_towardzero);
5522
5523 save_round_mode = fegetround ();
5524
5525 if (!fesetround (FE_TOWARDZERO))
5526 {
5527 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5528 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5529 }
5530
5531 fesetround (save_round_mode);
5532
5533 END (pow_towardzero);
5534 }
5535
5536
5537 static void
5538 pow_test_downward (void)
5539 {
5540 int save_round_mode;
5541 errno = 0;
5542 FUNC(pow) (0, 0);
5543 if (errno == ENOSYS)
5544 /* Function not implemented. */
5545 return;
5546
5547 START (pow_downward);
5548
5549 save_round_mode = fegetround ();
5550
5551 if (!fesetround (FE_DOWNWARD))
5552 {
5553 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5554 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5555 }
5556
5557 fesetround (save_round_mode);
5558
5559 END (pow_downward);
5560 }
5561
5562
5563 static void
5564 pow_test_upward (void)
5565 {
5566 int save_round_mode;
5567 errno = 0;
5568 FUNC(pow) (0, 0);
5569 if (errno == ENOSYS)
5570 /* Function not implemented. */
5571 return;
5572
5573 START (pow_upward);
5574
5575 save_round_mode = fegetround ();
5576
5577 if (!fesetround (FE_UPWARD))
5578 {
5579 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5580 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5581 }
5582
5583 fesetround (save_round_mode);
5584
5585 END (pow_upward);
5586 }
5587
5588
5589 static void
5590 remainder_test (void)
5591 {
5592 errno = 0;
5593 FUNC(remainder) (1.625, 1.0);
5594 if (errno == ENOSYS)
5595 /* Function not implemented. */
5596 return;
5597
5598 START (remainder);
5599
5600 errno = 0;
5601 TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
5602 check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
5603 errno = 0;
5604 TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
5605 check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
5606 errno = 0;
5607 TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
5608 check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5609 errno = 0;
5610 TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
5611 check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5612 errno = 0;
5613 TEST_ff_f (remainder, nan_value, nan_value, nan_value);
5614 check_int ("errno for remainder(NAN, NAN) unchanged", errno, 0, 0, 0, 0);
5615 errno = 0;
5616 TEST_ff_f (remainder, 0, nan_value, nan_value);
5617 check_int ("errno for remainder(0, NAN) unchanged", errno, 0, 0, 0, 0);
5618 errno = 0;
5619 TEST_ff_f (remainder, nan_value, 0, nan_value);
5620 check_int ("errno for remainder(NaN, 0) unchanged", errno, 0, 0, 0, 0);
5621
5622 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
5623 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
5624 TEST_ff_f (remainder, 1.625, -1.0, -0.375);
5625 TEST_ff_f (remainder, -1.625, -1.0, 0.375);
5626 TEST_ff_f (remainder, 5.0, 2.0, 1.0);
5627 TEST_ff_f (remainder, 3.0, 2.0, -1.0);
5628
5629 END (remainder);
5630 }
5631
5632 static void
5633 remquo_test (void)
5634 {
5635 /* x is needed. */
5636 int x;
5637
5638 errno = 0;
5639 FUNC(remquo) (1.625, 1.0, &x);
5640 if (errno == ENOSYS)
5641 /* Function not implemented. */
5642 return;
5643
5644 START (remquo);
5645
5646 TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
5647 TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
5648 TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5649 TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5650 TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
5651
5652 TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
5653 TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
5654 TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
5655 TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
5656
5657 TEST_ffI_f1 (remquo, 5, 2, 1, 2);
5658 TEST_ffI_f1 (remquo, 3, 2, -1, 2);
5659
5660 END (remquo);
5661 }
5662
5663 static void
5664 rint_test (void)
5665 {
5666 START (rint);
5667
5668 TEST_f_f (rint, 0.0, 0.0);
5669 TEST_f_f (rint, minus_zero, minus_zero);
5670 TEST_f_f (rint, plus_infty, plus_infty);
5671 TEST_f_f (rint, minus_infty, minus_infty);
5672
5673 /* Default rounding mode is round to even. */
5674 TEST_f_f (rint, 0.5, 0.0);
5675 TEST_f_f (rint, 1.5, 2.0);
5676 TEST_f_f (rint, 2.5, 2.0);
5677 TEST_f_f (rint, 3.5, 4.0);
5678 TEST_f_f (rint, 4.5, 4.0);
5679 TEST_f_f (rint, -0.5, -0.0);
5680 TEST_f_f (rint, -1.5, -2.0);
5681 TEST_f_f (rint, -2.5, -2.0);
5682 TEST_f_f (rint, -3.5, -4.0);
5683 TEST_f_f (rint, -4.5, -4.0);
5684 TEST_f_f (rint, 0.1, 0.0);
5685 TEST_f_f (rint, 0.25, 0.0);
5686 TEST_f_f (rint, 0.625, 1.0);
5687 TEST_f_f (rint, -0.1, -0.0);
5688 TEST_f_f (rint, -0.25, -0.0);
5689 TEST_f_f (rint, -0.625, -1.0);
5690 TEST_f_f (rint, 262144.75, 262145.0);
5691 TEST_f_f (rint, 262142.75, 262143.0);
5692 TEST_f_f (rint, 524286.75, 524287.0);
5693 TEST_f_f (rint, 524288.75, 524289.0);
5694 TEST_f_f (rint, 1048576.75, 1048577.0);
5695 TEST_f_f (rint, 2097152.75, 2097153.0);
5696 TEST_f_f (rint, -1048576.75, -1048577.0);
5697 TEST_f_f (rint, -2097152.75, -2097153.0);
5698 #ifndef TEST_FLOAT
5699 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5700 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5701 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5702 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5703 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5704 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5705 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5706 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5707 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5708 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5709 #endif
5710 #ifdef TEST_LDOUBLE
5711 /* The result can only be represented in long double. */
5712 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5713 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5714 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5715 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5716 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5717
5718 # if LDBL_MANT_DIG > 100
5719 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5720 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5721 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5722 # endif
5723
5724 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5725 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5726 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5727 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5728 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5729
5730 # if LDBL_MANT_DIG > 100
5731 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5732 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5733 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5734
5735 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5736 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5737 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5738 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5739 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5740 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5741
5742 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5743 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5744 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5745 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5746 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5747 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5748 # endif
5749
5750 TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
5751 TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
5752 TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
5753 TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
5754 TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
5755
5756 TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
5757 TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
5758 TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
5759 TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
5760 TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
5761
5762 TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
5763 TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
5764 TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
5765 TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
5766 TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
5767
5768 TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
5769 TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
5770 TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
5771 TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
5772 TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
5773
5774 TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5775 TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5776 TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
5777 TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5778 TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5779 #endif
5780
5781 END (rint);
5782 }
5783
5784 static void
5785 rint_test_tonearest (void)
5786 {
5787 int save_round_mode;
5788 START (rint_tonearest);
5789
5790 save_round_mode = fegetround ();
5791
5792 if (!fesetround (FE_TONEAREST))
5793 {
5794 TEST_f_f (rint, 2.0, 2.0);
5795 TEST_f_f (rint, 1.5, 2.0);
5796 TEST_f_f (rint, 1.0, 1.0);
5797 TEST_f_f (rint, 0.5, 0.0);
5798 TEST_f_f (rint, 0.0, 0.0);
5799 TEST_f_f (rint, minus_zero, minus_zero);
5800 TEST_f_f (rint, -0.5, -0.0);
5801 TEST_f_f (rint, -1.0, -1.0);
5802 TEST_f_f (rint, -1.5, -2.0);
5803 TEST_f_f (rint, -2.0, -2.0);
5804 TEST_f_f (rint, 0.1, 0.0);
5805 TEST_f_f (rint, 0.25, 0.0);
5806 TEST_f_f (rint, 0.625, 1.0);
5807 TEST_f_f (rint, -0.1, -0.0);
5808 TEST_f_f (rint, -0.25, -0.0);
5809 TEST_f_f (rint, -0.625, -1.0);
5810 TEST_f_f (rint, 1048576.75, 1048577.0);
5811 TEST_f_f (rint, 2097152.75, 2097153.0);
5812 TEST_f_f (rint, -1048576.75, -1048577.0);
5813 TEST_f_f (rint, -2097152.75, -2097153.0);
5814 #ifndef TEST_FLOAT
5815 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5816 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5817 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5818 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5819 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5820 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5821 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5822 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5823 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5824 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5825 #endif
5826 #ifdef TEST_LDOUBLE
5827 /* The result can only be represented in long double. */
5828 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5829 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5830 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5831 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5832 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5833 # if LDBL_MANT_DIG > 100
5834 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5835 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5836 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5837 # endif
5838 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5839 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5840 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5841 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5842 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5843 # if LDBL_MANT_DIG > 100
5844 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5845 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5846 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5847
5848 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5849 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5850 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5851 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5852 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5853 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5854
5855 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5856 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5857 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5858 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5859 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5860 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5861 # endif
5862 #endif
5863 }
5864
5865 fesetround (save_round_mode);
5866
5867 END (rint_tonearest);
5868 }
5869
5870 static void
5871 rint_test_towardzero (void)
5872 {
5873 int save_round_mode;
5874 START (rint_towardzero);
5875
5876 save_round_mode = fegetround ();
5877
5878 if (!fesetround (FE_TOWARDZERO))
5879 {
5880 TEST_f_f (rint, 2.0, 2.0);
5881 TEST_f_f (rint, 1.5, 1.0);
5882 TEST_f_f (rint, 1.0, 1.0);
5883 TEST_f_f (rint, 0.5, 0.0);
5884 TEST_f_f (rint, 0.0, 0.0);
5885 TEST_f_f (rint, minus_zero, minus_zero);
5886 TEST_f_f (rint, -0.5, -0.0);
5887 TEST_f_f (rint, -1.0, -1.0);
5888 TEST_f_f (rint, -1.5, -1.0);
5889 TEST_f_f (rint, -2.0, -2.0);
5890 TEST_f_f (rint, 0.1, 0.0);
5891 TEST_f_f (rint, 0.25, 0.0);
5892 TEST_f_f (rint, 0.625, 0.0);
5893 TEST_f_f (rint, -0.1, -0.0);
5894 TEST_f_f (rint, -0.25, -0.0);
5895 TEST_f_f (rint, -0.625, -0.0);
5896 TEST_f_f (rint, 1048576.75, 1048576.0);
5897 TEST_f_f (rint, 2097152.75, 2097152.0);
5898 TEST_f_f (rint, -1048576.75, -1048576.0);
5899 TEST_f_f (rint, -2097152.75, -2097152.0);
5900 #ifndef TEST_FLOAT
5901 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5902 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5903 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5904 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5905 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5906 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
5907 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
5908 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
5909 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
5910 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
5911 #endif
5912 #ifdef TEST_LDOUBLE
5913 /* The result can only be represented in long double. */
5914 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5915 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5916 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5917 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5918 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5919 # if LDBL_MANT_DIG > 100
5920 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5921 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5922 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5923 # endif
5924 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5925 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5926 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5927 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5928 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5929 # if LDBL_MANT_DIG > 100
5930 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5931 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5932 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5933
5934 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5935 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5936 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5937 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5938 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5939 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5940
5941 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5942 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5943 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5944 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5945 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5946 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5947 # endif
5948 #endif
5949 }
5950
5951 fesetround (save_round_mode);
5952
5953 END (rint_towardzero);
5954 }
5955
5956 static void
5957 rint_test_downward (void)
5958 {
5959 int save_round_mode;
5960 START (rint_downward);
5961
5962 save_round_mode = fegetround ();
5963
5964 if (!fesetround (FE_DOWNWARD))
5965 {
5966 TEST_f_f (rint, 2.0, 2.0);
5967 TEST_f_f (rint, 1.5, 1.0);
5968 TEST_f_f (rint, 1.0, 1.0);
5969 TEST_f_f (rint, 0.5, 0.0);
5970 TEST_f_f (rint, 0.0, 0.0);
5971 TEST_f_f (rint, minus_zero, minus_zero);
5972 TEST_f_f (rint, -0.5, -1.0);
5973 TEST_f_f (rint, -1.0, -1.0);
5974 TEST_f_f (rint, -1.5, -2.0);
5975 TEST_f_f (rint, -2.0, -2.0);
5976 TEST_f_f (rint, 0.1, 0.0);
5977 TEST_f_f (rint, 0.25, 0.0);
5978 TEST_f_f (rint, 0.625, 0.0);
5979 TEST_f_f (rint, -0.1, -1.0);
5980 TEST_f_f (rint, -0.25, -1.0);
5981 TEST_f_f (rint, -0.625, -1.0);
5982 TEST_f_f (rint, 1048576.75, 1048576.0);
5983 TEST_f_f (rint, 2097152.75, 2097152.0);
5984 TEST_f_f (rint, -1048576.75, -1048577.0);
5985 TEST_f_f (rint, -2097152.75, -2097153.0);
5986 #ifndef TEST_FLOAT
5987 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5988 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5989 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5990 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5991 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5992 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5993 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5994 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5995 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5996 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5997 #endif
5998 #ifdef TEST_LDOUBLE
5999 /* The result can only be represented in long double. */
6000 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
6001 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
6002 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
6003 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
6004 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
6005 # if LDBL_MANT_DIG > 100
6006 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
6007 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
6008 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
6009 # endif
6010 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
6011 TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
6012 TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
6013 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
6014 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
6015 # if LDBL_MANT_DIG > 100
6016 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
6017 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
6018 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
6019
6020 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
6021 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
6022 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
6023 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
6024 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
6025 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
6026
6027 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
6028 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
6029 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
6030 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
6031 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
6032 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
6033 # endif
6034 #endif
6035 }
6036
6037 fesetround (save_round_mode);
6038
6039 END (rint_downward);
6040 }
6041
6042 static void
6043 rint_test_upward (void)
6044 {
6045 int save_round_mode;
6046 START (rint_upward);
6047
6048 save_round_mode = fegetround ();
6049
6050 if (!fesetround (FE_UPWARD))
6051 {
6052 TEST_f_f (rint, 2.0, 2.0);
6053 TEST_f_f (rint, 1.5, 2.0);
6054 TEST_f_f (rint, 1.0, 1.0);
6055 TEST_f_f (rint, 0.5, 1.0);
6056 TEST_f_f (rint, 0.0, 0.0);
6057 TEST_f_f (rint, minus_zero, minus_zero);
6058 TEST_f_f (rint, -0.5, -0.0);
6059 TEST_f_f (rint, -1.0, -1.0);
6060 TEST_f_f (rint, -1.5, -1.0);
6061 TEST_f_f (rint, -2.0, -2.0);
6062 TEST_f_f (rint, 0.1, 1.0);
6063 TEST_f_f (rint, 0.25, 1.0);
6064 TEST_f_f (rint, 0.625, 1.0);
6065 TEST_f_f (rint, -0.1, -0.0);
6066 TEST_f_f (rint, -0.25, -0.0);
6067 TEST_f_f (rint, -0.625, -0.0);
6068 TEST_f_f (rint, 1048576.75, 1048577.0);
6069 TEST_f_f (rint, 2097152.75, 2097153.0);
6070 TEST_f_f (rint, -1048576.75, -1048576.0);
6071 TEST_f_f (rint, -2097152.75, -2097152.0);
6072 #ifndef TEST_FLOAT
6073 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
6074 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
6075 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
6076 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
6077 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
6078 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
6079 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
6080 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
6081 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
6082 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
6083 #endif
6084 #ifdef TEST_LDOUBLE
6085 /* The result can only be represented in long double. */
6086 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
6087 TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
6088 TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
6089 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
6090 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
6091 # if LDBL_MANT_DIG > 100
6092 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
6093 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
6094 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
6095 # endif
6096 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
6097 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
6098 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
6099 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
6100 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
6101 # if LDBL_MANT_DIG > 100
6102 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
6103 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
6104 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
6105
6106 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
6107 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
6108 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
6109 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
6110 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
6111 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
6112
6113 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
6114 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
6115 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
6116 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
6117 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
6118 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
6119 # endif
6120 #endif
6121 }
6122
6123 fesetround (save_round_mode);
6124
6125 END (rint_upward);
6126 }
6127
6128 static void
6129 round_test (void)
6130 {
6131 START (round);
6132
6133 TEST_f_f (round, 0, 0);
6134 TEST_f_f (round, minus_zero, minus_zero);
6135 TEST_f_f (round, 0.2L, 0.0);
6136 TEST_f_f (round, -0.2L, minus_zero);
6137 TEST_f_f (round, 0.5, 1.0);
6138 TEST_f_f (round, -0.5, -1.0);
6139 TEST_f_f (round, 0.8L, 1.0);
6140 TEST_f_f (round, -0.8L, -1.0);
6141 TEST_f_f (round, 1.5, 2.0);
6142 TEST_f_f (round, -1.5, -2.0);
6143 TEST_f_f (round, 0.1, 0.0);
6144 TEST_f_f (round, 0.25, 0.0);
6145 TEST_f_f (round, 0.625, 1.0);
6146 TEST_f_f (round, -0.1, -0.0);
6147 TEST_f_f (round, -0.25, -0.0);
6148 TEST_f_f (round, -0.625, -1.0);
6149 TEST_f_f (round, 2097152.5, 2097153);
6150 TEST_f_f (round, -2097152.5, -2097153);
6151
6152 #ifdef TEST_LDOUBLE
6153 /* The result can only be represented in long double. */
6154 TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
6155 TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
6156 TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
6157 TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
6158 TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
6159 # if LDBL_MANT_DIG > 100
6160 TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
6161 TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
6162 TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
6163 # endif
6164
6165 TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
6166 TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
6167 TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
6168 TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
6169 TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
6170 # if LDBL_MANT_DIG > 100
6171 TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
6172 TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
6173 TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
6174 # endif
6175
6176 TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
6177 TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
6178 TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
6179 TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
6180 TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
6181
6182 TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
6183 TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
6184 TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
6185 TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
6186 TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
6187
6188 # if LDBL_MANT_DIG > 100
6189 TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
6190 TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
6191 TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
6192 TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
6193 TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
6194 TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
6195
6196 TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
6197 TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
6198 TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
6199 TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
6200 TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
6201 TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
6202 # endif
6203
6204 TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
6205 TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
6206 TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
6207 TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
6208 TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
6209
6210 TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
6211 TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
6212 TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
6213 TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
6214 TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
6215
6216 TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
6217 TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
6218 TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
6219 TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
6220 TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
6221 #endif
6222
6223 END (round);
6224 }
6225
6226
6227 static void
6228 scalb_test (void)
6229 {
6230
6231 START (scalb);
6232
6233 TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
6234 TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
6235
6236 TEST_ff_f (scalb, 0, nan_value, nan_value);
6237 TEST_ff_f (scalb, 1, nan_value, nan_value);
6238
6239 TEST_ff_f (scalb, 1, 0, 1);
6240 TEST_ff_f (scalb, -1, 0, -1);
6241
6242 TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
6243 TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
6244
6245 TEST_ff_f (scalb, 0, 2, 0);
6246 TEST_ff_f (scalb, minus_zero, -4, minus_zero);
6247 TEST_ff_f (scalb, 0, 0, 0);
6248 TEST_ff_f (scalb, minus_zero, 0, minus_zero);
6249 TEST_ff_f (scalb, 0, -1, 0);
6250 TEST_ff_f (scalb, minus_zero, -10, minus_zero);
6251 TEST_ff_f (scalb, 0, minus_infty, 0);
6252 TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
6253
6254 TEST_ff_f (scalb, plus_infty, -1, plus_infty);
6255 TEST_ff_f (scalb, minus_infty, -10, minus_infty);
6256 TEST_ff_f (scalb, plus_infty, 0, plus_infty);
6257 TEST_ff_f (scalb, minus_infty, 0, minus_infty);
6258 TEST_ff_f (scalb, plus_infty, 2, plus_infty);
6259 TEST_ff_f (scalb, minus_infty, 100, minus_infty);
6260
6261 TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
6262 TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
6263
6264 TEST_ff_f (scalb, 1, plus_infty, plus_infty);
6265 TEST_ff_f (scalb, -1, plus_infty, minus_infty);
6266 TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
6267 TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
6268
6269 TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6270 TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6271
6272 TEST_ff_f (scalb, nan_value, 1, nan_value);
6273 TEST_ff_f (scalb, 1, nan_value, nan_value);
6274 TEST_ff_f (scalb, nan_value, 0, nan_value);
6275 TEST_ff_f (scalb, 0, nan_value, nan_value);
6276 TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
6277 TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
6278 TEST_ff_f (scalb, nan_value, nan_value, nan_value);
6279
6280 TEST_ff_f (scalb, 0.8L, 4, 12.8L);
6281 TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
6282
6283 END (scalb);
6284 }
6285
6286
6287 static void
6288 scalbn_test (void)
6289 {
6290
6291 START (scalbn);
6292
6293 TEST_fi_f (scalbn, 0, 0, 0);
6294 TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
6295
6296 TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
6297 TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
6298 TEST_fi_f (scalbn, nan_value, 1, nan_value);
6299
6300 TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
6301 TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
6302
6303 TEST_fi_f (scalbn, 1, 0L, 1);
6304
6305 TEST_fi_f (scalbn, 1, INT_MAX, plus_infty);
6306 TEST_fi_f (scalbn, 1, INT_MIN, plus_zero);
6307 TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty);
6308 TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero);
6309 TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty);
6310 TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero);
6311 TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty);
6312 TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero);
6313
6314 END (scalbn);
6315 }
6316
6317
6318 static void
6319 scalbln_test (void)
6320 {
6321
6322 START (scalbln);
6323
6324 TEST_fl_f (scalbln, 0, 0, 0);
6325 TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
6326
6327 TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
6328 TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
6329 TEST_fl_f (scalbln, nan_value, 1, nan_value);
6330
6331 TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
6332 TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
6333
6334 TEST_fl_f (scalbln, 1, 0L, 1);
6335
6336 TEST_fi_f (scalbln, 1, INT_MAX, plus_infty);
6337 TEST_fi_f (scalbln, 1, INT_MIN, plus_zero);
6338 TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty);
6339 TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero);
6340 TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty);
6341 TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero);
6342 TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty);
6343 TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero);
6344
6345 TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty);
6346 TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero);
6347 TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty);
6348 TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero);
6349 TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty);
6350 TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero);
6351 TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty);
6352 TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero);
6353
6354 #if LONG_MAX >= 0x100000000
6355 TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty);
6356 TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero);
6357 TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty);
6358 TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero);
6359 TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty);
6360 TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero);
6361 TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty);
6362 TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero);
6363 #endif
6364
6365 END (scalbn);
6366 }
6367
6368
6369 static void
6370 signbit_test (void)
6371 {
6372
6373 START (signbit);
6374
6375 TEST_f_b (signbit, 0, 0);
6376 TEST_f_b (signbit, minus_zero, 1);
6377 TEST_f_b (signbit, plus_infty, 0);
6378 TEST_f_b (signbit, minus_infty, 1);
6379
6380 /* signbit (x) != 0 for x < 0. */
6381 TEST_f_b (signbit, -1, 1);
6382 /* signbit (x) == 0 for x >= 0. */
6383 TEST_f_b (signbit, 1, 0);
6384
6385 END (signbit);
6386 }
6387
6388
6389 static void
6390 sin_test (void)
6391 {
6392 errno = 0;
6393 FUNC(sin) (0);
6394 if (errno == ENOSYS)
6395 /* Function not implemented. */
6396 return;
6397
6398 START (sin);
6399
6400 TEST_f_f (sin, 0, 0);
6401 TEST_f_f (sin, minus_zero, minus_zero);
6402 errno = 0;
6403 TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
6404 check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
6405 errno = 0;
6406 TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
6407 check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
6408 errno = 0;
6409 TEST_f_f (sin, nan_value, nan_value);
6410 check_int ("errno for sin(NaN) unchanged", errno, 0, 0, 0, 0);
6411
6412 TEST_f_f (sin, M_PI_6l, 0.5);
6413 TEST_f_f (sin, -M_PI_6l, -0.5);
6414 TEST_f_f (sin, M_PI_2l, 1);
6415 TEST_f_f (sin, -M_PI_2l, -1);
6416 TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
6417
6418 TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
6419 TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
6420
6421 #ifdef TEST_DOUBLE
6422 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
6423 TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
6424 #endif
6425
6426 #ifndef TEST_FLOAT
6427 TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
6428 TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
6429 #endif
6430
6431 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6432 TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
6433 #endif
6434
6435 END (sin);
6436
6437 }
6438
6439
6440 static void
6441 sin_test_tonearest (void)
6442 {
6443 int save_round_mode;
6444 errno = 0;
6445 FUNC(sin) (0);
6446 if (errno == ENOSYS)
6447 /* Function not implemented. */
6448 return;
6449
6450 START (sin_tonearest);
6451
6452 save_round_mode = fegetround ();
6453
6454 if (!fesetround (FE_TONEAREST))
6455 {
6456 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6457 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6458 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6459 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6460 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6461 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6462 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6463 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6464 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6465 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6466 }
6467
6468 fesetround (save_round_mode);
6469
6470 END (sin_tonearest);
6471 }
6472
6473
6474 static void
6475 sin_test_towardzero (void)
6476 {
6477 int save_round_mode;
6478 errno = 0;
6479 FUNC(sin) (0);
6480 if (errno == ENOSYS)
6481 /* Function not implemented. */
6482 return;
6483
6484 START (sin_towardzero);
6485
6486 save_round_mode = fegetround ();
6487
6488 if (!fesetround (FE_TOWARDZERO))
6489 {
6490 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6491 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6492 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6493 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6494 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6495 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6496 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6497 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6498 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6499 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6500 }
6501
6502 fesetround (save_round_mode);
6503
6504 END (sin_towardzero);
6505 }
6506
6507
6508 static void
6509 sin_test_downward (void)
6510 {
6511 int save_round_mode;
6512 errno = 0;
6513 FUNC(sin) (0);
6514 if (errno == ENOSYS)
6515 /* Function not implemented. */
6516 return;
6517
6518 START (sin_downward);
6519
6520 save_round_mode = fegetround ();
6521
6522 if (!fesetround (FE_DOWNWARD))
6523 {
6524 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6525 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6526 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6527 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6528 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6529 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6530 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6531 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6532 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6533 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6534 }
6535
6536 fesetround (save_round_mode);
6537
6538 END (sin_downward);
6539 }
6540
6541
6542 static void
6543 sin_test_upward (void)
6544 {
6545 int save_round_mode;
6546 errno = 0;
6547 FUNC(sin) (0);
6548 if (errno == ENOSYS)
6549 /* Function not implemented. */
6550 return;
6551
6552 START (sin_upward);
6553
6554 save_round_mode = fegetround ();
6555
6556 if (!fesetround (FE_UPWARD))
6557 {
6558 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6559 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6560 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6561 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6562 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6563 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6564 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6565 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6566 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6567 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6568 }
6569
6570 fesetround (save_round_mode);
6571
6572 END (sin_upward);
6573 }
6574
6575
6576 static void
6577 sincos_test (void)
6578 {
6579 FLOAT sin_res, cos_res;
6580
6581 errno = 0;
6582 FUNC(sincos) (0, &sin_res, &cos_res);
6583 if (errno == ENOSYS)
6584 /* Function not implemented. */
6585 return;
6586
6587 START (sincos);
6588
6589 /* sincos is treated differently because it returns void. */
6590 TEST_extra (sincos, 0, 0, 1);
6591
6592 TEST_extra (sincos, minus_zero, minus_zero, 1);
6593 TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6594 TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6595 TEST_extra (sincos, nan_value, nan_value, nan_value);
6596
6597 TEST_extra (sincos, M_PI_2l, 1, 0);
6598 TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
6599 TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
6600 TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
6601
6602 TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6603 TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6604
6605 #ifdef TEST_DOUBLE
6606 TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
6607 #endif
6608
6609 #ifndef TEST_FLOAT
6610 TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
6611 TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
6612 #endif
6613
6614 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6615 TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
6616 #endif
6617
6618 END (sincos);
6619 }
6620
6621 static void
6622 sinh_test (void)
6623 {
6624 errno = 0;
6625 FUNC(sinh) (0.7L);
6626 if (errno == ENOSYS)
6627 /* Function not implemented. */
6628 return;
6629
6630 START (sinh);
6631 TEST_f_f (sinh, 0, 0);
6632 TEST_f_f (sinh, minus_zero, minus_zero);
6633
6634 #ifndef TEST_INLINE
6635 TEST_f_f (sinh, plus_infty, plus_infty);
6636 TEST_f_f (sinh, minus_infty, minus_infty);
6637 #endif
6638 TEST_f_f (sinh, nan_value, nan_value);
6639
6640 TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
6641 TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
6642
6643 END (sinh);
6644 }
6645
6646
6647 static void
6648 sinh_test_tonearest (void)
6649 {
6650 int save_round_mode;
6651 errno = 0;
6652 FUNC(sinh) (0);
6653 if (errno == ENOSYS)
6654 /* Function not implemented. */
6655 return;
6656
6657 START (sinh_tonearest);
6658
6659 save_round_mode = fegetround ();
6660
6661 if (!fesetround (FE_TONEAREST))
6662 {
6663 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6664 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6665 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6666 }
6667
6668 fesetround (save_round_mode);
6669
6670 END (sinh_tonearest);
6671 }
6672
6673
6674 static void
6675 sinh_test_towardzero (void)
6676 {
6677 int save_round_mode;
6678 errno = 0;
6679 FUNC(sinh) (0);
6680 if (errno == ENOSYS)
6681 /* Function not implemented. */
6682 return;
6683
6684 START (sinh_towardzero);
6685
6686 save_round_mode = fegetround ();
6687
6688 if (!fesetround (FE_TOWARDZERO))
6689 {
6690 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6691 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6692 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6693 }
6694
6695 fesetround (save_round_mode);
6696
6697 END (sinh_towardzero);
6698 }
6699
6700
6701 static void
6702 sinh_test_downward (void)
6703 {
6704 int save_round_mode;
6705 errno = 0;
6706 FUNC(sinh) (0);
6707 if (errno == ENOSYS)
6708 /* Function not implemented. */
6709 return;
6710
6711 START (sinh_downward);
6712
6713 save_round_mode = fegetround ();
6714
6715 if (!fesetround (FE_DOWNWARD))
6716 {
6717 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6718 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6719 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6720 }
6721
6722 fesetround (save_round_mode);
6723
6724 END (sinh_downward);
6725 }
6726
6727
6728 static void
6729 sinh_test_upward (void)
6730 {
6731 int save_round_mode;
6732 errno = 0;
6733 FUNC(sinh) (0);
6734 if (errno == ENOSYS)
6735 /* Function not implemented. */
6736 return;
6737
6738 START (sinh_upward);
6739
6740 save_round_mode = fegetround ();
6741
6742 if (!fesetround (FE_UPWARD))
6743 {
6744 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6745 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6746 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6747 }
6748
6749 fesetround (save_round_mode);
6750
6751 END (sinh_upward);
6752 }
6753
6754
6755 static void
6756 sqrt_test (void)
6757 {
6758 errno = 0;
6759 FUNC(sqrt) (1);
6760 if (errno == ENOSYS)
6761 /* Function not implemented. */
6762 return;
6763
6764 START (sqrt);
6765
6766 TEST_f_f (sqrt, 0, 0);
6767 TEST_f_f (sqrt, nan_value, nan_value);
6768 TEST_f_f (sqrt, plus_infty, plus_infty);
6769
6770 TEST_f_f (sqrt, minus_zero, minus_zero);
6771
6772 /* sqrt (x) == NaN plus invalid exception for x < 0. */
6773 TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
6774 TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
6775 TEST_f_f (sqrt, nan_value, nan_value);
6776
6777 TEST_f_f (sqrt, 2209, 47);
6778 TEST_f_f (sqrt, 4, 2);
6779 TEST_f_f (sqrt, 2, M_SQRT2l);
6780 TEST_f_f (sqrt, 0.25, 0.5);
6781 TEST_f_f (sqrt, 6642.25, 81.5);
6782 TEST_f_f (sqrt, 15190.5625L, 123.25L);
6783 TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
6784
6785 END (sqrt);
6786 }
6787
6788
6789 static void
6790 tan_test (void)
6791 {
6792 errno = 0;
6793 FUNC(tan) (0);
6794 if (errno == ENOSYS)
6795 /* Function not implemented. */
6796 return;
6797
6798 START (tan);
6799
6800 TEST_f_f (tan, 0, 0);
6801 TEST_f_f (tan, minus_zero, minus_zero);
6802 errno = 0;
6803 TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
6804 check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
6805 errno = 0;
6806 TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
6807 check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
6808 errno = 0;
6809 TEST_f_f (tan, nan_value, nan_value);
6810 check_int ("errno for tan(NaN) == 0", errno, 0, 0, 0, 0);
6811
6812 TEST_f_f (tan, M_PI_4l, 1);
6813 TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
6814
6815 TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
6816 TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
6817
6818 #ifndef TEST_FLOAT
6819 TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
6820 TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
6821 #endif
6822
6823 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6824 TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
6825 #endif
6826
6827 END (tan);
6828 }
6829
6830
6831 static void
6832 tan_test_tonearest (void)
6833 {
6834 int save_round_mode;
6835 errno = 0;
6836 FUNC(tan) (0);
6837 if (errno == ENOSYS)
6838 /* Function not implemented. */
6839 return;
6840
6841 START (tan_tonearest);
6842
6843 save_round_mode = fegetround ();
6844
6845 if (!fesetround (FE_TONEAREST))
6846 {
6847 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6848 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6849 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6850 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6851 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6852 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6853 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6854 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6855 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6856 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6857 }
6858
6859 fesetround (save_round_mode);
6860
6861 END (tan_tonearest);
6862 }
6863
6864
6865 static void
6866 tan_test_towardzero (void)
6867 {
6868 int save_round_mode;
6869 errno = 0;
6870 FUNC(tan) (0);
6871 if (errno == ENOSYS)
6872 /* Function not implemented. */
6873 return;
6874
6875 START (tan_towardzero);
6876
6877 save_round_mode = fegetround ();
6878
6879 if (!fesetround (FE_TOWARDZERO))
6880 {
6881 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6882 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6883 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6884 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6885 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6886 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6887 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6888 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6889 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6890 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6891 }
6892
6893 fesetround (save_round_mode);
6894
6895 END (tan_towardzero);
6896 }
6897
6898
6899 static void
6900 tan_test_downward (void)
6901 {
6902 int save_round_mode;
6903 errno = 0;
6904 FUNC(tan) (0);
6905 if (errno == ENOSYS)
6906 /* Function not implemented. */
6907 return;
6908
6909 START (tan_downward);
6910
6911 save_round_mode = fegetround ();
6912
6913 if (!fesetround (FE_DOWNWARD))
6914 {
6915 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6916 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6917 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6918 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6919 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6920 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6921 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6922 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6923 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6924 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6925 }
6926
6927 fesetround (save_round_mode);
6928
6929 END (tan_downward);
6930 }
6931
6932
6933 static void
6934 tan_test_upward (void)
6935 {
6936 int save_round_mode;
6937 errno = 0;
6938 FUNC(tan) (0);
6939 if (errno == ENOSYS)
6940 /* Function not implemented. */
6941 return;
6942
6943 START (tan_upward);
6944
6945 save_round_mode = fegetround ();
6946
6947 if (!fesetround (FE_UPWARD))
6948 {
6949 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6950 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6951 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6952 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6953 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6954 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6955 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6956 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6957 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6958 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6959 }
6960
6961 fesetround (save_round_mode);
6962
6963 END (tan_upward);
6964 }
6965
6966
6967 static void
6968 tanh_test (void)
6969 {
6970 errno = 0;
6971 FUNC(tanh) (0.7L);
6972 if (errno == ENOSYS)
6973 /* Function not implemented. */
6974 return;
6975
6976 START (tanh);
6977
6978 TEST_f_f (tanh, 0, 0);
6979 TEST_f_f (tanh, minus_zero, minus_zero);
6980
6981 #ifndef TEST_INLINE
6982 TEST_f_f (tanh, plus_infty, 1);
6983 TEST_f_f (tanh, minus_infty, -1);
6984 #endif
6985 TEST_f_f (tanh, nan_value, nan_value);
6986
6987 TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
6988 TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
6989
6990 TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
6991 TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
6992
6993 /* 2^-57 */
6994 TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
6995
6996 END (tanh);
6997 }
6998
6999 static void
7000 tgamma_test (void)
7001 {
7002 errno = 0;
7003 FUNC(tgamma) (1);
7004 if (errno == ENOSYS)
7005 /* Function not implemented. */
7006 return;
7007 feclearexcept (FE_ALL_EXCEPT);
7008
7009 START (tgamma);
7010
7011 TEST_f_f (tgamma, plus_infty, plus_infty);
7012 TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7013 TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7014 /* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
7015 TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
7016 TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
7017 TEST_f_f (tgamma, nan_value, nan_value);
7018
7019 TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
7020 TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
7021
7022 TEST_f_f (tgamma, 1, 1);
7023 TEST_f_f (tgamma, 4, 6);
7024
7025 TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
7026 TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
7027
7028 END (tgamma);
7029 }
7030
7031
7032 static void
7033 trunc_test (void)
7034 {
7035 START (trunc);
7036
7037 TEST_f_f (trunc, plus_infty, plus_infty);
7038 TEST_f_f (trunc, minus_infty, minus_infty);
7039 TEST_f_f (trunc, nan_value, nan_value);
7040
7041 TEST_f_f (trunc, 0, 0);
7042 TEST_f_f (trunc, minus_zero, minus_zero);
7043 TEST_f_f (trunc, 0.1, 0);
7044 TEST_f_f (trunc, 0.25, 0);
7045 TEST_f_f (trunc, 0.625, 0);
7046 TEST_f_f (trunc, -0.1, minus_zero);
7047 TEST_f_f (trunc, -0.25, minus_zero);
7048 TEST_f_f (trunc, -0.625, minus_zero);
7049 TEST_f_f (trunc, 1, 1);
7050 TEST_f_f (trunc, -1, -1);
7051 TEST_f_f (trunc, 1.625, 1);
7052 TEST_f_f (trunc, -1.625, -1);
7053
7054 TEST_f_f (trunc, 1048580.625L, 1048580L);
7055 TEST_f_f (trunc, -1048580.625L, -1048580L);
7056
7057 TEST_f_f (trunc, 8388610.125L, 8388610.0L);
7058 TEST_f_f (trunc, -8388610.125L, -8388610.0L);
7059
7060 TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
7061 TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
7062
7063 #ifdef TEST_LDOUBLE
7064 /* The result can only be represented in long double. */
7065 TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
7066 TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
7067 TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
7068 TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
7069 TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
7070
7071 # if LDBL_MANT_DIG > 100
7072 TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
7073 TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
7074 TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
7075 # endif
7076
7077 TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
7078 TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
7079 TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
7080 TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
7081 TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
7082
7083 # if LDBL_MANT_DIG > 100
7084 TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
7085 TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
7086 TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
7087 # endif
7088
7089 TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
7090 TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
7091 TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
7092 TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
7093 TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
7094
7095 # if LDBL_MANT_DIG > 100
7096 TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
7097 TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
7098 TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
7099 TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
7100 TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
7101 TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
7102 # endif
7103
7104 TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
7105 TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
7106 TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
7107 TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
7108 TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
7109
7110 # if LDBL_MANT_DIG > 100
7111 TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
7112 TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
7113 TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
7114 TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
7115 TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
7116 TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
7117 # endif
7118
7119 TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
7120 TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
7121 TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
7122 TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
7123 TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
7124
7125 TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
7126 TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
7127 TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
7128 TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
7129 TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
7130
7131 TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7132 TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7133 TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7134 TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7135 TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7136 #endif
7137
7138 END (trunc);
7139 }
7140
7141 static void
7142 y0_test (void)
7143 {
7144 FLOAT s, c;
7145 errno = 0;
7146 FUNC (sincos) (0, &s, &c);
7147 if (errno == ENOSYS)
7148 /* Required function not implemented. */
7149 return;
7150 FUNC(y0) (1);
7151 if (errno == ENOSYS)
7152 /* Function not implemented. */
7153 return;
7154
7155 /* y0 is the Bessel function of the second kind of order 0 */
7156 START (y0);
7157
7158 TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
7159 TEST_f_f (y0, 0.0, minus_infty);
7160 TEST_f_f (y0, nan_value, nan_value);
7161 TEST_f_f (y0, plus_infty, 0);
7162
7163 TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
7164 TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
7165 TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
7166 TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
7167 TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
7168 TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
7169 TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
7170
7171 TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
7172
7173 #ifndef TEST_FLOAT
7174 TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
7175 #endif
7176
7177 END (y0);
7178 }
7179
7180
7181 static void
7182 y1_test (void)
7183 {
7184 FLOAT s, c;
7185 errno = 0;
7186 FUNC (sincos) (0, &s, &c);
7187 if (errno == ENOSYS)
7188 /* Required function not implemented. */
7189 return;
7190 FUNC(y1) (1);
7191 if (errno == ENOSYS)
7192 /* Function not implemented. */
7193 return;
7194
7195 /* y1 is the Bessel function of the second kind of order 1 */
7196 START (y1);
7197
7198 TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
7199 TEST_f_f (y1, 0.0, minus_infty);
7200 TEST_f_f (y1, plus_infty, 0);
7201 TEST_f_f (y1, nan_value, nan_value);
7202
7203 TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
7204 TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
7205 TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
7206 TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
7207 TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
7208 TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
7209 TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
7210
7211 TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
7212
7213 #ifndef TEST_FLOAT
7214 TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
7215 #endif
7216
7217 END (y1);
7218 }
7219
7220
7221 static void
7222 yn_test (void)
7223 {
7224 FLOAT s, c;
7225 errno = 0;
7226 FUNC (sincos) (0, &s, &c);
7227 if (errno == ENOSYS)
7228 /* Required function not implemented. */
7229 return;
7230 FUNC(yn) (1, 1);
7231 if (errno == ENOSYS)
7232 /* Function not implemented. */
7233 return;
7234
7235 /* yn is the Bessel function of the second kind of order n */
7236 START (yn);
7237
7238 /* yn (0, x) == y0 (x) */
7239 TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
7240 TEST_ff_f (yn, 0, 0.0, minus_infty);
7241 TEST_ff_f (yn, 0, nan_value, nan_value);
7242 TEST_ff_f (yn, 0, plus_infty, 0);
7243
7244 TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
7245 TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
7246 TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
7247 TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
7248 TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
7249 TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
7250 TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
7251
7252 /* yn (1, x) == y1 (x) */
7253 TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
7254 TEST_ff_f (yn, 1, 0.0, minus_infty);
7255 TEST_ff_f (yn, 1, plus_infty, 0);
7256 TEST_ff_f (yn, 1, nan_value, nan_value);
7257
7258 TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
7259 TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
7260 TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
7261 TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
7262 TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
7263 TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
7264 TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
7265
7266 /* yn (3, x) */
7267 TEST_ff_f (yn, 3, plus_infty, 0);
7268 TEST_ff_f (yn, 3, nan_value, nan_value);
7269
7270 TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
7271 TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
7272 TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
7273 TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
7274 TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
7275
7276 /* yn (10, x) */
7277 TEST_ff_f (yn, 10, plus_infty, 0);
7278 TEST_ff_f (yn, 10, nan_value, nan_value);
7279
7280 TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
7281 TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
7282 TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
7283 TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
7284 TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
7285
7286 END (yn);
7287
7288 }
7289
7290
7291 static void
7292 significand_test (void)
7293 {
7294 /* significand returns the mantissa of the exponential representation. */
7295 START (significand);
7296
7297 TEST_f_f (significand, 4.0, 1.0);
7298 TEST_f_f (significand, 6.0, 1.5);
7299 TEST_f_f (significand, 8.0, 1.0);
7300
7301 END (significand);
7302 }
7303
7304
7305 static void
7306 initialize (void)
7307 {
7308 fpstack_test ("start *init*");
7309 plus_zero = 0.0;
7310 nan_value = plus_zero / plus_zero; /* Suppress GCC warning */
7311
7312 minus_zero = FUNC(copysign) (0.0, -1.0);
7313 plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
7314 HUGE_VALL, HUGE_VAL, HUGE_VALF);
7315 minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
7316 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
7317 max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7318 LDBL_MAX, DBL_MAX, FLT_MAX);
7319 min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
7320 LDBL_MIN, DBL_MIN, FLT_MIN);
7321
7322 (void) &plus_zero;
7323 (void) &nan_value;
7324 (void) &minus_zero;
7325 (void) &plus_infty;
7326 (void) &minus_infty;
7327 (void) &max_value;
7328 (void) &min_value;
7329
7330 /* Clear all exceptions. From now on we must not get random exceptions. */
7331 feclearexcept (FE_ALL_EXCEPT);
7332
7333 /* Test to make sure we start correctly. */
7334 fpstack_test ("end *init*");
7335 }
7336
7337 /* Definitions of arguments for argp functions. */
7338 static const struct argp_option options[] =
7339 {
7340 { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
7341 { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
7342 { "no-max-error", 'f', NULL, 0,
7343 "Don't output maximal errors of functions"},
7344 { "no-points", 'p', NULL, 0,
7345 "Don't output results of functions invocations"},
7346 { "ignore-max-ulp", 'i', "yes/no", 0,
7347 "Ignore given maximal errors"},
7348 { NULL, 0, NULL, 0, NULL }
7349 };
7350
7351 /* Short description of program. */
7352 static const char doc[] = "Math test suite: " TEST_MSG ;
7353
7354 /* Prototype for option handler. */
7355 static error_t parse_opt (int key, char *arg, struct argp_state *state);
7356
7357 /* Data structure to communicate with argp functions. */
7358 static struct argp argp =
7359 {
7360 options, parse_opt, NULL, doc,
7361 };
7362
7363
7364 /* Handle program arguments. */
7365 static error_t
7366 parse_opt (int key, char *arg, struct argp_state *state)
7367 {
7368 switch (key)
7369 {
7370 case 'f':
7371 output_max_error = 0;
7372 break;
7373 case 'i':
7374 if (strcmp (arg, "yes") == 0)
7375 ignore_max_ulp = 1;
7376 else if (strcmp (arg, "no") == 0)
7377 ignore_max_ulp = 0;
7378 break;
7379 case 'p':
7380 output_points = 0;
7381 break;
7382 case 'u':
7383 output_ulps = 1;
7384 break;
7385 case 'v':
7386 if (optarg)
7387 verbose = (unsigned int) strtoul (optarg, NULL, 0);
7388 else
7389 verbose = 3;
7390 break;
7391 default:
7392 return ARGP_ERR_UNKNOWN;
7393 }
7394 return 0;
7395 }
7396
7397 #if 0
7398 /* function to check our ulp calculation. */
7399 void
7400 check_ulp (void)
7401 {
7402 int i;
7403
7404 FLOAT u, diff, ulp;
7405 /* This gives one ulp. */
7406 u = FUNC(nextafter) (10, 20);
7407 check_equal (10.0, u, 1, &diff, &ulp);
7408 printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
7409
7410 /* This gives one more ulp. */
7411 u = FUNC(nextafter) (u, 20);
7412 check_equal (10.0, u, 2, &diff, &ulp);
7413 printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
7414
7415 /* And now calculate 100 ulp. */
7416 for (i = 2; i < 100; i++)
7417 u = FUNC(nextafter) (u, 20);
7418 check_equal (10.0, u, 100, &diff, &ulp);
7419 printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
7420 }
7421 #endif
7422
7423 int
7424 main (int argc, char **argv)
7425 {
7426
7427 int remaining;
7428
7429 verbose = 1;
7430 output_ulps = 0;
7431 output_max_error = 1;
7432 output_points = 1;
7433 /* XXX set to 0 for releases. */
7434 ignore_max_ulp = 0;
7435
7436 /* Parse and process arguments. */
7437 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
7438
7439 if (remaining != argc)
7440 {
7441 fprintf (stderr, "wrong number of arguments");
7442 argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
7443 exit (EXIT_FAILURE);
7444 }
7445
7446 if (output_ulps)
7447 {
7448 ulps_file = fopen ("ULPs", "a");
7449 if (ulps_file == NULL)
7450 {
7451 perror ("can't open file `ULPs' for writing: ");
7452 exit (1);
7453 }
7454 }
7455
7456
7457 initialize ();
7458 printf (TEST_MSG);
7459
7460 #if 0
7461 check_ulp ();
7462 #endif
7463
7464 /* Keep the tests a wee bit ordered (according to ISO C99). */
7465 /* Classification macros: */
7466 fpclassify_test ();
7467 isfinite_test ();
7468 isnormal_test ();
7469 signbit_test ();
7470
7471 /* Trigonometric functions: */
7472 acos_test ();
7473 asin_test ();
7474 atan_test ();
7475 atan2_test ();
7476 cos_test ();
7477 cos_test_tonearest ();
7478 cos_test_towardzero ();
7479 cos_test_downward ();
7480 cos_test_upward ();
7481 sin_test ();
7482 sin_test_tonearest ();
7483 sin_test_towardzero ();
7484 sin_test_downward ();
7485 sin_test_upward ();
7486 sincos_test ();
7487 tan_test ();
7488 tan_test_tonearest ();
7489 tan_test_towardzero ();
7490 tan_test_downward ();
7491 tan_test_upward ();
7492
7493 /* Hyperbolic functions: */
7494 acosh_test ();
7495 asinh_test ();
7496 atanh_test ();
7497 cosh_test ();
7498 cosh_test_tonearest ();
7499 cosh_test_towardzero ();
7500 cosh_test_downward ();
7501 cosh_test_upward ();
7502 sinh_test ();
7503 sinh_test_tonearest ();
7504 sinh_test_towardzero ();
7505 sinh_test_downward ();
7506 sinh_test_upward ();
7507 tanh_test ();
7508
7509 /* Exponential and logarithmic functions: */
7510 exp_test ();
7511 exp_test_tonearest ();
7512 exp_test_towardzero ();
7513 exp_test_downward ();
7514 exp_test_upward ();
7515 exp10_test ();
7516 exp2_test ();
7517 expm1_test ();
7518 frexp_test ();
7519 ldexp_test ();
7520 log_test ();
7521 log10_test ();
7522 log1p_test ();
7523 log2_test ();
7524 logb_test ();
7525 modf_test ();
7526 ilogb_test ();
7527 scalb_test ();
7528 scalbn_test ();
7529 scalbln_test ();
7530 significand_test ();
7531
7532 /* Power and absolute value functions: */
7533 cbrt_test ();
7534 fabs_test ();
7535 hypot_test ();
7536 pow_test ();
7537 pow_test_tonearest ();
7538 pow_test_towardzero ();
7539 pow_test_downward ();
7540 pow_test_upward ();
7541 sqrt_test ();
7542
7543 /* Error and gamma functions: */
7544 erf_test ();
7545 erfc_test ();
7546 gamma_test ();
7547 lgamma_test ();
7548 tgamma_test ();
7549
7550 /* Nearest integer functions: */
7551 ceil_test ();
7552 floor_test ();
7553 nearbyint_test ();
7554 rint_test ();
7555 rint_test_tonearest ();
7556 rint_test_towardzero ();
7557 rint_test_downward ();
7558 rint_test_upward ();
7559 lrint_test ();
7560 lrint_test_tonearest ();
7561 lrint_test_towardzero ();
7562 lrint_test_downward ();
7563 lrint_test_upward ();
7564 llrint_test ();
7565 llrint_test_tonearest ();
7566 llrint_test_towardzero ();
7567 llrint_test_downward ();
7568 llrint_test_upward ();
7569 round_test ();
7570 lround_test ();
7571 llround_test ();
7572 trunc_test ();
7573
7574 /* Remainder functions: */
7575 fmod_test ();
7576 remainder_test ();
7577 remquo_test ();
7578
7579 /* Manipulation functions: */
7580 copysign_test ();
7581 nextafter_test ();
7582 nexttoward_test ();
7583
7584 /* maximum, minimum and positive difference functions */
7585 fdim_test ();
7586 fmax_test ();
7587 fmin_test ();
7588
7589 /* Multiply and add: */
7590 fma_test ();
7591
7592 /* Complex functions: */
7593 cabs_test ();
7594 cacos_test ();
7595 cacosh_test ();
7596 carg_test ();
7597 casin_test ();
7598 casinh_test ();
7599 catan_test ();
7600 catanh_test ();
7601 ccos_test ();
7602 ccosh_test ();
7603 cexp_test ();
7604 cimag_test ();
7605 clog10_test ();
7606 clog_test ();
7607 conj_test ();
7608 cpow_test ();
7609 cproj_test ();
7610 creal_test ();
7611 csin_test ();
7612 csinh_test ();
7613 csqrt_test ();
7614 ctan_test ();
7615 ctanh_test ();
7616
7617 /* Bessel functions: */
7618 j0_test ();
7619 j1_test ();
7620 jn_test ();
7621 y0_test ();
7622 y1_test ();
7623 yn_test ();
7624
7625 if (output_ulps)
7626 fclose (ulps_file);
7627
7628 printf ("\nTest suite completed:\n");
7629 printf (" %d test cases plus %d tests for exception flags executed.\n",
7630 noTests, noExcTests);
7631 if (noXFails)
7632 printf (" %d expected failures occurred.\n", noXFails);
7633 if (noXPasses)
7634 printf (" %d unexpected passes occurred.\n", noXPasses);
7635 if (noErrors)
7636 {
7637 printf (" %d errors occurred.\n", noErrors);
7638 return 1;
7639 }
7640 printf (" All tests passed successfully.\n");
7641
7642 return 0;
7643 }
7644
7645 /*
7646 * Local Variables:
7647 * mode:c
7648 * End:
7649 */