Use M_SQRT1_2l instead of local M_SQRT_2_2 in libm-test.inc.
[platform/upstream/glibc.git] / math / libm-test.inc
1 /* Copyright (C) 1997-2013 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, finite, floor, fma, fmax, fmin, fmod, fpclassify,
44    frexp, gamma, hypot,
45    ilogb, isfinite, isinf, isnan, isnormal, issignaling,
46    isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
47    j0, j1, jn,
48    ldexp, lgamma, log, log10, log1p, log2, logb,
49    modf, nearbyint, nextafter, nexttoward,
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, cimag, clog, clog10, conj, cpow, cproj, creal,
58    csin, csinh, csqrt, ctan, ctanh.
59
60    At the moment the following functions and macros aren't tested:
61    drem (alias for remainder),
62    lgamma_r,
63    nan,
64    pow10 (alias for exp10).
65
66    Parameter handling is primitive in the moment:
67    --verbose=[0..3] for different levels of output:
68    0: only error count
69    1: basic report on failed tests (default)
70    2: full report on all tests
71    -v for full output (equals --verbose=3)
72    -u for generation of an ULPs file
73  */
74
75 /* "Philosophy":
76
77    This suite tests some aspects of the correct implementation of
78    mathematical functions in libm.  Some simple, specific parameters
79    are tested for correctness but there's no exhaustive
80    testing.  Handling of specific inputs (e.g. infinity, not-a-number)
81    is also tested.  Correct handling of exceptions is checked
82    against.  These implemented tests should check all cases that are
83    specified in ISO C99.
84
85    Exception testing: At the moment only divide-by-zero, invalid,
86    overflow and underflow exceptions are tested.  Inexact exceptions
87    aren't checked at the moment.
88
89    NaN values: There exist signalling and quiet NaNs.  This implementation
90    only uses quiet NaN as parameter.  Where the sign of a NaN is
91    significant, this is not tested.  The payload of NaNs is not examined.
92
93    Inline functions: Inlining functions should give an improvement in
94    speed - but not in precission.  The inlined functions return
95    reasonable values for a reasonable range of input values.  The
96    result is not necessarily correct for all values and exceptions are
97    not correctly raised in all cases.  Problematic input and return
98    values are infinity, not-a-number and minus zero.  This suite
99    therefore does not check these specific inputs and the exception
100    handling for inlined mathematical functions - just the "reasonable"
101    values are checked.
102
103    Beware: The tests might fail for any of the following reasons:
104    - Tests are wrong
105    - Functions are wrong
106    - Floating Point Unit not working properly
107    - Compiler has errors
108
109    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
110
111
112    To Do: All parameter should be numbers that can be represented as
113    exact floating point values.  Currently some values cannot be
114    represented exactly and therefore the result is not the expected
115    result.  For this we will use 36 digits so that numbers can be
116    represented exactly.  */
117
118 #ifndef _GNU_SOURCE
119 # define _GNU_SOURCE
120 #endif
121
122 #include "libm-test-ulps.h"
123 #include <complex.h>
124 #include <math.h>
125 #include <float.h>
126 #include <fenv.h>
127 #include <limits.h>
128
129 #include <errno.h>
130 #include <stdlib.h>
131 #include <stdio.h>
132 #include <string.h>
133 #include <argp.h>
134 #include <tininess.h>
135
136 /* Allow platforms without all rounding modes to test properly,
137    assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which
138    causes fesetround() to return failure.  */
139 #ifndef FE_TONEAREST
140 # define FE_TONEAREST   __FE_UNDEFINED
141 #endif
142 #ifndef FE_TOWARDZERO
143 # define FE_TOWARDZERO  __FE_UNDEFINED
144 #endif
145 #ifndef FE_UPWARD
146 # define FE_UPWARD      __FE_UNDEFINED
147 #endif
148 #ifndef FE_DOWNWARD
149 # define FE_DOWNWARD    __FE_UNDEFINED
150 #endif
151
152 /* Possible exceptions */
153 #define NO_EXCEPTION                    0x0
154 #define INVALID_EXCEPTION               0x1
155 #define DIVIDE_BY_ZERO_EXCEPTION        0x2
156 #define OVERFLOW_EXCEPTION              0x4
157 #define UNDERFLOW_EXCEPTION             0x8
158 /* The next flags signals that those exceptions are allowed but not required.   */
159 #define INVALID_EXCEPTION_OK            0x10
160 #define DIVIDE_BY_ZERO_EXCEPTION_OK     0x20
161 #define OVERFLOW_EXCEPTION_OK           0x40
162 #define UNDERFLOW_EXCEPTION_OK          0x80
163 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
164 /* Some special test flags, passed together with exceptions.  */
165 #define IGNORE_ZERO_INF_SIGN            0x100
166 /* Indicate errno settings required or disallowed.  */
167 #define ERRNO_UNCHANGED                 0x200
168 #define ERRNO_EDOM                      0x400
169 #define ERRNO_ERANGE                    0x800
170
171 /* Values underflowing only for float.  */
172 #ifdef TEST_FLOAT
173 # define UNDERFLOW_EXCEPTION_FLOAT      UNDERFLOW_EXCEPTION
174 # define UNDERFLOW_EXCEPTION_OK_FLOAT   UNDERFLOW_EXCEPTION_OK
175 #else
176 # define UNDERFLOW_EXCEPTION_FLOAT      0
177 # define UNDERFLOW_EXCEPTION_OK_FLOAT   0
178 #endif
179 /* Values underflowing only for double or types with a larger least
180    positive normal value.  */
181 #if defined TEST_FLOAT || defined TEST_DOUBLE \
182   || (defined TEST_LDOUBLE && LDBL_MIN_EXP >= DBL_MIN_EXP)
183 # define UNDERFLOW_EXCEPTION_DOUBLE     UNDERFLOW_EXCEPTION
184 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  UNDERFLOW_EXCEPTION_OK
185 #else
186 # define UNDERFLOW_EXCEPTION_DOUBLE     0
187 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  0
188 #endif
189 /* Values underflowing only for IBM long double or types with a larger least
190    positive normal value.  */
191 #if defined TEST_FLOAT || (defined TEST_LDOUBLE && LDBL_MIN_EXP > DBL_MIN_EXP)
192 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        UNDERFLOW_EXCEPTION
193 #else
194 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        0
195 #endif
196 /* Values underflowing on architectures detecting tininess before
197    rounding, but not on those detecting tininess after rounding.  */
198 #define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING     (TININESS_AFTER_ROUNDING \
199                                                  ? 0                    \
200                                                  : UNDERFLOW_EXCEPTION)
201
202 /* Various constants (we must supply them precalculated for accuracy).  */
203 #define M_PI_6l                 .52359877559829887307710723054658383L
204 #define M_E2l                   7.389056098930650227230427460575008L
205 #define M_E3l                   20.085536923187667740928529654581719L
206 #define M_2_SQRT_PIl            3.5449077018110320545963349666822903L   /* 2 sqrt (M_PIl)  */
207 #define M_SQRT_PIl              1.7724538509055160272981674833411451L   /* sqrt (M_PIl)  */
208 #define M_LOG_SQRT_PIl          0.57236494292470008707171367567652933L  /* log(sqrt(M_PIl))  */
209 #define M_LOG_2_SQRT_PIl        1.265512123484645396488945797134706L    /* log(2*sqrt(M_PIl))  */
210 #define M_PI_34l                2.356194490192344928846982537459627163L /* 3*pi/4 */
211 #define M_PI_34_LOG10El         1.023282265381381010614337719073516828L
212 #define M_PI2_LOG10El           0.682188176920920673742891812715677885L
213 #define M_PI4_LOG10El           0.341094088460460336871445906357838943L
214 #define M_PI_LOG10El            1.364376353841841347485783625431355770L
215
216 #define ulps_file_name "ULPs"   /* Name of the ULPs file.  */
217 static FILE *ulps_file;         /* File to document difference.  */
218 static int output_ulps;         /* Should ulps printed?  */
219 static char *output_dir;        /* Directory where generated files will be written.  */
220
221 static int noErrors;    /* number of errors */
222 static int noTests;     /* number of tests (without testing exceptions) */
223 static int noExcTests;  /* number of tests for exception flags */
224 static int noErrnoTests;/* number of tests for errno values */
225
226 static int verbose;
227 static int output_max_error;    /* Should the maximal errors printed?  */
228 static int output_points;       /* Should the single function results printed?  */
229 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
230
231 #define PLUS_ZERO_INIT  CHOOSE (0.0L, 0.0, 0.0f,        \
232                                 0.0L, 0.0, 0.0f)
233 #define MINUS_ZERO_INIT CHOOSE (-0.0L, -0.0, -0.0f,     \
234                                 -0.0L, -0.0, -0.0f)
235 #define PLUS_INFTY_INIT CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
236                                 HUGE_VALL, HUGE_VAL, HUGE_VALF)
237 #define MINUS_INFTY_INIT        CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
238                                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
239 #define QNAN_VALUE_INIT FUNC (__builtin_nan) ("")
240 #define MAX_VALUE_INIT  CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,     \
241                                 LDBL_MAX, DBL_MAX, FLT_MAX)
242 #define MIN_VALUE_INIT  CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,     \
243                                 LDBL_MIN, DBL_MIN, FLT_MIN)
244 #define MIN_SUBNORM_VALUE_INIT  CHOOSE (__LDBL_DENORM_MIN__,    \
245                                         __DBL_DENORM_MIN__,     \
246                                         __FLT_DENORM_MIN__,     \
247                                         __LDBL_DENORM_MIN__,    \
248                                         __DBL_DENORM_MIN__,     \
249                                         __FLT_DENORM_MIN__)
250
251 static const FLOAT plus_zero = PLUS_ZERO_INIT;
252 static const FLOAT minus_zero = MINUS_ZERO_INIT;
253 static const FLOAT plus_infty = PLUS_INFTY_INIT;
254 static const FLOAT minus_infty = MINUS_INFTY_INIT;
255 static const FLOAT qnan_value = QNAN_VALUE_INIT;
256 static const FLOAT max_value = MAX_VALUE_INIT;
257 static const FLOAT min_value = MIN_VALUE_INIT;
258 static const FLOAT min_subnorm_value = MIN_SUBNORM_VALUE_INIT;
259
260 static FLOAT max_error, real_max_error, imag_max_error;
261
262
263 #define BUILD_COMPLEX(real, imag) \
264   ({ __complex__ FLOAT __retval;                                              \
265      __real__ __retval = (real);                                              \
266      __imag__ __retval = (imag);                                              \
267      __retval; })
268
269
270 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
271                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
272
273 static void
274 init_max_error (void)
275 {
276   max_error = 0;
277   real_max_error = 0;
278   imag_max_error = 0;
279   feclearexcept (FE_ALL_EXCEPT);
280   errno = 0;
281 }
282
283 static void
284 set_max_error (FLOAT current, FLOAT *curr_max_error)
285 {
286   if (current > *curr_max_error)
287     *curr_max_error = current;
288 }
289
290
291 /* Print a FLOAT.  */
292 static void
293 print_float (FLOAT f)
294 {
295   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
296   if (issignaling (f))
297     printf ("sNaN\n");
298   else if (isnan (f))
299     printf ("qNaN\n");
300   else
301     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
302 }
303
304 /* Should the message print to screen?  This depends on the verbose flag,
305    and the test status.  */
306 static int
307 print_screen (int ok)
308 {
309   if (output_points
310       && (verbose > 1
311           || (verbose == 1 && ok == 0)))
312     return 1;
313   return 0;
314 }
315
316
317 /* Should the message print to screen?  This depends on the verbose flag,
318    and the test status.  */
319 static int
320 print_screen_max_error (int ok)
321 {
322   if (output_max_error
323       && (verbose > 1
324           || ((verbose == 1) && (ok == 0))))
325     return 1;
326   return 0;
327 }
328
329 /* Update statistic counters.  */
330 static void
331 update_stats (int ok)
332 {
333   ++noTests;
334   if (!ok)
335     ++noErrors;
336 }
337
338 static void
339 print_ulps (const char *test_name, FLOAT ulp)
340 {
341   if (output_ulps)
342     {
343       fprintf (ulps_file, "Test \"%s\":\n", test_name);
344       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
345                CHOOSE("ldouble", "double", "float",
346                       "ildouble", "idouble", "ifloat"),
347                FUNC(ceil) (ulp));
348     }
349 }
350
351 static void
352 print_function_ulps (const char *function_name, FLOAT ulp)
353 {
354   if (output_ulps)
355     {
356       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
357       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
358                CHOOSE("ldouble", "double", "float",
359                       "ildouble", "idouble", "ifloat"),
360                FUNC(ceil) (ulp));
361     }
362 }
363
364
365 static void
366 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
367                              FLOAT imag_ulp)
368 {
369   if (output_ulps)
370     {
371       if (real_ulp != 0.0)
372         {
373           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
374           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
375                    CHOOSE("ldouble", "double", "float",
376                           "ildouble", "idouble", "ifloat"),
377                    FUNC(ceil) (real_ulp));
378         }
379       if (imag_ulp != 0.0)
380         {
381           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
382           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
383                    CHOOSE("ldouble", "double", "float",
384                           "ildouble", "idouble", "ifloat"),
385                    FUNC(ceil) (imag_ulp));
386         }
387
388
389     }
390 }
391
392
393
394 /* Test if Floating-Point stack hasn't changed */
395 static void
396 fpstack_test (const char *test_name)
397 {
398 #if defined (__i386__) || defined (__x86_64__)
399   static int old_stack;
400   int sw;
401
402   asm ("fnstsw" : "=a" (sw));
403   sw >>= 11;
404   sw &= 7;
405
406   if (sw != old_stack)
407     {
408       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
409               test_name, sw, old_stack);
410       ++noErrors;
411       old_stack = sw;
412     }
413 #endif
414 }
415
416
417 static void
418 print_max_error (const char *func_name, FLOAT allowed)
419 {
420   int ok = 0;
421
422   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
423     {
424       ok = 1;
425     }
426
427   if (!ok)
428     print_function_ulps (func_name, max_error);
429
430
431   if (print_screen_max_error (ok))
432     {
433       printf ("Maximal error of `%s'\n", func_name);
434       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
435       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
436     }
437
438   update_stats (ok);
439 }
440
441
442 static void
443 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed)
444 {
445   int ok = 0;
446
447   if ((real_max_error == 0 && imag_max_error == 0)
448       || (real_max_error <= __real__ allowed
449           && imag_max_error <= __imag__ allowed
450           && !ignore_max_ulp))
451     {
452       ok = 1;
453     }
454
455   if (!ok)
456     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
457
458
459   if (print_screen_max_error (ok))
460     {
461       printf ("Maximal error of real part of: %s\n", func_name);
462       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
463               FUNC(ceil) (real_max_error));
464       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
465               FUNC(ceil) (__real__ allowed));
466       printf ("Maximal error of imaginary part of: %s\n", func_name);
467       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
468               FUNC(ceil) (imag_max_error));
469       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
470               FUNC(ceil) (__imag__ allowed));
471     }
472
473   update_stats (ok);
474 }
475
476
477 /* Test whether a given exception was raised.  */
478 static void
479 test_single_exception (const char *test_name,
480                        int exception,
481                        int exc_flag,
482                        int fe_flag,
483                        const char *flag_name)
484 {
485 #ifndef TEST_INLINE
486   int ok = 1;
487   if (exception & exc_flag)
488     {
489       if (fetestexcept (fe_flag))
490         {
491           if (print_screen (1))
492             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
493         }
494       else
495         {
496           ok = 0;
497           if (print_screen (0))
498             printf ("Failure: %s: Exception \"%s\" not set\n",
499                     test_name, flag_name);
500         }
501     }
502   else
503     {
504       if (fetestexcept (fe_flag))
505         {
506           ok = 0;
507           if (print_screen (0))
508             printf ("Failure: %s: Exception \"%s\" set\n",
509                     test_name, flag_name);
510         }
511       else
512         {
513           if (print_screen (1))
514             printf ("%s: Exception \"%s\" not set\n", test_name,
515                     flag_name);
516         }
517     }
518   if (!ok)
519     ++noErrors;
520
521 #endif
522 }
523
524
525 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
526    allowed but not required exceptions.
527 */
528 static void
529 test_exceptions (const char *test_name, int exception)
530 {
531   ++noExcTests;
532 #ifdef FE_DIVBYZERO
533   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
534     test_single_exception (test_name, exception,
535                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
536                            "Divide by zero");
537 #endif
538 #ifdef FE_INVALID
539   if ((exception & INVALID_EXCEPTION_OK) == 0)
540     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
541                          "Invalid operation");
542 #endif
543 #ifdef FE_OVERFLOW
544   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
545     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
546                            FE_OVERFLOW, "Overflow");
547 #endif
548 #ifdef FE_UNDERFLOW
549   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
550     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
551                            FE_UNDERFLOW, "Underflow");
552 #endif
553   feclearexcept (FE_ALL_EXCEPT);
554 }
555
556 /* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value
557    EXPECTED_VALUE (description EXPECTED_NAME).  */
558 static void
559 test_single_errno (const char *test_name, int errno_value,
560                    int expected_value, const char *expected_name)
561 {
562   if (errno_value == expected_value)
563     {
564       if (print_screen (1))
565         printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value,
566                 expected_name);
567     }
568   else
569     {
570       ++noErrors;
571       if (print_screen (0))
572         printf ("Failure: %s: errno set to %d, expected %d (%s)\n",
573                 test_name, errno_value, expected_value, expected_name);
574     }
575 }
576
577 /* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set
578    as required by EXCEPTIONS.  */
579 static void
580 test_errno (const char *test_name, int errno_value, int exceptions)
581 {
582   ++noErrnoTests;
583   if (exceptions & ERRNO_UNCHANGED)
584     test_single_errno (test_name, errno_value, 0, "unchanged");
585   if (exceptions & ERRNO_EDOM)
586     test_single_errno (test_name, errno_value, EDOM, "EDOM");
587   if (exceptions & ERRNO_ERANGE)
588     test_single_errno (test_name, errno_value, ERANGE, "ERANGE");
589 }
590
591 static void
592 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
593                       FLOAT max_ulp, int exceptions,
594                       FLOAT *curr_max_error)
595 {
596   int ok = 0;
597   int print_diff = 0;
598   FLOAT diff = 0;
599   FLOAT ulp = 0;
600   int errno_value = errno;
601
602   test_exceptions (test_name, exceptions);
603   test_errno (test_name, errno_value, exceptions);
604   if (issignaling (computed) && issignaling (expected))
605     ok = 1;
606   else if (issignaling (computed) || issignaling (expected))
607     ok = 0;
608   else if (isnan (computed) && isnan (expected))
609     ok = 1;
610   else if (isinf (computed) && isinf (expected))
611     {
612       /* Test for sign of infinities.  */
613       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
614           && signbit (computed) != signbit (expected))
615         {
616           ok = 0;
617           printf ("infinity has wrong sign.\n");
618         }
619       else
620         ok = 1;
621     }
622   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
623   else if (isinf (computed) || isnan (computed)
624            || isinf (expected) || isnan (expected))
625     ok = 0;
626   else
627     {
628       diff = FUNC(fabs) (computed - expected);
629       switch (fpclassify (expected))
630         {
631         case FP_ZERO:
632           /* ilogb (0) isn't allowed. */
633           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
634           break;
635         case FP_NORMAL:
636           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
637           break;
638         case FP_SUBNORMAL:
639           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
640              least normal value.  */
641           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
642           break;
643         default:
644           /* It should never happen. */
645           abort ();
646           break;
647         }
648       set_max_error (ulp, curr_max_error);
649       print_diff = 1;
650       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
651           && computed == 0.0 && expected == 0.0
652           && signbit(computed) != signbit (expected))
653         ok = 0;
654       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
655         ok = 1;
656       else
657         {
658           ok = 0;
659           print_ulps (test_name, ulp);
660         }
661
662     }
663   if (print_screen (ok))
664     {
665       if (!ok)
666         printf ("Failure: ");
667       printf ("Test: %s\n", test_name);
668       printf ("Result:\n");
669       printf (" is:         ");
670       print_float (computed);
671       printf (" should be:  ");
672       print_float (expected);
673       if (print_diff)
674         {
675           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
676                   "\n", diff, diff);
677           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
678           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
679         }
680     }
681   update_stats (ok);
682
683   fpstack_test (test_name);
684   errno = 0;
685 }
686
687
688 static void
689 check_float (const char *test_name, FLOAT computed, FLOAT expected,
690              FLOAT max_ulp, int exceptions)
691 {
692   check_float_internal (test_name, computed, expected, max_ulp,
693                         exceptions, &max_error);
694 }
695
696
697 static void
698 check_complex (const char *test_name, __complex__ FLOAT computed,
699                __complex__ FLOAT expected,
700                __complex__ FLOAT max_ulp,
701                int exception)
702 {
703   FLOAT part_comp, part_exp, part_max_ulp;
704   char *str;
705
706   if (asprintf (&str, "Real part of: %s", test_name) == -1)
707     abort ();
708
709   part_comp = __real__ computed;
710   part_exp = __real__ expected;
711   part_max_ulp = __real__ max_ulp;
712
713   check_float_internal (str, part_comp, part_exp, part_max_ulp,
714                         exception, &real_max_error);
715   free (str);
716
717   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
718     abort ();
719
720   part_comp = __imag__ computed;
721   part_exp = __imag__ expected;
722   part_max_ulp = __imag__ max_ulp;
723
724   /* Don't check again for exceptions or errno, just pass through the
725      zero/inf sign test.  */
726   check_float_internal (str, part_comp, part_exp, part_max_ulp,
727                         exception & IGNORE_ZERO_INF_SIGN,
728                         &imag_max_error);
729   free (str);
730 }
731
732
733 /* Check that computed and expected values are equal (int values).  */
734 static void
735 check_int (const char *test_name, int computed, int expected, int max_ulp,
736            int exceptions)
737 {
738   int diff = computed - expected;
739   int ok = 0;
740   int errno_value = errno;
741
742   test_exceptions (test_name, exceptions);
743   test_errno (test_name, errno_value, exceptions);
744   noTests++;
745   if (abs (diff) <= max_ulp)
746     ok = 1;
747
748   if (!ok)
749     print_ulps (test_name, diff);
750
751   if (print_screen (ok))
752     {
753       if (!ok)
754         printf ("Failure: ");
755       printf ("Test: %s\n", test_name);
756       printf ("Result:\n");
757       printf (" is:         %d\n", computed);
758       printf (" should be:  %d\n", expected);
759     }
760
761   update_stats (ok);
762   fpstack_test (test_name);
763   errno = 0;
764 }
765
766
767 /* Check that computed and expected values are equal (long int values).  */
768 static void
769 check_long (const char *test_name, long int computed, long int expected,
770             long int max_ulp, int exceptions)
771 {
772   long int diff = computed - expected;
773   int ok = 0;
774   int errno_value = errno;
775
776   test_exceptions (test_name, exceptions);
777   test_errno (test_name, errno_value, exceptions);
778   noTests++;
779   if (labs (diff) <= max_ulp)
780     ok = 1;
781
782   if (!ok)
783     print_ulps (test_name, diff);
784
785   if (print_screen (ok))
786     {
787       if (!ok)
788         printf ("Failure: ");
789       printf ("Test: %s\n", test_name);
790       printf ("Result:\n");
791       printf (" is:         %ld\n", computed);
792       printf (" should be:  %ld\n", expected);
793     }
794
795   update_stats (ok);
796   fpstack_test (test_name);
797   errno = 0;
798 }
799
800
801 /* Check that computed value is true/false.  */
802 static void
803 check_bool (const char *test_name, int computed, int expected,
804             long int max_ulp, int exceptions)
805 {
806   int ok = 0;
807   int errno_value = errno;
808
809   test_exceptions (test_name, exceptions);
810   test_errno (test_name, errno_value, exceptions);
811   noTests++;
812   if ((computed == 0) == (expected == 0))
813     ok = 1;
814
815   if (print_screen (ok))
816     {
817       if (!ok)
818         printf ("Failure: ");
819       printf ("Test: %s\n", test_name);
820       printf ("Result:\n");
821       printf (" is:         %d\n", computed);
822       printf (" should be:  %d\n", expected);
823     }
824
825   update_stats (ok);
826   fpstack_test (test_name);
827   errno = 0;
828 }
829
830
831 /* check that computed and expected values are equal (long int values) */
832 static void
833 check_longlong (const char *test_name, long long int computed,
834                 long long int expected,
835                 long long int max_ulp,
836                 int exceptions)
837 {
838   long long int diff = computed - expected;
839   int ok = 0;
840   int errno_value = errno;
841
842   test_exceptions (test_name, exceptions);
843   test_errno (test_name, errno_value, exceptions);
844   noTests++;
845   if (llabs (diff) <= max_ulp)
846     ok = 1;
847
848   if (!ok)
849     print_ulps (test_name, diff);
850
851   if (print_screen (ok))
852     {
853       if (!ok)
854         printf ("Failure:");
855       printf ("Test: %s\n", test_name);
856       printf ("Result:\n");
857       printf (" is:         %lld\n", computed);
858       printf (" should be:  %lld\n", expected);
859     }
860
861   update_stats (ok);
862   fpstack_test (test_name);
863   errno = 0;
864 }
865
866 /* Run an individual test, including any required setup and checking
867    of results.  */
868 #define RUN_TEST_f_f(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
869                      MAX_ULP, EXCEPTIONS)                       \
870   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,     \
871                MAX_ULP, EXCEPTIONS)
872 #define RUN_TEST_2_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,        \
873                      MAX_ULP, EXCEPTIONS)                               \
874   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED,      \
875                MAX_ULP, EXCEPTIONS)
876 #define RUN_TEST_ff_f RUN_TEST_2_f
877 #define RUN_TEST_fi_f RUN_TEST_2_f
878 #define RUN_TEST_fl_f RUN_TEST_2_f
879 #define RUN_TEST_if_f RUN_TEST_2_f
880 #define RUN_TEST_fff_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, ARG3,  \
881                        EXPECTED, MAX_ULP, EXCEPTIONS)           \
882   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3),  \
883                EXPECTED, MAX_ULP, EXCEPTIONS)
884 #define RUN_TEST_c_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,        \
885                      MAX_ULP, EXCEPTIONS)                               \
886   check_float (TEST_NAME,                                               \
887                FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)),           \
888                EXPECTED, MAX_ULP, EXCEPTIONS)
889 #define RUN_TEST_f_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,              \
890                       MAX_ULP, EXCEPTIONS,                              \
891                       EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,    \
892                       EXTRA_EXPECTED, EXTRA_ULP)                        \
893   do                                                                    \
894     {                                                                   \
895       (EXTRA_VAR) = (EXTRA_INIT);                                       \
896       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,         \
897                    MAX_ULP, EXCEPTIONS);                                \
898       if (EXTRA_TEST)                                                   \
899         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
900                    EXTRA_ULP, 0);                                       \
901     }                                                                   \
902   while (0)
903 #define RUN_TEST_fF_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,             \
904                        MAX_ULP, EXCEPTIONS,                             \
905                        EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,   \
906                        EXTRA_EXPECTED, EXTRA_ULP)                       \
907   do                                                                    \
908     {                                                                   \
909       (EXTRA_VAR) = (EXTRA_INIT);                                       \
910       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),     \
911                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
912       if (EXTRA_TEST)                                                   \
913         check_float (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,             \
914                      EXTRA_ULP, 0);                                     \
915     }                                                                   \
916   while (0)
917 #define RUN_TEST_fI_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,             \
918                        MAX_ULP, EXCEPTIONS,                             \
919                        EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,   \
920                        EXTRA_EXPECTED, EXTRA_ULP)                       \
921   do                                                                    \
922     {                                                                   \
923       (EXTRA_VAR) = (EXTRA_INIT);                                       \
924       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),     \
925                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
926       if (EXTRA_TEST)                                                   \
927         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
928                    EXTRA_ULP, 0);                                       \
929     }                                                                   \
930   while (0)
931 #define RUN_TEST_ffI_f1(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,     \
932                         MAX_ULP, EXCEPTIONS,                            \
933                         EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,  \
934                         EXTRA_EXPECTED, EXTRA_ULP)                      \
935   do                                                                    \
936     {                                                                   \
937       (EXTRA_VAR) = (EXTRA_INIT);                                       \
938       check_float (TEST_NAME,                                           \
939                    FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)),         \
940                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
941       if (EXTRA_TEST)                                                   \
942         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
943                    EXTRA_ULP, 0);                                       \
944     }                                                                   \
945   while (0)
946 #define RUN_TEST_c_c(TEST_NAME, FUNC_NAME, ARGR, ARGC, EXPR, EXPC,      \
947                      MAX_ULP, EXCEPTIONS)                               \
948   check_complex (TEST_NAME,                                             \
949                  FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)),         \
950                  BUILD_COMPLEX (EXPR, EXPC),                            \
951                  MAX_ULP, EXCEPTIONS)
952 #define RUN_TEST_cc_c(TEST_NAME, FUNC_NAME, ARG1R, ARG1C, ARG2R, ARG2C, \
953                       EXPR, EXPC, MAX_ULP, EXCEPTIONS)                  \
954   check_complex (TEST_NAME,                                             \
955                  FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C),        \
956                                    BUILD_COMPLEX (ARG2R, ARG2C)),       \
957                  BUILD_COMPLEX (EXPR, EXPC),                            \
958                  MAX_ULP, EXCEPTIONS)
959 #define RUN_TEST_f_i(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
960                      MAX_ULP, EXCEPTIONS)                       \
961   check_int (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,       \
962              MAX_ULP, EXCEPTIONS)
963 #define RUN_TEST_f_i_tg(TEST_NAME, FUNC_NAME, ARG, EXPECTED,    \
964                         MAX_ULP, EXCEPTIONS)                    \
965   check_int (TEST_NAME, FUNC_NAME (ARG), EXPECTED,              \
966              MAX_ULP, EXCEPTIONS)
967 #define RUN_TEST_ff_i_tg(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,    \
968                          MAX_ULP, EXCEPTIONS)                           \
969   check_int (TEST_NAME, FUNC_NAME (ARG1, ARG2), EXPECTED,               \
970              MAX_ULP, EXCEPTIONS)
971 #define RUN_TEST_f_b(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
972                      MAX_ULP, EXCEPTIONS)                       \
973   check_bool (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,      \
974               MAX_ULP, EXCEPTIONS)
975 #define RUN_TEST_f_b_tg(TEST_NAME, FUNC_NAME, ARG, EXPECTED,    \
976                         MAX_ULP, EXCEPTIONS)                    \
977   check_bool (TEST_NAME, FUNC_NAME (ARG), EXPECTED,             \
978               MAX_ULP, EXCEPTIONS)
979 #define RUN_TEST_f_l(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
980                      MAX_ULP, EXCEPTIONS)                       \
981   check_long (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,      \
982               MAX_ULP, EXCEPTIONS)
983 #define RUN_TEST_f_L(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
984                      MAX_ULP, EXCEPTIONS)                       \
985   check_longlong (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,  \
986                   MAX_ULP, EXCEPTIONS)
987 #define RUN_TEST_sincos(ARG, TEST_NAME_SIN, SIN_RES_VAR, EXPECTED_SIN,  \
988                         MAX_ULP_SIN, TEST_NAME_COS, COS_RES_VAR,        \
989                         EXPECTED_COS, MAX_ULP_COS, EXCEPTIONS)          \
990   do                                                                    \
991     {                                                                   \
992       FUNC (sincos) (ARG, &(SIN_RES_VAR), &(COS_RES_VAR));              \
993       check_float (TEST_NAME_SIN, SIN_RES_VAR,                          \
994                    EXPECTED_SIN, MAX_ULP_SIN, EXCEPTIONS);              \
995       check_float (TEST_NAME_COS, COS_RES_VAR,                          \
996                    EXPECTED_COS, MAX_ULP_COS, 0);                       \
997     }                                                                   \
998   while (0)
999
1000
1001
1002 /* This is to prevent messages from the SVID libm emulation.  */
1003 int
1004 matherr (struct exception *x __attribute__ ((unused)))
1005 {
1006   return 1;
1007 }
1008
1009
1010 /****************************************************************************
1011   Tests for single functions of libm.
1012   Please keep them alphabetically sorted!
1013 ****************************************************************************/
1014
1015 static void
1016 acos_test (void)
1017 {
1018   errno = 0;
1019   FUNC(acos) (0);
1020   if (errno == ENOSYS)
1021     /* Function not implemented.  */
1022     return;
1023
1024   START (acos);
1025
1026   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
1027   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
1028   TEST_f_f (acos, qnan_value, qnan_value);
1029
1030   /* |x| > 1: */
1031   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
1032   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
1033   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
1034   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
1035
1036   TEST_f_f (acos, 0, M_PI_2l);
1037   TEST_f_f (acos, minus_zero, M_PI_2l);
1038   TEST_f_f (acos, 1, 0);
1039   TEST_f_f (acos, -1, M_PIl);
1040   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1041   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1042   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
1043   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
1044   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
1045   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
1046   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
1047 #ifndef TEST_FLOAT
1048   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
1049   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
1050   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
1051   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
1052 #endif
1053 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1054   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
1055   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
1056 #endif
1057   END (acos);
1058 }
1059
1060
1061 static void
1062 acos_test_tonearest (void)
1063 {
1064   int save_round_mode;
1065   errno = 0;
1066   FUNC(acos) (0);
1067   if (errno == ENOSYS)
1068     /* Function not implemented.  */
1069     return;
1070
1071   START (acos_tonearest);
1072
1073   save_round_mode = fegetround ();
1074
1075   if (!fesetround (FE_TONEAREST))
1076     {
1077       TEST_f_f (acos, 0, M_PI_2l);
1078       TEST_f_f (acos, minus_zero, M_PI_2l);
1079       TEST_f_f (acos, 1, 0);
1080       TEST_f_f (acos, -1, M_PIl);
1081       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1082       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1083     }
1084
1085   fesetround (save_round_mode);
1086
1087   END (acos_tonearest);
1088 }
1089
1090
1091 static void
1092 acos_test_towardzero (void)
1093 {
1094   int save_round_mode;
1095   errno = 0;
1096   FUNC(acos) (0);
1097   if (errno == ENOSYS)
1098     /* Function not implemented.  */
1099     return;
1100
1101   START (acos_towardzero);
1102
1103   save_round_mode = fegetround ();
1104
1105   if (!fesetround (FE_TOWARDZERO))
1106     {
1107       TEST_f_f (acos, 0, M_PI_2l);
1108       TEST_f_f (acos, minus_zero, M_PI_2l);
1109       TEST_f_f (acos, 1, 0);
1110       TEST_f_f (acos, -1, M_PIl);
1111       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1112       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1113     }
1114
1115   fesetround (save_round_mode);
1116
1117   END (acos_towardzero);
1118 }
1119
1120
1121 static void
1122 acos_test_downward (void)
1123 {
1124   int save_round_mode;
1125   errno = 0;
1126   FUNC(acos) (0);
1127   if (errno == ENOSYS)
1128     /* Function not implemented.  */
1129     return;
1130
1131   START (acos_downward);
1132
1133   save_round_mode = fegetround ();
1134
1135   if (!fesetround (FE_DOWNWARD))
1136     {
1137       TEST_f_f (acos, 0, M_PI_2l);
1138       TEST_f_f (acos, minus_zero, M_PI_2l);
1139       TEST_f_f (acos, 1, 0);
1140       TEST_f_f (acos, -1, M_PIl);
1141       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1142       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1143     }
1144
1145   fesetround (save_round_mode);
1146
1147   END (acos_downward);
1148 }
1149
1150
1151 static void
1152 acos_test_upward (void)
1153 {
1154   int save_round_mode;
1155   errno = 0;
1156   FUNC(acos) (0);
1157   if (errno == ENOSYS)
1158     /* Function not implemented.  */
1159     return;
1160
1161   START (acos_upward);
1162
1163   save_round_mode = fegetround ();
1164
1165   if (!fesetround (FE_UPWARD))
1166     {
1167       TEST_f_f (acos, 0, M_PI_2l);
1168       TEST_f_f (acos, minus_zero, M_PI_2l);
1169       TEST_f_f (acos, 1, 0);
1170       TEST_f_f (acos, -1, M_PIl);
1171       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1172       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1173     }
1174
1175   fesetround (save_round_mode);
1176
1177   END (acos_upward);
1178 }
1179
1180 static void
1181 acosh_test (void)
1182 {
1183   errno = 0;
1184   FUNC(acosh) (7);
1185   if (errno == ENOSYS)
1186     /* Function not implemented.  */
1187     return;
1188
1189   START (acosh);
1190
1191   TEST_f_f (acosh, plus_infty, plus_infty);
1192   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
1193   TEST_f_f (acosh, qnan_value, qnan_value);
1194
1195   /* x < 1:  */
1196   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1197   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1198
1199   TEST_f_f (acosh, 1, 0);
1200   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1201
1202   END (acosh);
1203 }
1204
1205 static void
1206 asin_test (void)
1207 {
1208   errno = 0;
1209   FUNC(asin) (0);
1210   if (errno == ENOSYS)
1211     /* Function not implemented.  */
1212     return;
1213
1214   START (asin);
1215
1216   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1217   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1218   TEST_f_f (asin, qnan_value, qnan_value);
1219
1220   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1221   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1222   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1223   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1224   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1225
1226   TEST_f_f (asin, 0, 0);
1227   TEST_f_f (asin, minus_zero, minus_zero);
1228   TEST_f_f (asin, 0.5, M_PI_6l);
1229   TEST_f_f (asin, -0.5, -M_PI_6l);
1230   TEST_f_f (asin, 1.0, M_PI_2l);
1231   TEST_f_f (asin, -1.0, -M_PI_2l);
1232   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1233   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1234   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1235 #ifndef TEST_FLOAT
1236   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1237   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1238   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1239   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1240 #endif
1241 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1242   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1243   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1244 #endif
1245
1246   END (asin);
1247 }
1248
1249
1250 static void
1251 asin_test_tonearest (void)
1252 {
1253   int save_round_mode;
1254   errno = 0;
1255   FUNC(asin) (0);
1256   if (errno == ENOSYS)
1257     /* Function not implemented.  */
1258     return;
1259
1260   START (asin_tonearest);
1261
1262   save_round_mode = fegetround ();
1263
1264   if (!fesetround (FE_TONEAREST))
1265     {
1266       TEST_f_f (asin, 0, 0);
1267       TEST_f_f (asin, minus_zero, minus_zero);
1268       TEST_f_f (asin, 0.5, M_PI_6l);
1269       TEST_f_f (asin, -0.5, -M_PI_6l);
1270       TEST_f_f (asin, 1.0, M_PI_2l);
1271       TEST_f_f (asin, -1.0, -M_PI_2l);
1272     }
1273
1274   fesetround (save_round_mode);
1275
1276   END (asin_tonearest);
1277 }
1278
1279
1280 static void
1281 asin_test_towardzero (void)
1282 {
1283   int save_round_mode;
1284   errno = 0;
1285   FUNC(asin) (0);
1286   if (errno == ENOSYS)
1287     /* Function not implemented.  */
1288     return;
1289
1290   START (asin_towardzero);
1291
1292   save_round_mode = fegetround ();
1293
1294   if (!fesetround (FE_TOWARDZERO))
1295     {
1296       TEST_f_f (asin, 0, 0);
1297       TEST_f_f (asin, minus_zero, minus_zero);
1298       TEST_f_f (asin, 0.5, M_PI_6l);
1299       TEST_f_f (asin, -0.5, -M_PI_6l);
1300       TEST_f_f (asin, 1.0, M_PI_2l);
1301       TEST_f_f (asin, -1.0, -M_PI_2l);
1302     }
1303
1304   fesetround (save_round_mode);
1305
1306   END (asin_towardzero);
1307 }
1308
1309
1310 static void
1311 asin_test_downward (void)
1312 {
1313   int save_round_mode;
1314   errno = 0;
1315   FUNC(asin) (0);
1316   if (errno == ENOSYS)
1317     /* Function not implemented.  */
1318     return;
1319
1320   START (asin_downward);
1321
1322   save_round_mode = fegetround ();
1323
1324   if (!fesetround (FE_DOWNWARD))
1325     {
1326       TEST_f_f (asin, 0, 0);
1327       TEST_f_f (asin, minus_zero, minus_zero);
1328       TEST_f_f (asin, 0.5, M_PI_6l);
1329       TEST_f_f (asin, -0.5, -M_PI_6l);
1330       TEST_f_f (asin, 1.0, M_PI_2l);
1331       TEST_f_f (asin, -1.0, -M_PI_2l);
1332     }
1333
1334   fesetround (save_round_mode);
1335
1336   END (asin_downward);
1337 }
1338
1339
1340 static void
1341 asin_test_upward (void)
1342 {
1343   int save_round_mode;
1344   errno = 0;
1345   FUNC(asin) (0);
1346   if (errno == ENOSYS)
1347     /* Function not implemented.  */
1348     return;
1349
1350   START (asin_upward);
1351
1352   save_round_mode = fegetround ();
1353
1354   if (!fesetround (FE_UPWARD))
1355     {
1356       TEST_f_f (asin, 0, 0);
1357       TEST_f_f (asin, minus_zero, minus_zero);
1358       TEST_f_f (asin, 0.5, M_PI_6l);
1359       TEST_f_f (asin, -0.5, -M_PI_6l);
1360       TEST_f_f (asin, 1.0, M_PI_2l);
1361       TEST_f_f (asin, -1.0, -M_PI_2l);
1362     }
1363
1364   fesetround (save_round_mode);
1365
1366   END (asin_upward);
1367 }
1368
1369 static void
1370 asinh_test (void)
1371 {
1372   errno = 0;
1373   FUNC(asinh) (0.7L);
1374   if (errno == ENOSYS)
1375     /* Function not implemented.  */
1376     return;
1377
1378   START (asinh);
1379
1380   TEST_f_f (asinh, 0, 0);
1381   TEST_f_f (asinh, minus_zero, minus_zero);
1382 #ifndef TEST_INLINE
1383   TEST_f_f (asinh, plus_infty, plus_infty);
1384   TEST_f_f (asinh, minus_infty, minus_infty);
1385 #endif
1386   TEST_f_f (asinh, qnan_value, qnan_value);
1387   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1388
1389   END (asinh);
1390 }
1391
1392 static void
1393 atan_test (void)
1394 {
1395   errno = 0;
1396   FUNC(atan) (0);
1397   if (errno == ENOSYS)
1398     /* Function not implemented.  */
1399     return;
1400
1401   START (atan);
1402
1403   TEST_f_f (atan, 0, 0);
1404   TEST_f_f (atan, minus_zero, minus_zero);
1405
1406   TEST_f_f (atan, plus_infty, M_PI_2l);
1407   TEST_f_f (atan, minus_infty, -M_PI_2l);
1408   TEST_f_f (atan, qnan_value, qnan_value);
1409   TEST_f_f (atan, max_value, M_PI_2l);
1410   TEST_f_f (atan, -max_value, -M_PI_2l);
1411
1412   TEST_f_f (atan, 1, M_PI_4l);
1413   TEST_f_f (atan, -1, -M_PI_4l);
1414
1415   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1416
1417   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1418 #ifndef TEST_FLOAT
1419   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1420 #endif
1421 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1422   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1423 #endif
1424
1425   END (atan);
1426 }
1427
1428
1429
1430 static void
1431 atanh_test (void)
1432 {
1433   errno = 0;
1434   FUNC(atanh) (0.7L);
1435   if (errno == ENOSYS)
1436     /* Function not implemented.  */
1437     return;
1438
1439   START (atanh);
1440
1441
1442   TEST_f_f (atanh, 0, 0);
1443   TEST_f_f (atanh, minus_zero, minus_zero);
1444
1445   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1446   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1447   TEST_f_f (atanh, qnan_value, qnan_value);
1448
1449   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1450   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1451   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1452   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1453   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1454
1455   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1456
1457   END (atanh);
1458 }
1459
1460 static void
1461 atan2_test (void)
1462 {
1463   errno = 0;
1464   FUNC(atan2) (-0, 1);
1465   if (errno == ENOSYS)
1466     /* Function not implemented.  */
1467     return;
1468
1469   START (atan2);
1470
1471   /* atan2 (0,x) == 0 for x > 0.  */
1472   TEST_ff_f (atan2, 0, 1, 0);
1473
1474   /* atan2 (-0,x) == -0 for x > 0.  */
1475   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1476
1477   TEST_ff_f (atan2, 0, 0, 0);
1478   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1479
1480   /* atan2 (+0,x) == +pi for x < 0.  */
1481   TEST_ff_f (atan2, 0, -1, M_PIl);
1482
1483   /* atan2 (-0,x) == -pi for x < 0.  */
1484   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1485
1486   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1487   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1488
1489   /* atan2 (y,+0) == pi/2 for y > 0.  */
1490   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1491
1492   /* atan2 (y,-0) == pi/2 for y > 0.  */
1493   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1494
1495   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1496   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1497
1498   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1499   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1500
1501   /* atan2 (y,inf) == +0 for finite y > 0.  */
1502   TEST_ff_f (atan2, 1, plus_infty, 0);
1503
1504   /* atan2 (y,inf) == -0 for finite y < 0.  */
1505   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1506
1507   /* atan2(+inf, x) == pi/2 for finite x.  */
1508   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1509
1510   /* atan2(-inf, x) == -pi/2 for finite x.  */
1511   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1512
1513   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1514   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1515
1516   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1517   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1518
1519   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1520   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1521   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1522   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1523   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1524
1525   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1526
1527   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1528   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1529
1530   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1531   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1532   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1533   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1534   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1535   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1536
1537   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1538 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1539   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1540 #endif
1541
1542   END (atan2);
1543 }
1544
1545 static void
1546 cabs_test (void)
1547 {
1548   errno = 0;
1549   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1550   if (errno == ENOSYS)
1551     /* Function not implemented.  */
1552     return;
1553
1554   START (cabs);
1555
1556   /* cabs (x + iy) is specified as hypot (x,y) */
1557
1558   /* cabs (+inf + i x) == +inf.  */
1559   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1560   /* cabs (-inf + i x) == +inf.  */
1561   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1562
1563   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1564   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1565
1566   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1567
1568   /* cabs (x,y) == cabs (y,x).  */
1569   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1570   /* cabs (x,y) == cabs (-x,y).  */
1571   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1572   /* cabs (x,y) == cabs (-y,x).  */
1573   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1574   /* cabs (x,y) == cabs (-x,-y).  */
1575   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1576   /* cabs (x,y) == cabs (-y,-x).  */
1577   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1578   /* cabs (x,0) == fabs (x).  */
1579   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1580   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1581   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1582   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1583   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1584   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1585
1586   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1587
1588   END (cabs);
1589 }
1590
1591
1592 static void
1593 cacos_test (void)
1594 {
1595   errno = 0;
1596   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1597   if (errno == ENOSYS)
1598     /* Function not implemented.  */
1599     return;
1600
1601   START (cacos);
1602
1603
1604   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1605   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1606   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1607   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1608
1609   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1610   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1611
1612   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1613   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1614
1615   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1616   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1617   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1618   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1619   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1620   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1621
1622   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1623   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1624   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1625   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1626
1627   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1628   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1629   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1630   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1631
1632   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1633   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1634
1635   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1636   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1637
1638   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1639   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1640
1641   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1642   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1643
1644   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1645   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1646
1647   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1648
1649   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1650   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1651   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1652   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1653   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1654   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1655   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1656   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1657   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1658   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1659   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1660   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1661
1662   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1663   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1664   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1665   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1666   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1667   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1668   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1669   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1670   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1671   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1672   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1673   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1674
1675   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1676   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1677   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1678   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1679   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1680   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1681   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1682   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1683 #ifndef TEST_FLOAT
1684   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1685   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1686   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1687   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1688   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1689   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1690   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1691   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1692 #endif
1693 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1694   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1695   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1696   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1697   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1698   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1699   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1700   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1701   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1702 #endif
1703
1704   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1705 #ifndef TEST_FLOAT
1706   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1707 #endif
1708 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1709   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1710 #endif
1711
1712   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1713   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1714   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1715   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1716   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1717   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1718   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1719   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1720 #ifndef TEST_FLOAT
1721   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1722   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1723   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1724   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1725   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1726   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1727   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1728   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1729 #endif
1730 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1731   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1732   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1733   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1734   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1735   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1736   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1737   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1738   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1739 #endif
1740
1741   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1742   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1743   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1744   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1745   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1746   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1747   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1748   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1749   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1750   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1751   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1752   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1753   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1754   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1755   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1756   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1757   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1758   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1759   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1760   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1761   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1762   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1763   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1764   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1765   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1766   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1767   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1768   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1769   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1770   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1771   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1772   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1773   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1774   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1775   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1776   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1777   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1778   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1779   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1780   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1781   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1782   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1783   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1784   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1785   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1786   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1787   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1788   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1789 #ifndef TEST_FLOAT
1790   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1791   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1792   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1793   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1794   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1795   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1796   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1797   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1798   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1799   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1800   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1801   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1802   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1803   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1804   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1805   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1806 #endif
1807 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1808   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1809   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1810   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1811   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1812   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1813   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1814   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1815   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1816   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1817   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1818   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1819   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1820   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1821   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1822   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1823   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1824 #endif
1825
1826   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L);
1827   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L);
1828   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L);
1829   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L);
1830   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L);
1831   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L);
1832   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L);
1833   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L);
1834   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L);
1835   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L);
1836   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L);
1837   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L);
1838   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L);
1839   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L);
1840   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L);
1841   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L);
1842   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1843   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1844   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1845   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1846   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L);
1847   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L);
1848   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L);
1849   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L);
1850 #ifndef TEST_FLOAT
1851   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L);
1852   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L);
1853   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L);
1854   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L);
1855   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L);
1856   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L);
1857   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L);
1858   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L);
1859   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1860   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1861   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1862   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1863   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1864   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1865   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1866   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1867   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1868   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1869   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1870   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1871   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L);
1872   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1873   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L);
1874   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1875 #endif
1876 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1877   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L);
1878   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L);
1879   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L);
1880   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L);
1881   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L);
1882   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L);
1883   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L);
1884   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L);
1885 # if LDBL_MIN_EXP <= -16381
1886   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1887   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1888   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1889   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1890   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L);
1891   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1892   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L);
1893   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1894 # endif
1895   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1896   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1897   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1898   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1899   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L);
1900   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1901   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L);
1902   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1903 #endif
1904 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1905   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L);
1906   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L);
1907   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L);
1908   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L);
1909   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L);
1910   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L);
1911   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L);
1912   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L);
1913   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1914   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1915   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1916   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1917   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L);
1918   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1919   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L);
1920   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1921   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1922   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1923   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1924   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1925   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L);
1926   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1927   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L);
1928   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1929 #endif
1930 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1931   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L);
1932   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L);
1933   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L);
1934   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L);
1935   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L);
1936   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L);
1937   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L);
1938   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L);
1939   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1940   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1941   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1942   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1943   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L);
1944   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1945   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L);
1946   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1947   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1948   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1949   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1950   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1951   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L);
1952   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1953   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L);
1954   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1955 #endif
1956
1957   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1958   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1959   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1960   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1961   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1962   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1963   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1964   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1965   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1966   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1967   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1968   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1969   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1970   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1971   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1972   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1973   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1974   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1975   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1976   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1977   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1978   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1979   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1980   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1981   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1982   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1983   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1984   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1985   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1986   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1987   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1988   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1989   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1990   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1991   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1992   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1993   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1994   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1995   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1996   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1997   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1998   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1999   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
2000   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
2001   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
2002   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
2003   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
2004   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
2005   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2006   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2007   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2008   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2009   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
2010   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
2011   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
2012   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
2013   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
2014   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
2015   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
2016   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
2017   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2018   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2019   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2020   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2021 #ifndef TEST_FLOAT
2022   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
2023   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
2024   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
2025   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
2026   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
2027   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
2028   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
2029   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
2030   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2031   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2032   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2033   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2034   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2035   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2036   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2037   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2038   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2039   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2040   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2041   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2042   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
2043   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
2044   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
2045   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
2046 #endif
2047   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
2048   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
2049   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
2050   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
2051   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
2052   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
2053   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
2054   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
2055 #ifndef TEST_FLOAT
2056   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2057   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2058   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2059   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2060   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2061   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2062   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2063   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2064 #endif
2065   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
2066   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
2067   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
2068   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
2069 #ifndef TEST_FLOAT
2070   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2071   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2072   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2073   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2074   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2075   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2076   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2077   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2078 #endif
2079   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2080   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2081   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2082   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2083   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
2084   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
2085   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
2086   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
2087 #ifndef TEST_FLOAT
2088   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2089   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2090   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2091   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2092 #endif
2093 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2094   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
2095   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
2096   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
2097   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
2098   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
2099   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
2100   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
2101   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
2102 # if LDBL_MIN_EXP <= -16381
2103   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2104   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2105   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2106   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2107   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
2108   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
2109   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
2110   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
2111 # endif
2112   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2113   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2114   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2115   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2116   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
2117   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
2118   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
2119   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
2120 #endif
2121   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
2122   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
2123   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
2124   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
2125   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
2126   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
2127   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
2128   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
2129 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2130   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2131   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2132   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2133   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2134   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2135   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2136   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2137   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2138 #endif
2139   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
2140   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
2141   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
2142   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
2143 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2144   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2145   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2146   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2147   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2148   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2149   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2150   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2151   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2152 #endif
2153   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2154   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2155   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2156   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2157   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
2158   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
2159   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
2160   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
2161 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2162   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2163   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2164   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2165   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2166 #endif
2167 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2168   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
2169   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
2170   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
2171   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
2172   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
2173   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
2174   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
2175   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
2176   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2177   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2178   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2179   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2180   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2181   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2182   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2183   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2184   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2185   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2186   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2187   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2188   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
2189   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
2190   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
2191   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
2192 #endif
2193   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
2194   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
2195   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
2196   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2197   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2198   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2199   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2200   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2201   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2202   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2203   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2204   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2205 #ifndef TEST_FLOAT
2206   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2207   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2208   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2209   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2210   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2211   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2212   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2213   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2214 #endif
2215   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2216   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2217   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2218   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2219   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2220   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2221   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2222   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2223 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2224   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2225   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2226   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2227   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2228   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2229   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2230   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2231   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2232   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2233   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2234   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2235   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2236   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2237   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2238   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2239   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2240   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2241   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2242   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2243   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2244   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2245   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2246   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2247   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2248 #endif
2249   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2250   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2251   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2252   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2253   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2254   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2255   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2256   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2257   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2258   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2259   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2260   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2261 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2262   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2263   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2264   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2265   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2266   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2267   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2268   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2269   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2270 #endif
2271   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2272   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2273   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2274   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2275   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2276   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2277   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2278   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2279
2280   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2281   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2282
2283   END (cacos, complex);
2284 }
2285
2286 static void
2287 cacosh_test (void)
2288 {
2289   errno = 0;
2290   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2291   if (errno == ENOSYS)
2292     /* Function not implemented.  */
2293     return;
2294
2295   START (cacosh);
2296
2297
2298   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2299   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2300   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2301   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2302   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2303   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2304
2305   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2306   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2307
2308   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2309   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2310   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2311   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2312   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2313   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2314
2315   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2316   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2317   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2318   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2319
2320   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2321   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2322   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2323   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2324
2325   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2326   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2327
2328   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2329   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2330
2331   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2332   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2333
2334   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2335   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2336
2337   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2338   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2339
2340   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2341
2342   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2343   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2344   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2345   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2346   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2347   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2348   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2349   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2350   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2351   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2352   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2353   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2354
2355   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2356   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2357   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2358   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2359   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2360   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2361   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2362   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2363   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2364   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2365   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2366   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2367
2368   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2369   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2370   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2371   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2372   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2373   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2374   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2375   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2376 #ifndef TEST_FLOAT
2377   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2378   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2379   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2380   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2381   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2382   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2383   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2384   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2385 #endif
2386 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2387   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2388   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2389   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2390   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2391   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2392   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2393   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2394   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2395 #endif
2396   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2397 #ifndef TEST_FLOAT
2398   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2399 #endif
2400 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2401   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2402 #endif
2403   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2404   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2405   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2406   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2407   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2408   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2409   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2410   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2411 #ifndef TEST_FLOAT
2412   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2413   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2414   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2415   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2416   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2417   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2418   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2419   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2420 #endif
2421 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2422   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2423   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2424   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2425   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2426   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2427   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2428   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2429   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2430 #endif
2431   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2432   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2433   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2434   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2435   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2436   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2437   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2438   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2439   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2440   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2441   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2442   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2443   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2444   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2445   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2446   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2447   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2448   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2449   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2450   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2451   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2452   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2453   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2454   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2455   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2456   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2457   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2458   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2459   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2460   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2461   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2462   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2463   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2464   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2465   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2466   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2467   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2468   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2469   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2470   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2471   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2472   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2473   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2474   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2475   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2476   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2477   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2478   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2479 #ifndef TEST_FLOAT
2480   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2481   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2482   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2483   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2484   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2485   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2486   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2487   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2488   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2489   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2490   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2491   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2492   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2493   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2494   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2495   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2496 #endif
2497 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2498   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2499   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2500   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2501   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2502   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2503   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2504   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2505   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2506   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2507   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2508   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2509   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2510   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2511   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2512   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2513   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2514 #endif
2515   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2516   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2517   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2518   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2519   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2520   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2521   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2522   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2523   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2524   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2525   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2526   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2527   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2528   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2529   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2530   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2531   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2532   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2533   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2534   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2535   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2536   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2537   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2538   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2539 #ifndef TEST_FLOAT
2540   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2541   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2542   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2543   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2544   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2545   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2546   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2547   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2548   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2549   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2550   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2551   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2552   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2553   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2554   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2555   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2556   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2557   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2558   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2559   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2560   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2561   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2562   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2563   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2564 #endif
2565 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2566   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2567   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2568   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2569   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2570   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2571   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2572   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2573   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2574 # if LDBL_MIN_EXP <= -16381
2575   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2576   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2577   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2578   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2579   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2580   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2581   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2582   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2583 # endif
2584   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2585   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2586   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2587   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2588   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2589   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2590   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2591   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2592 #endif
2593 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2594   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2595   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2596   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2597   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2598   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2599   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2600   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2601   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2602   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2603   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2605   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2606   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2607   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2608   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2609   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2610   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2611   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2612   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2613   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2614   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2615   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2616   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2617   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2618 #endif
2619 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2620   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2621   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2622   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2623   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2624   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2625   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2626   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2627   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2628   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2629   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2630   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2631   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2632   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2633   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2634   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2635   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2636   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2637   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2638   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2639   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2640   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2641   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2642   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2643   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2644 #endif
2645   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2646   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2647   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2648   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2649   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2650   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2651   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2652   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2653   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2654   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2655   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2656   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2657   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2658   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2659   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2660   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2661   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2662   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2663   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2664   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2665   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2666   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2667   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2668   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2669   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2670   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2671   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2672   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2673   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2674   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2675   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2676   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2677   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2678   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2679   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2680   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2681   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2682   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2683   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2684   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2685   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2686   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2687   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2688   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2689   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2690   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2691   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2692   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2693   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2694   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2695   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2696   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2697   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2698   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2699   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2700   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2701   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2702   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2703   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2704   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2705   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2706   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2707   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2708   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2709 #ifndef TEST_FLOAT
2710   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2711   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2712   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2713   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2714   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2715   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2716   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2717   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2718   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2719   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2720   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2721   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2722   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2723   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2724   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2725   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2726   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2727   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2728   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2729   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2730   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2731   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2732   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2733   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2734 #endif
2735   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2736   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2737   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2738   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2739   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2740   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2741   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2742   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2743 #ifndef TEST_FLOAT
2744   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2745   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2746   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2747   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2748   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2749   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2750   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2751   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2752 #endif
2753   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2754   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2755   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2756   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2757 #ifndef TEST_FLOAT
2758   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2759   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2760   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2761   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2762   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2763   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2764   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2765   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2766 #endif
2767   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2768   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2769   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2770   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2771   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2772   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2773   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2774   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2775 #ifndef TEST_FLOAT
2776   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2777   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2778   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2779   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2780 #endif
2781 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2782   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2783   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2784   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2785   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2786   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2787   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2788   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2789   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2790 # if LDBL_MIN_EXP <= -16381
2791   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2792   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2793   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2794   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2795   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2796   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2797   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2798   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2799 # endif
2800   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2801   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2802   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2803   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2804   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2805   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2806   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2807   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2808 #endif
2809   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2810   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2811   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2812   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2813   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2814   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2815   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2816   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2817 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2818   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2819   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2820   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2821   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2822   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2823   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2824   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2825   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2826 #endif
2827   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2828   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2829   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2830   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2831 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2832   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2833   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2834   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2835   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2836   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2837   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2838   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2839   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2840 #endif
2841   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2842   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2843   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2844   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2845   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2846   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2847   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2848   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2849 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2850   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2851   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2852   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2853   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2854 #endif
2855 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2856   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2857   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2858   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2859   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2860   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2861   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2862   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2863   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2864   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2865   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2866   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2867   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2868   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2869   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2870   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2871   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2872   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2873   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2874   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2875   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2876   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2877   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2878   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2879   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2880 #endif
2881   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2882   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2883   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2884   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2885   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2886   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2887   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2888   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2889   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2890   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2891   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2892   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2893 #ifndef TEST_FLOAT
2894   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2895   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2896   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2897   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2898   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2899   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2900   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2901   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2902 #endif
2903   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2904   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2905   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2906   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2907   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2908   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2909   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2910   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2911 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2912   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2913   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2914   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2915   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2916   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2917   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2918   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2919   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2920   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2921   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2922   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2923   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2924   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2925   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2926   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2927   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2928   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2929   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2930   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2931   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2932   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2933   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2934   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2935   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2936 #endif
2937   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2938   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2939   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2940   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2941   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2942   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2943   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2944   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2945   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2946   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2947   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2948   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2949 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2950   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2951   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2952   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2953   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2954   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2955   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2956   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2957   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2958 #endif
2959   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2960   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2961   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2962   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2963   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2964   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2965   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2966   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2967
2968   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2969   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2970
2971   END (cacosh, complex);
2972 }
2973
2974
2975 static void
2976 carg_test (void)
2977 {
2978   START (carg);
2979
2980   /* carg (x + iy) is specified as atan2 (y, x) */
2981
2982   /* carg (x + i 0) == 0 for x > 0.  */
2983   TEST_c_f (carg, 2.0, 0, 0);
2984   /* carg (x - i 0) == -0 for x > 0.  */
2985   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2986
2987   TEST_c_f (carg, 0, 0, 0);
2988   TEST_c_f (carg, 0, minus_zero, minus_zero);
2989
2990   /* carg (x + i 0) == +pi for x < 0.  */
2991   TEST_c_f (carg, -2.0, 0, M_PIl);
2992
2993   /* carg (x - i 0) == -pi for x < 0.  */
2994   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2995
2996   TEST_c_f (carg, minus_zero, 0, M_PIl);
2997   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2998
2999   /* carg (+0 + i y) == pi/2 for y > 0.  */
3000   TEST_c_f (carg, 0, 2.0, M_PI_2l);
3001
3002   /* carg (-0 + i y) == pi/2 for y > 0.  */
3003   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
3004
3005   /* carg (+0 + i y) == -pi/2 for y < 0.  */
3006   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
3007
3008   /* carg (-0 + i y) == -pi/2 for y < 0.  */
3009   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
3010
3011   /* carg (inf + i y) == +0 for finite y > 0.  */
3012   TEST_c_f (carg, plus_infty, 2.0, 0);
3013
3014   /* carg (inf + i y) == -0 for finite y < 0.  */
3015   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
3016
3017   /* carg(x + i inf) == pi/2 for finite x.  */
3018   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
3019
3020   /* carg(x - i inf) == -pi/2 for finite x.  */
3021   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
3022
3023   /* carg (-inf + i y) == +pi for finite y > 0.  */
3024   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
3025
3026   /* carg (-inf + i y) == -pi for finite y < 0.  */
3027   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
3028
3029   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
3030
3031   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
3032
3033   TEST_c_f (carg, minus_infty, plus_infty, M_PI_34l);
3034
3035   TEST_c_f (carg, minus_infty, minus_infty, -M_PI_34l);
3036
3037   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
3038
3039   END (carg);
3040 }
3041
3042 static void
3043 casin_test (void)
3044 {
3045   errno = 0;
3046   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
3047   if (errno == ENOSYS)
3048     /* Function not implemented.  */
3049     return;
3050
3051   START (casin);
3052
3053   TEST_c_c (casin, 0, 0, 0.0, 0.0);
3054   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
3055   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
3056   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
3057
3058   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
3059   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
3060   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
3061   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
3062
3063   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
3064   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
3065   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
3066   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
3067   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
3068   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
3069   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
3070   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
3071
3072   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
3073   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
3074   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
3075   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
3076
3077   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
3078   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
3079   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
3080   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
3081
3082   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
3083   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
3084
3085   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
3086   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
3087
3088   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3089   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3090
3091   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3092   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3093
3094   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3095   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3096
3097   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
3098
3099   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
3100   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
3101   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
3102   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
3103   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
3104   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
3105   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
3106   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
3107   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
3108   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
3109   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
3110   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
3111
3112   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
3113   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
3114   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
3115   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
3116   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
3117   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
3118   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
3119   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
3120   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
3121   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
3122   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
3123   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
3124
3125   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3126   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3127   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3128   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3129   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3130   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3131   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3132   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3133 #ifndef TEST_FLOAT
3134   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3135   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3136   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3137   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3138   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3139   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3140   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3141   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3142 #endif
3143 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3144   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3145   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3146   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3147   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3148   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3149   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3150   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3151   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3152 #endif
3153
3154   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
3155 #ifndef TEST_FLOAT
3156   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
3157 #endif
3158 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3159   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
3160 #endif
3161
3162   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3163   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3164   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3165   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3166   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3167   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3168   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3169   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3170 #ifndef TEST_FLOAT
3171   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3172   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3173   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3174   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3175   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3176   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3177   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3178   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3179 #endif
3180 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3181   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3182   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3183   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3184   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3185   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3186   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3187   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3188   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3189 #endif
3190
3191   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3192   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3193   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3194   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3195   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3196   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3197   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3198   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3199   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3200   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3201   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3202   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3203   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3204   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3205   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3206   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3207   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3208   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3209   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3210   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3211   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3212   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3213   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3214   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3215   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3216   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3217   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3218   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3219   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3220   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3221   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3222   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3223   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3224   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3225   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3226   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3227   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3228   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3229   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3230   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3231   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3232   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3233   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3234   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3235   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3236   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3237   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3238   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3239 #ifndef TEST_FLOAT
3240   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3241   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3242   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3243   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3244   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3245   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3246   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3247   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3248   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3249   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3250   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3251   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3252   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3253   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3254   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3255   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3256 #endif
3257 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3258   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3259   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3260   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3261   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3262   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3263   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3264   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3265   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3266   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3267   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3268   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3269   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3270   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3271   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3272   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3273   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3274 #endif
3275
3276   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3277   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3278   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3279   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3280   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3281   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3282   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3283   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3284   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3285   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3286   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3287   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3288   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3289   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3290   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3291   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3292   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L);
3293   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L);
3294   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L);
3295   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L);
3296   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3297   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3298   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3299   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3300 #ifndef TEST_FLOAT
3301   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3302   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3303   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3304   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3305   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3306   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3307   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3308   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3309   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3310   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3311   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3312   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3313   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3314   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3315   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3316   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3317   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L);
3318   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L);
3319   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L);
3320   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L);
3321   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3322   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3323   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3324   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3325 #endif
3326 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3327   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3328   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3329   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3330   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3331   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3332   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3333   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3334   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3335 # if LDBL_MIN_EXP <= -16381
3336   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3337   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3338   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3339   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3340   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3341   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3342   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3343   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3344 # endif
3345   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L);
3346   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L);
3347   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L);
3348   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L);
3349   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3350   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3351   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3352   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3353 #endif
3354 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3355   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3356   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3357   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3358   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3359   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3360   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3361   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3362   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3363   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3364   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3365   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3366   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3367   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3368   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3369   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3370   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3371   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L);
3372   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L);
3373   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L);
3374   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L);
3375   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3376   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3377   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3378   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3379 #endif
3380 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3381   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3382   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3383   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3384   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3385   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3386   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3387   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3388   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3389   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3390   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3391   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3392   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3393   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3394   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3395   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3396   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3397   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L);
3398   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L);
3399   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L);
3400   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L);
3401   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3402   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3403   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3404   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3405 #endif
3406
3407   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3408   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3409   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3410   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3411   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3412   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3413   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3414   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3415   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3416   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3417   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3418   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3419   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3420   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3421   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3422   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3423   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3424   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3425   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3426   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3427   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3428   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3429   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3430   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3431   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3432   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3433   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3434   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3435   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3436   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3437   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3438   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3439   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3440   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3441   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3442   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3443   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3444   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3445   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3446   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3447   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3448   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3449   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3450   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3451   /* Bug 15319: underflow exception may be missing.  */
3452   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3453   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3454   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3455   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3456   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3457   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3458   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3459   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3460   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3461   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3462   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3463   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3464   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3465   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3466   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3467   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3468   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3469   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3470   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3471   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3472 #ifndef TEST_FLOAT
3473   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3474   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3475   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3476   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3477   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3478   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3479   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3480   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3481   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3482   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3483   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3484   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3485   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3486   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3487   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3488   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3489   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3490   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3491   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3492   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3493   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3494   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3495   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3496   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3497 #endif
3498   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3499   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3500   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3501   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3502   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3503   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3504   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3505   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3506 #ifndef TEST_FLOAT
3507   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3508   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3509   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3510   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3511   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3512   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3513   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3514   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3515 #endif
3516   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3517   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3518   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3519   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3520 #ifndef TEST_FLOAT
3521   /* Bug 15319: underflow exception may be missing.  */
3522   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3523   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3524   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3525   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3526   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3527   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3528   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3529   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3530 #endif
3531   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3532   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3533   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3534   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3535   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3536   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3537   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3538   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3539 #ifndef TEST_FLOAT
3540   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3541   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3542   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3543   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3544 #endif
3545 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3546   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3547   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3548   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3549   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3550   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3551   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3552   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3553   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3554 # if LDBL_MIN_EXP <= -16381
3555   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3556   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3557   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3558   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3559   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3560   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3561   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3562   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3563 # endif
3564   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3565   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3566   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3567   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3568   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3569   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3570   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3571   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3572 #endif
3573   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3574   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3575   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3576   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3577   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3578   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3579   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3580   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3581 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3582   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3583   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3584   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3585   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3586   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3587   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3588   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3589   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3590 #endif
3591   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3592   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3593   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3594   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3595 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3596   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3597   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3598   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3599   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3600   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3601   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3602   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3603   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3604 #endif
3605   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3606   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3607   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3608   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3609   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3610   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3611   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3612   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3613 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3614   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3615   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3616   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3617   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3618 #endif
3619 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3620   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3621   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3622   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3623   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3624   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3625   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3626   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3627   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3628   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3629   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3630   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3631   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3632   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3633   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3634   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3635   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3636   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3637   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3638   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3639   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3640   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3641   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3642   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3643   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3644 #endif
3645   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3646   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3647   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3648   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3649   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3650   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3651   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3652   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3653   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3654   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3655   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3656   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3657 #ifndef TEST_FLOAT
3658   /* Bug 15319: underflow exception may be missing.  */
3659   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3660   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3661   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3662   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3663   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3664   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3665   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3666   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3667 #endif
3668   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3669   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3670   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3671   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3672   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3673   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3674   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3675   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3676 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3677   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3678   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3679   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3680   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3681   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3682   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3683   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3684   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3685   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3686   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3687   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3688   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3689   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3690   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3691   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3692   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3693   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3694   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3695   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3696   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3697   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3698   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3699   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3700   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3701 #endif
3702   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3703   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3704   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3705   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3706   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3707   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3708   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3709   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3710   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3711   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3712   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3713   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3714 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3715   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3716   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3717   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3718   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3719   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3720   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3721   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3722   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3723 #endif
3724   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3725   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3726   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3727   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3728   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3729   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3730   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3731   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3732
3733   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3734   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3735
3736   END (casin, complex);
3737 }
3738
3739
3740 static void
3741 casinh_test (void)
3742 {
3743   errno = 0;
3744   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3745   if (errno == ENOSYS)
3746     /* Function not implemented.  */
3747     return;
3748
3749   START (casinh);
3750
3751   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3752   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3753   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3754   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3755
3756   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3757   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3758   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3759   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3760
3761   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3762   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3763   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3764   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3765   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3766   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3767   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3768   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3769
3770   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3771   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3772   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3773   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3774
3775   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3776   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3777   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3778   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3779
3780   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3781   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3782
3783   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3784   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3785
3786   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3787   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3788
3789   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3790   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3791
3792   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3793   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3794
3795   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3796
3797   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3798   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3799   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3800   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3801   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3802   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3803   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3804   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3805   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3806   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3807   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3808   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3809
3810   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3811   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3812   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3813   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3814   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3815   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3816   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3817   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3818   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3819   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3820   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3821   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3822
3823   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3824   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3825   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3826   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3827   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3828   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3829   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3830   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3831 #ifndef TEST_FLOAT
3832   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3833   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3834   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3835   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3836   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3837   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3838   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3839   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3840 #endif
3841 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3842   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3843   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3844   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3845   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3846   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3847   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3848   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3849   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3850 #endif
3851
3852   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3853 #ifndef TEST_FLOAT
3854   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3855 #endif
3856 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3857   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3858 #endif
3859
3860   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3861   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3862   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3863   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3864   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3865   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3866   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3867   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3868 #ifndef TEST_FLOAT
3869   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3870   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3871   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3872   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3873   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3874   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3875   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3876   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3877 #endif
3878 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3879   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3880   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3881   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3882   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3883   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3884   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3885   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3886   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3887 #endif
3888
3889   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3890   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3891   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3892   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3893   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3894   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3895   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3896   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3897   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3898   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3899   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3900   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3901   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3902   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3903   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3904   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3905   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3906   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3907   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3908   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3909   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3910   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3911   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3912   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3913   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3914   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3915   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3916   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3917   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3918   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3919   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3920   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3921   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3922   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3923   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3924   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3925   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3926   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3927   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3928   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3929   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3930   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3931   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3932   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3933   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3934   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3935   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3936   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3937 #ifndef TEST_FLOAT
3938   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3939   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3940   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3941   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3942   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3943   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3944   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3945   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3946   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3947   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3948   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3949   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3950   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3951   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3952   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3953   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3954 #endif
3955 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3956   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3957   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3958   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3959   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3960   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3961   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3962   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3963   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3964   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3965   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3966   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3967   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3968   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3969   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3970   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3971   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3972 #endif
3973
3974   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3975   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3976   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3977   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3978   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3979   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3980   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3981   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3982   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3983   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3984   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3985   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3986   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3987   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3988   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3989   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3990   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3991   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3992   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3993   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3994   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L);
3995   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L);
3996   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L);
3997   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L);
3998 #ifndef TEST_FLOAT
3999   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
4000   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
4001   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
4002   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
4003   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
4004   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
4005   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
4006   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
4007   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4008   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4009   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4010   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4011   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4012   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4013   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4014   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4015   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4016   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4017   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4018   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4019   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L);
4020   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L);
4021   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L);
4022   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L);
4023 #endif
4024 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4025   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
4026   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
4027   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
4028   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
4029   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
4030   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
4031   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
4032   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
4033 # if LDBL_MIN_EXP <= -16381
4034   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4035   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4036   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4037   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4038   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4039   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4040   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4041   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4042 # endif
4043   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4044   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4045   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4046   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4047   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L);
4048   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L);
4049   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L);
4050   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L);
4051 #endif
4052 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4053   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
4054   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
4055   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
4056   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
4057   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
4058   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
4059   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
4060   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
4061   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4062   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4063   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4064   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4065   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4066   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4067   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4068   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4069   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4070   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4071   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4072   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4073   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L);
4074   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L);
4075   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L);
4076   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L);
4077 #endif
4078 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4079   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
4080   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
4081   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
4082   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
4083   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
4084   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
4085   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
4086   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
4087   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4088   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4089   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4090   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4091   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4092   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4093   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4094   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4095   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4096   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4097   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4098   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4099   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L);
4100   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L);
4101   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L);
4102   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L);
4103 #endif
4104
4105   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
4106   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
4107   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
4108   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
4109   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
4110   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
4111   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
4112   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
4113   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
4114   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
4115   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
4116   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
4117   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4118   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4119   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4120   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4121   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
4122   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
4123   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
4124   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
4125   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
4126   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
4127   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
4128   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
4129   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4130   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4131   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4132   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4133   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4134   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4135   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4136   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4137   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4138   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4139   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4140   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4141   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4142   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4143   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4144   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4145   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4146   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4147   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4148   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4149   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4150   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4151   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4152   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4153   /* Bug 15319: underflow exception may be missing.  */
4154   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4155   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4156   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4157   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4158   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
4159   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
4160   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
4161   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
4162   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
4163   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
4164   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
4165   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
4166   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4167   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4168   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4169   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4170 #ifndef TEST_FLOAT
4171   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4172   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4173   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4174   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4175   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4176   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4177   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4178   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4179   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4180   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4181   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4182   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4183   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4184   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4185   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4186   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4187   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
4188   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
4189   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
4190   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
4191   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
4192   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
4193   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
4194   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
4195 #endif
4196   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4197   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4198   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4199   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4200   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4201   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4202   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4203   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4204 #ifndef TEST_FLOAT
4205   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4206   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4207   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4208   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4209   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4210   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4211   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4212   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4213 #endif
4214   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4215   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4216   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4217   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4218 #ifndef TEST_FLOAT
4219   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4220   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4221   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4222   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4223   /* Bug 15319: underflow exception may be missing.  */
4224   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4225   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4226   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4227   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4228 #endif
4229   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4230   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4231   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4232   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4233   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4234   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4235   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4236   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4237 #ifndef TEST_FLOAT
4238   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4239   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4240   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4241   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4242 #endif
4243 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4244   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4245   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4246   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4247   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4248   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4249   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4250   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4251   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4252 # if LDBL_MIN_EXP <= -16381
4253   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4254   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4255   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4256   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4257   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4258   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4259   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4260   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4261 # endif
4262   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4263   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4264   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4265   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4266   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4267   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4268   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4269   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4270 #endif
4271   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4272   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4273   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4274   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4275   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4276   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4277   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4278   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4279 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4280   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4281   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4282   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4283   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4284   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4285   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4286   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4287   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4288 #endif
4289   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4290   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4291   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4292   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4293 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4294   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4295   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4296   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4297   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4298   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4299   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4300   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4301   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4302 #endif
4303   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4304   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4305   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4306   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4307   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4308   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4309   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4310   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4311 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4312   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4313   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4314   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4315   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4316 #endif
4317 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4318   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4319   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4320   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4321   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4322   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4323   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4324   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4325   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4326   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4327   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4328   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4329   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4330   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4331   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4332   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4333   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4334   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4335   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4336   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4337   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4338   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4339   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4340   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4341   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4342 #endif
4343   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4344   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4345   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4346   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4347   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4348   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4349   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4350   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4351   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4352   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4353   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4354   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4355 #ifndef TEST_FLOAT
4356   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4357   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4358   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4359   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4360   /* Bug 15319: underflow exception may be missing.  */
4361   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4362   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4363   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4364   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4365 #endif
4366   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4367   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4368   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4369   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4370   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4371   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4372   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4373   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4374 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4375   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4376   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4377   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4378   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4379   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4380   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4381   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4382   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4383   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4384   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4385   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4386   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4387   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4388   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4389   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4390   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4391   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4392   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4393   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4394   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4395   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4396   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4397   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4398   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4399 #endif
4400   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4401   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4402   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4403   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4404   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4405   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4406   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4407   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4408   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4409   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4410   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4411   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4412 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4413   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4414   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4415   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4416   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4417   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4418   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4419   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4420   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4421 #endif
4422   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4423   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4424   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4425   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4426   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4427   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4428   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4429   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4430
4431   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4432   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4433
4434   END (casinh, complex);
4435 }
4436
4437
4438 static void
4439 catan_test (void)
4440 {
4441   errno = 0;
4442   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4443   if (errno == ENOSYS)
4444     /* Function not implemented.  */
4445     return;
4446
4447   START (catan);
4448
4449   TEST_c_c (catan, 0, 0, 0, 0);
4450   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4451   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4452   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4453
4454   TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero);
4455   TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero);
4456   TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero);
4457   TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero);
4458   TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4459   TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4460   TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4461   TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4462
4463   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4464   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4465   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4466   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4467
4468
4469   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4470   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4471   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4472   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4473   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4474   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4475   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4476   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4477
4478   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4479   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4480   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4481   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4482
4483   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4484   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4485   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4486   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4487
4488   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4489   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4490
4491   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4492   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4493
4494   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4495   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4496
4497   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4498   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4499
4500   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4501   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4502
4503   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4504   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4505
4506   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4507
4508   TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L);
4509   TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L);
4510   TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L);
4511   TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L);
4512   TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4513   TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4514   TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4515   TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4516 #ifndef TEST_FLOAT
4517   TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4518   TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4519   TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4520   TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4521   TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4522   TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4523   TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4524   TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4525 #endif
4526 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4527   TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4528   TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4529   TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4530   TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4531   TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4532   TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4533   TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4534   TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4535 #endif
4536   TEST_c_c (catan, 0x1p63L, 0.5L, 1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4537   TEST_c_c (catan, 0x1p63L, -0.5L, 1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4538   TEST_c_c (catan, -0x1p63L, 0.5L, -1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4539   TEST_c_c (catan, -0x1p63L, -0.5L, -1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4540   TEST_c_c (catan, 0.5L, 0x1p63L, 1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4541   TEST_c_c (catan, -0.5L, 0x1p63L, -1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4542   TEST_c_c (catan, 0.5L, -0x1p63L, 1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4543   TEST_c_c (catan, -0.5L, -0x1p63L, -1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4544 #ifndef TEST_FLOAT
4545   TEST_c_c (catan, 0x1p511L, 0.5L, 1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4546   TEST_c_c (catan, 0x1p511L, -0.5L, 1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4547   TEST_c_c (catan, -0x1p511L, 0.5L, -1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4548   TEST_c_c (catan, -0x1p511L, -0.5L, -1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4549   TEST_c_c (catan, 0.5L, 0x1p511L, 1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4550   TEST_c_c (catan, -0.5L, 0x1p511L, -1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4551   TEST_c_c (catan, 0.5L, -0x1p511L, 1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4552   TEST_c_c (catan, -0.5L, -0x1p511L, -1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4553 #endif
4554 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4555   TEST_c_c (catan, 0x1p8191L, 0.5L, 1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4556   TEST_c_c (catan, 0x1p8191L, -0.5L, 1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4557   TEST_c_c (catan, -0x1p8191L, 0.5L, -1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4558   TEST_c_c (catan, -0x1p8191L, -0.5L, -1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4559   TEST_c_c (catan, 0.5L, 0x1p8191L, 1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4560   TEST_c_c (catan, -0.5L, 0x1p8191L, -1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4561   TEST_c_c (catan, 0.5L, -0x1p8191L, 1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4562   TEST_c_c (catan, -0.5L, -0x1p8191L, -1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4563 #endif
4564   TEST_c_c (catan, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L, 0.0L);
4565   TEST_c_c (catan, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L, -0.0L);
4566   TEST_c_c (catan, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L, 0.0L);
4567   TEST_c_c (catan, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L, -0.0L);
4568   TEST_c_c (catan, 0.0L, 0x1p100L, 1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4569   TEST_c_c (catan, -0.0L, 0x1p100L, -1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4570   TEST_c_c (catan, 0.0L, -0x1p100L, 1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4571   TEST_c_c (catan, -0.0L, -0x1p100L, -1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4572   TEST_c_c (catan, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L, 0.0L);
4573   TEST_c_c (catan, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L, -0.0L);
4574   TEST_c_c (catan, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L, 0.0L);
4575   TEST_c_c (catan, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L, -0.0L);
4576   TEST_c_c (catan, 0.0L, 0x1.fp127L, 1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4577   TEST_c_c (catan, -0.0L, 0x1.fp127L, -1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4578   TEST_c_c (catan, 0.0L, -0x1.fp127L, 1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4579   TEST_c_c (catan, -0.0L, -0x1.fp127L, -1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4580   TEST_c_c (catan, 0x1.fp127L, 0x1.fp127L, 1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4581   TEST_c_c (catan, 0x1.fp127L, -0x1.fp127L, 1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4582   TEST_c_c (catan, -0x1.fp127L, 0x1.fp127L, -1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4583   TEST_c_c (catan, -0x1.fp127L, -0x1.fp127L, -1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4584 #ifndef TEST_FLOAT
4585   TEST_c_c (catan, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4586   TEST_c_c (catan, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4587   TEST_c_c (catan, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4588   TEST_c_c (catan, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4589   TEST_c_c (catan, 0.0L, 0x1p900L, 1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4590   TEST_c_c (catan, -0.0L, 0x1p900L, -1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4591   TEST_c_c (catan, 0.0L, -0x1p900L, 1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4592   TEST_c_c (catan, -0.0L, -0x1p900L, -1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4593   TEST_c_c (catan, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4594   TEST_c_c (catan, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4595   TEST_c_c (catan, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4596   TEST_c_c (catan, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4597   TEST_c_c (catan, 0.0L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4598   TEST_c_c (catan, -0.0L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4599   TEST_c_c (catan, 0.0L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4600   TEST_c_c (catan, -0.0L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4601   TEST_c_c (catan, 0x1.fp1023L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4602   TEST_c_c (catan, 0x1.fp1023L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4603   TEST_c_c (catan, -0x1.fp1023L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4604   TEST_c_c (catan, -0x1.fp1023L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4605 #endif
4606 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4607   TEST_c_c (catan, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4608   TEST_c_c (catan, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4609   TEST_c_c (catan, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4610   TEST_c_c (catan, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4611   TEST_c_c (catan, 0.0L, 0x1p10000L, 1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4612   TEST_c_c (catan, -0.0L, 0x1p10000L, -1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4613   TEST_c_c (catan, 0.0L, -0x1p10000L, 1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4614   TEST_c_c (catan, -0.0L, -0x1p10000L, -1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4615   TEST_c_c (catan, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4616   TEST_c_c (catan, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4617   TEST_c_c (catan, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4618   TEST_c_c (catan, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4619   TEST_c_c (catan, 0.0L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4620   TEST_c_c (catan, -0.0L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4621   TEST_c_c (catan, 0.0L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4622   TEST_c_c (catan, -0.0L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4623   TEST_c_c (catan, 0x1.fp16383L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4624   TEST_c_c (catan, 0x1.fp16383L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4625   TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4626   TEST_c_c (catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4627 #endif
4628   TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4629   TEST_c_c (catan, 0x1p-13L, -1.0L, 7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4630   TEST_c_c (catan, -0x1p-13L, 1.0L, -7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4631   TEST_c_c (catan, -0x1p-13L, -1.0L, -7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4632   TEST_c_c (catan, 1.0L, 0x1p-13L, 7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4633   TEST_c_c (catan, -1.0L, 0x1p-13L, -7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4634   TEST_c_c (catan, 1.0L, -0x1p-13L, 7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4635   TEST_c_c (catan, -1.0L, -0x1p-13L, -7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4636   TEST_c_c (catan, 0x1p-27L, 1.0L, 7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4637   TEST_c_c (catan, 0x1p-27L, -1.0L, 7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4638   TEST_c_c (catan, -0x1p-27L, 1.0L, -7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4639   TEST_c_c (catan, -0x1p-27L, -1.0L, -7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4640   TEST_c_c (catan, 1.0L, 0x1p-27L, 7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4641   TEST_c_c (catan, -1.0L, 0x1p-27L, -7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4642   TEST_c_c (catan, 1.0L, -0x1p-27L, 7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4643   TEST_c_c (catan, -1.0L, -0x1p-27L, -7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4644   TEST_c_c (catan, 0x1p-33L, 1.0L, 7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4645   TEST_c_c (catan, 0x1p-33L, -1.0L, 7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4646   TEST_c_c (catan, -0x1p-33L, 1.0L, -7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4647   TEST_c_c (catan, -0x1p-33L, -1.0L, -7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4648   TEST_c_c (catan, 1.0L, 0x1p-33L, 7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4649   TEST_c_c (catan, -1.0L, 0x1p-33L, -7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4650   TEST_c_c (catan, 1.0L, -0x1p-33L, 7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4651   TEST_c_c (catan, -1.0L, -0x1p-33L, -7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4652   TEST_c_c (catan, 0x1p-54L, 1.0L, 7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4653   TEST_c_c (catan, 0x1p-54L, -1.0L, 7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4654   TEST_c_c (catan, -0x1p-54L, 1.0L, -7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4655   TEST_c_c (catan, -0x1p-54L, -1.0L, -7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4656   TEST_c_c (catan, 1.0L, 0x1p-54L, 7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4657   TEST_c_c (catan, -1.0L, 0x1p-54L, -7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4658   TEST_c_c (catan, 1.0L, -0x1p-54L, 7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4659   TEST_c_c (catan, -1.0L, -0x1p-54L, -7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4660   TEST_c_c (catan, 0x1p-57L, 1.0L, 7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4661   TEST_c_c (catan, 0x1p-57L, -1.0L, 7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4662   TEST_c_c (catan, -0x1p-57L, 1.0L, -7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4663   TEST_c_c (catan, -0x1p-57L, -1.0L, -7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4664   TEST_c_c (catan, 1.0L, 0x1p-57L, 7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4665   TEST_c_c (catan, -1.0L, 0x1p-57L, -7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4666   TEST_c_c (catan, 1.0L, -0x1p-57L, 7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4667   TEST_c_c (catan, -1.0L, -0x1p-57L, -7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4668   TEST_c_c (catan, 0x1p-13L, 0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4669   TEST_c_c (catan, 0x1p-13L, -0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4670   TEST_c_c (catan, -0x1p-13L, 0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4671   TEST_c_c (catan, -0x1p-13L, -0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4672   TEST_c_c (catan, 0x1.000002p0L, 0x1p-13L, 7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4673   TEST_c_c (catan, -0x1.000002p0L, 0x1p-13L, -7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4674   TEST_c_c (catan, 0x1.000002p0L, -0x1p-13L, 7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4675   TEST_c_c (catan, -0x1.000002p0L, -0x1p-13L, -7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4676   TEST_c_c (catan, 0x1p-13L, 0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4677   TEST_c_c (catan, 0x1p-13L, -0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4678   TEST_c_c (catan, -0x1p-13L, 0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4679   TEST_c_c (catan, -0x1p-13L, -0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4680   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-13L, 7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4681   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-13L, -7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4682   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-13L, 7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4683   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-13L, -7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4684 #ifndef TEST_FLOAT
4685   TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4686   TEST_c_c (catan, 0x1p-27L, -0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4687   TEST_c_c (catan, -0x1p-27L, 0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4688   TEST_c_c (catan, -0x1p-27L, -0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4689   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4690   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4691   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4692   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4693   TEST_c_c (catan, 0x1p-27L, 0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4694   TEST_c_c (catan, 0x1p-27L, -0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4695   TEST_c_c (catan, -0x1p-27L, 0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4696   TEST_c_c (catan, -0x1p-27L, -0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4697   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4698   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4699   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4700   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4701 #endif
4702 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4703   TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4704   TEST_c_c (catan, 0x1p-33L, -0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4705   TEST_c_c (catan, -0x1p-33L, 0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4706   TEST_c_c (catan, -0x1p-33L, -0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4707   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4708   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4709   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4710   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4711   TEST_c_c (catan, 0x1p-33L, 0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4712   TEST_c_c (catan, 0x1p-33L, -0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4713   TEST_c_c (catan, -0x1p-33L, 0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4714   TEST_c_c (catan, -0x1p-33L, -0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4715   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4716   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4717   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4718   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4719 #endif
4720 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4721   TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4722   TEST_c_c (catan, 0x1p-54L, -0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4723   TEST_c_c (catan, -0x1p-54L, 0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4724   TEST_c_c (catan, -0x1p-54L, -0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4725   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-54L, 7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4726   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-54L, -7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4727   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-54L, 7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4728   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-54L, -7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4729   TEST_c_c (catan, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4730   TEST_c_c (catan, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4731   TEST_c_c (catan, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4732   TEST_c_c (catan, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4733   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4734   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4735   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4736   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4737 #endif
4738 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4739   TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4740   TEST_c_c (catan, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4741   TEST_c_c (catan, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4742   TEST_c_c (catan, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4743   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4744   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4745   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4746   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4747   TEST_c_c (catan, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4748   TEST_c_c (catan, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4749   TEST_c_c (catan, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4750   TEST_c_c (catan, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4751   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4752   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4753   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4754   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4755 #endif
4756   TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4757   TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4758   TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4759   TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4760   TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4761   TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4762   TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4763   TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4764   TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4765   TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4766   TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4767   TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4768   TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4769   TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4770   TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4771   TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4772   TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4773   TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4774   TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4775   TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4776   TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4777   TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4778   TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4779   TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4780   TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4781   TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4782   TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4783   TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4784   TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4785   TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4786   TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4787   TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4788   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4789   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4790   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4791   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4792   TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4793   TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4794   TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4795   TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4796 #ifndef TEST_FLOAT
4797   TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4798   TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4799   TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4800   TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4801   TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4802   TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4803   TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4804   TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4805   TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4806   TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4807   TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4808   TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4809   TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4810   TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4811   TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4812   TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4813   TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4814   TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4815   TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4816   TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4817   TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4818   TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4819   TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4820   TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4821   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4822   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4823   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4824   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4825   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4826   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4827   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4828   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4829   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4830   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4831   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4832   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4833   TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4834   TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4835   TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4836   TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4837 #endif
4838 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4839   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4840   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4841   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4842   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4843   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4844   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4845   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4846   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4847   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4848   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4849   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4850   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4851   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4852   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4853   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4854   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4855 #endif
4856 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4857   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4858   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4859   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4860   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4861   TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4862   TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4863   TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4864   TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4865   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4866   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4867   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4868   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4869   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4870   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4871   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4872   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4873 #endif
4874 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4875   TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4876   TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4877   TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4878   TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4879   TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4880   TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4881   TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4882   TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4883   TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4884   TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4885   TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4886   TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4887   TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4888   TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4889   TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4890   TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4891   TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4892   TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4893   TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4894   TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4895   TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4896   TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4897   TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4898   TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4899   TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4900   TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4901   TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4902   TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4903   TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4904   TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4905   TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4906   TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4907   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4908   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4909   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4910   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4911   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4912   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4913   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4914   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4915   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4916   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4917   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4918   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4919   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4920   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4921   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4922   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4923 # if LDBL_MANT_DIG >= 113
4924   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4925   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4926   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4927   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4928   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4929   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4930   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4931   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4932   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4933   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4934   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4935   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4936   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4937   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4938   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4939   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4940 # endif
4941 #endif
4942
4943   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4944   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4945
4946   END (catan, complex);
4947 }
4948
4949 static void
4950 catanh_test (void)
4951 {
4952   errno = 0;
4953   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4954   if (errno == ENOSYS)
4955     /* Function not implemented.  */
4956     return;
4957
4958   START (catanh);
4959
4960   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4961   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4962   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4963   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4964
4965   TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4966   TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4967   TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4968   TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4969   TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l);
4970   TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l);
4971   TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l);
4972   TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l);
4973
4974   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4975   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4976   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4977   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4978
4979   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4980   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4981   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4982   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4983   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4984   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4985   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4986   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4987
4988   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4989   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4990   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4991   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4992
4993   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4994   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4995   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4996   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4997
4998   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
4999   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
5000
5001   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
5002   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
5003
5004   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
5005   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
5006
5007   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
5008   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
5009
5010   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5011   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5012
5013   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5014   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5015
5016   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
5017
5018   TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
5019   TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
5020   TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
5021   TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
5022   TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L);
5023   TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L);
5024   TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L);
5025   TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L);
5026 #ifndef TEST_FLOAT
5027   TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
5028   TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
5029   TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
5030   TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
5031   TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L);
5032   TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L);
5033   TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L);
5034   TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L);
5035 #endif
5036 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5037   TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
5038   TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
5039   TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
5040   TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
5041   TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L);
5042   TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L);
5043   TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L);
5044   TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L);
5045 #endif
5046   TEST_c_c (catanh, 0x1p63L, 0.5L, 1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
5047   TEST_c_c (catanh, 0x1p63L, -0.5L, 1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
5048   TEST_c_c (catanh, -0x1p63L, 0.5L, -1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
5049   TEST_c_c (catanh, -0x1p63L, -0.5L, -1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
5050   TEST_c_c (catanh, 0.5L, 0x1p63L, 5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5051   TEST_c_c (catanh, -0.5L, 0x1p63L, -5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5052   TEST_c_c (catanh, 0.5L, -0x1p63L, 5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5053   TEST_c_c (catanh, -0.5L, -0x1p63L, -5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5054 #ifndef TEST_FLOAT
5055   TEST_c_c (catanh, 0x1p511L, 0.5L, 1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
5056   TEST_c_c (catanh, 0x1p511L, -0.5L, 1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
5057   TEST_c_c (catanh, -0x1p511L, 0.5L, -1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
5058   TEST_c_c (catanh, -0x1p511L, -0.5L, -1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
5059   TEST_c_c (catanh, 0.5L, 0x1p511L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5060   TEST_c_c (catanh, -0.5L, 0x1p511L, -1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5061   TEST_c_c (catanh, 0.5L, -0x1p511L, 1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5062   TEST_c_c (catanh, -0.5L, -0x1p511L, -1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5063 #endif
5064 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5065   TEST_c_c (catanh, 0x1p8191L, 0.5L, 1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
5066   TEST_c_c (catanh, 0x1p8191L, -0.5L, 1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
5067   TEST_c_c (catanh, -0x1p8191L, 0.5L, -1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
5068   TEST_c_c (catanh, -0x1p8191L, -0.5L, -1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
5069   TEST_c_c (catanh, 0.5L, 0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5070   TEST_c_c (catanh, -0.5L, 0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5071   TEST_c_c (catanh, 0.5L, -0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5072   TEST_c_c (catanh, -0.5L, -0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5073 #endif
5074   TEST_c_c (catanh, 0x1p100L, 0.0L, 7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
5075   TEST_c_c (catanh, 0x1p100L, -0.0L, 7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
5076   TEST_c_c (catanh, -0x1p100L, 0.0L, -7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
5077   TEST_c_c (catanh, -0x1p100L, -0.0L, -7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
5078   TEST_c_c (catanh, 0.0L, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L);
5079   TEST_c_c (catanh, -0.0L, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L);
5080   TEST_c_c (catanh, 0.0L, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L);
5081   TEST_c_c (catanh, -0.0L, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L);
5082   TEST_c_c (catanh, 0x1.fp127L, 0.0L, 3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5083   TEST_c_c (catanh, 0x1.fp127L, -0.0L, 3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5084   TEST_c_c (catanh, -0x1.fp127L, 0.0L, -3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5085   TEST_c_c (catanh, -0x1.fp127L, -0.0L, -3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5086   TEST_c_c (catanh, 0.0L, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L);
5087   TEST_c_c (catanh, -0.0L, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L);
5088   TEST_c_c (catanh, 0.0L, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L);
5089   TEST_c_c (catanh, -0.0L, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L);
5090   TEST_c_c (catanh, 0x1.fp127L, 0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5091   TEST_c_c (catanh, 0x1.fp127L, -0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5092   TEST_c_c (catanh, -0x1.fp127L, 0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5093   TEST_c_c (catanh, -0x1.fp127L, -0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5094 #ifndef TEST_FLOAT
5095   TEST_c_c (catanh, 0x1p900L, 0.0L, 1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
5096   TEST_c_c (catanh, 0x1p900L, -0.0L, 1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
5097   TEST_c_c (catanh, -0x1p900L, 0.0L, -1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
5098   TEST_c_c (catanh, -0x1p900L, -0.0L, -1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
5099   TEST_c_c (catanh, 0.0L, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L);
5100   TEST_c_c (catanh, -0.0L, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L);
5101   TEST_c_c (catanh, 0.0L, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L);
5102   TEST_c_c (catanh, -0.0L, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L);
5103   TEST_c_c (catanh, 0x1.fp1023L, 0.0L, 5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5104   TEST_c_c (catanh, 0x1.fp1023L, -0.0L, 5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5105   TEST_c_c (catanh, -0x1.fp1023L, 0.0L, -5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5106   TEST_c_c (catanh, -0x1.fp1023L, -0.0L, -5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5107   TEST_c_c (catanh, 0.0L, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L);
5108   TEST_c_c (catanh, -0.0L, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L);
5109   TEST_c_c (catanh, 0.0L, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L);
5110   TEST_c_c (catanh, -0.0L, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L);
5111   TEST_c_c (catanh, 0x1.fp1023L, 0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5112   TEST_c_c (catanh, 0x1.fp1023L, -0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5113   TEST_c_c (catanh, -0x1.fp1023L, 0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5114   TEST_c_c (catanh, -0x1.fp1023L, -0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5115 #endif
5116 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5117   TEST_c_c (catanh, 0x1p10000L, 0.0L, 5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
5118   TEST_c_c (catanh, 0x1p10000L, -0.0L, 5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
5119   TEST_c_c (catanh, -0x1p10000L, 0.0L, -5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
5120   TEST_c_c (catanh, -0x1p10000L, -0.0L, -5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
5121   TEST_c_c (catanh, 0.0L, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L);
5122   TEST_c_c (catanh, -0.0L, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L);
5123   TEST_c_c (catanh, 0.0L, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L);
5124   TEST_c_c (catanh, -0.0L, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L);
5125   TEST_c_c (catanh, 0x1.fp16383L, 0.0L, 8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5126   TEST_c_c (catanh, 0x1.fp16383L, -0.0L, 8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5127   TEST_c_c (catanh, -0x1.fp16383L, 0.0L, -8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5128   TEST_c_c (catanh, -0x1.fp16383L, -0.0L, -8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5129   TEST_c_c (catanh, 0.0L, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L);
5130   TEST_c_c (catanh, -0.0L, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L);
5131   TEST_c_c (catanh, 0.0L, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L);
5132   TEST_c_c (catanh, -0.0L, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L);
5133   TEST_c_c (catanh, 0x1.fp16383L, 0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5134   TEST_c_c (catanh, 0x1.fp16383L, -0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5135   TEST_c_c (catanh, -0x1.fp16383L, 0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5136   TEST_c_c (catanh, -0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5137 #endif
5138   TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5139   TEST_c_c (catanh, 0x1p-13L, -1.0L, 6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5140   TEST_c_c (catanh, -0x1p-13L, 1.0L, -6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5141   TEST_c_c (catanh, -0x1p-13L, -1.0L, -6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5142   TEST_c_c (catanh, 1.0L, 0x1p-13L, 4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5143   TEST_c_c (catanh, -1.0L, 0x1p-13L, -4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5144   TEST_c_c (catanh, 1.0L, -0x1p-13L, 4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5145   TEST_c_c (catanh, -1.0L, -0x1p-13L, -4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5146   TEST_c_c (catanh, 0x1p-27L, 1.0L, 3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5147   TEST_c_c (catanh, 0x1p-27L, -1.0L, 3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5148   TEST_c_c (catanh, -0x1p-27L, 1.0L, -3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5149   TEST_c_c (catanh, -0x1p-27L, -1.0L, -3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5150   TEST_c_c (catanh, 1.0L, 0x1p-27L, 9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5151   TEST_c_c (catanh, -1.0L, 0x1p-27L, -9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5152   TEST_c_c (catanh, 1.0L, -0x1p-27L, 9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5153   TEST_c_c (catanh, -1.0L, -0x1p-27L, -9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5154   TEST_c_c (catanh, 0x1p-33L, 1.0L, 5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5155   TEST_c_c (catanh, 0x1p-33L, -1.0L, 5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5156   TEST_c_c (catanh, -0x1p-33L, 1.0L, -5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5157   TEST_c_c (catanh, -0x1p-33L, -1.0L, -5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5158   TEST_c_c (catanh, 1.0L, 0x1p-33L, 1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5159   TEST_c_c (catanh, -1.0L, 0x1p-33L, -1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5160   TEST_c_c (catanh, 1.0L, -0x1p-33L, 1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5161   TEST_c_c (catanh, -1.0L, -0x1p-33L, -1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5162   TEST_c_c (catanh, 0x1p-54L, 1.0L, 2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5163   TEST_c_c (catanh, 0x1p-54L, -1.0L, 2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5164   TEST_c_c (catanh, -0x1p-54L, 1.0L, -2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5165   TEST_c_c (catanh, -0x1p-54L, -1.0L, -2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5166   TEST_c_c (catanh, 1.0L, 0x1p-54L, 1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5167   TEST_c_c (catanh, -1.0L, 0x1p-54L, -1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5168   TEST_c_c (catanh, 1.0L, -0x1p-54L, 1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5169   TEST_c_c (catanh, -1.0L, -0x1p-54L, -1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5170   TEST_c_c (catanh, 0x1p-57L, 1.0L, 3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5171   TEST_c_c (catanh, 0x1p-57L, -1.0L, 3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5172   TEST_c_c (catanh, -0x1p-57L, 1.0L, -3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5173   TEST_c_c (catanh, -0x1p-57L, -1.0L, -3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5174   TEST_c_c (catanh, 1.0L, 0x1p-57L, 2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5175   TEST_c_c (catanh, -1.0L, 0x1p-57L, -2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5176   TEST_c_c (catanh, 1.0L, -0x1p-57L, 2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5177   TEST_c_c (catanh, -1.0L, -0x1p-57L, -2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5178   TEST_c_c (catanh, 0x1p-13L, 0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5179   TEST_c_c (catanh, 0x1p-13L, -0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5180   TEST_c_c (catanh, -0x1p-13L, 0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5181   TEST_c_c (catanh, -0x1p-13L, -0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5182   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-13L, 4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5183   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-13L, -4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5184   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-13L, 4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5185   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-13L, -4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5186   TEST_c_c (catanh, 0x1p-13L, 0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5187   TEST_c_c (catanh, 0x1p-13L, -0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5188   TEST_c_c (catanh, -0x1p-13L, 0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5189   TEST_c_c (catanh, -0x1p-13L, -0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5190   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-13L, 4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5191   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-13L, -4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5192   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-13L, 4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5193   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-13L, -4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5194 #ifndef TEST_FLOAT
5195   TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5196   TEST_c_c (catanh, 0x1p-27L, -0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5197   TEST_c_c (catanh, -0x1p-27L, 0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5198   TEST_c_c (catanh, -0x1p-27L, -0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5199   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5200   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5201   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5202   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5203   TEST_c_c (catanh, 0x1p-27L, 0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5204   TEST_c_c (catanh, 0x1p-27L, -0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5205   TEST_c_c (catanh, -0x1p-27L, 0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5206   TEST_c_c (catanh, -0x1p-27L, -0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5207   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5208   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5209   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5210   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5211 #endif
5212 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5213   TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5214   TEST_c_c (catanh, 0x1p-33L, -0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5215   TEST_c_c (catanh, -0x1p-33L, 0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5216   TEST_c_c (catanh, -0x1p-33L, -0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5217   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5218   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5219   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5220   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5221   TEST_c_c (catanh, 0x1p-33L, 0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5222   TEST_c_c (catanh, 0x1p-33L, -0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5223   TEST_c_c (catanh, -0x1p-33L, 0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5224   TEST_c_c (catanh, -0x1p-33L, -0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5225   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5226   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5227   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5228   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5229 #endif
5230 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5231   TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5232   TEST_c_c (catanh, 0x1p-54L, -0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5233   TEST_c_c (catanh, -0x1p-54L, 0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5234   TEST_c_c (catanh, -0x1p-54L, -0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5235   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-54L, 1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5236   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-54L, -1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5237   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-54L, 1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5238   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-54L, -1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5239   TEST_c_c (catanh, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5240   TEST_c_c (catanh, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5241   TEST_c_c (catanh, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5242   TEST_c_c (catanh, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5243   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5244   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5245   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5246   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5247 #endif
5248 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5249   TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5250   TEST_c_c (catanh, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5251   TEST_c_c (catanh, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5252   TEST_c_c (catanh, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5253   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5254   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5255   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5256   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5257   TEST_c_c (catanh, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5258   TEST_c_c (catanh, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5259   TEST_c_c (catanh, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5260   TEST_c_c (catanh, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5261   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5262   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5263   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5264   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5265 #endif
5266   TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5267   TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5268   TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5269   TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5270   TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5271   TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5272   TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5273   TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5274   TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5275   TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5276   TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5277   TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5278   TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5279   TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5280   TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5281   TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5282   TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5283   TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5284   TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5285   TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5286   TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5287   TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5288   TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5289   TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5290   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5291   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5292   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5293   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5294   TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5295   TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5296   TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5297   TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5298   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5299   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5300   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5301   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5302   TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5303   TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5304   TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5305   TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5306 #ifndef TEST_FLOAT
5307   TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5308   TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5309   TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5310   TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5311   TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5312   TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5313   TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5314   TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5315   TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5316   TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5317   TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5318   TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5319   TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5320   TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5321   TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5322   TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5323   TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5324   TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5325   TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5326   TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5327   TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5328   TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5329   TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5330   TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5331   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5332   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5333   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5334   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5335   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5336   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5337   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5338   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5339   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5340   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5341   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5342   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5343   TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5344   TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5345   TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5346   TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5347 #endif
5348 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5349   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5350   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5351   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5352   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5353   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5354   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5355   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5356   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5357   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5358   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5359   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5360   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5361   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5362   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5363   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5364   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5365 #endif
5366 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5367   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5368   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5369   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5370   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5371   TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5372   TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5373   TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5374   TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5375   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5376   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5377   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5378   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5379   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5380   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5381   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5382   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5383 #endif
5384 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5385   TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5386   TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5387   TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5388   TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5389   TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5390   TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5391   TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5392   TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5393   TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5394   TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5395   TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5396   TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5397   TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5398   TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5399   TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5400   TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5401   TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5402   TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5403   TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5404   TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5405   TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5406   TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5407   TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5408   TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5409   TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5410   TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5411   TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5412   TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5413   TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5414   TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5415   TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5416   TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5417   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5418   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5419   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5420   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5421   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5422   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5423   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5424   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5425   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5426   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5427   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5428   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5429   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5430   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5431   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5432   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5433 # if LDBL_MANT_DIG >= 113
5434   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5435   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5436   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5437   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5438   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5439   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5440   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5441   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5442   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5443   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5444   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5445   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5446   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5447   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5448   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5449   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5450 # endif
5451 #endif
5452
5453   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
5454   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
5455
5456   END (catanh, complex);
5457 }
5458
5459 static void
5460 cbrt_test (void)
5461 {
5462   errno = 0;
5463   FUNC(cbrt) (8);
5464   if (errno == ENOSYS)
5465     /* Function not implemented.  */
5466     return;
5467
5468   START (cbrt);
5469
5470   TEST_f_f (cbrt, 0.0, 0.0);
5471   TEST_f_f (cbrt, minus_zero, minus_zero);
5472
5473   TEST_f_f (cbrt, plus_infty, plus_infty);
5474   TEST_f_f (cbrt, minus_infty, minus_infty);
5475   TEST_f_f (cbrt, qnan_value, qnan_value);
5476
5477   TEST_f_f (cbrt, -0.001L, -0.1L);
5478   TEST_f_f (cbrt, 8, 2);
5479   TEST_f_f (cbrt, -27.0, -3.0);
5480   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
5481   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
5482
5483   END (cbrt);
5484 }
5485
5486
5487 static void
5488 ccos_test (void)
5489 {
5490   errno = 0;
5491   FUNC(ccos) (BUILD_COMPLEX (0, 0));
5492   if (errno == ENOSYS)
5493     /* Function not implemented.  */
5494     return;
5495
5496   START (ccos);
5497
5498   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
5499   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
5500   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
5501   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
5502
5503   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5504   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5505   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5506   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5507
5508   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
5509   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
5510   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
5511   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
5512
5513   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5514   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5515   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5516   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5517
5518   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
5519   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
5520   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
5521   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
5522
5523   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5524   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5525   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5526   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5527
5528   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5529   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5530
5531   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
5532   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
5533
5534   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5535   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5536
5537   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5538   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5539
5540   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5541   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5542
5543   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5544   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5545
5546   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
5547
5548   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
5549   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
5550
5551   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5552   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5553   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5554   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5555
5556 #ifndef TEST_FLOAT
5557   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5558   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5559   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5560   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5561 #endif
5562
5563 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5564   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5565   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5566   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5567   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5568 #endif
5569
5570 #ifdef TEST_FLOAT
5571   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5572 #endif
5573
5574 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5575   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5576 #endif
5577
5578 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5579   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5580 #endif
5581
5582   TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5583   TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5584
5585   END (ccos, complex);
5586 }
5587
5588
5589 static void
5590 ccosh_test (void)
5591 {
5592   errno = 0;
5593   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
5594   if (errno == ENOSYS)
5595     /* Function not implemented.  */
5596     return;
5597
5598   START (ccosh);
5599
5600   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
5601   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
5602   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
5603   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
5604
5605   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5606   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5607   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5608   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5609
5610   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
5611   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
5612   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
5613   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
5614
5615   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5616   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5617   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5618   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5619
5620   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
5621   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
5622   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
5623   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
5624
5625   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5626   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5627   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5628   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5629
5630   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5631   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5632
5633   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
5634   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
5635
5636   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5637   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5638
5639   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5640   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5641
5642   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5643   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5644
5645   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5646   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5647
5648   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
5649
5650   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
5651
5652   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
5653
5654   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5655   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5656   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5657   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5658
5659 #ifndef TEST_FLOAT
5660   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5661   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5662   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5663   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5664 #endif
5665
5666 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5667   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5668   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5669   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5670   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5671 #endif
5672
5673 #ifdef TEST_FLOAT
5674   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5675 #endif
5676
5677 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5678   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5679 #endif
5680
5681 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5682   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5683 #endif
5684
5685   TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5686   TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5687
5688   END (ccosh, complex);
5689 }
5690
5691
5692 static void
5693 ceil_test (void)
5694 {
5695   START (ceil);
5696
5697   TEST_f_f (ceil, 0.0, 0.0);
5698   TEST_f_f (ceil, minus_zero, minus_zero);
5699   TEST_f_f (ceil, plus_infty, plus_infty);
5700   TEST_f_f (ceil, minus_infty, minus_infty);
5701   TEST_f_f (ceil, qnan_value, qnan_value);
5702
5703   TEST_f_f (ceil, M_PIl, 4.0);
5704   TEST_f_f (ceil, -M_PIl, -3.0);
5705   TEST_f_f (ceil, 0.1, 1.0);
5706   TEST_f_f (ceil, 0.25, 1.0);
5707   TEST_f_f (ceil, 0.625, 1.0);
5708   TEST_f_f (ceil, -0.1, minus_zero);
5709   TEST_f_f (ceil, -0.25, minus_zero);
5710   TEST_f_f (ceil, -0.625, minus_zero);
5711
5712 #ifdef TEST_LDOUBLE
5713   /* The result can only be represented in long double.  */
5714   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
5715   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
5716   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
5717   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
5718   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
5719
5720   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
5721   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
5722   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
5723   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
5724   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
5725
5726 # if LDBL_MANT_DIG > 100
5727   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
5728   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
5729   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
5730   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
5731   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
5732   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
5733 # endif
5734
5735   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
5736   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
5737   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
5738   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
5739   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
5740
5741   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
5742   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
5743   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
5744   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
5745   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
5746
5747 # if LDBL_MANT_DIG > 100
5748   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
5749   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
5750   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
5751   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
5752   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
5753   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
5754
5755   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
5756   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
5757   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
5758   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
5759   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
5760   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
5761 # endif
5762
5763   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
5764   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
5765   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
5766   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
5767   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
5768
5769   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
5770   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
5771   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
5772   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
5773   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
5774
5775   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5776   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
5777   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
5778   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5779   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5780 #endif
5781
5782   END (ceil);
5783 }
5784
5785
5786 static void
5787 cexp_test (void)
5788 {
5789   errno = 0;
5790   FUNC(cexp) (BUILD_COMPLEX (0, 0));
5791   if (errno == ENOSYS)
5792     /* Function not implemented.  */
5793     return;
5794
5795   START (cexp);
5796
5797   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
5798   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
5799   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
5800   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
5801
5802   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
5803   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
5804
5805   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
5806   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
5807
5808   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5809   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5810
5811   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5812   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5813
5814   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5815   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5816
5817   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5818   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5819
5820   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
5821   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
5822   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
5823   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
5824
5825   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5826   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5827
5828   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
5829   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
5830
5831   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
5832
5833   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
5834
5835   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5836   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5837
5838   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5839   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5840   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5841   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
5842
5843   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
5844   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
5845
5846   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
5847   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
5848   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
5849
5850 #ifndef TEST_FLOAT
5851   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
5852   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
5853   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
5854 #endif
5855
5856 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5857   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
5858   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
5859 #endif
5860
5861   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
5862   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
5863
5864 #ifndef TEST_FLOAT
5865   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
5866   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
5867 #endif
5868
5869 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5870   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
5871   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
5872 #endif
5873
5874 #ifdef TEST_FLOAT
5875   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
5876 #endif
5877
5878 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5879   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
5880 #endif
5881
5882 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5883   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
5884 #endif
5885
5886   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
5887   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
5888   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
5889
5890   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5891   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5892
5893   END (cexp, complex);
5894 }
5895
5896
5897 static void
5898 cimag_test (void)
5899 {
5900   START (cimag);
5901   TEST_c_f (cimag, 1.0, 0.0, 0.0);
5902   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
5903   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
5904   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
5905   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
5906   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
5907   TEST_c_f (cimag, 2.0, 3.0, 3.0);
5908
5909   END (cimag);
5910 }
5911
5912 static void
5913 clog_test (void)
5914 {
5915   errno = 0;
5916   FUNC(clog) (BUILD_COMPLEX (-2, -3));
5917   if (errno == ENOSYS)
5918     /* Function not implemented.  */
5919     return;
5920
5921   START (clog);
5922
5923   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5924   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5925
5926   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5927   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5928
5929   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
5930   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
5931
5932   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
5933   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
5934
5935   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
5936   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
5937   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
5938   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
5939   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
5940   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
5941   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
5942   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
5943
5944   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
5945   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
5946   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
5947   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
5948
5949   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
5950   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
5951   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
5952   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
5953
5954   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
5955   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
5956
5957   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
5958   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
5959
5960   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5961   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5962   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5963   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5964
5965   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5966   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5967   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5968   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5969
5970   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
5971
5972   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
5973   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
5974
5975   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
5976   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5977   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
5978   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
5979
5980 #ifndef TEST_FLOAT
5981   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
5982   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
5983   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
5984   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
5985 #endif
5986
5987 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5988   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
5989   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
5990   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
5991 #endif
5992
5993   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5994   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5995   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5996   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5997   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
5998   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
5999 #ifdef TEST_FLOAT
6000   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
6001   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
6002 #endif
6003
6004 #ifndef TEST_FLOAT
6005   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
6006   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
6007   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
6008   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
6009   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
6010   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
6011 #endif
6012 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6013   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
6014   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
6015 #endif
6016
6017 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6018   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6019   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6020   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6021   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6022   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
6023   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
6024   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
6025   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
6026 # if LDBL_MANT_DIG >= 113
6027   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6028   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6029   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6030   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6031   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
6032   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
6033   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
6034   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
6035 # endif
6036 #endif
6037
6038   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
6039   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
6040   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
6041   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
6042   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
6043   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
6044   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
6045   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
6046   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
6047 #ifndef TEST_FLOAT
6048   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6049   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
6050   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
6051 #endif
6052 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6053   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
6054   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
6055   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
6056 #endif
6057
6058   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
6059   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
6060 #ifndef TEST_FLOAT
6061   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
6062   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
6063 #endif
6064 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6065   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
6066   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6067 #endif
6068
6069   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
6070 #ifndef TEST_FLOAT
6071   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6072 #endif
6073 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6074   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
6075 #endif
6076
6077   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
6078   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
6079   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
6080   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
6081   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
6082   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
6083   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
6084   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
6085   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
6086   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
6087 #ifndef TEST_FLOAT
6088   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
6089   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
6090   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
6091   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
6092   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
6093   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
6094   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
6095   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
6096   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
6097   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
6098   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
6099   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
6100 #endif
6101 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6102   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
6103   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
6104   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
6105   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
6106   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
6107 #endif
6108 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6109   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
6110   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
6111   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
6112   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
6113   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
6114   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
6115   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
6116   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
6117   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
6118   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
6119 #endif
6120 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6121   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
6122   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
6123   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
6124   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
6125   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
6126   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
6127 #endif
6128
6129   END (clog, complex);
6130 }
6131
6132
6133 static void
6134 clog10_test (void)
6135 {
6136   errno = 0;
6137   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
6138   if (errno == ENOSYS)
6139     /* Function not implemented.  */
6140     return;
6141
6142   START (clog10);
6143
6144   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6145   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6146
6147   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
6148   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
6149
6150   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
6151
6152   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
6153   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
6154
6155   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
6156   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
6157   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
6158   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
6159   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
6160   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
6161   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
6162   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
6163
6164   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
6165   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
6166   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
6167   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
6168
6169   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
6170   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
6171   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
6172   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
6173
6174   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
6175   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
6176
6177   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
6178   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
6179
6180   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6181   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6182   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6183   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6184
6185   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6186   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6187   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6188   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6189
6190   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
6191
6192   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
6193   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
6194
6195   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
6196   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6197   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
6198   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
6199
6200 #ifndef TEST_FLOAT
6201   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
6202   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
6203   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
6204   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
6205 #endif
6206
6207 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6208   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
6209   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
6210   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
6211 #endif
6212
6213   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6214   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6215   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6216   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6217   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
6218   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
6219 #ifdef TEST_FLOAT
6220   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
6221   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
6222 #endif
6223
6224 #ifndef TEST_FLOAT
6225   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6226   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6227   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6228   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6229   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
6230   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
6231 #endif
6232 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6233   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
6234   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
6235 #endif
6236
6237 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6238   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6239   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6240   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6241   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6242   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6243   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6244   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6245   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6246 # if LDBL_MANT_DIG >= 113
6247   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6248   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6249   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6250   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6251   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6252   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6253   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6254   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6255 # endif
6256 #endif
6257
6258   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
6259   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
6260   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
6261   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
6262   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
6263   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
6264   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
6265   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6266   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6267 #ifndef TEST_FLOAT
6268   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6269   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6270   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6271 #endif
6272 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6273   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
6274   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6275   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6276 #endif
6277
6278   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
6279   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
6280 #ifndef TEST_FLOAT
6281   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
6282   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
6283 #endif
6284 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6285   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
6286   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6287 #endif
6288
6289   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
6290 #ifndef TEST_FLOAT
6291   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6292 #endif
6293 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6294   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
6295 #endif
6296
6297   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
6298   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
6299   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
6300   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
6301   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
6302   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
6303   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
6304   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
6305   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
6306   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
6307 #ifndef TEST_FLOAT
6308   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
6309   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
6310   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
6311   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
6312   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
6313   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
6314   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
6315   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
6316   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
6317   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
6318   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
6319   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
6320 #endif
6321 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6322   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
6323   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
6324   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
6325   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
6326   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
6327 #endif
6328 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6329   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
6330   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
6331   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
6332   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
6333   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
6334   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
6335   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
6336   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
6337   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
6338   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
6339 #endif
6340 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6341   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
6342   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
6343   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
6344   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
6345   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
6346   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
6347 #endif
6348
6349   END (clog10, complex);
6350 }
6351
6352
6353 static void
6354 conj_test (void)
6355 {
6356   START (conj);
6357   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
6358   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
6359   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
6360   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
6361   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
6362   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
6363   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
6364
6365   END (conj, complex);
6366 }
6367
6368
6369 static void
6370 copysign_test (void)
6371 {
6372   START (copysign);
6373
6374   TEST_ff_f (copysign, 0, 4, 0);
6375   TEST_ff_f (copysign, 0, -4, minus_zero);
6376   TEST_ff_f (copysign, minus_zero, 4, 0);
6377   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
6378
6379   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
6380   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
6381   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
6382   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
6383
6384   TEST_ff_f (copysign, 0, plus_infty, 0);
6385   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
6386   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
6387   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
6388
6389   /* XXX More correctly we would have to check the sign of the NaN.  */
6390   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
6391   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
6392   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
6393   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
6394
6395   END (copysign);
6396 }
6397
6398
6399 static void
6400 cos_test (void)
6401 {
6402   errno = 0;
6403   FUNC(cos) (0);
6404   if (errno == ENOSYS)
6405     /* Function not implemented.  */
6406     return;
6407
6408   START (cos);
6409
6410   TEST_f_f (cos, 0, 1);
6411   TEST_f_f (cos, minus_zero, 1);
6412   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6413   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6414   TEST_f_f (cos, qnan_value, qnan_value, ERRNO_UNCHANGED);
6415
6416   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
6417   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
6418
6419   /* The value of M_PI_2l is never exactly PI/2, and therefore the
6420      answer is never exactly zero. The answer is equal to the error
6421      in rounding PI/2 for the type used.  Thus the answer is unique
6422      to each type.  */
6423 #ifdef TEST_FLOAT
6424   /* 32-bit float.  */
6425   TEST_f_f (cos, M_PI_2l, -0x1.777a5cp-25L);
6426 #endif
6427 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
6428   /* 64-bit double or 64-bit long double.  */
6429   TEST_f_f (cos, M_PI_2l, 0x1.1a62633145c07p-54L);
6430 #endif
6431 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
6432   /* 96-bit long double.  */
6433   TEST_f_f (cos, M_PI_2l, -0xe.ce675d1fc8f8cbbp-69L);
6434 #endif
6435 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
6436   /* 128-bit IBM long double.  */
6437   TEST_f_f (cos, M_PI_2l, 0x1.c1cd129024e088a67cc74020bcp-107L);
6438 #endif
6439 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
6440   /* 128-bit long double.  */
6441   TEST_f_f (cos, M_PI_2l, 0x1.cd129024e088a67cc74020bbea64p-115L);
6442 #endif
6443
6444   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
6445
6446   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
6447   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
6448
6449 #ifdef TEST_DOUBLE
6450   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
6451 #endif
6452
6453   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
6454
6455 #ifndef TEST_FLOAT
6456   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
6457   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
6458 #endif
6459
6460 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6461   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
6462 #endif
6463
6464   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
6465   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
6466   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
6467   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
6468   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
6469   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
6470
6471   END (cos);
6472 }
6473
6474
6475 static void
6476 cos_test_tonearest (void)
6477 {
6478   int save_round_mode;
6479   errno = 0;
6480   FUNC(cos) (0);
6481   if (errno == ENOSYS)
6482     /* Function not implemented.  */
6483     return;
6484
6485   START (cos_tonearest);
6486
6487   save_round_mode = fegetround ();
6488
6489   if (!fesetround (FE_TONEAREST))
6490     {
6491       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6492       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6493       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6494       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6495       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6496       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6497       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6498       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6499       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6500       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6501     }
6502
6503   fesetround (save_round_mode);
6504
6505   END (cos_tonearest);
6506 }
6507
6508
6509 static void
6510 cos_test_towardzero (void)
6511 {
6512   int save_round_mode;
6513   errno = 0;
6514   FUNC(cos) (0);
6515   if (errno == ENOSYS)
6516     /* Function not implemented.  */
6517     return;
6518
6519   START (cos_towardzero);
6520
6521   save_round_mode = fegetround ();
6522
6523   if (!fesetround (FE_TOWARDZERO))
6524     {
6525       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6526       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6527       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6528       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6529       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6530       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6531       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6532       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6533       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6534       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6535     }
6536
6537   fesetround (save_round_mode);
6538
6539   END (cos_towardzero);
6540 }
6541
6542
6543 static void
6544 cos_test_downward (void)
6545 {
6546   int save_round_mode;
6547   errno = 0;
6548   FUNC(cos) (0);
6549   if (errno == ENOSYS)
6550     /* Function not implemented.  */
6551     return;
6552
6553   START (cos_downward);
6554
6555   save_round_mode = fegetround ();
6556
6557   if (!fesetround (FE_DOWNWARD))
6558     {
6559       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6560       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6561       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6562       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6563       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6564       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6565       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6566       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6567       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6568       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6569     }
6570
6571   fesetround (save_round_mode);
6572
6573   END (cos_downward);
6574 }
6575
6576
6577 static void
6578 cos_test_upward (void)
6579 {
6580   int save_round_mode;
6581   errno = 0;
6582   FUNC(cos) (0);
6583   if (errno == ENOSYS)
6584     /* Function not implemented.  */
6585     return;
6586
6587   START (cos_upward);
6588
6589   save_round_mode = fegetround ();
6590
6591   if (!fesetround (FE_UPWARD))
6592     {
6593       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6594       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6595       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6596       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6597       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6598       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6599       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6600       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6601       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6602       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6603     }
6604
6605   fesetround (save_round_mode);
6606
6607   END (cos_upward);
6608 }
6609
6610
6611 static void
6612 cosh_test (void)
6613 {
6614   errno = 0;
6615   FUNC(cosh) (0.7L);
6616   if (errno == ENOSYS)
6617     /* Function not implemented.  */
6618     return;
6619
6620   START (cosh);
6621   TEST_f_f (cosh, 0, 1);
6622   TEST_f_f (cosh, minus_zero, 1);
6623
6624 #ifndef TEST_INLINE
6625   TEST_f_f (cosh, plus_infty, plus_infty);
6626   TEST_f_f (cosh, minus_infty, plus_infty);
6627 #endif
6628   TEST_f_f (cosh, qnan_value, qnan_value);
6629
6630   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
6631
6632 #ifndef TEST_FLOAT
6633   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6634   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6635 #endif
6636
6637   END (cosh);
6638 }
6639
6640
6641 static void
6642 cosh_test_tonearest (void)
6643 {
6644   int save_round_mode;
6645   errno = 0;
6646   FUNC(cosh) (0);
6647   if (errno == ENOSYS)
6648     /* Function not implemented.  */
6649     return;
6650
6651   START (cosh_tonearest);
6652
6653   save_round_mode = fegetround ();
6654
6655   if (!fesetround (FE_TONEAREST))
6656     {
6657       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6658       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6659       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6660     }
6661
6662   fesetround (save_round_mode);
6663
6664   END (cosh_tonearest);
6665 }
6666
6667
6668 static void
6669 cosh_test_towardzero (void)
6670 {
6671   int save_round_mode;
6672   errno = 0;
6673   FUNC(cosh) (0);
6674   if (errno == ENOSYS)
6675     /* Function not implemented.  */
6676     return;
6677
6678   START (cosh_towardzero);
6679
6680   save_round_mode = fegetround ();
6681
6682   if (!fesetround (FE_TOWARDZERO))
6683     {
6684       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6685       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6686       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6687     }
6688
6689   fesetround (save_round_mode);
6690
6691   END (cosh_towardzero);
6692 }
6693
6694
6695 static void
6696 cosh_test_downward (void)
6697 {
6698   int save_round_mode;
6699   errno = 0;
6700   FUNC(cosh) (0);
6701   if (errno == ENOSYS)
6702     /* Function not implemented.  */
6703     return;
6704
6705   START (cosh_downward);
6706
6707   save_round_mode = fegetround ();
6708
6709   if (!fesetround (FE_DOWNWARD))
6710     {
6711       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6712       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6713       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6714     }
6715
6716   fesetround (save_round_mode);
6717
6718   END (cosh_downward);
6719 }
6720
6721
6722 static void
6723 cosh_test_upward (void)
6724 {
6725   int save_round_mode;
6726   errno = 0;
6727   FUNC(cosh) (0);
6728   if (errno == ENOSYS)
6729     /* Function not implemented.  */
6730     return;
6731
6732   START (cosh_upward);
6733
6734   save_round_mode = fegetround ();
6735
6736   if (!fesetround (FE_UPWARD))
6737     {
6738       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6739       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6740       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6741     }
6742
6743   fesetround (save_round_mode);
6744
6745   END (cosh_upward);
6746 }
6747
6748
6749 static void
6750 cpow_test (void)
6751 {
6752   errno = 0;
6753   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
6754   if (errno == ENOSYS)
6755     /* Function not implemented.  */
6756     return;
6757
6758   START (cpow);
6759
6760   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
6761   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
6762
6763   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
6764   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
6765
6766   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
6767
6768   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
6769   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
6770   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
6771   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
6772
6773   END (cpow, complex);
6774 }
6775
6776
6777 static void
6778 cproj_test (void)
6779 {
6780   START (cproj);
6781   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
6782   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
6783   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
6784   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
6785
6786   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
6787
6788   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
6789   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
6790   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
6791   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
6792
6793   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
6794   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
6795
6796   END (cproj, complex);
6797 }
6798
6799
6800 static void
6801 creal_test (void)
6802 {
6803   START (creal);
6804   TEST_c_f (creal, 0.0, 1.0, 0.0);
6805   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
6806   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
6807   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
6808   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
6809   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
6810   TEST_c_f (creal, 2.0, 3.0, 2.0);
6811
6812   END (creal);
6813 }
6814
6815 static void
6816 csin_test (void)
6817 {
6818   errno = 0;
6819   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
6820   if (errno == ENOSYS)
6821     /* Function not implemented.  */
6822     return;
6823
6824   START (csin);
6825
6826   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
6827   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
6828   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
6829   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
6830
6831   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
6832   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
6833   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
6834   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
6835
6836   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6837   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6838   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6839   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6840
6841   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6842   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6843   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6844   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6845
6846   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6847   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6848   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6849   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
6850
6851   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
6852   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
6853   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
6854   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
6855
6856   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6857   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6858
6859   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6860   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6861
6862   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6863   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6864
6865   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
6866   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
6867
6868   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6869   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6870
6871   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6872   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6873
6874   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
6875
6876   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
6877   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
6878
6879   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6880   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6881   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6882   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6883
6884 #ifndef TEST_FLOAT
6885   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6886   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6887   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6888   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6889 #endif
6890
6891 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6892   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6893   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6894   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6895   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6896 #endif
6897
6898 #ifdef TEST_FLOAT
6899   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
6900 #endif
6901
6902 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6903   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
6904 #endif
6905
6906 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6907   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
6908 #endif
6909
6910   TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6911   TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6912
6913   END (csin, complex);
6914 }
6915
6916
6917 static void
6918 csinh_test (void)
6919 {
6920   errno = 0;
6921   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
6922   if (errno == ENOSYS)
6923     /* Function not implemented.  */
6924     return;
6925
6926   START (csinh);
6927
6928   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
6929   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
6930   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
6931   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
6932
6933   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6934   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6935   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6936   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6937
6938   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
6939   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
6940   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
6941   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
6942
6943   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6944   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6945   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6946   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6947
6948   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
6949   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
6950   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
6951   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
6952
6953   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6954   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6955   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6956   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6957
6958   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6959   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6960
6961   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6962   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6963
6964   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6965   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6966
6967   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
6968   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
6969
6970   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6971   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6972
6973   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6974   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6975
6976   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
6977
6978   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
6979   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
6980
6981   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6982   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6983   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6984   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6985
6986 #ifndef TEST_FLOAT
6987   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6988   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6989   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6990   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6991 #endif
6992
6993 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6994   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6995   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6996   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6997   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6998 #endif
6999
7000 #ifdef TEST_FLOAT
7001   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
7002 #endif
7003
7004 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
7005   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
7006 #endif
7007
7008 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7009   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
7010 #endif
7011
7012   TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
7013   TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
7014
7015   END (csinh, complex);
7016 }
7017
7018
7019 static void
7020 csqrt_test (void)
7021 {
7022   errno = 0;
7023   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
7024   if (errno == ENOSYS)
7025     /* Function not implemented.  */
7026     return;
7027
7028   START (csqrt);
7029
7030   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
7031   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
7032   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
7033   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
7034
7035   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
7036   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
7037   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
7038   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
7039
7040   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
7041   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
7042   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
7043   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
7044
7045   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
7046   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
7047   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
7048   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
7049   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
7050   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
7051   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
7052   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
7053   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
7054   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
7055   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
7056   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
7057
7058   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
7059
7060   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
7061
7062   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7063   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7064   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7065   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7066
7067   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7068   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7069   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7070   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7071
7072   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
7073
7074   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
7075   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
7076   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
7077   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
7078   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
7079   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
7080   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
7081   /* Principal square root should be returned (i.e., non-negative real
7082      part).  */
7083   TEST_c_c (csqrt, 0, -1, M_SQRT1_2l, -M_SQRT1_2l);
7084
7085   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
7086   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
7087   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
7088   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
7089
7090   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
7091   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
7092 #ifdef TEST_FLOAT
7093   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
7094 #endif
7095   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
7096   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
7097   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
7098
7099 #ifndef TEST_FLOAT
7100   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
7101   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
7102   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
7103   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
7104
7105   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
7106   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
7107 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
7108   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
7109 #endif
7110   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
7111   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
7112   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
7113 #endif
7114
7115 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7116   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
7117   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
7118   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
7119
7120   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
7121   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
7122   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
7123   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
7124   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
7125   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
7126
7127 # if LDBL_MANT_DIG >= 113
7128   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
7129   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
7130   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
7131   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
7132   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
7133   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
7134 # endif
7135 #endif
7136
7137   END (csqrt, complex);
7138 }
7139
7140 static void
7141 ctan_test (void)
7142 {
7143   errno = 0;
7144   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7145   if (errno == ENOSYS)
7146     /* Function not implemented.  */
7147     return;
7148
7149   START (ctan);
7150
7151   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
7152   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
7153   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
7154   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
7155
7156   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
7157   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
7158   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
7159   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
7160
7161   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
7162   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
7163   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
7164   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
7165
7166   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7167   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7168   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7169   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7170   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7171   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7172   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7173   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7174
7175   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
7176   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
7177
7178   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
7179   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
7180
7181   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7182   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7183
7184   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7185   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7186   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7187   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7188
7189   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
7190
7191   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
7192   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
7193
7194   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
7195   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
7196
7197 #ifndef TEST_FLOAT
7198   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7199   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7200 #endif
7201
7202 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7203   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
7204   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
7205 #endif
7206
7207   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
7208
7209   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
7210
7211 #ifndef TEST_FLOAT
7212   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
7213 #endif
7214
7215 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7216   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
7217 #endif
7218
7219   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
7220   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
7221   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
7222   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
7223
7224   END (ctan, complex);
7225 }
7226
7227
7228 static void
7229 ctan_test_tonearest (void)
7230 {
7231   int save_round_mode;
7232   errno = 0;
7233   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7234   if (errno == ENOSYS)
7235     /* Function not implemented.  */
7236     return;
7237
7238   START (ctan_tonearest);
7239
7240   save_round_mode = fegetround ();
7241
7242   if (!fesetround (FE_TONEAREST))
7243     {
7244       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7245
7246 #ifndef TEST_FLOAT
7247       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7248 #endif
7249
7250 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7251       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7252 #endif
7253     }
7254
7255   fesetround (save_round_mode);
7256
7257   END (ctan_tonearest, complex);
7258 }
7259
7260
7261 static void
7262 ctan_test_towardzero (void)
7263 {
7264   int save_round_mode;
7265   errno = 0;
7266   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7267   if (errno == ENOSYS)
7268     /* Function not implemented.  */
7269     return;
7270
7271   START (ctan_towardzero);
7272
7273   save_round_mode = fegetround ();
7274
7275   if (!fesetround (FE_TOWARDZERO))
7276     {
7277       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7278
7279 #ifndef TEST_FLOAT
7280       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7281 #endif
7282
7283 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7284       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7285 #endif
7286     }
7287
7288   fesetround (save_round_mode);
7289
7290   END (ctan_towardzero, complex);
7291 }
7292
7293
7294 static void
7295 ctan_test_downward (void)
7296 {
7297   int save_round_mode;
7298   errno = 0;
7299   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7300   if (errno == ENOSYS)
7301     /* Function not implemented.  */
7302     return;
7303
7304   START (ctan_downward);
7305
7306   save_round_mode = fegetround ();
7307
7308   if (!fesetround (FE_DOWNWARD))
7309     {
7310       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7311
7312 #ifndef TEST_FLOAT
7313       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7314 #endif
7315
7316 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7317       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7318 #endif
7319     }
7320
7321   fesetround (save_round_mode);
7322
7323   END (ctan_downward, complex);
7324 }
7325
7326
7327 static void
7328 ctan_test_upward (void)
7329 {
7330   int save_round_mode;
7331   errno = 0;
7332   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7333   if (errno == ENOSYS)
7334     /* Function not implemented.  */
7335     return;
7336
7337   START (ctan_upward);
7338
7339   save_round_mode = fegetround ();
7340
7341   if (!fesetround (FE_UPWARD))
7342     {
7343       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7344
7345 #ifndef TEST_FLOAT
7346       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7347 #endif
7348
7349 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7350       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7351 #endif
7352     }
7353
7354   fesetround (save_round_mode);
7355
7356   END (ctan_upward, complex);
7357 }
7358
7359
7360 static void
7361 ctanh_test (void)
7362 {
7363   errno = 0;
7364   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
7365   if (errno == ENOSYS)
7366     /* Function not implemented.  */
7367     return;
7368
7369   START (ctanh);
7370
7371   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
7372   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
7373   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
7374   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
7375
7376   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
7377   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
7378   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
7379   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
7380   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
7381   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
7382   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
7383   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
7384
7385   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7386   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7387   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7388   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7389   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7390   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7391   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7392   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7393
7394   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7395   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7396
7397   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
7398   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
7399
7400   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7401   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7402
7403   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7404   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7405   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7406   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7407
7408   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
7409
7410   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
7411
7412   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
7413   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
7414
7415   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
7416   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
7417
7418 #ifndef TEST_FLOAT
7419   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
7420   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
7421 #endif
7422
7423 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7424   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
7425   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
7426 #endif
7427
7428   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
7429
7430   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
7431
7432 #ifndef TEST_FLOAT
7433   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
7434 #endif
7435
7436 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7437   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
7438 #endif
7439
7440   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
7441   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
7442   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
7443   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
7444
7445   END (ctanh, complex);
7446 }
7447
7448
7449 static void
7450 ctanh_test_tonearest (void)
7451 {
7452   int save_round_mode;
7453   errno = 0;
7454   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7455   if (errno == ENOSYS)
7456     /* Function not implemented.  */
7457     return;
7458
7459   START (ctanh_tonearest);
7460
7461   save_round_mode = fegetround ();
7462
7463   if (!fesetround (FE_TONEAREST))
7464     {
7465       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7466
7467 #ifndef TEST_FLOAT
7468       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7469 #endif
7470
7471 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7472       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7473 #endif
7474     }
7475
7476   fesetround (save_round_mode);
7477
7478   END (ctanh_tonearest, complex);
7479 }
7480
7481
7482 static void
7483 ctanh_test_towardzero (void)
7484 {
7485   int save_round_mode;
7486   errno = 0;
7487   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7488   if (errno == ENOSYS)
7489     /* Function not implemented.  */
7490     return;
7491
7492   START (ctanh_towardzero);
7493
7494   save_round_mode = fegetround ();
7495
7496   if (!fesetround (FE_TOWARDZERO))
7497     {
7498       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7499
7500 #ifndef TEST_FLOAT
7501       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7502 #endif
7503
7504 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7505       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7506 #endif
7507     }
7508
7509   fesetround (save_round_mode);
7510
7511   END (ctanh_towardzero, complex);
7512 }
7513
7514
7515 static void
7516 ctanh_test_downward (void)
7517 {
7518   int save_round_mode;
7519   errno = 0;
7520   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7521   if (errno == ENOSYS)
7522     /* Function not implemented.  */
7523     return;
7524
7525   START (ctanh_downward);
7526
7527   save_round_mode = fegetround ();
7528
7529   if (!fesetround (FE_DOWNWARD))
7530     {
7531       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7532
7533 #ifndef TEST_FLOAT
7534       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7535 #endif
7536
7537 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7538       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7539 #endif
7540     }
7541
7542   fesetround (save_round_mode);
7543
7544   END (ctanh_downward, complex);
7545 }
7546
7547
7548 static void
7549 ctanh_test_upward (void)
7550 {
7551   int save_round_mode;
7552   errno = 0;
7553   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7554   if (errno == ENOSYS)
7555     /* Function not implemented.  */
7556     return;
7557
7558   START (ctanh_upward);
7559
7560   save_round_mode = fegetround ();
7561
7562   if (!fesetround (FE_UPWARD))
7563     {
7564       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7565
7566 #ifndef TEST_FLOAT
7567       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7568 #endif
7569
7570 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7571       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7572 #endif
7573     }
7574
7575   fesetround (save_round_mode);
7576
7577   END (ctanh_upward, complex);
7578 }
7579
7580
7581 static void
7582 erf_test (void)
7583 {
7584   errno = 0;
7585   FUNC(erf) (0);
7586   if (errno == ENOSYS)
7587     /* Function not implemented.  */
7588     return;
7589
7590   START (erf);
7591
7592   TEST_f_f (erf, 0, 0);
7593   TEST_f_f (erf, minus_zero, minus_zero);
7594   TEST_f_f (erf, plus_infty, 1);
7595   TEST_f_f (erf, minus_infty, -1);
7596   TEST_f_f (erf, qnan_value, qnan_value);
7597
7598   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
7599   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
7600   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
7601   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
7602   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
7603   TEST_f_f (erf, 27.0L, 1.0L);
7604
7605   END (erf);
7606 }
7607
7608
7609 static void
7610 erfc_test (void)
7611 {
7612   errno = 0;
7613   FUNC(erfc) (0);
7614   if (errno == ENOSYS)
7615     /* Function not implemented.  */
7616     return;
7617
7618   START (erfc);
7619
7620   TEST_f_f (erfc, plus_infty, 0.0);
7621   TEST_f_f (erfc, minus_infty, 2.0);
7622   TEST_f_f (erfc, 0.0, 1.0);
7623   TEST_f_f (erfc, minus_zero, 1.0);
7624   TEST_f_f (erfc, qnan_value, qnan_value);
7625
7626   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
7627   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
7628   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
7629   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7630   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
7631   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7632   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
7633   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
7634 #ifdef TEST_LDOUBLE
7635   /* The result can only be represented in long double.  */
7636 # if LDBL_MIN_10_EXP < -319
7637   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
7638 # endif
7639 # if LDBL_MANT_DIG >= 106
7640   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
7641 # endif
7642 #endif
7643
7644   END (erfc);
7645 }
7646
7647
7648 static void
7649 exp_test (void)
7650 {
7651   errno = 0;
7652   FUNC(exp) (0);
7653   if (errno == ENOSYS)
7654     /* Function not implemented.  */
7655     return;
7656
7657   START (exp);
7658
7659   TEST_f_f (exp, 0, 1);
7660   TEST_f_f (exp, minus_zero, 1);
7661
7662 #ifndef TEST_INLINE
7663   TEST_f_f (exp, plus_infty, plus_infty);
7664   TEST_f_f (exp, minus_infty, 0);
7665 #endif
7666   TEST_f_f (exp, qnan_value, qnan_value);
7667   TEST_f_f (exp, 1, M_El);
7668
7669   TEST_f_f (exp, 2, M_E2l);
7670   TEST_f_f (exp, 3, M_E3l);
7671   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
7672   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
7673   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
7674 #ifndef TEST_FLOAT
7675   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
7676 #endif
7677 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
7678   /* The result can only be represented in sane long double.  */
7679   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
7680 #endif
7681
7682 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
7683   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
7684   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
7685 #endif
7686   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
7687   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
7688   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
7689
7690   END (exp);
7691 }
7692
7693
7694 static void
7695 exp_test_tonearest (void)
7696 {
7697   int save_round_mode;
7698   errno = 0;
7699   FUNC(exp) (0);
7700   if (errno == ENOSYS)
7701     /* Function not implemented.  */
7702     return;
7703
7704   START (exp_tonearest);
7705
7706   save_round_mode = fegetround ();
7707
7708   if (!fesetround (FE_TONEAREST))
7709     {
7710       TEST_f_f (exp, 1, M_El);
7711       TEST_f_f (exp, 2, M_E2l);
7712       TEST_f_f (exp, 3, M_E3l);
7713     }
7714
7715   fesetround (save_round_mode);
7716
7717   END (exp_tonearest);
7718 }
7719
7720
7721 static void
7722 exp_test_towardzero (void)
7723 {
7724   int save_round_mode;
7725   errno = 0;
7726   FUNC(exp) (0);
7727   if (errno == ENOSYS)
7728     /* Function not implemented.  */
7729     return;
7730
7731   START (exp_towardzero);
7732
7733   save_round_mode = fegetround ();
7734
7735   if (!fesetround (FE_TOWARDZERO))
7736     {
7737       TEST_f_f (exp, 1, M_El);
7738       TEST_f_f (exp, 2, M_E2l);
7739       TEST_f_f (exp, 3, M_E3l);
7740     }
7741
7742   fesetround (save_round_mode);
7743
7744   END (exp_towardzero);
7745 }
7746
7747
7748 static void
7749 exp_test_downward (void)
7750 {
7751   int save_round_mode;
7752   errno = 0;
7753   FUNC(exp) (0);
7754   if (errno == ENOSYS)
7755     /* Function not implemented.  */
7756     return;
7757
7758   START (exp_downward);
7759
7760   save_round_mode = fegetround ();
7761
7762   if (!fesetround (FE_DOWNWARD))
7763     {
7764       TEST_f_f (exp, 1, M_El);
7765       TEST_f_f (exp, 2, M_E2l);
7766       TEST_f_f (exp, 3, M_E3l);
7767     }
7768
7769   fesetround (save_round_mode);
7770
7771   END (exp_downward);
7772 }
7773
7774
7775 static void
7776 exp_test_upward (void)
7777 {
7778   int save_round_mode;
7779   errno = 0;
7780   FUNC(exp) (0);
7781   if (errno == ENOSYS)
7782     /* Function not implemented.  */
7783     return;
7784
7785   START (exp_upward);
7786
7787   save_round_mode = fegetround ();
7788
7789   if (!fesetround (FE_UPWARD))
7790     {
7791       TEST_f_f (exp, 1, M_El);
7792       TEST_f_f (exp, 2, M_E2l);
7793       TEST_f_f (exp, 3, M_E3l);
7794     }
7795
7796   fesetround (save_round_mode);
7797
7798   END (exp_upward);
7799 }
7800
7801
7802 static void
7803 exp10_test (void)
7804 {
7805   errno = 0;
7806   FUNC(exp10) (0);
7807   if (errno == ENOSYS)
7808     /* Function not implemented.  */
7809     return;
7810
7811   START (exp10);
7812
7813   TEST_f_f (exp10, 0, 1);
7814   TEST_f_f (exp10, minus_zero, 1);
7815
7816   TEST_f_f (exp10, plus_infty, plus_infty);
7817   TEST_f_f (exp10, minus_infty, 0);
7818   TEST_f_f (exp10, qnan_value, qnan_value);
7819   TEST_f_f (exp10, 3, 1000);
7820   TEST_f_f (exp10, -1, 0.1L);
7821   TEST_f_f (exp10, 36, 1.0e36L);
7822   TEST_f_f (exp10, -36, 1.0e-36L);
7823 #ifndef TEST_FLOAT
7824   TEST_f_f (exp10, 305, 1.0e305L);
7825   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
7826 #endif
7827 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
7828   TEST_f_f (exp10, 4932, 1.0e4932L);
7829   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
7830 #endif
7831   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7832   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
7833   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
7834   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
7835   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
7836
7837   END (exp10);
7838 }
7839
7840
7841 static void
7842 exp2_test (void)
7843 {
7844   errno = 0;
7845   FUNC(exp2) (0);
7846   if (errno == ENOSYS)
7847     /* Function not implemented.  */
7848     return;
7849
7850   START (exp2);
7851
7852   TEST_f_f (exp2, 0, 1);
7853   TEST_f_f (exp2, minus_zero, 1);
7854   TEST_f_f (exp2, plus_infty, plus_infty);
7855   TEST_f_f (exp2, minus_infty, 0);
7856   TEST_f_f (exp2, qnan_value, qnan_value);
7857
7858   TEST_f_f (exp2, 10, 1024);
7859   TEST_f_f (exp2, -1, 0.5);
7860   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7861   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
7862   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
7863   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
7864   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
7865
7866   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
7867   TEST_f_f (exp2, 127, 0x1p127);
7868   TEST_f_f (exp2, -149, 0x1p-149);
7869
7870 #ifndef TEST_FLOAT
7871   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
7872   TEST_f_f (exp2, 1023, 0x1p1023);
7873   TEST_f_f (exp2, -1074, 0x1p-1074);
7874 #endif
7875
7876 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7877   TEST_f_f (exp2, 16383, 0x1p16383L);
7878   TEST_f_f (exp2, -16400, 0x1p-16400L);
7879 #endif
7880
7881   END (exp2);
7882 }
7883
7884
7885 static void
7886 expm1_test (void)
7887 {
7888   errno = 0;
7889   FUNC(expm1) (0);
7890   if (errno == ENOSYS)
7891     /* Function not implemented.  */
7892     return;
7893
7894   START (expm1);
7895
7896   TEST_f_f (expm1, 0, 0);
7897   TEST_f_f (expm1, minus_zero, minus_zero);
7898
7899 #ifndef TEST_INLINE
7900   TEST_f_f (expm1, plus_infty, plus_infty);
7901   TEST_f_f (expm1, minus_infty, -1);
7902 #endif
7903   TEST_f_f (expm1, qnan_value, qnan_value);
7904
7905   TEST_f_f (expm1, 1, M_El - 1.0);
7906   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
7907
7908   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
7909
7910 #ifndef TEST_FLOAT
7911   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
7912   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
7913 #endif
7914
7915 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7916   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
7917 #endif
7918
7919   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
7920   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
7921   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
7922   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
7923   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
7924   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
7925   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
7926   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
7927   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
7928   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
7929   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
7930   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
7931   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
7932   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
7933   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
7934   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
7935   TEST_f_f (expm1, -100.0, -1.0);
7936   TEST_f_f (expm1, -1000.0, -1.0);
7937   TEST_f_f (expm1, -10000.0, -1.0);
7938   TEST_f_f (expm1, -100000.0, -1.0);
7939
7940   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
7941   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
7942   TEST_f_f (expm1, -max_value, -1);
7943
7944   END (expm1);
7945 }
7946
7947
7948 static void
7949 fabs_test (void)
7950 {
7951   START (fabs);
7952
7953   TEST_f_f (fabs, 0, 0);
7954   TEST_f_f (fabs, minus_zero, 0);
7955
7956   TEST_f_f (fabs, plus_infty, plus_infty);
7957   TEST_f_f (fabs, minus_infty, plus_infty);
7958   TEST_f_f (fabs, qnan_value, qnan_value);
7959
7960   TEST_f_f (fabs, 38.0, 38.0);
7961   TEST_f_f (fabs, -M_El, M_El);
7962
7963   END (fabs);
7964 }
7965
7966
7967 static void
7968 fdim_test (void)
7969 {
7970   START (fdim);
7971
7972   TEST_ff_f (fdim, 0, 0, 0);
7973   TEST_ff_f (fdim, 9, 0, 9);
7974   TEST_ff_f (fdim, 0, 9, 0);
7975   TEST_ff_f (fdim, -9, 0, 0);
7976   TEST_ff_f (fdim, 0, -9, 9);
7977
7978   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
7979   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
7980   TEST_ff_f (fdim, minus_infty, 9, 0);
7981   TEST_ff_f (fdim, minus_infty, -9, 0);
7982   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
7983   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
7984   TEST_ff_f (fdim, 9, plus_infty, 0);
7985   TEST_ff_f (fdim, -9, plus_infty, 0);
7986
7987   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
7988   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
7989   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
7990   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
7991   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
7992   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
7993   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
7994   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
7995   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
7996   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
7997
7998   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
7999
8000   END (fdim);
8001 }
8002
8003
8004 static void
8005 finite_test (void)
8006 {
8007   START (finite);
8008
8009   TEST_f_b (finite, 0, 1);
8010   TEST_f_b (finite, minus_zero, 1);
8011   TEST_f_b (finite, 10, 1);
8012   TEST_f_b (finite, min_subnorm_value, 1);
8013   TEST_f_b (finite, plus_infty, 0);
8014   TEST_f_b (finite, minus_infty, 0);
8015   TEST_f_b (finite, qnan_value, 0);
8016
8017   END (finite);
8018 }
8019
8020
8021 static void
8022 floor_test (void)
8023 {
8024   START (floor);
8025
8026   TEST_f_f (floor, 0.0, 0.0);
8027   TEST_f_f (floor, minus_zero, minus_zero);
8028   TEST_f_f (floor, plus_infty, plus_infty);
8029   TEST_f_f (floor, minus_infty, minus_infty);
8030   TEST_f_f (floor, qnan_value, qnan_value);
8031
8032   TEST_f_f (floor, M_PIl, 3.0);
8033   TEST_f_f (floor, -M_PIl, -4.0);
8034
8035   TEST_f_f (floor, 0.1, 0.0);
8036   TEST_f_f (floor, 0.25, 0.0);
8037   TEST_f_f (floor, 0.625, 0.0);
8038   TEST_f_f (floor, -0.1, -1.0);
8039   TEST_f_f (floor, -0.25, -1.0);
8040   TEST_f_f (floor, -0.625, -1.0);
8041
8042 #ifdef TEST_LDOUBLE
8043   /* The result can only be represented in long double.  */
8044   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
8045   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
8046   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
8047   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
8048   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
8049 # if LDBL_MANT_DIG > 100
8050   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
8051   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
8052   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
8053 # endif
8054
8055   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
8056   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
8057   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
8058   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
8059   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
8060 # if LDBL_MANT_DIG > 100
8061   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
8062   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
8063   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
8064 # endif
8065
8066   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
8067   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
8068   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
8069   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
8070   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
8071
8072 # if LDBL_MANT_DIG > 100
8073   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
8074   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
8075   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
8076   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
8077   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
8078   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
8079 # endif
8080
8081   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
8082   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
8083   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
8084   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
8085   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
8086
8087 # if LDBL_MANT_DIG > 100
8088   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
8089   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
8090   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
8091   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
8092   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
8093   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
8094 # endif
8095
8096   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
8097   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
8098   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
8099   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
8100   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
8101
8102   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
8103   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
8104   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
8105   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
8106   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
8107
8108   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
8109   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
8110   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
8111   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
8112   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
8113
8114   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
8115   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
8116 #endif
8117
8118   END (floor);
8119 }
8120
8121
8122 static void
8123 fma_test (void)
8124 {
8125   START (fma);
8126
8127   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
8128   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
8129   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
8130   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8131   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8132   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8133   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8134   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8135   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8136   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8137   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8138   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8139
8140   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8141   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8142   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8143   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8144   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8145   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8146   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8147   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
8148
8149   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
8150
8151   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
8152                          LDBL_MAX, DBL_MAX, FLT_MAX);
8153   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
8154   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
8155   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
8156   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
8157   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
8158   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
8159   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
8160   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
8161
8162   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8163   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8164   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8165   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8166   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8167   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8168   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8169   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8170   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8171   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8172   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8173   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8174   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8175   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8176   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8177   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8178   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8179   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8180   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8181   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8182   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8183   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8184   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8185   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8186
8187   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8188   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8189   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8190   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8191
8192   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8193   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8194   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8195   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8196   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8197   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8198   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8199   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8200
8201   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8202   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8203   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8204   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8205   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8206   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8207   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8208   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8209
8210 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8211   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
8212   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
8213   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
8214   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
8215   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
8216   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
8217   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
8218   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8219   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8220   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8221   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8222   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8223   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8224   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8225   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8226   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8227   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8228   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8229   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8230   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8231   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8232   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8233   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8234   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8235   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8236   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8237   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8238   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8239   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8240   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8241   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8242   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8243   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8244   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8245   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8246   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8247   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8248   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8249   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8250   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8251   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8252   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8253   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8254 #endif
8255 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8256   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
8257   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
8258   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
8259   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
8260   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
8261   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
8262   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
8263   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
8264   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
8265   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
8266   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
8267   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
8268   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
8269   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
8270   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
8271   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
8272   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
8273   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
8274   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
8275   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
8276   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8277   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8278   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8279   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8280   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8281   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8282   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8283   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8284   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8285   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8286   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8287   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8288   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8289   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8290   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8291   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8292   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8293   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8294   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8295   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8296   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8297   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8298   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8299   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8300   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8301   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8302   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8303   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8304   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8305   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8306   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8307   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8308   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8309   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8310   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8311   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8312 #endif
8313 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8314   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
8315   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
8316   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
8317   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
8318   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
8319   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
8320   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8321   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8322   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8323   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8324   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8325   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8326   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8327   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8328   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8329   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8330   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8331   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8332   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8333   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8334   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8335   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8336   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8337   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8338   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8339   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8340   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8341   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8342   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8343   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8344   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8345   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8346   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8347   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8348   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8349   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8350   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8351   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8352   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8353   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8354   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8355   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8356 #endif
8357 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8358   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
8359   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
8360   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
8361   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
8362   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
8363   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
8364   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
8365   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
8366   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
8367   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
8368   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
8369   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
8370   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
8371   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8372   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8373   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8374   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8375   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8376   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8377   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8378   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8379   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8380   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8381   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8382   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8383   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8384   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8385   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8386   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8387   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8388   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8389   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8390   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8391   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8392   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8393   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8394   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8395   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8396   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8397   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8398   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8399   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8400   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8401   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8402   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8403   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8404   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8405   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8406   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8407 #endif
8408
8409   END (fma);
8410 }
8411
8412
8413 static void
8414 fma_test_towardzero (void)
8415 {
8416   int save_round_mode;
8417   START (fma_towardzero);
8418
8419   save_round_mode = fegetround ();
8420
8421   if (!fesetround (FE_TOWARDZERO))
8422     {
8423       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8424       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8425       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8426       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8427       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8428       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8429       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8430       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8431       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8432       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8433       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8434       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8435       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8436       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8437       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8438       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8439       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8440       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8441       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8442       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8443       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8444       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8445       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8446       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8447
8448       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8449       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8450       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8451       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8452
8453       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8454       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8455       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8456       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8457       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8458       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8459       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8460       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8461
8462 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8463       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8464       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8465       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8466       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8467       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8468       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8469       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8470       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8471 #endif
8472
8473 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8474       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8475       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8476       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8477       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8478       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8479       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8480       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8481       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8482       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8483       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8484       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8485       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8486       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8487       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8488       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8489       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8490       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8491       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8492       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8493       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8494       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8495       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8496       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8497       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8498       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8499       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8500       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8501       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8502       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8503       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8504       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8505       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8506       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8507       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8508       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8509       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8510 #endif
8511 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8512       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8513       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8514       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8515       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8516       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8517       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8518       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8519       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8520       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8521       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8522       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8523       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8524       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8525       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8526       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8527       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8528       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8529       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8530       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8531       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8532       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8533       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8534       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8535       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8536       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8537       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8538       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8539       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8540       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8541       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8542       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8543       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8544       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8545       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8546       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8547       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8548 #endif
8549 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8550       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8551       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8552       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8553       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8554       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8555       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8556       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8557       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8558       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8559       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8560       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8561       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8562       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8563       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8564       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8565       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8566       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8567       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8568       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8569       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8570       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8571       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8572       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8573       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8574       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8575       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8576       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8577       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8578       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8579       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8580       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8581       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8582       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8583       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8584       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8585       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8586 #endif
8587 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8588       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8589       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8590       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8591       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8592       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8593       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8594       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8595       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8596       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8597       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8598       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8599       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8600       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8601       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8602       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8603       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8604       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8605       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8606       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8607       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8608       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8609       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8610       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8611       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8612       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8613       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8614       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8615       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8616       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8617       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8618       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8619       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8620       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8621       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8622       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8623       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8624 #endif
8625     }
8626
8627   fesetround (save_round_mode);
8628
8629   END (fma_towardzero);
8630 }
8631
8632
8633 static void
8634 fma_test_downward (void)
8635 {
8636   int save_round_mode;
8637   START (fma_downward);
8638
8639   save_round_mode = fegetround ();
8640
8641   if (!fesetround (FE_DOWNWARD))
8642     {
8643       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8644       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
8645       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
8646       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8647       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
8648       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8649       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8650       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
8651       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8652       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
8653       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
8654       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8655       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
8656       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8657       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8658       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
8659       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8660       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
8661       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
8662       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8663       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
8664       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8665       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8666       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
8667
8668       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
8669       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
8670       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
8671       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
8672
8673       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8674       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8675       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8676       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8677       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8678       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8679       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8680       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8681
8682 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8683       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8684       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8685       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8686       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8687       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8688       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8689       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8690       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8691 #endif
8692
8693 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8694       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8695       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8696       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8697       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8698       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8699       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8700       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8701       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8702       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8703       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8704       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8705       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
8706       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8707       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8708       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8709       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
8710       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8711       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8712       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8713       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8714       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8715       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8716       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8717       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
8718       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8719       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8720       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8721       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8722       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8723       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8724       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8725       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
8726       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8727       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8728       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8729       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
8730 #endif
8731 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8732       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8733       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8734       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8735       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8736       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8737       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8738       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8739       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8740       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8741       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8742       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8743       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
8744       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8745       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8746       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8747       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
8748       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8749       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8750       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8751       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8752       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8753       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8754       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8755       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
8756       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8757       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8758       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8759       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8760       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8761       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8762       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8763       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
8764       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8765       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8766       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8767       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
8768 #endif
8769 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8770       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8771       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8772       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8773       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8774       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8775       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8776       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8777       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8778       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8779       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8780       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8781       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
8782       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8783       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8784       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8785       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
8786       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8787       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8788       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8789       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8790       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8791       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8792       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8793       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
8794       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8795       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8796       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8797       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8798       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8799       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8800       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8801       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
8802       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8803       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8804       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8805       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
8806 #endif
8807 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8808       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8809       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8810       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8811       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8812       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8813       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8814       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8815       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8816       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8817       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8818       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8819       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8820       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8821       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8822       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8823       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
8824       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8825       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8826       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8827       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8828       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8829       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8830       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8831       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
8832       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8833       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8834       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8835       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8836       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8837       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8838       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8839       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8840       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8841       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8842       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8843       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
8844 #endif
8845     }
8846
8847   fesetround (save_round_mode);
8848
8849   END (fma_downward);
8850 }
8851
8852
8853 static void
8854 fma_test_upward (void)
8855 {
8856   int save_round_mode;
8857   START (fma_upward);
8858
8859   save_round_mode = fegetround ();
8860
8861   if (!fesetround (FE_UPWARD))
8862     {
8863       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8864       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8865       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8866       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8867       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8868       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8869       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8870       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8871       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8872       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8873       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8874       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8875       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8876       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8877       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8878       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8879       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8880       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8881       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8882       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8883       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8884       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8885       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8886       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8887
8888       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8889       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8890       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8891       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8892
8893       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8894       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8895       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8896       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8897       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8898       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8899       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8900       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8901
8902 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8903       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8904       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8905       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8906       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8907       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8908       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8909       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8910       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8911 #endif
8912
8913 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8914       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8915       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8916       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8917       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8918       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8919       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8920       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8921       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8922       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
8923       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8924       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8925       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8926       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
8927       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8928       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8929       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8930       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8931       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8932       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8933       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8934       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
8935       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8936       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8937       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8938       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8939       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8940       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8941       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8942       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
8943       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8944       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8945       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8946       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
8947       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8948       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8949       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8950 #endif
8951 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8952       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8953       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8954       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8955       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8956       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8957       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8958       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8959       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8960       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
8961       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8962       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8963       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8964       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
8965       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8966       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8967       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8968       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8969       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8970       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8971       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8972       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
8973       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8974       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8975       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8976       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8977       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8978       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8979       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8980       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
8981       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8982       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8983       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8984       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
8985       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8986       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8987       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8988 #endif
8989 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8990       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8991       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8992       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8993       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8994       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8995       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8996       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8997       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8998       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
8999       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
9000       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
9001       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
9002       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
9003       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9004       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9005       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
9006       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9007       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9008       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
9009       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9010       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
9011       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
9012       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
9013       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
9014       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
9015       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
9016       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
9017       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
9018       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
9019       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
9020       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
9021       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
9022       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
9023       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
9024       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
9025       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
9026 #endif
9027 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
9028       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
9029       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
9030       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9031       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9032       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9033       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9034       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9035       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9036       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
9037       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
9038       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
9039       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
9040       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
9041       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9042       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9043       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
9044       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9045       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9046       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9047       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9048       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
9049       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
9050       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
9051       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
9052       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
9053       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
9054       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
9055       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
9056       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
9057       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
9058       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
9059       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
9060       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
9061       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
9062       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
9063       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
9064 #endif
9065     }
9066
9067   fesetround (save_round_mode);
9068
9069   END (fma_upward);
9070 }
9071
9072
9073 static void
9074 fmax_test (void)
9075 {
9076   START (fmax);
9077
9078   TEST_ff_f (fmax, 0, 0, 0);
9079   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
9080   TEST_ff_f (fmax, 9, 0, 9);
9081   TEST_ff_f (fmax, 0, 9, 9);
9082   TEST_ff_f (fmax, -9, 0, 0);
9083   TEST_ff_f (fmax, 0, -9, 0);
9084
9085   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
9086   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
9087   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
9088   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
9089
9090   TEST_ff_f (fmax, minus_infty, 9, 9);
9091   TEST_ff_f (fmax, minus_infty, -9, -9);
9092   TEST_ff_f (fmax, 9, minus_infty, 9);
9093   TEST_ff_f (fmax, -9, minus_infty, -9);
9094
9095   TEST_ff_f (fmax, 0, qnan_value, 0);
9096   TEST_ff_f (fmax, 9, qnan_value, 9);
9097   TEST_ff_f (fmax, -9, qnan_value, -9);
9098   TEST_ff_f (fmax, qnan_value, 0, 0);
9099   TEST_ff_f (fmax, qnan_value, 9, 9);
9100   TEST_ff_f (fmax, qnan_value, -9, -9);
9101   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
9102   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
9103   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
9104   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
9105   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
9106
9107   END (fmax);
9108 }
9109
9110
9111 static void
9112 fmin_test (void)
9113 {
9114   START (fmin);
9115
9116   TEST_ff_f (fmin, 0, 0, 0);
9117   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
9118   TEST_ff_f (fmin, 9, 0, 0);
9119   TEST_ff_f (fmin, 0, 9, 0);
9120   TEST_ff_f (fmin, -9, 0, -9);
9121   TEST_ff_f (fmin, 0, -9, -9);
9122
9123   TEST_ff_f (fmin, plus_infty, 9, 9);
9124   TEST_ff_f (fmin, 9, plus_infty, 9);
9125   TEST_ff_f (fmin, plus_infty, -9, -9);
9126   TEST_ff_f (fmin, -9, plus_infty, -9);
9127   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
9128   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
9129   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
9130   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
9131
9132   TEST_ff_f (fmin, 0, qnan_value, 0);
9133   TEST_ff_f (fmin, 9, qnan_value, 9);
9134   TEST_ff_f (fmin, -9, qnan_value, -9);
9135   TEST_ff_f (fmin, qnan_value, 0, 0);
9136   TEST_ff_f (fmin, qnan_value, 9, 9);
9137   TEST_ff_f (fmin, qnan_value, -9, -9);
9138   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
9139   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
9140   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
9141   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
9142   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
9143
9144   END (fmin);
9145 }
9146
9147
9148 static void
9149 fmod_test (void)
9150 {
9151   errno = 0;
9152   FUNC(fmod) (6.5, 2.3L);
9153   if (errno == ENOSYS)
9154     /* Function not implemented.  */
9155     return;
9156
9157   START (fmod);
9158
9159   /* fmod (+0, y) == +0 for y != 0.  */
9160   TEST_ff_f (fmod, 0, 3, 0);
9161
9162   /* fmod (-0, y) == -0 for y != 0.  */
9163   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
9164
9165   /* fmod (+inf, y) == qNaN plus invalid exception.  */
9166   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9167   /* fmod (-inf, y) == qNaN plus invalid exception.  */
9168   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9169   /* fmod (x, +0) == qNaN plus invalid exception.  */
9170   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9171   /* fmod (x, -0) == qNaN plus invalid exception.  */
9172   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
9173
9174   /* fmod (x, +inf) == x for x not infinite.  */
9175   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
9176   /* fmod (x, -inf) == x for x not infinite.  */
9177   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
9178
9179   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
9180
9181   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
9182   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
9183   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
9184   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
9185
9186   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
9187 #ifndef TEST_FLOAT
9188   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
9189 #endif
9190 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
9191   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
9192 #endif
9193
9194   END (fmod);
9195 }
9196
9197
9198 static void
9199 fpclassify_test (void)
9200 {
9201   START (fpclassify);
9202
9203   TEST_f_i (fpclassify, qnan_value, FP_NAN);
9204   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
9205   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
9206   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
9207   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
9208   TEST_f_i (fpclassify, 1000, FP_NORMAL);
9209   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
9210
9211   END (fpclassify);
9212 }
9213
9214
9215 static void
9216 frexp_test (void)
9217 {
9218   int x;
9219
9220   START (frexp);
9221
9222   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
9223   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
9224   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
9225
9226   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
9227   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
9228
9229   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
9230   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
9231
9232   END (frexp);
9233 }
9234
9235
9236 static void
9237 gamma_test (void)
9238 {
9239   errno = 0;
9240   FUNC(gamma) (1);
9241
9242   if (errno == ENOSYS)
9243     /* Function not implemented.  */
9244     return;
9245
9246   START (gamma);
9247
9248   TEST_f_f1 (gamma, plus_infty, plus_infty, 1);
9249   TEST_f_f1 (gamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9250   TEST_f_f1 (gamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9251   TEST_f_f1 (gamma, minus_infty, plus_infty, IGNORE);
9252   TEST_f_f1 (gamma, qnan_value, qnan_value, IGNORE);
9253
9254   TEST_f_f1 (gamma, 1, 0, 1);
9255   TEST_f_f1 (gamma, 3, M_LN2l, 1);
9256
9257   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
9258   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9259
9260   END (gamma);
9261 }
9262
9263 static void
9264 hypot_test (void)
9265 {
9266   errno = 0;
9267   FUNC(hypot) (0.7L, 12.4L);
9268   if (errno == ENOSYS)
9269     /* Function not implemented.  */
9270     return;
9271
9272   START (hypot);
9273
9274   TEST_ff_f (hypot, plus_infty, 1, plus_infty);
9275   TEST_ff_f (hypot, minus_infty, 1, plus_infty);
9276
9277 #ifndef TEST_INLINE
9278   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
9279   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
9280   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
9281   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
9282 #endif
9283
9284   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
9285
9286   /* hypot (x,y) == hypot (+-x, +-y)  */
9287   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
9288   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
9289   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
9290   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
9291   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
9292   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
9293   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
9294   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
9295
9296   /*  hypot (x,0) == fabs (x)  */
9297   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
9298   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
9299   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
9300
9301   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
9302
9303   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
9304   TEST_ff_f (hypot, 0x1p+0L, 0x1.fp-129L, 0x1p+0L);
9305 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
9306   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
9307 #endif
9308
9309 #if !(defined TEST_FLOAT && defined TEST_INLINE)
9310   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
9311   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
9312 #endif
9313
9314 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
9315   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
9316   TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L);
9317 #endif
9318
9319 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
9320   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
9321 #endif
9322
9323   END (hypot);
9324 }
9325
9326
9327 static void
9328 ilogb_test (void)
9329 {
9330   START (ilogb);
9331
9332   TEST_f_i (ilogb, 1, 0);
9333   TEST_f_i (ilogb, M_El, 1);
9334   TEST_f_i (ilogb, 1024, 10);
9335   TEST_f_i (ilogb, -2000, 10);
9336
9337   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
9338   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION|ERRNO_EDOM);
9339   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
9340   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION|ERRNO_EDOM);
9341   /* ilogb (inf) == INT_MAX plus invalid exception  */
9342   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9343   /* ilogb (-inf) == INT_MAX plus invalid exception  */
9344   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9345
9346   END (ilogb);
9347 }
9348
9349 static void
9350 isfinite_test (void)
9351 {
9352   START (isfinite);
9353
9354   TEST_f_b (isfinite, 0, 1);
9355   TEST_f_b (isfinite, minus_zero, 1);
9356   TEST_f_b (isfinite, 10, 1);
9357   TEST_f_b (isfinite, min_subnorm_value, 1);
9358   TEST_f_b (isfinite, plus_infty, 0);
9359   TEST_f_b (isfinite, minus_infty, 0);
9360   TEST_f_b (isfinite, qnan_value, 0);
9361
9362   END (isfinite);
9363 }
9364
9365 static void
9366 isgreater_test (void)
9367 {
9368   START (isgreater);
9369
9370   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
9371   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
9372   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
9373   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
9374   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
9375   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
9376   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
9377   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
9378   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
9379   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
9380   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
9381   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
9382   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
9383   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
9384   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
9385   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
9386
9387   END (isgreater);
9388 }
9389
9390 static void
9391 isgreaterequal_test (void)
9392 {
9393   START (isgreaterequal);
9394
9395   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
9396   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
9397   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
9398   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
9399   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
9400   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
9401   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
9402   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
9403   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
9404   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
9405   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
9406   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
9407   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
9408   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
9409   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
9410   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
9411
9412   END (isgreaterequal);
9413 }
9414
9415 static void
9416 isinf_test (void)
9417 {
9418   START (isinf);
9419
9420   TEST_f_b (isinf, 0, 0);
9421   TEST_f_b (isinf, minus_zero, 0);
9422   TEST_f_b (isinf, 10, 0);
9423   TEST_f_b (isinf, min_subnorm_value, 0);
9424   TEST_f_b (isinf, plus_infty, 1);
9425   TEST_f_b (isinf, minus_infty, 1);
9426   TEST_f_b (isinf, qnan_value, 0);
9427
9428   END (isinf);
9429 }
9430
9431 static void
9432 isless_test (void)
9433 {
9434   START (isless);
9435
9436   TEST_ff_i (isless, minus_zero, minus_zero, 0);
9437   TEST_ff_i (isless, minus_zero, plus_zero, 0);
9438   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
9439   TEST_ff_i (isless, minus_zero, qnan_value, 0);
9440   TEST_ff_i (isless, plus_zero, minus_zero, 0);
9441   TEST_ff_i (isless, plus_zero, plus_zero, 0);
9442   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
9443   TEST_ff_i (isless, plus_zero, qnan_value, 0);
9444   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
9445   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
9446   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
9447   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
9448   TEST_ff_i (isless, qnan_value, minus_zero, 0);
9449   TEST_ff_i (isless, qnan_value, plus_zero, 0);
9450   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
9451   TEST_ff_i (isless, qnan_value, qnan_value, 0);
9452
9453   END (isless);
9454 }
9455
9456 static void
9457 islessequal_test (void)
9458 {
9459   START (islessequal);
9460
9461   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
9462   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
9463   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
9464   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
9465   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
9466   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
9467   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
9468   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
9469   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
9470   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
9471   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
9472   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
9473   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
9474   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
9475   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
9476   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
9477
9478   END (islessequal);
9479 }
9480
9481 static void
9482 islessgreater_test (void)
9483 {
9484   START (islessgreater);
9485
9486   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
9487   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
9488   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
9489   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
9490   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
9491   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
9492   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
9493   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
9494   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
9495   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
9496   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
9497   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
9498   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
9499   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
9500   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
9501   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
9502
9503   END (islessgreater);
9504 }
9505
9506 static void
9507 isnan_test (void)
9508 {
9509   START (isnan);
9510
9511   TEST_f_b (isnan, 0, 0);
9512   TEST_f_b (isnan, minus_zero, 0);
9513   TEST_f_b (isnan, 10, 0);
9514   TEST_f_b (isnan, min_subnorm_value, 0);
9515   TEST_f_b (isnan, plus_infty, 0);
9516   TEST_f_b (isnan, minus_infty, 0);
9517   TEST_f_b (isnan, qnan_value, 1);
9518
9519   END (isnan);
9520 }
9521
9522 static void
9523 isnormal_test (void)
9524 {
9525   START (isnormal);
9526
9527   TEST_f_b (isnormal, 0, 0);
9528   TEST_f_b (isnormal, minus_zero, 0);
9529   TEST_f_b (isnormal, 10, 1);
9530   TEST_f_b (isnormal, min_subnorm_value, 0);
9531   TEST_f_b (isnormal, plus_infty, 0);
9532   TEST_f_b (isnormal, minus_infty, 0);
9533   TEST_f_b (isnormal, qnan_value, 0);
9534
9535   END (isnormal);
9536 }
9537
9538 static void
9539 issignaling_test (void)
9540 {
9541   START (issignaling);
9542
9543   TEST_f_b (issignaling, 0, 0);
9544   TEST_f_b (issignaling, minus_zero, 0);
9545   TEST_f_b (issignaling, 10, 0);
9546   TEST_f_b (issignaling, min_subnorm_value, 0);
9547   TEST_f_b (issignaling, plus_infty, 0);
9548   TEST_f_b (issignaling, minus_infty, 0);
9549   TEST_f_b (issignaling, qnan_value, 0);
9550
9551   END (issignaling);
9552 }
9553
9554 static void
9555 isunordered_test (void)
9556 {
9557   START (isunordered);
9558
9559   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
9560   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
9561   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
9562   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
9563   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
9564   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
9565   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
9566   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
9567   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
9568   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
9569   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
9570   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
9571   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
9572   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
9573   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
9574   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
9575
9576   END (isunordered);
9577 }
9578
9579 static void
9580 j0_test (void)
9581 {
9582   FLOAT s, c;
9583   errno = 0;
9584   FUNC (sincos) (0, &s, &c);
9585   if (errno == ENOSYS)
9586     /* Required function not implemented.  */
9587     return;
9588   FUNC(j0) (0);
9589   if (errno == ENOSYS)
9590     /* Function not implemented.  */
9591     return;
9592
9593   START (j0);
9594
9595   /* j0 is the Bessel function of the first kind of order 0 */
9596   TEST_f_f (j0, qnan_value, qnan_value);
9597   TEST_f_f (j0, plus_infty, 0);
9598   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
9599   TEST_f_f (j0, 0.0, 1.0);
9600   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
9601   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
9602   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
9603   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
9604   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
9605   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
9606   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
9607   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9608   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9609
9610   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
9611
9612 #ifndef TEST_FLOAT
9613   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
9614   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
9615 #endif
9616
9617 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9618   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
9619   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
9620 #endif
9621
9622   END (j0);
9623 }
9624
9625
9626 static void
9627 j1_test (void)
9628 {
9629   FLOAT s, c;
9630   errno = 0;
9631   FUNC (sincos) (0, &s, &c);
9632   if (errno == ENOSYS)
9633     /* Required function not implemented.  */
9634     return;
9635   FUNC(j1) (0);
9636   if (errno == ENOSYS)
9637     /* Function not implemented.  */
9638     return;
9639
9640   /* j1 is the Bessel function of the first kind of order 1 */
9641
9642   START (j1);
9643
9644   TEST_f_f (j1, qnan_value, qnan_value);
9645   TEST_f_f (j1, plus_infty, 0);
9646
9647   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
9648   TEST_f_f (j1, 0.0, 0.0);
9649   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
9650   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
9651   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
9652   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
9653   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
9654   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
9655   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
9656
9657   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
9658
9659 #ifndef TEST_FLOAT
9660   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
9661   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
9662 #endif
9663
9664 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9665   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
9666   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
9667 #endif
9668
9669   END (j1);
9670 }
9671
9672 static void
9673 jn_test (void)
9674 {
9675   FLOAT s, c;
9676   errno = 0;
9677   FUNC (sincos) (0, &s, &c);
9678   if (errno == ENOSYS)
9679     /* Required function not implemented.  */
9680     return;
9681   FUNC(jn) (1, 1);
9682   if (errno == ENOSYS)
9683     /* Function not implemented.  */
9684     return;
9685
9686   /* jn is the Bessel function of the first kind of order n.  */
9687   START (jn);
9688
9689   /* jn (0, x) == j0 (x)  */
9690   TEST_if_f (jn, 0, qnan_value, qnan_value);
9691   TEST_if_f (jn, 0, plus_infty, 0);
9692   TEST_if_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
9693   TEST_if_f (jn, 0, 0.0, 1.0);
9694   TEST_if_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
9695   TEST_if_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
9696   TEST_if_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
9697   TEST_if_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
9698   TEST_if_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
9699   TEST_if_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
9700   TEST_if_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
9701   TEST_if_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9702   TEST_if_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9703
9704   /* jn (1, x) == j1 (x)  */
9705   TEST_if_f (jn, 1, qnan_value, qnan_value);
9706   TEST_if_f (jn, 1, plus_infty, 0);
9707   TEST_if_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
9708   TEST_if_f (jn, 1, 0.0, 0.0);
9709   TEST_if_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
9710   TEST_if_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
9711   TEST_if_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
9712   TEST_if_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
9713   TEST_if_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
9714   TEST_if_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
9715   TEST_if_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
9716
9717   /* jn (3, x)  */
9718   TEST_if_f (jn, 3, qnan_value, qnan_value);
9719   TEST_if_f (jn, 3, plus_infty, 0);
9720
9721   TEST_if_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
9722   TEST_if_f (jn, 3, 0.0, 0.0);
9723   TEST_if_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
9724   TEST_if_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
9725   TEST_if_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
9726   TEST_if_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
9727   TEST_if_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
9728
9729   /*  jn (10, x)  */
9730   TEST_if_f (jn, 10, qnan_value, qnan_value);
9731   TEST_if_f (jn, 10, plus_infty, 0);
9732
9733   TEST_if_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
9734   TEST_if_f (jn, 10, 0.0, 0.0);
9735   TEST_if_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
9736   TEST_if_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
9737   TEST_if_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
9738   TEST_if_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
9739   TEST_if_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
9740
9741   /* BZ #11589 .*/
9742   TEST_if_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
9743   TEST_if_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
9744   TEST_if_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
9745   TEST_if_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
9746   TEST_if_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
9747   TEST_if_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
9748   TEST_if_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
9749   TEST_if_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
9750
9751   /* Bug 14155: spurious exception may occur.  */
9752   TEST_if_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
9753
9754   END (jn);
9755 }
9756
9757
9758 static void
9759 ldexp_test (void)
9760 {
9761   START (ldexp);
9762
9763   TEST_fi_f (ldexp, 0, 0, 0);
9764   TEST_fi_f (ldexp, minus_zero, 0, minus_zero);
9765
9766   TEST_fi_f (ldexp, plus_infty, 1, plus_infty);
9767   TEST_fi_f (ldexp, minus_infty, 1, minus_infty);
9768   TEST_fi_f (ldexp, qnan_value, 1, qnan_value);
9769
9770   TEST_fi_f (ldexp, 0.8L, 4, 12.8L);
9771   TEST_fi_f (ldexp, -0.854375L, 5, -27.34L);
9772
9773   /* ldexp (x, 0) == x.  */
9774   TEST_fi_f (ldexp, 1.0L, 0L, 1.0L);
9775
9776   END (ldexp);
9777 }
9778
9779
9780 static void
9781 lgamma_test (void)
9782 {
9783   errno = 0;
9784   FUNC(lgamma) (0);
9785   if (errno == ENOSYS)
9786     /* Function not implemented.  */
9787     return;
9788
9789   START (lgamma);
9790
9791   TEST_f_f1 (lgamma, plus_infty, plus_infty, 1);
9792   TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9793   TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION);
9794   TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE);
9795
9796   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
9797   TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
9798   TEST_f_f1 (lgamma, minus_infty, plus_infty, IGNORE);
9799   TEST_f_f1 (lgamma, -max_value, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9800   TEST_f_f1 (lgamma, max_value, plus_infty, 1, OVERFLOW_EXCEPTION);
9801
9802   TEST_f_f1 (lgamma, 1, 0, 1);
9803
9804   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
9805
9806   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
9807   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9808   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
9809   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
9810
9811   END (lgamma);
9812 }
9813
9814
9815 static void
9816 lrint_test (void)
9817 {
9818   /* XXX this test is incomplete.  We need to have a way to specifiy
9819      the rounding method and test the critical cases.  So far, only
9820      unproblematic numbers are tested.  */
9821   /* TODO: missing +/-Inf as well as qNaN tests.  */
9822
9823   START (lrint);
9824
9825   TEST_f_l (lrint, 0.0, 0);
9826   TEST_f_l (lrint, minus_zero, 0);
9827   TEST_f_l (lrint, 0.2L, 0);
9828   TEST_f_l (lrint, -0.2L, 0);
9829
9830   TEST_f_l (lrint, 1.4L, 1);
9831   TEST_f_l (lrint, -1.4L, -1);
9832
9833   TEST_f_l (lrint, 8388600.3L, 8388600);
9834   TEST_f_l (lrint, -8388600.3L, -8388600);
9835
9836   TEST_f_l (lrint, 1071930.0008, 1071930);
9837 #ifndef TEST_FLOAT
9838   TEST_f_l (lrint, 1073741824.01, 1073741824);
9839 # if LONG_MAX > 281474976710656
9840   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9841 # endif
9842 #endif
9843
9844   END (lrint);
9845 }
9846
9847
9848 static void
9849 lrint_test_tonearest (void)
9850 {
9851   int save_round_mode;
9852   START (lrint_tonearest);
9853
9854   save_round_mode = fegetround ();
9855
9856   if (!fesetround (FE_TONEAREST))
9857     {
9858       TEST_f_l (lrint, 0.0, 0);
9859       TEST_f_l (lrint, minus_zero, 0);
9860       TEST_f_l (lrint, 0.2L, 0);
9861       TEST_f_l (lrint, -0.2L, 0);
9862       TEST_f_l (lrint, 0.5L, 0);
9863       TEST_f_l (lrint, -0.5L, 0);
9864       TEST_f_l (lrint, 0.8L, 1);
9865       TEST_f_l (lrint, -0.8L, -1);
9866
9867       TEST_f_l (lrint, 1.4L, 1);
9868       TEST_f_l (lrint, -1.4L, -1);
9869
9870       TEST_f_l (lrint, 8388600.3L, 8388600);
9871       TEST_f_l (lrint, -8388600.3L, -8388600);
9872
9873       TEST_f_l (lrint, 1071930.0008, 1071930);
9874 #ifndef TEST_FLOAT
9875       TEST_f_l (lrint, 1073741824.01, 1073741824);
9876 # if LONG_MAX > 281474976710656
9877       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9878 # endif
9879 #endif
9880     }
9881
9882   fesetround (save_round_mode);
9883
9884   END (lrint_tonearest);
9885 }
9886
9887
9888 static void
9889 lrint_test_towardzero (void)
9890 {
9891   int save_round_mode;
9892   START (lrint_towardzero);
9893
9894   save_round_mode = fegetround ();
9895
9896   if (!fesetround (FE_TOWARDZERO))
9897     {
9898       TEST_f_l (lrint, 0.0, 0);
9899       TEST_f_l (lrint, minus_zero, 0);
9900       TEST_f_l (lrint, 0.2L, 0);
9901       TEST_f_l (lrint, -0.2L, 0);
9902       TEST_f_l (lrint, 0.5L, 0);
9903       TEST_f_l (lrint, -0.5L, 0);
9904       TEST_f_l (lrint, 0.8L, 0);
9905       TEST_f_l (lrint, -0.8L, 0);
9906
9907       TEST_f_l (lrint, 1.4L, 1);
9908       TEST_f_l (lrint, -1.4L, -1);
9909
9910       TEST_f_l (lrint, 8388600.3L, 8388600);
9911       TEST_f_l (lrint, -8388600.3L, -8388600);
9912
9913       TEST_f_l (lrint, 1071930.0008, 1071930);
9914 #ifndef TEST_FLOAT
9915       TEST_f_l (lrint, 1073741824.01, 1073741824);
9916 # if LONG_MAX > 281474976710656
9917       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9918 # endif
9919 #endif
9920     }
9921
9922   fesetround (save_round_mode);
9923
9924   END (lrint_towardzero);
9925 }
9926
9927
9928 static void
9929 lrint_test_downward (void)
9930 {
9931   int save_round_mode;
9932   START (lrint_downward);
9933
9934   save_round_mode = fegetround ();
9935
9936   if (!fesetround (FE_DOWNWARD))
9937     {
9938       TEST_f_l (lrint, 0.0, 0);
9939       TEST_f_l (lrint, minus_zero, 0);
9940       TEST_f_l (lrint, 0.2L, 0);
9941       TEST_f_l (lrint, -0.2L, -1);
9942       TEST_f_l (lrint, 0.5L, 0);
9943       TEST_f_l (lrint, -0.5L, -1);
9944       TEST_f_l (lrint, 0.8L, 0);
9945       TEST_f_l (lrint, -0.8L, -1);
9946
9947       TEST_f_l (lrint, 1.4L, 1);
9948       TEST_f_l (lrint, -1.4L, -2);
9949
9950       TEST_f_l (lrint, 8388600.3L, 8388600);
9951       TEST_f_l (lrint, -8388600.3L, -8388601);
9952
9953       TEST_f_l (lrint, 1071930.0008, 1071930);
9954 #ifndef TEST_FLOAT
9955       TEST_f_l (lrint, 1073741824.01, 1073741824);
9956 # if LONG_MAX > 281474976710656
9957       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9958 # endif
9959 #endif
9960     }
9961
9962   fesetround (save_round_mode);
9963
9964   END (lrint_downward);
9965 }
9966
9967
9968 static void
9969 lrint_test_upward (void)
9970 {
9971   int save_round_mode;
9972   START (lrint_upward);
9973
9974   save_round_mode = fegetround ();
9975
9976   if (!fesetround (FE_UPWARD))
9977     {
9978       TEST_f_l (lrint, 0.0, 0);
9979       TEST_f_l (lrint, minus_zero, 0);
9980       TEST_f_l (lrint, 0.2L, 1);
9981       TEST_f_l (lrint, -0.2L, 0);
9982       TEST_f_l (lrint, 0.5L, 1);
9983       TEST_f_l (lrint, -0.5L, 0);
9984       TEST_f_l (lrint, 0.8L, 1);
9985       TEST_f_l (lrint, -0.8L, 0);
9986
9987       TEST_f_l (lrint, 1.4L, 2);
9988       TEST_f_l (lrint, -1.4L, -1);
9989
9990       TEST_f_l (lrint, 8388600.3L, 8388601);
9991       TEST_f_l (lrint, -8388600.3L, -8388600);
9992
9993 #ifndef TEST_FLOAT
9994       TEST_f_l (lrint, 1071930.0008, 1071931);
9995       TEST_f_l (lrint, 1073741824.01, 1073741825);
9996 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
9997       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9998 # endif
9999 #endif
10000     }
10001
10002   fesetround (save_round_mode);
10003
10004   END (lrint_upward);
10005 }
10006
10007
10008 static void
10009 llrint_test (void)
10010 {
10011   /* XXX this test is incomplete.  We need to have a way to specifiy
10012      the rounding method and test the critical cases.  So far, only
10013      unproblematic numbers are tested.  */
10014   /* TODO: missing +/-Inf as well as qNaN tests.  */
10015
10016   START (llrint);
10017
10018   TEST_f_L (llrint, 0.0, 0);
10019   TEST_f_L (llrint, minus_zero, 0);
10020   TEST_f_L (llrint, 0.2L, 0);
10021   TEST_f_L (llrint, -0.2L, 0);
10022
10023   TEST_f_L (llrint, 1.4L, 1);
10024   TEST_f_L (llrint, -1.4L, -1);
10025
10026   TEST_f_L (llrint, 8388600.3L, 8388600);
10027   TEST_f_L (llrint, -8388600.3L, -8388600);
10028
10029   TEST_f_l (llrint, 1071930.0008, 1071930);
10030
10031   /* Test boundary conditions.  */
10032   /* 0x1FFFFF */
10033   TEST_f_L (llrint, 2097151.0,2097151LL);
10034   /* 0x800000 */
10035   TEST_f_L (llrint, 8388608.0, 8388608LL);
10036   /* 0x1000000 */
10037   TEST_f_L (llrint, 16777216.0, 16777216LL);
10038   /* 0x20000000000 */
10039   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10040   /* 0x40000000000 */
10041   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10042   /* 0x1000000000000 */
10043   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10044   /* 0x10000000000000 */
10045   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10046   /* 0x10000080000000 */
10047   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10048   /* 0x20000000000000 */
10049   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10050   /* 0x80000000000000 */
10051   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10052   /* 0x100000000000000 */
10053   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10054 #ifdef TEST_LDOUBLE
10055   /* The input can only be represented in long double.  */
10056   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10057   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10058   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10059   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10060   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10061
10062   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10063   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10064   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10065   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10066   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10067
10068 # if LDBL_MANT_DIG > 100
10069   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10070   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10071   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10072   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10073   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10074   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10075
10076   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10077   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10078   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10079   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10080   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10081   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10082 #endif
10083
10084   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10085   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10086   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10087   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10088   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10089
10090   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10091   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10092   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10093   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10094   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10095
10096 # if LDBL_MANT_DIG > 100
10097   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10098   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10099   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10100   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10101   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10102   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10103
10104   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10105   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10106   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10107   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10108   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10109   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10110 #endif
10111
10112   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10113   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10114   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10115   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10116   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10117
10118   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10119   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10120   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10121   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10122   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10123
10124 # if LDBL_MANT_DIG > 100
10125   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10126   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10127   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10128   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10129   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10130   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10131   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10132   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10133   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10134   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10135   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10136   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10137 # endif
10138 #endif
10139
10140   END (llrint);
10141 }
10142
10143 static void
10144 llrint_test_tonearest (void)
10145 {
10146   int save_round_mode;
10147   START (llrint_tonearest);
10148
10149   save_round_mode = fegetround ();
10150
10151   if (!fesetround (FE_TONEAREST))
10152     {
10153       TEST_f_L (llrint, 0.0, 0);
10154       TEST_f_L (llrint, minus_zero, 0);
10155       TEST_f_L (llrint, 0.2L, 0);
10156       TEST_f_L (llrint, -0.2L, 0);
10157
10158       TEST_f_L (llrint, 1.4L, 1);
10159       TEST_f_L (llrint, -1.4L, -1);
10160
10161       TEST_f_L (llrint, 8388600.3L, 8388600);
10162       TEST_f_L (llrint, -8388600.3L, -8388600);
10163
10164       TEST_f_l (llrint, 1071930.0008, 1071930);
10165
10166       /* Test boundary conditions.  */
10167       /* 0x1FFFFF */
10168       TEST_f_L (llrint, 2097151.0,2097151LL);
10169       /* 0x800000 */
10170       TEST_f_L (llrint, 8388608.0, 8388608LL);
10171       /* 0x1000000 */
10172       TEST_f_L (llrint, 16777216.0, 16777216LL);
10173       /* 0x20000000000 */
10174       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10175       /* 0x40000000000 */
10176       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10177       /* 0x1000000000000 */
10178       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10179       /* 0x10000000000000 */
10180       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10181       /* 0x10000080000000 */
10182       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10183       /* 0x20000000000000 */
10184       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10185       /* 0x80000000000000 */
10186       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10187       /* 0x100000000000000 */
10188       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10189 #ifdef TEST_LDOUBLE
10190       /* The input can only be represented in long double.  */
10191       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10192       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10193       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10194       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10195       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10196
10197       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10198       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10199       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10200       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10201       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10202
10203 # if LDBL_MANT_DIG > 100
10204       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10205       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10206       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10207       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10208       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10209       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10210
10211       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10212       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10213       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10214       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10215       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10216       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10217 #endif
10218
10219       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10220       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10221       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10222       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10223       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10224
10225       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10226       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10227       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10228       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10229       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10230
10231 # if LDBL_MANT_DIG > 100
10232       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10233       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10234       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10235       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10236       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10237       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10238
10239       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10240       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10241       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10242       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10243       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10244       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10245 #endif
10246
10247       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10248       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10249       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10250       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10251       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10252
10253       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10254       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10255       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10256       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10257       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10258
10259 # if LDBL_MANT_DIG > 100
10260       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10261       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10262       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10263       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10264       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10265       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10266       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10267       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10268       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10269       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10270       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10271       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10272 # endif
10273 #endif
10274     }
10275
10276   fesetround (save_round_mode);
10277
10278   END (llrint_tonearest);
10279 }
10280
10281 static void
10282 llrint_test_towardzero (void)
10283 {
10284   int save_round_mode;
10285   START (llrint_towardzero);
10286
10287   save_round_mode = fegetround ();
10288
10289   if (!fesetround (FE_TOWARDZERO))
10290     {
10291       TEST_f_L (llrint, 0.0, 0);
10292       TEST_f_L (llrint, minus_zero, 0);
10293       TEST_f_L (llrint, 0.2L, 0);
10294       TEST_f_L (llrint, -0.2L, 0);
10295
10296       TEST_f_L (llrint, 1.4L, 1);
10297       TEST_f_L (llrint, -1.4L, -1);
10298
10299       TEST_f_L (llrint, 8388600.3L, 8388600);
10300       TEST_f_L (llrint, -8388600.3L, -8388600);
10301
10302       TEST_f_l (llrint, 1071930.0008, 1071930);
10303
10304       /* Test boundary conditions.  */
10305       /* 0x1FFFFF */
10306       TEST_f_L (llrint, 2097151.0,2097151LL);
10307       /* 0x800000 */
10308       TEST_f_L (llrint, 8388608.0, 8388608LL);
10309       /* 0x1000000 */
10310       TEST_f_L (llrint, 16777216.0, 16777216LL);
10311       /* 0x20000000000 */
10312       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10313       /* 0x40000000000 */
10314       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10315       /* 0x1000000000000 */
10316       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10317       /* 0x10000000000000 */
10318       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10319       /* 0x10000080000000 */
10320       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10321       /* 0x20000000000000 */
10322       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10323       /* 0x80000000000000 */
10324       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10325       /* 0x100000000000000 */
10326       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10327 #ifdef TEST_LDOUBLE
10328       /* The input can only be represented in long double.  */
10329       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10330       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10331       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10332       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10333       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10334
10335       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10336       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10337       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10338       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10339       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10340
10341 # if LDBL_MANT_DIG > 100
10342       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10343       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10344       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10345       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10346       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10347       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10348
10349       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10350       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10351       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10352       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10353       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10354       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10355 #endif
10356
10357       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10358       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10359       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10360       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10361       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10362
10363       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10364       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10365       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10366       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10367       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10368
10369 # if LDBL_MANT_DIG > 100
10370       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10371       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10372       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10373       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10374       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10375       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10376
10377       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10378       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10379       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10380       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10381       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10382       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10383 #endif
10384
10385       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10386       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10387       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10388       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10389       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10390
10391       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10392       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10393       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10394       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10395       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10396
10397 # if LDBL_MANT_DIG > 100
10398       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10399       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10400       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10401       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10402       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10403       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10404       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10405       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10406       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10407       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10408       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10409       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10410 # endif
10411 #endif
10412     }
10413
10414   fesetround (save_round_mode);
10415
10416   END (llrint_towardzero);
10417 }
10418
10419 static void
10420 llrint_test_downward (void)
10421 {
10422   int save_round_mode;
10423   START (llrint_downward);
10424
10425   save_round_mode = fegetround ();
10426
10427   if (!fesetround (FE_DOWNWARD))
10428     {
10429       TEST_f_L (llrint, 0.0, 0);
10430       TEST_f_L (llrint, minus_zero, 0);
10431       TEST_f_L (llrint, 0.2L, 0);
10432       TEST_f_L (llrint, -0.2L, -1);
10433
10434       TEST_f_L (llrint, 1.4L, 1);
10435       TEST_f_L (llrint, -1.4L, -2);
10436
10437       TEST_f_L (llrint, 8388600.3L, 8388600);
10438       TEST_f_L (llrint, -8388600.3L, -8388601);
10439
10440       TEST_f_l (llrint, 1071930.0008, 1071930);
10441
10442       /* Test boundary conditions.  */
10443       /* 0x1FFFFF */
10444       TEST_f_L (llrint, 2097151.0,2097151LL);
10445       /* 0x800000 */
10446       TEST_f_L (llrint, 8388608.0, 8388608LL);
10447       /* 0x1000000 */
10448       TEST_f_L (llrint, 16777216.0, 16777216LL);
10449       /* 0x20000000000 */
10450       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10451       /* 0x40000000000 */
10452       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10453       /* 0x1000000000000 */
10454       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10455       /* 0x10000000000000 */
10456       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10457       /* 0x10000080000000 */
10458       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10459       /* 0x20000000000000 */
10460       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10461       /* 0x80000000000000 */
10462       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10463       /* 0x100000000000000 */
10464       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10465 #ifdef TEST_LDOUBLE
10466       /* The input can only be represented in long double.  */
10467       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10468       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10469       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10470       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10471       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10472
10473       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10474       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10475       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10476       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10477       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10478       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10479
10480       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10481       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
10482       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
10483       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10484       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10485
10486       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
10487       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
10488       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
10489       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10490       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10491       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10492
10493       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10494       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10495       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10496       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10497       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10498
10499       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10500       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10501       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10502       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10503       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10504       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10505
10506       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10507       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
10508       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
10509       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10510       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10511
10512       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
10513       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
10514       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
10515       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10516       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10517       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10518
10519       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10520       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10521       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10522       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10523       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10524
10525       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10526       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
10527       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
10528       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10529       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10530
10531 # if LDBL_MANT_DIG > 100
10532       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10533       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10534       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10535       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10536       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10537       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
10538       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10539       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
10540       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10541       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10542       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10543       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10544 # endif
10545 #endif
10546     }
10547
10548   fesetround (save_round_mode);
10549
10550   END (llrint_downward);
10551 }
10552
10553 static void
10554 llrint_test_upward (void)
10555 {
10556   int save_round_mode;
10557   START (llrint_upward);
10558
10559   save_round_mode = fegetround ();
10560
10561   if (!fesetround (FE_UPWARD))
10562     {
10563       TEST_f_L (llrint, 0.0, 0);
10564       TEST_f_L (llrint, minus_zero, 0);
10565       TEST_f_L (llrint, 0.2L, 1);
10566       TEST_f_L (llrint, -0.2L, 0);
10567
10568       TEST_f_L (llrint, 1.4L, 2);
10569       TEST_f_L (llrint, -1.4L, -1);
10570
10571       TEST_f_L (llrint, 8388600.3L, 8388601);
10572       TEST_f_L (llrint, -8388600.3L, -8388600);
10573 #ifndef TEST_FLOAT
10574       TEST_f_l (llrint, 1071930.0008, 1071931);
10575 #endif
10576       /* Test boundary conditions.  */
10577       /* 0x1FFFFF */
10578       TEST_f_L (llrint, 2097151.0,2097151LL);
10579       /* 0x800000 */
10580       TEST_f_L (llrint, 8388608.0, 8388608LL);
10581       /* 0x1000000 */
10582       TEST_f_L (llrint, 16777216.0, 16777216LL);
10583       /* 0x20000000000 */
10584       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10585       /* 0x40000000000 */
10586       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10587       /* 0x1000000000000 */
10588       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10589       /* 0x10000000000000 */
10590       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10591       /* 0x10000080000000 */
10592       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10593       /* 0x20000000000000 */
10594       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10595       /* 0x80000000000000 */
10596       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10597       /* 0x100000000000000 */
10598       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10599 #ifdef TEST_LDOUBLE
10600       /* The input can only be represented in long double.  */
10601       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10602       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
10603       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
10604       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10605       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10606
10607       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
10608       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
10609       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
10610       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10611       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10612       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10613
10614       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10615       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10616       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10617       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10618       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10619
10620       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10621       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10622       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10623       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10624       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10625       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10626
10627       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10628       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
10629       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
10630       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10631       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10632
10633       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
10634       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
10635       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
10636       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10637       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10638       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10639
10640       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10641       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10642       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10643       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10644       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10645
10646       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10647       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10648       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10649       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10650       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10651       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10652
10653       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10654       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
10655       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
10656       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10657       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10658
10659       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10660       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10661       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10662       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10663       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10664
10665 # if LDBL_MANT_DIG > 100
10666       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10667       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10668       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10669       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10670       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
10671       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10672       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
10673       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10674       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10675       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10676       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10677       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10678 # endif
10679 #endif
10680     }
10681
10682   fesetround (save_round_mode);
10683
10684   END (llrint_upward);
10685 }
10686
10687
10688 static void
10689 log_test (void)
10690 {
10691   errno = 0;
10692   FUNC(log) (1);
10693   if (errno == ENOSYS)
10694     /* Function not implemented.  */
10695     return;
10696   START (log);
10697
10698   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10699   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10700
10701   TEST_f_f (log, 1, 0);
10702
10703   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
10704   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
10705   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
10706   TEST_f_f (log, plus_infty, plus_infty);
10707   TEST_f_f (log, qnan_value, qnan_value);
10708
10709   TEST_f_f (log, M_El, 1);
10710   TEST_f_f (log, 1.0 / M_El, -1);
10711   TEST_f_f (log, 2, M_LN2l);
10712   TEST_f_f (log, 10, M_LN10l);
10713   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
10714
10715   END (log);
10716 }
10717
10718
10719 static void
10720 log10_test (void)
10721 {
10722   errno = 0;
10723   FUNC(log10) (1);
10724   if (errno == ENOSYS)
10725     /* Function not implemented.  */
10726     return;
10727
10728   START (log10);
10729
10730   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10731   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10732
10733   TEST_f_f (log10, 1, 0);
10734
10735   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
10736   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
10737   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
10738   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
10739
10740   TEST_f_f (log10, plus_infty, plus_infty);
10741   TEST_f_f (log10, qnan_value, qnan_value);
10742
10743   TEST_f_f (log10, 0.1L, -1);
10744   TEST_f_f (log10, 10.0, 1);
10745   TEST_f_f (log10, 100.0, 2);
10746   TEST_f_f (log10, 10000.0, 4);
10747   TEST_f_f (log10, M_El, M_LOG10El);
10748   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
10749
10750   END (log10);
10751 }
10752
10753
10754 static void
10755 log1p_test (void)
10756 {
10757   errno = 0;
10758   FUNC(log1p) (0);
10759   if (errno == ENOSYS)
10760     /* Function not implemented.  */
10761     return;
10762
10763   START (log1p);
10764
10765   TEST_f_f (log1p, 0, 0);
10766   TEST_f_f (log1p, minus_zero, minus_zero);
10767
10768   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10769   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
10770   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
10771   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
10772
10773   TEST_f_f (log1p, plus_infty, plus_infty);
10774   TEST_f_f (log1p, qnan_value, qnan_value);
10775
10776   TEST_f_f (log1p, M_El - 1.0, 1);
10777
10778   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
10779   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
10780
10781   END (log1p);
10782 }
10783
10784
10785 static void
10786 log2_test (void)
10787 {
10788   errno = 0;
10789   FUNC(log2) (1);
10790   if (errno == ENOSYS)
10791     /* Function not implemented.  */
10792     return;
10793
10794   START (log2);
10795
10796   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10797   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10798
10799   TEST_f_f (log2, 1, 0);
10800
10801   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
10802   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
10803   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
10804
10805   TEST_f_f (log2, plus_infty, plus_infty);
10806   TEST_f_f (log2, qnan_value, qnan_value);
10807
10808   TEST_f_f (log2, M_El, M_LOG2El);
10809   TEST_f_f (log2, 2.0, 1);
10810   TEST_f_f (log2, 16.0, 4);
10811   TEST_f_f (log2, 256.0, 8);
10812   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
10813
10814   END (log2);
10815 }
10816
10817
10818 static void
10819 logb_test (void)
10820 {
10821   START (logb);
10822
10823   TEST_f_f (logb, plus_infty, plus_infty);
10824   TEST_f_f (logb, minus_infty, plus_infty);
10825
10826   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10827
10828   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10829   TEST_f_f (logb, qnan_value, qnan_value);
10830
10831   TEST_f_f (logb, 1, 0);
10832   TEST_f_f (logb, M_El, 1);
10833   TEST_f_f (logb, 1024, 10);
10834   TEST_f_f (logb, -2000, 10);
10835
10836   TEST_f_f (logb, 0x0.1p-127, -131);
10837   TEST_f_f (logb, 0x0.01p-127, -135);
10838   TEST_f_f (logb, 0x0.011p-127, -135);
10839 #ifndef TEST_FLOAT
10840   TEST_f_f (logb, 0x0.8p-1022, -1023);
10841   TEST_f_f (logb, 0x0.1p-1022, -1026);
10842   TEST_f_f (logb, 0x0.00111p-1022, -1034);
10843   TEST_f_f (logb, 0x0.00001p-1022, -1042);
10844   TEST_f_f (logb, 0x0.000011p-1022, -1042);
10845   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
10846 #endif
10847 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
10848   TEST_f_f (logb, 0x1p-16400L, -16400);
10849   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
10850 #endif
10851
10852   END (logb);
10853 }
10854
10855 static void
10856 logb_test_downward (void)
10857 {
10858   int save_round_mode;
10859   errno = 0;
10860
10861   FUNC(logb) (0);
10862   if (errno == ENOSYS)
10863     /* Function not implemented.  */
10864     return;
10865
10866   START (logb_downward);
10867
10868   save_round_mode = fegetround ();
10869
10870   if (!fesetround (FE_DOWNWARD))
10871     {
10872
10873       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
10874          should not return -0 from logb in any rounding mode.  PowerPC32 has
10875          failed with this test for power4 logb (and logbl on all PowerPC
10876          platforms) in the past due to instruction selection.  GCC PR 52775
10877          provides the availability of the fcfid insn in 32-bit mode which
10878          eliminates the use of fsub in this instance and prevents the negative
10879          signed 0.0.  */
10880
10881       /* BZ #887  */
10882       TEST_f_f (logb, 1.000e+0, plus_zero);
10883     }
10884
10885   fesetround (save_round_mode);
10886
10887   END (logb_downward);
10888 }
10889
10890 static void
10891 lround_test (void)
10892 {
10893   /* TODO: missing +/-Inf as well as qNaN tests.  */
10894
10895   START (lround);
10896
10897   TEST_f_l (lround, 0, 0);
10898   TEST_f_l (lround, minus_zero, 0);
10899   TEST_f_l (lround, 0.2L, 0.0);
10900   TEST_f_l (lround, -0.2L, 0);
10901   TEST_f_l (lround, 0.5, 1);
10902   TEST_f_l (lround, -0.5, -1);
10903   TEST_f_l (lround, 0.8L, 1);
10904   TEST_f_l (lround, -0.8L, -1);
10905   TEST_f_l (lround, 1.5, 2);
10906   TEST_f_l (lround, -1.5, -2);
10907   TEST_f_l (lround, 22514.5, 22515);
10908   TEST_f_l (lround, -22514.5, -22515);
10909   TEST_f_l (lround, 1071930.0008, 1071930);
10910 #ifndef TEST_FLOAT
10911   TEST_f_l (lround, 1073741824.01, 1073741824);
10912 # if LONG_MAX > 281474976710656
10913   TEST_f_l (lround, 281474976710656.025, 281474976710656);
10914   TEST_f_l (lround, 18014398509481974, 18014398509481974);
10915 # endif
10916   TEST_f_l (lround, 2097152.5, 2097153);
10917   TEST_f_l (lround, -2097152.5, -2097153);
10918   /* nextafter(0.5,-1)  */
10919   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
10920   /* nextafter(-0.5,1)  */
10921   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
10922 #else
10923   /* nextafter(0.5,-1)  */
10924   TEST_f_l (lround, 0x1.fffffp-2, 0);
10925   /* nextafter(-0.5,1)  */
10926   TEST_f_l (lround, -0x1.fffffp-2, 0);
10927   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
10928   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
10929 #endif
10930   END (lround);
10931 }
10932
10933
10934 static void
10935 llround_test (void)
10936 {
10937   /* TODO: missing +/-Inf as well as qNaN tests.  */
10938
10939   START (llround);
10940
10941   TEST_f_L (llround, 0, 0);
10942   TEST_f_L (llround, minus_zero, 0);
10943   TEST_f_L (llround, 0.2L, 0.0);
10944   TEST_f_L (llround, -0.2L, 0);
10945   TEST_f_L (llround, 0.5, 1);
10946   TEST_f_L (llround, -0.5, -1);
10947   TEST_f_L (llround, 0.8L, 1);
10948   TEST_f_L (llround, -0.8L, -1);
10949   TEST_f_L (llround, 1.5, 2);
10950   TEST_f_L (llround, -1.5, -2);
10951   TEST_f_L (llround, 22514.5, 22515);
10952   TEST_f_L (llround, -22514.5, -22515);
10953   TEST_f_l (llround, 1071930.0008, 1071930);
10954 #ifndef TEST_FLOAT
10955   TEST_f_L (llround, 2097152.5, 2097153);
10956   TEST_f_L (llround, -2097152.5, -2097153);
10957   TEST_f_L (llround, 34359738368.5, 34359738369ll);
10958   TEST_f_L (llround, -34359738368.5, -34359738369ll);
10959   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
10960 #endif
10961
10962   /* Test boundary conditions.  */
10963   /* 0x1FFFFF */
10964   TEST_f_L (llround, 2097151.0, 2097151LL);
10965   /* 0x800000 */
10966   TEST_f_L (llround, 8388608.0, 8388608LL);
10967   /* 0x1000000 */
10968   TEST_f_L (llround, 16777216.0, 16777216LL);
10969   /* 0x20000000000 */
10970   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
10971   /* 0x40000000000 */
10972   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
10973   /* 0x1000000000000 */
10974   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
10975   /* 0x10000000000000 */
10976   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
10977   /* 0x10000080000000 */
10978   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
10979   /* 0x20000000000000 */
10980   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
10981   /* 0x80000000000000 */
10982   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
10983   /* 0x100000000000000 */
10984   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
10985
10986 #ifndef TEST_FLOAT
10987   /* 0x100000000 */
10988   TEST_f_L (llround, 4294967295.5, 4294967296LL);
10989   /* 0x200000000 */
10990   TEST_f_L (llround, 8589934591.5, 8589934592LL);
10991
10992   /* nextafter(0.5,-1)  */
10993   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
10994   /* nextafter(-0.5,1)  */
10995   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
10996   /* On PowerPC an exponent of '52' is the largest incrementally
10997    * representable sequence of whole-numbers in the 'double' range.  We test
10998    * lround to make sure that a guard bit set during the lround operation
10999    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
11000    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
11001    * rightmost bit set.  */
11002   /* +-(2^52+1)  */
11003   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
11004   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
11005   /* +-(2^53-1): Input is the last (positive and negative) incrementally
11006    * representable whole-number in the 'double' range that might round
11007    * erroneously.  */
11008   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
11009   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
11010 #else
11011   /* nextafter(0.5,-1)  */
11012   TEST_f_L (llround, 0x1.fffffep-2, 0);
11013   /* nextafter(-0.5,1)  */
11014   TEST_f_L (llround, -0x1.fffffep-2, 0);
11015   /* As above, on PowerPC an exponent of '23' is the largest incrementally
11016    * representable sequence of whole-numbers in the 'float' range.
11017    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
11018   TEST_f_L (llround, 0x1.000002p+23,8388609);
11019   TEST_f_L (llround, -0x1.000002p+23,-8388609);
11020   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
11021   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
11022 #endif
11023
11024
11025 #ifdef TEST_LDOUBLE
11026   /* The input can only be represented in long double.  */
11027   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
11028   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
11029   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
11030   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
11031   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
11032
11033 # if LDBL_MANT_DIG > 100
11034   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
11035   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
11036   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
11037   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
11038   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
11039   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
11040
11041   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
11042   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
11043   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
11044   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
11045   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
11046   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
11047 # endif
11048
11049   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
11050   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
11051   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
11052   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
11053   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
11054
11055   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
11056   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
11057   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
11058   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
11059   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
11060
11061 # if LDBL_MANT_DIG > 100
11062   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
11063   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
11064   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
11065   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
11066   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
11067   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
11068
11069   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
11070   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
11071   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
11072   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
11073   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
11074   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
11075 # endif
11076
11077   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
11078   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
11079   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
11080   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
11081   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
11082
11083   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
11084   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
11085   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
11086   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
11087   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
11088
11089   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
11090   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
11091   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
11092   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
11093   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
11094
11095   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
11096   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
11097   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
11098   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
11099   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
11100   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
11101 #endif
11102
11103   END (llround);
11104 }
11105
11106 static void
11107 modf_test (void)
11108 {
11109   FLOAT x;
11110
11111   START (modf);
11112
11113   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
11114   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
11115   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
11116   TEST_fF_f1 (modf, 0, 0, 0);
11117   TEST_fF_f1 (modf, 1.5, 0.5, 1);
11118   TEST_fF_f1 (modf, 2.5, 0.5, 2);
11119   TEST_fF_f1 (modf, -2.5, -0.5, -2);
11120   TEST_fF_f1 (modf, 20, 0, 20);
11121   TEST_fF_f1 (modf, 21, 0, 21);
11122   TEST_fF_f1 (modf, 89.5, 0.5, 89);
11123
11124   END (modf);
11125 }
11126
11127
11128 static void
11129 nearbyint_test (void)
11130 {
11131   START (nearbyint);
11132
11133   TEST_f_f (nearbyint, 0.0, 0.0);
11134   TEST_f_f (nearbyint, minus_zero, minus_zero);
11135   TEST_f_f (nearbyint, plus_infty, plus_infty);
11136   TEST_f_f (nearbyint, minus_infty, minus_infty);
11137   TEST_f_f (nearbyint, qnan_value, qnan_value);
11138
11139   /* Subnormal values */
11140   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
11141   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
11142
11143   /* Default rounding mode is round to nearest.  */
11144   TEST_f_f (nearbyint, 0.5, 0.0);
11145   TEST_f_f (nearbyint, 1.5, 2.0);
11146   TEST_f_f (nearbyint, -0.5, minus_zero);
11147   TEST_f_f (nearbyint, -1.5, -2.0);
11148
11149   TEST_f_f (nearbyint, 262144.75, 262145.0);
11150   TEST_f_f (nearbyint, 262142.75, 262143.0);
11151   TEST_f_f (nearbyint, 524286.75, 524287.0);
11152   TEST_f_f (nearbyint, 524288.75, 524289.0);
11153
11154   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
11155   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
11156   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
11157   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
11158   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
11159   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
11160   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
11161   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
11162   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
11163   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
11164 #ifndef TEST_FLOAT
11165   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
11166   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
11167   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
11168   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
11169   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
11170   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
11171   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
11172   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
11173   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
11174   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
11175 #endif
11176
11177   END (nearbyint);
11178 }
11179
11180 static void
11181 nextafter_test (void)
11182 {
11183
11184   START (nextafter);
11185
11186   TEST_ff_f (nextafter, 0, 0, 0);
11187   TEST_ff_f (nextafter, minus_zero, 0, 0);
11188   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
11189   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
11190
11191   TEST_ff_f (nextafter, 9, 9, 9);
11192   TEST_ff_f (nextafter, -9, -9, -9);
11193   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
11194   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
11195
11196   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
11197   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
11198   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
11199
11200   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
11201                          LDBL_MAX, DBL_MAX, FLT_MAX);
11202   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
11203   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
11204
11205 #ifdef TEST_LDOUBLE
11206   // XXX Enable once gcc is fixed.
11207   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
11208 #endif
11209
11210   /* XXX We need the hexadecimal FP number representation here for further
11211      tests.  */
11212
11213   END (nextafter);
11214 }
11215
11216
11217 static void
11218 nexttoward_test (void)
11219 {
11220   START (nexttoward);
11221   TEST_ff_f (nexttoward, 0, 0, 0);
11222   TEST_ff_f (nexttoward, minus_zero, 0, 0);
11223   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
11224   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
11225
11226   TEST_ff_f (nexttoward, 9, 9, 9);
11227   TEST_ff_f (nexttoward, -9, -9, -9);
11228   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
11229   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
11230
11231   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
11232   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
11233   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
11234
11235 #ifdef TEST_FLOAT
11236   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
11237   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
11238   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
11239   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
11240   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
11241   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
11242   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
11243   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
11244   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
11245   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
11246   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
11247   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
11248   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
11249 # if LDBL_MANT_DIG >= 64
11250   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
11251   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
11252   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
11253   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
11254 # endif
11255 # if LDBL_MANT_DIG >= 106
11256   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
11257   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
11258   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
11259   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
11260 # endif
11261 # if LDBL_MANT_DIG >= 113
11262   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
11263   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
11264   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
11265   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
11266 # endif
11267 #endif
11268 #ifdef TEST_DOUBLE
11269   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
11270   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
11271   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
11272   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
11273   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
11274   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
11275   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
11276   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
11277   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
11278   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
11279   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
11280   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
11281   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
11282   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
11283 # if LDBL_MANT_DIG >= 64
11284   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
11285   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
11286   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
11287   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
11288 # endif
11289 # if LDBL_MANT_DIG >= 106
11290   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
11291   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
11292   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
11293   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
11294 # endif
11295 # if LDBL_MANT_DIG >= 113
11296   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
11297   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
11298   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
11299   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
11300 # endif
11301 #endif
11302
11303   END (nexttoward);
11304 }
11305
11306
11307 static void
11308 pow_test (void)
11309 {
11310
11311   errno = 0;
11312   FUNC(pow) (0, 0);
11313   if (errno == ENOSYS)
11314     /* Function not implemented.  */
11315     return;
11316
11317   START (pow);
11318
11319   TEST_ff_f (pow, 0, 0, 1);
11320   TEST_ff_f (pow, 0, minus_zero, 1);
11321   TEST_ff_f (pow, minus_zero, 0, 1);
11322   TEST_ff_f (pow, minus_zero, minus_zero, 1);
11323
11324   TEST_ff_f (pow, 10, 0, 1);
11325   TEST_ff_f (pow, 10, minus_zero, 1);
11326   TEST_ff_f (pow, -10, 0, 1);
11327   TEST_ff_f (pow, -10, minus_zero, 1);
11328
11329   TEST_ff_f (pow, qnan_value, 0, 1);
11330   TEST_ff_f (pow, qnan_value, minus_zero, 1);
11331
11332
11333 #ifndef TEST_INLINE
11334   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
11335   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
11336   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
11337   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
11338
11339   TEST_ff_f (pow, 0.9L, plus_infty, 0);
11340   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
11341   TEST_ff_f (pow, -0.9L, plus_infty, 0);
11342   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
11343
11344   TEST_ff_f (pow, 1.1L, minus_infty, 0);
11345   TEST_ff_f (pow, plus_infty, minus_infty, 0);
11346   TEST_ff_f (pow, -1.1L, minus_infty, 0);
11347   TEST_ff_f (pow, minus_infty, minus_infty, 0);
11348
11349   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
11350   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
11351   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
11352   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
11353
11354   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
11355   TEST_ff_f (pow, plus_infty, 1, plus_infty);
11356   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
11357   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
11358
11359   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
11360   TEST_ff_f (pow, plus_infty, -1, 0);
11361   TEST_ff_f (pow, plus_infty, -1e7L, 0);
11362   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
11363
11364   TEST_ff_f (pow, minus_infty, 1, minus_infty);
11365   TEST_ff_f (pow, minus_infty, 11, minus_infty);
11366   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
11367
11368   TEST_ff_f (pow, minus_infty, 2, plus_infty);
11369   TEST_ff_f (pow, minus_infty, 12, plus_infty);
11370   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
11371   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
11372   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
11373   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
11374   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
11375   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
11376
11377   TEST_ff_f (pow, minus_infty, -1, minus_zero);
11378   TEST_ff_f (pow, minus_infty, -11, minus_zero);
11379   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
11380
11381   TEST_ff_f (pow, minus_infty, -2, 0);
11382   TEST_ff_f (pow, minus_infty, -12, 0);
11383   TEST_ff_f (pow, minus_infty, -1002, 0);
11384   TEST_ff_f (pow, minus_infty, -0.1L, 0);
11385   TEST_ff_f (pow, minus_infty, -1.1L, 0);
11386   TEST_ff_f (pow, minus_infty, -11.1L, 0);
11387   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
11388   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
11389 #endif
11390
11391   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
11392   TEST_ff_f (pow, 0, qnan_value, qnan_value);
11393   TEST_ff_f (pow, 1, qnan_value, 1);
11394   TEST_ff_f (pow, -1, qnan_value, qnan_value);
11395   TEST_ff_f (pow, qnan_value, 1, qnan_value);
11396   TEST_ff_f (pow, qnan_value, -1, qnan_value);
11397
11398   /* pow (x, qNaN) == qNaN.  */
11399   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
11400   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
11401   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
11402   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
11403   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
11404
11405   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
11406   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
11407   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
11408   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
11409   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
11410   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
11411   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
11412   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
11413
11414   TEST_ff_f (pow, 1, plus_infty, 1);
11415   TEST_ff_f (pow, -1, plus_infty, 1);
11416   TEST_ff_f (pow, 1, minus_infty, 1);
11417   TEST_ff_f (pow, -1, minus_infty, 1);
11418   TEST_ff_f (pow, 1, 1, 1);
11419   TEST_ff_f (pow, 1, -1, 1);
11420   TEST_ff_f (pow, 1, 1.25, 1);
11421   TEST_ff_f (pow, 1, -1.25, 1);
11422   TEST_ff_f (pow, 1, 0x1p62L, 1);
11423   TEST_ff_f (pow, 1, 0x1p63L, 1);
11424   TEST_ff_f (pow, 1, 0x1p64L, 1);
11425   TEST_ff_f (pow, 1, 0x1p72L, 1);
11426   TEST_ff_f (pow, 1, min_subnorm_value, 1);
11427   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
11428
11429   /* pow (x, +-0) == 1.  */
11430   TEST_ff_f (pow, plus_infty, 0, 1);
11431   TEST_ff_f (pow, plus_infty, minus_zero, 1);
11432   TEST_ff_f (pow, minus_infty, 0, 1);
11433   TEST_ff_f (pow, minus_infty, minus_zero, 1);
11434   TEST_ff_f (pow, 32.75L, 0, 1);
11435   TEST_ff_f (pow, 32.75L, minus_zero, 1);
11436   TEST_ff_f (pow, -32.75L, 0, 1);
11437   TEST_ff_f (pow, -32.75L, minus_zero, 1);
11438   TEST_ff_f (pow, 0x1p72L, 0, 1);
11439   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
11440   TEST_ff_f (pow, 0x1p-72L, 0, 1);
11441   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
11442
11443   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11444   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11445   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11446   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11447   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11448   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11449   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11450   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11451
11452   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11453   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11454   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11455 #ifndef TEST_FLOAT
11456   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11457 #endif
11458 #ifdef TEST_LDOUBLE
11459 # if LDBL_MANT_DIG >= 64
11460   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11461 # endif
11462 # if LDBL_MANT_DIG >= 106
11463   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11464 # endif
11465 # if LDBL_MANT_DIG >= 113
11466   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11467 # endif
11468 #endif
11469   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11470   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11471   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11472   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11473 #ifndef TEST_FLOAT
11474   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11475   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11476 #endif
11477 #ifdef TEST_LDOUBLE
11478 # if LDBL_MANT_DIG >= 64
11479   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11480   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11481 # endif
11482 # if LDBL_MANT_DIG >= 106
11483   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11484   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11485 # endif
11486 # if LDBL_MANT_DIG >= 113
11487   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11488   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11489 # endif
11490 #endif
11491
11492   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11493   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11494   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11495   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11496   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11497   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11498   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11499   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11500   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11501   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11502   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11503   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11504
11505   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
11506   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
11507   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11508   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
11509
11510   TEST_ff_f (pow, 0, 1, 0);
11511   TEST_ff_f (pow, 0, 11, 0);
11512
11513   TEST_ff_f (pow, minus_zero, 1, minus_zero);
11514   TEST_ff_f (pow, minus_zero, 11, minus_zero);
11515
11516   TEST_ff_f (pow, 0, 2, 0);
11517   TEST_ff_f (pow, 0, 11.1L, 0);
11518
11519   TEST_ff_f (pow, minus_zero, 2, 0);
11520   TEST_ff_f (pow, minus_zero, 11.1L, 0);
11521   TEST_ff_f (pow, 0, plus_infty, 0);
11522   TEST_ff_f (pow, minus_zero, plus_infty, 0);
11523   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11524   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11525
11526 #ifndef TEST_INLINE
11527   /* pow (x, +inf) == +inf for |x| > 1.  */
11528   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
11529
11530   /* pow (x, +inf) == +0 for |x| < 1.  */
11531   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
11532
11533   /* pow (x, -inf) == +0 for |x| > 1.  */
11534   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
11535
11536   /* pow (x, -inf) == +inf for |x| < 1.  */
11537   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
11538 #endif
11539
11540   /* pow (+inf, y) == +inf for y > 0.  */
11541   TEST_ff_f (pow, plus_infty, 2, plus_infty);
11542   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
11543 #ifndef TEST_FLOAT
11544   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
11545 #endif
11546 #ifdef TEST_LDOUBLE
11547 # if LDBL_MANT_DIG >= 64
11548   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
11549 # endif
11550 # if LDBL_MANT_DIG >= 106
11551   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
11552 # endif
11553 # if LDBL_MANT_DIG >= 113
11554   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
11555 # endif
11556 #endif
11557   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
11558   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
11559   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
11560
11561   /* pow (+inf, y) == +0 for y < 0.  */
11562   TEST_ff_f (pow, plus_infty, -1, 0.0);
11563   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
11564 #ifndef TEST_FLOAT
11565   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
11566 #endif
11567 #ifdef TEST_LDOUBLE
11568 # if LDBL_MANT_DIG >= 64
11569   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
11570 # endif
11571 # if LDBL_MANT_DIG >= 106
11572   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11573 # endif
11574 # if LDBL_MANT_DIG >= 113
11575   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11576 # endif
11577 #endif
11578   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
11579   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
11580   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
11581
11582   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
11583   TEST_ff_f (pow, minus_infty, 27, minus_infty);
11584   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
11585   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
11586 #ifndef TEST_FLOAT
11587   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
11588   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
11589 #endif
11590 #ifdef TEST_LDOUBLE
11591 # if LDBL_MANT_DIG >= 64
11592   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
11593   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
11594 # endif
11595 # if LDBL_MANT_DIG >= 106
11596   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
11597   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
11598 # endif
11599 # if LDBL_MANT_DIG >= 113
11600   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
11601   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
11602 # endif
11603 #endif
11604
11605   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
11606   TEST_ff_f (pow, minus_infty, 28, plus_infty);
11607   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
11608   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
11609   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
11610
11611   /* pow (-inf, y) == -0 for y an odd integer < 0. */
11612   TEST_ff_f (pow, minus_infty, -3, minus_zero);
11613   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
11614   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
11615 #ifndef TEST_FLOAT
11616   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
11617   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
11618 #endif
11619 #ifdef TEST_LDOUBLE
11620 # if LDBL_MANT_DIG >= 64
11621   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
11622   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
11623 # endif
11624 # if LDBL_MANT_DIG >= 106
11625   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11626   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11627 # endif
11628 # if LDBL_MANT_DIG >= 113
11629   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11630   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11631 # endif
11632 #endif
11633   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
11634   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
11635   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
11636   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
11637   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
11638
11639   /* pow (+0, y) == +0 for y an odd integer > 0.  */
11640   TEST_ff_f (pow, 0.0, 27, 0.0);
11641   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
11642 #ifndef TEST_FLOAT
11643   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
11644 #endif
11645 #ifdef TEST_LDOUBLE
11646 # if LDBL_MANT_DIG >= 64
11647   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
11648 # endif
11649 # if LDBL_MANT_DIG >= 106
11650   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11651 # endif
11652 # if LDBL_MANT_DIG >= 113
11653   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11654 # endif
11655 #endif
11656
11657   /* pow (-0, y) == -0 for y an odd integer > 0.  */
11658   TEST_ff_f (pow, minus_zero, 27, minus_zero);
11659   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
11660   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
11661 #ifndef TEST_FLOAT
11662   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
11663   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
11664 #endif
11665 #ifdef TEST_LDOUBLE
11666 # if LDBL_MANT_DIG >= 64
11667   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
11668   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
11669 # endif
11670 # if LDBL_MANT_DIG >= 106
11671   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11672   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11673 # endif
11674 # if LDBL_MANT_DIG >= 113
11675   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11676   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11677 # endif
11678 #endif
11679
11680   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
11681   TEST_ff_f (pow, 0.0, 4, 0.0);
11682   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
11683   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
11684   TEST_ff_f (pow, 0.0, max_value, 0.0);
11685   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
11686
11687   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
11688   TEST_ff_f (pow, minus_zero, 4, 0.0);
11689   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
11690   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
11691   TEST_ff_f (pow, minus_zero, max_value, 0.0);
11692   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
11693
11694   TEST_ff_f (pow, 16, 0.25L, 2);
11695   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
11696   TEST_ff_f (pow, 2, 4, 16);
11697   TEST_ff_f (pow, 256, 8, 0x1p64L);
11698
11699   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
11700
11701 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
11702   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
11703 #endif
11704
11705   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
11706   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
11707 #ifndef TEST_FLOAT
11708   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
11709   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
11710 #endif
11711 #ifdef TEST_LDOUBLE
11712 # if LDBL_MANT_DIG >= 64
11713   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
11714   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
11715 # endif
11716 # if LDBL_MANT_DIG >= 106
11717   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11718   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11719 # endif
11720 # if LDBL_MANT_DIG >= 113
11721   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11722   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11723 # endif
11724 #endif
11725   TEST_ff_f (pow, -1.0, -max_value, 1.0);
11726
11727   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
11728   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
11729 #ifndef TEST_FLOAT
11730   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
11731   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
11732 #endif
11733 #ifdef TEST_LDOUBLE
11734 # if LDBL_MANT_DIG >= 64
11735   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
11736   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
11737 # endif
11738 # if LDBL_MANT_DIG >= 106
11739   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11740   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11741 # endif
11742 # if LDBL_MANT_DIG >= 113
11743   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11744   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11745 # endif
11746 #endif
11747   TEST_ff_f (pow, -1.0, max_value, 1.0);
11748
11749   TEST_ff_f (pow, -2.0, 126, 0x1p126);
11750   TEST_ff_f (pow, -2.0, 127, -0x1p127);
11751   /* Allow inexact results for float to be considered to underflow.  */
11752   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
11753   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
11754
11755   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11756   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11757 #ifndef TEST_FLOAT
11758   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11759   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11760 #endif
11761 #ifdef TEST_LDOUBLE
11762 # if LDBL_MANT_DIG >= 64
11763   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11764   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11765 # endif
11766 # if LDBL_MANT_DIG >= 106
11767   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11768   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11769 # endif
11770 # if LDBL_MANT_DIG >= 113
11771   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11772   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11773 # endif
11774 #endif
11775   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11776
11777   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11778   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11779 #ifndef TEST_FLOAT
11780   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11781   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11782 #endif
11783 #ifdef TEST_LDOUBLE
11784 # if LDBL_MANT_DIG >= 64
11785   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11786   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11787 # endif
11788 # if LDBL_MANT_DIG >= 106
11789   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11790   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11791 # endif
11792 # if LDBL_MANT_DIG >= 113
11793   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11794   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11795 # endif
11796 #endif
11797   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
11798
11799   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
11800   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
11801   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11802   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
11803   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
11804   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
11805   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
11806
11807   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11808   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11809 #ifndef TEST_FLOAT
11810   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11811   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11812 #endif
11813 #ifdef TEST_LDOUBLE
11814 # if LDBL_MANT_DIG >= 64
11815   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11816   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11817 # endif
11818 # if LDBL_MANT_DIG >= 106
11819   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11820   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11821 # endif
11822 # if LDBL_MANT_DIG >= 113
11823   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11824   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11825 # endif
11826 #endif
11827   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11828
11829   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11830   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11831 #ifndef TEST_FLOAT
11832   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11833   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11834 #endif
11835 #ifdef TEST_LDOUBLE
11836 # if LDBL_MANT_DIG >= 64
11837   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11838   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11839 # endif
11840 # if LDBL_MANT_DIG >= 106
11841   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11842   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11843 # endif
11844 # if LDBL_MANT_DIG >= 113
11845   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11846   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11847 # endif
11848 #endif
11849   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11850
11851   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
11852   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
11853   TEST_ff_f (pow, -0.5, -126, 0x1p126);
11854   TEST_ff_f (pow, -0.5, -127, -0x1p127);
11855
11856   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11857   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11858 #ifndef TEST_FLOAT
11859   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11860   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11861 #endif
11862 #ifdef TEST_LDOUBLE
11863 # if LDBL_MANT_DIG >= 64
11864   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11865   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11866 # endif
11867 # if LDBL_MANT_DIG >= 106
11868   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11869   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11870 # endif
11871 # if LDBL_MANT_DIG >= 113
11872   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11873   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11874 # endif
11875 #endif
11876   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11877
11878   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11879   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11880 #ifndef TEST_FLOAT
11881   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11882   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11883 #endif
11884 #ifdef TEST_LDOUBLE
11885 # if LDBL_MANT_DIG >= 64
11886   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11887   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11888 # endif
11889 # if LDBL_MANT_DIG >= 106
11890   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11891   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11892 # endif
11893 # if LDBL_MANT_DIG >= 113
11894   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11895   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11896 # endif
11897 #endif
11898   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11899
11900   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
11901   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
11902   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11903   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
11904   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
11905   /* Allow inexact results to be considered to underflow.  */
11906   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
11907   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
11908   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
11909
11910   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11911   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11912 #ifndef TEST_FLOAT
11913   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11914   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11915 #endif
11916 #ifdef TEST_LDOUBLE
11917 # if LDBL_MANT_DIG >= 64
11918   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11919   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11920 # endif
11921 # if LDBL_MANT_DIG >= 106
11922   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11923   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11924 # endif
11925 # if LDBL_MANT_DIG >= 113
11926   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11927   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11928 # endif
11929 #endif
11930   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11931
11932   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11933   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11934 #ifndef TEST_FLOAT
11935   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11936   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11937 #endif
11938 #ifdef TEST_LDOUBLE
11939 # if LDBL_MANT_DIG >= 64
11940   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11941   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11942 # endif
11943 # if LDBL_MANT_DIG >= 106
11944   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11945   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11946 # endif
11947 # if LDBL_MANT_DIG >= 113
11948   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11949   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11950 # endif
11951 #endif
11952   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11953
11954   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
11955   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
11956   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
11957   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
11958   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
11959   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
11960   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
11961   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
11962   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
11963   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
11964   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
11965   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
11966   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
11967   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
11968   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
11969
11970 #if !defined TEST_FLOAT
11971   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
11972   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
11973   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
11974   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
11975 #endif
11976
11977 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
11978   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
11979   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
11980   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
11981   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
11982 #endif
11983
11984 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
11985   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
11986   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
11987   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
11988   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
11989 #endif
11990
11991 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11992   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
11993   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
11994   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
11995   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
11996   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
11997   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
11998   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
11999   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
12000   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
12001   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
12002   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
12003   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
12004   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
12005 #endif
12006
12007   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
12008   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
12009   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
12010   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
12011   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
12012   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
12013   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
12014   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
12015
12016   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
12017
12018   END (pow);
12019 }
12020
12021
12022 static void
12023 pow_test_tonearest (void)
12024 {
12025   int save_round_mode;
12026   errno = 0;
12027   FUNC(pow) (0, 0);
12028   if (errno == ENOSYS)
12029     /* Function not implemented.  */
12030     return;
12031
12032   START (pow_tonearest);
12033
12034   save_round_mode = fegetround ();
12035
12036   if (!fesetround (FE_TONEAREST))
12037     {
12038       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12039       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12040     }
12041
12042   fesetround (save_round_mode);
12043
12044   END (pow_tonearest);
12045 }
12046
12047
12048 static void
12049 pow_test_towardzero (void)
12050 {
12051   int save_round_mode;
12052   errno = 0;
12053   FUNC(pow) (0, 0);
12054   if (errno == ENOSYS)
12055     /* Function not implemented.  */
12056     return;
12057
12058   START (pow_towardzero);
12059
12060   save_round_mode = fegetround ();
12061
12062   if (!fesetround (FE_TOWARDZERO))
12063     {
12064       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12065       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12066     }
12067
12068   fesetround (save_round_mode);
12069
12070   END (pow_towardzero);
12071 }
12072
12073
12074 static void
12075 pow_test_downward (void)
12076 {
12077   int save_round_mode;
12078   errno = 0;
12079   FUNC(pow) (0, 0);
12080   if (errno == ENOSYS)
12081     /* Function not implemented.  */
12082     return;
12083
12084   START (pow_downward);
12085
12086   save_round_mode = fegetround ();
12087
12088   if (!fesetround (FE_DOWNWARD))
12089     {
12090       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12091       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12092     }
12093
12094   fesetround (save_round_mode);
12095
12096   END (pow_downward);
12097 }
12098
12099
12100 static void
12101 pow_test_upward (void)
12102 {
12103   int save_round_mode;
12104   errno = 0;
12105   FUNC(pow) (0, 0);
12106   if (errno == ENOSYS)
12107     /* Function not implemented.  */
12108     return;
12109
12110   START (pow_upward);
12111
12112   save_round_mode = fegetround ();
12113
12114   if (!fesetround (FE_UPWARD))
12115     {
12116       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12117       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12118     }
12119
12120   fesetround (save_round_mode);
12121
12122   END (pow_upward);
12123 }
12124
12125
12126 static void
12127 remainder_test (void)
12128 {
12129   errno = 0;
12130   FUNC(remainder) (1.625, 1.0);
12131   if (errno == ENOSYS)
12132     /* Function not implemented.  */
12133     return;
12134
12135   START (remainder);
12136
12137   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12138   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12139   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12140   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12141   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12142   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12143   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12144   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12145   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12146   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12147   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, ERRNO_UNCHANGED);
12148   TEST_ff_f (remainder, 0, qnan_value, qnan_value, ERRNO_UNCHANGED);
12149   TEST_ff_f (remainder, qnan_value, 0, qnan_value, ERRNO_UNCHANGED);
12150
12151   TEST_ff_f (remainder, 7.0, plus_infty, 7.0, ERRNO_UNCHANGED);
12152   TEST_ff_f (remainder, 7.0, minus_infty, 7.0, ERRNO_UNCHANGED);
12153
12154   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
12155   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
12156   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
12157   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
12158   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
12159   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
12160
12161   END (remainder);
12162 }
12163
12164 static void
12165 remquo_test (void)
12166 {
12167   /* x is needed.  */
12168   int x;
12169
12170   errno = 0;
12171   FUNC(remquo) (1.625, 1.0, &x);
12172   if (errno == ENOSYS)
12173     /* Function not implemented.  */
12174     return;
12175
12176   START (remquo);
12177
12178   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
12179   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
12180   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12181   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12182   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
12183
12184   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
12185   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
12186   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
12187   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
12188
12189   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
12190   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
12191
12192   END (remquo);
12193 }
12194
12195 static void
12196 rint_test (void)
12197 {
12198   /* TODO: missing qNaN tests.  */
12199
12200   START (rint);
12201
12202   TEST_f_f (rint, 0.0, 0.0);
12203   TEST_f_f (rint, minus_zero, minus_zero);
12204   TEST_f_f (rint, plus_infty, plus_infty);
12205   TEST_f_f (rint, minus_infty, minus_infty);
12206
12207   /* Default rounding mode is round to even.  */
12208   TEST_f_f (rint, 0.5, 0.0);
12209   TEST_f_f (rint, 1.5, 2.0);
12210   TEST_f_f (rint, 2.5, 2.0);
12211   TEST_f_f (rint, 3.5, 4.0);
12212   TEST_f_f (rint, 4.5, 4.0);
12213   TEST_f_f (rint, -0.5, -0.0);
12214   TEST_f_f (rint, -1.5, -2.0);
12215   TEST_f_f (rint, -2.5, -2.0);
12216   TEST_f_f (rint, -3.5, -4.0);
12217   TEST_f_f (rint, -4.5, -4.0);
12218   TEST_f_f (rint, 0.1, 0.0);
12219   TEST_f_f (rint, 0.25, 0.0);
12220   TEST_f_f (rint, 0.625, 1.0);
12221   TEST_f_f (rint, -0.1, -0.0);
12222   TEST_f_f (rint, -0.25, -0.0);
12223   TEST_f_f (rint, -0.625, -1.0);
12224   TEST_f_f (rint, 262144.75, 262145.0);
12225   TEST_f_f (rint, 262142.75, 262143.0);
12226   TEST_f_f (rint, 524286.75, 524287.0);
12227   TEST_f_f (rint, 524288.75, 524289.0);
12228   TEST_f_f (rint, 1048576.75, 1048577.0);
12229   TEST_f_f (rint, 2097152.75, 2097153.0);
12230   TEST_f_f (rint, -1048576.75, -1048577.0);
12231   TEST_f_f (rint, -2097152.75, -2097153.0);
12232 #ifndef TEST_FLOAT
12233   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12234   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12235   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12236   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12237   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12238   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12239   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12240   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12241   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12242   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12243 #endif
12244 #ifdef TEST_LDOUBLE
12245   /* The result can only be represented in long double.  */
12246   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12247   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12248   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12249   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12250   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12251
12252 # if LDBL_MANT_DIG > 100
12253   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12254   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12255   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12256 # endif
12257
12258   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12259   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12260   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12261   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12262   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12263
12264 # if LDBL_MANT_DIG > 100
12265   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12266   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12267   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12268
12269   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12270   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12271   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12272   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12273   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12274   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12275
12276   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12277   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12278   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12279   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12280   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12281   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12282 # endif
12283
12284   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
12285   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
12286   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
12287   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
12288   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
12289
12290   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
12291   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
12292   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
12293   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
12294   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
12295
12296   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
12297   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
12298   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
12299   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
12300   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
12301
12302   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
12303   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
12304   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
12305   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
12306   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
12307
12308   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12309   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12310   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12311   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12312   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12313 #endif
12314
12315   END (rint);
12316 }
12317
12318 static void
12319 rint_test_tonearest (void)
12320 {
12321   int save_round_mode;
12322   START (rint_tonearest);
12323
12324   save_round_mode = fegetround ();
12325
12326   if (!fesetround (FE_TONEAREST))
12327     {
12328       TEST_f_f (rint, 2.0, 2.0);
12329       TEST_f_f (rint, 1.5, 2.0);
12330       TEST_f_f (rint, 1.0, 1.0);
12331       TEST_f_f (rint, 0.5, 0.0);
12332       TEST_f_f (rint, 0.0, 0.0);
12333       TEST_f_f (rint, minus_zero, minus_zero);
12334       TEST_f_f (rint, -0.5, -0.0);
12335       TEST_f_f (rint, -1.0, -1.0);
12336       TEST_f_f (rint, -1.5, -2.0);
12337       TEST_f_f (rint, -2.0, -2.0);
12338       TEST_f_f (rint, 0.1, 0.0);
12339       TEST_f_f (rint, 0.25, 0.0);
12340       TEST_f_f (rint, 0.625, 1.0);
12341       TEST_f_f (rint, -0.1, -0.0);
12342       TEST_f_f (rint, -0.25, -0.0);
12343       TEST_f_f (rint, -0.625, -1.0);
12344       TEST_f_f (rint, 1048576.75, 1048577.0);
12345       TEST_f_f (rint, 2097152.75, 2097153.0);
12346       TEST_f_f (rint, -1048576.75, -1048577.0);
12347       TEST_f_f (rint, -2097152.75, -2097153.0);
12348 #ifndef TEST_FLOAT
12349       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12350       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12351       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12352       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12353       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12354       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12355       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12356       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12357       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12358       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12359 #endif
12360 #ifdef TEST_LDOUBLE
12361       /* The result can only be represented in long double.  */
12362       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12363       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12364       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12365       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12366       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12367 # if LDBL_MANT_DIG > 100
12368       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12369       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12370       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12371 # endif
12372       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12373       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12374       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12375       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12376       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12377 # if LDBL_MANT_DIG > 100
12378       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12379       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12380       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12381
12382       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12383       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12384       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12385       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12386       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12387       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12388
12389       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12390       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12391       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12392       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12393       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12394       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12395 # endif
12396 #endif
12397     }
12398
12399   fesetround (save_round_mode);
12400
12401   END (rint_tonearest);
12402 }
12403
12404 static void
12405 rint_test_towardzero (void)
12406 {
12407   int save_round_mode;
12408   START (rint_towardzero);
12409
12410   save_round_mode = fegetround ();
12411
12412   if (!fesetround (FE_TOWARDZERO))
12413     {
12414       TEST_f_f (rint, 2.0, 2.0);
12415       TEST_f_f (rint, 1.5, 1.0);
12416       TEST_f_f (rint, 1.0, 1.0);
12417       TEST_f_f (rint, 0.5, 0.0);
12418       TEST_f_f (rint, 0.0, 0.0);
12419       TEST_f_f (rint, minus_zero, minus_zero);
12420       TEST_f_f (rint, -0.5, -0.0);
12421       TEST_f_f (rint, -1.0, -1.0);
12422       TEST_f_f (rint, -1.5, -1.0);
12423       TEST_f_f (rint, -2.0, -2.0);
12424       TEST_f_f (rint, 0.1, 0.0);
12425       TEST_f_f (rint, 0.25, 0.0);
12426       TEST_f_f (rint, 0.625, 0.0);
12427       TEST_f_f (rint, -0.1, -0.0);
12428       TEST_f_f (rint, -0.25, -0.0);
12429       TEST_f_f (rint, -0.625, -0.0);
12430       TEST_f_f (rint, 1048576.75, 1048576.0);
12431       TEST_f_f (rint, 2097152.75, 2097152.0);
12432       TEST_f_f (rint, -1048576.75, -1048576.0);
12433       TEST_f_f (rint, -2097152.75, -2097152.0);
12434 #ifndef TEST_FLOAT
12435       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12436       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12437       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12438       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12439       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12440       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12441       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12442       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12443       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12444       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12445 #endif
12446 #ifdef TEST_LDOUBLE
12447       /* The result can only be represented in long double.  */
12448       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12449       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12450       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12451       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12452       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12453 # if LDBL_MANT_DIG > 100
12454       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12455       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12456       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12457 # endif
12458       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12459       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12460       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12461       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12462       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12463 # if LDBL_MANT_DIG > 100
12464       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12465       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12466       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12467
12468       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12469       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12470       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12471       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12472       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12473       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12474
12475       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12476       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12477       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12478       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12479       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12480       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12481 # endif
12482 #endif
12483     }
12484
12485   fesetround (save_round_mode);
12486
12487   END (rint_towardzero);
12488 }
12489
12490 static void
12491 rint_test_downward (void)
12492 {
12493   int save_round_mode;
12494   START (rint_downward);
12495
12496   save_round_mode = fegetround ();
12497
12498   if (!fesetround (FE_DOWNWARD))
12499     {
12500       TEST_f_f (rint, 2.0, 2.0);
12501       TEST_f_f (rint, 1.5, 1.0);
12502       TEST_f_f (rint, 1.0, 1.0);
12503       TEST_f_f (rint, 0.5, 0.0);
12504       TEST_f_f (rint, 0.0, 0.0);
12505       TEST_f_f (rint, minus_zero, minus_zero);
12506       TEST_f_f (rint, -0.5, -1.0);
12507       TEST_f_f (rint, -1.0, -1.0);
12508       TEST_f_f (rint, -1.5, -2.0);
12509       TEST_f_f (rint, -2.0, -2.0);
12510       TEST_f_f (rint, 0.1, 0.0);
12511       TEST_f_f (rint, 0.25, 0.0);
12512       TEST_f_f (rint, 0.625, 0.0);
12513       TEST_f_f (rint, -0.1, -1.0);
12514       TEST_f_f (rint, -0.25, -1.0);
12515       TEST_f_f (rint, -0.625, -1.0);
12516       TEST_f_f (rint, 1048576.75, 1048576.0);
12517       TEST_f_f (rint, 2097152.75, 2097152.0);
12518       TEST_f_f (rint, -1048576.75, -1048577.0);
12519       TEST_f_f (rint, -2097152.75, -2097153.0);
12520 #ifndef TEST_FLOAT
12521       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12522       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12523       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12524       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12525       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12526       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12527       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12528       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12529       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12530       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12531 #endif
12532 #ifdef TEST_LDOUBLE
12533       /* The result can only be represented in long double.  */
12534       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12535       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12536       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12537       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12538       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12539 # if LDBL_MANT_DIG > 100
12540       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12541       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12542       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12543 # endif
12544       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12545       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
12546       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
12547       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12548       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12549 # if LDBL_MANT_DIG > 100
12550       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12551       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12552       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12553
12554       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12555       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12556       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12557       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12558       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12559       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12560
12561       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
12562       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
12563       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
12564       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12565       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12566       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12567 # endif
12568 #endif
12569     }
12570
12571   fesetround (save_round_mode);
12572
12573   END (rint_downward);
12574 }
12575
12576 static void
12577 rint_test_upward (void)
12578 {
12579   int save_round_mode;
12580   START (rint_upward);
12581
12582   save_round_mode = fegetround ();
12583
12584   if (!fesetround (FE_UPWARD))
12585     {
12586       TEST_f_f (rint, 2.0, 2.0);
12587       TEST_f_f (rint, 1.5, 2.0);
12588       TEST_f_f (rint, 1.0, 1.0);
12589       TEST_f_f (rint, 0.5, 1.0);
12590       TEST_f_f (rint, 0.0, 0.0);
12591       TEST_f_f (rint, minus_zero, minus_zero);
12592       TEST_f_f (rint, -0.5, -0.0);
12593       TEST_f_f (rint, -1.0, -1.0);
12594       TEST_f_f (rint, -1.5, -1.0);
12595       TEST_f_f (rint, -2.0, -2.0);
12596       TEST_f_f (rint, 0.1, 1.0);
12597       TEST_f_f (rint, 0.25, 1.0);
12598       TEST_f_f (rint, 0.625, 1.0);
12599       TEST_f_f (rint, -0.1, -0.0);
12600       TEST_f_f (rint, -0.25, -0.0);
12601       TEST_f_f (rint, -0.625, -0.0);
12602       TEST_f_f (rint, 1048576.75, 1048577.0);
12603       TEST_f_f (rint, 2097152.75, 2097153.0);
12604       TEST_f_f (rint, -1048576.75, -1048576.0);
12605       TEST_f_f (rint, -2097152.75, -2097152.0);
12606 #ifndef TEST_FLOAT
12607       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12608       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12609       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12610       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12611       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12612       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12613       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12614       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12615       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12616       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12617 #endif
12618 #ifdef TEST_LDOUBLE
12619       /* The result can only be represented in long double.  */
12620       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12621       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
12622       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
12623       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12624       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12625 # if LDBL_MANT_DIG > 100
12626       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12627       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12628       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12629 # endif
12630       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12631       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12632       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12633       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12634       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12635 # if LDBL_MANT_DIG > 100
12636       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12637       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12638       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12639
12640       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
12641       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
12642       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
12643       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12644       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12645       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12646
12647       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12648       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12649       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12650       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12651       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12652       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12653 # endif
12654 #endif
12655     }
12656
12657   fesetround (save_round_mode);
12658
12659   END (rint_upward);
12660 }
12661
12662 static void
12663 round_test (void)
12664 {
12665   /* TODO: missing +/-Inf as well as qNaN tests.  */
12666
12667   START (round);
12668
12669   TEST_f_f (round, 0, 0);
12670   TEST_f_f (round, minus_zero, minus_zero);
12671   TEST_f_f (round, 0.2L, 0.0);
12672   TEST_f_f (round, -0.2L, minus_zero);
12673   TEST_f_f (round, 0.5, 1.0);
12674   TEST_f_f (round, -0.5, -1.0);
12675   TEST_f_f (round, 0.8L, 1.0);
12676   TEST_f_f (round, -0.8L, -1.0);
12677   TEST_f_f (round, 1.5, 2.0);
12678   TEST_f_f (round, -1.5, -2.0);
12679   TEST_f_f (round, 0.1, 0.0);
12680   TEST_f_f (round, 0.25, 0.0);
12681   TEST_f_f (round, 0.625, 1.0);
12682   TEST_f_f (round, -0.1, -0.0);
12683   TEST_f_f (round, -0.25, -0.0);
12684   TEST_f_f (round, -0.625, -1.0);
12685   TEST_f_f (round, 2097152.5, 2097153);
12686   TEST_f_f (round, -2097152.5, -2097153);
12687
12688 #ifdef TEST_LDOUBLE
12689   /* The result can only be represented in long double.  */
12690   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
12691   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
12692   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
12693   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
12694   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
12695 # if LDBL_MANT_DIG > 100
12696   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
12697   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
12698   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
12699 # endif
12700
12701   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
12702   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
12703   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
12704   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
12705   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
12706 # if LDBL_MANT_DIG > 100
12707   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
12708   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
12709   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
12710 # endif
12711
12712   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
12713   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
12714   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
12715   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
12716   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
12717
12718   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
12719   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
12720   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
12721   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
12722   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
12723
12724 # if LDBL_MANT_DIG > 100
12725   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
12726   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
12727   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
12728   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
12729   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
12730   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
12731
12732   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
12733   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
12734   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
12735   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
12736   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
12737   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
12738 # endif
12739
12740   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
12741   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
12742   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
12743   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
12744   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
12745
12746   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
12747   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
12748   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
12749   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
12750   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
12751
12752   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12753   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12754   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
12755   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12756   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12757 #endif
12758
12759   END (round);
12760 }
12761
12762
12763 static void
12764 scalb_test (void)
12765 {
12766
12767   START (scalb);
12768
12769   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
12770   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
12771
12772   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12773   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12774
12775   TEST_ff_f (scalb, 1, 0, 1);
12776   TEST_ff_f (scalb, -1, 0, -1);
12777
12778   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
12779   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
12780
12781   TEST_ff_f (scalb, 0, 2, 0);
12782   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
12783   TEST_ff_f (scalb, 0, 0, 0);
12784   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
12785   TEST_ff_f (scalb, 0, -1, 0);
12786   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
12787   TEST_ff_f (scalb, 0, minus_infty, 0);
12788   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
12789
12790   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
12791   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
12792   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
12793   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
12794   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
12795   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
12796
12797   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
12798   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
12799
12800   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
12801   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
12802   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
12803   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
12804
12805   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12806   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12807
12808   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
12809   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12810   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
12811   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12812   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
12813   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
12814   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
12815
12816   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
12817   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
12818
12819   END (scalb);
12820 }
12821
12822
12823 static void
12824 scalbn_test (void)
12825 {
12826
12827   START (scalbn);
12828
12829   TEST_fi_f (scalbn, 0, 0, 0);
12830   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
12831
12832   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
12833   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
12834   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
12835
12836   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
12837   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
12838
12839   TEST_fi_f (scalbn, 1, 0L, 1);
12840
12841   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12842   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12843   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12844   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12845   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12846   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12847   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12848   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12849
12850   END (scalbn);
12851 }
12852
12853
12854 static void
12855 scalbln_test (void)
12856 {
12857
12858   START (scalbln);
12859
12860   TEST_fl_f (scalbln, 0, 0, 0);
12861   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
12862
12863   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
12864   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
12865   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
12866
12867   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
12868   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
12869
12870   TEST_fl_f (scalbln, 1, 0L, 1);
12871
12872   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12873   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12874   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12875   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12876   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12877   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12878   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12879   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12880
12881   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12882   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12883   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12884   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12885   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12886   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12887   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12888   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12889
12890 #if LONG_MAX >= 0x100000000
12891   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12892   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12893   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12894   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12895   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12896   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12897   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12898   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12899 #endif
12900
12901   END (scalbn);
12902 }
12903
12904
12905 static void
12906 signbit_test (void)
12907 {
12908   /* TODO: missing qNaN tests.  */
12909
12910   START (signbit);
12911
12912   TEST_f_b (signbit, 0, 0);
12913   TEST_f_b (signbit, minus_zero, 1);
12914   TEST_f_b (signbit, plus_infty, 0);
12915   TEST_f_b (signbit, minus_infty, 1);
12916
12917   /* signbit (x) != 0 for x < 0.  */
12918   TEST_f_b (signbit, -1, 1);
12919   /* signbit (x) == 0 for x >= 0.  */
12920   TEST_f_b (signbit, 1, 0);
12921
12922   END (signbit);
12923 }
12924
12925
12926 static void
12927 sin_test (void)
12928 {
12929   errno = 0;
12930   FUNC(sin) (0);
12931   if (errno == ENOSYS)
12932     /* Function not implemented.  */
12933     return;
12934
12935   START (sin);
12936
12937   TEST_f_f (sin, 0, 0);
12938   TEST_f_f (sin, minus_zero, minus_zero);
12939   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12940   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12941   TEST_f_f (sin, qnan_value, qnan_value, ERRNO_UNCHANGED);
12942
12943   TEST_f_f (sin, M_PI_6l, 0.5);
12944   TEST_f_f (sin, -M_PI_6l, -0.5);
12945   TEST_f_f (sin, M_PI_2l, 1);
12946   TEST_f_f (sin, -M_PI_2l, -1);
12947   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
12948
12949   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
12950   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
12951
12952   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
12953
12954 #ifdef TEST_DOUBLE
12955   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
12956   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
12957 #endif
12958
12959 #ifndef TEST_FLOAT
12960   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
12961   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
12962 #endif
12963
12964 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12965   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
12966 #endif
12967
12968   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
12969   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
12970   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
12971   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
12972   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
12973   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
12974
12975   END (sin);
12976
12977 }
12978
12979
12980 static void
12981 sin_test_tonearest (void)
12982 {
12983   int save_round_mode;
12984   errno = 0;
12985   FUNC(sin) (0);
12986   if (errno == ENOSYS)
12987     /* Function not implemented.  */
12988     return;
12989
12990   START (sin_tonearest);
12991
12992   save_round_mode = fegetround ();
12993
12994   if (!fesetround (FE_TONEAREST))
12995     {
12996       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12997       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12998       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12999       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13000       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13001       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13002       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13003       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13004       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13005       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13006     }
13007
13008   fesetround (save_round_mode);
13009
13010   END (sin_tonearest);
13011 }
13012
13013
13014 static void
13015 sin_test_towardzero (void)
13016 {
13017   int save_round_mode;
13018   errno = 0;
13019   FUNC(sin) (0);
13020   if (errno == ENOSYS)
13021     /* Function not implemented.  */
13022     return;
13023
13024   START (sin_towardzero);
13025
13026   save_round_mode = fegetround ();
13027
13028   if (!fesetround (FE_TOWARDZERO))
13029     {
13030       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13031       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13032       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13033       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13034       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13035       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13036       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13037       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13038       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13039       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13040     }
13041
13042   fesetround (save_round_mode);
13043
13044   END (sin_towardzero);
13045 }
13046
13047
13048 static void
13049 sin_test_downward (void)
13050 {
13051   int save_round_mode;
13052   errno = 0;
13053   FUNC(sin) (0);
13054   if (errno == ENOSYS)
13055     /* Function not implemented.  */
13056     return;
13057
13058   START (sin_downward);
13059
13060   save_round_mode = fegetround ();
13061
13062   if (!fesetround (FE_DOWNWARD))
13063     {
13064       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13065       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13066       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13067       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13068       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13069       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13070       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13071       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13072       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13073       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13074     }
13075
13076   fesetround (save_round_mode);
13077
13078   END (sin_downward);
13079 }
13080
13081
13082 static void
13083 sin_test_upward (void)
13084 {
13085   int save_round_mode;
13086   errno = 0;
13087   FUNC(sin) (0);
13088   if (errno == ENOSYS)
13089     /* Function not implemented.  */
13090     return;
13091
13092   START (sin_upward);
13093
13094   save_round_mode = fegetround ();
13095
13096   if (!fesetround (FE_UPWARD))
13097     {
13098       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13099       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13100       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13101       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13102       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13103       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13104       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13105       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13106       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13107       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13108     }
13109
13110   fesetround (save_round_mode);
13111
13112   END (sin_upward);
13113 }
13114
13115
13116 static void
13117 sincos_test (void)
13118 {
13119   FLOAT sin_res, cos_res;
13120
13121   errno = 0;
13122   FUNC(sincos) (0, &sin_res, &cos_res);
13123   if (errno == ENOSYS)
13124     /* Function not implemented.  */
13125     return;
13126
13127   START (sincos);
13128
13129   /* sincos is treated differently because it returns void.  */
13130   TEST_extra (sincos, 0, 0, 1);
13131
13132   TEST_extra (sincos, minus_zero, minus_zero, 1);
13133   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13134   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13135   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
13136
13137   /* The value of M_PI_2l is never exactly PI/2, and therefore the
13138      answer is never exactly zero. The answer is equal to the error
13139      in rounding PI/2 for the type used.  Thus the answer is unique
13140      to each type.  */
13141 #ifdef TEST_FLOAT
13142   /* 32-bit float.  */
13143   TEST_extra (sincos, M_PI_2l, 1, -0x1.777a5cp-25L);
13144 #endif
13145 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
13146   /* 64-bit double or 64-bit long double.  */
13147   TEST_extra (sincos, M_PI_2l, 1, 0x1.1a62633145c07p-54L);
13148 #endif
13149 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
13150   /* 96-bit long double.  */
13151   TEST_extra (sincos, M_PI_2l, 1, -0xe.ce675d1fc8f8cbbp-69L);
13152 #endif
13153 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
13154   /* 128-bit IBM long double.  */
13155   TEST_extra (sincos, M_PI_2l, 1, 0x1.c1cd129024e088a67cc74020bcp-107L);
13156 #endif
13157 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
13158   /* 128-bit long double.  */
13159   TEST_extra (sincos, M_PI_2l, 1, 0x1.cd129024e088a67cc74020bbea64p-115L);
13160 #endif
13161
13162   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
13163   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
13164   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
13165
13166   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13167   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13168
13169 #ifdef TEST_DOUBLE
13170   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
13171 #endif
13172
13173 #ifndef TEST_FLOAT
13174   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
13175   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
13176 #endif
13177
13178 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13179   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
13180 #endif
13181
13182   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
13183   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
13184   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
13185   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
13186   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
13187   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
13188
13189   END (sincos);
13190 }
13191
13192 static void
13193 sinh_test (void)
13194 {
13195   errno = 0;
13196   FUNC(sinh) (0.7L);
13197   if (errno == ENOSYS)
13198     /* Function not implemented.  */
13199     return;
13200
13201   START (sinh);
13202   TEST_f_f (sinh, 0, 0);
13203   TEST_f_f (sinh, minus_zero, minus_zero);
13204
13205 #ifndef TEST_INLINE
13206   TEST_f_f (sinh, plus_infty, plus_infty);
13207   TEST_f_f (sinh, minus_infty, minus_infty);
13208 #endif
13209   TEST_f_f (sinh, qnan_value, qnan_value);
13210
13211   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
13212   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
13213
13214   END (sinh);
13215 }
13216
13217
13218 static void
13219 sinh_test_tonearest (void)
13220 {
13221   int save_round_mode;
13222   errno = 0;
13223   FUNC(sinh) (0);
13224   if (errno == ENOSYS)
13225     /* Function not implemented.  */
13226     return;
13227
13228   START (sinh_tonearest);
13229
13230   save_round_mode = fegetround ();
13231
13232   if (!fesetround (FE_TONEAREST))
13233     {
13234       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13235       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13236       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13237     }
13238
13239   fesetround (save_round_mode);
13240
13241   END (sinh_tonearest);
13242 }
13243
13244
13245 static void
13246 sinh_test_towardzero (void)
13247 {
13248   int save_round_mode;
13249   errno = 0;
13250   FUNC(sinh) (0);
13251   if (errno == ENOSYS)
13252     /* Function not implemented.  */
13253     return;
13254
13255   START (sinh_towardzero);
13256
13257   save_round_mode = fegetround ();
13258
13259   if (!fesetround (FE_TOWARDZERO))
13260     {
13261       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13262       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13263       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13264     }
13265
13266   fesetround (save_round_mode);
13267
13268   END (sinh_towardzero);
13269 }
13270
13271
13272 static void
13273 sinh_test_downward (void)
13274 {
13275   int save_round_mode;
13276   errno = 0;
13277   FUNC(sinh) (0);
13278   if (errno == ENOSYS)
13279     /* Function not implemented.  */
13280     return;
13281
13282   START (sinh_downward);
13283
13284   save_round_mode = fegetround ();
13285
13286   if (!fesetround (FE_DOWNWARD))
13287     {
13288       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13289       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13290       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13291     }
13292
13293   fesetround (save_round_mode);
13294
13295   END (sinh_downward);
13296 }
13297
13298
13299 static void
13300 sinh_test_upward (void)
13301 {
13302   int save_round_mode;
13303   errno = 0;
13304   FUNC(sinh) (0);
13305   if (errno == ENOSYS)
13306     /* Function not implemented.  */
13307     return;
13308
13309   START (sinh_upward);
13310
13311   save_round_mode = fegetround ();
13312
13313   if (!fesetround (FE_UPWARD))
13314     {
13315       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13316       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13317       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13318     }
13319
13320   fesetround (save_round_mode);
13321
13322   END (sinh_upward);
13323 }
13324
13325
13326 static void
13327 sqrt_test (void)
13328 {
13329   errno = 0;
13330   FUNC(sqrt) (1);
13331   if (errno == ENOSYS)
13332     /* Function not implemented.  */
13333     return;
13334
13335   START (sqrt);
13336
13337   TEST_f_f (sqrt, 0, 0);
13338   TEST_f_f (sqrt, qnan_value, qnan_value);
13339   TEST_f_f (sqrt, plus_infty, plus_infty);
13340
13341   TEST_f_f (sqrt, minus_zero, minus_zero);
13342
13343   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
13344   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
13345   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
13346   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
13347
13348   TEST_f_f (sqrt, 2209, 47);
13349   TEST_f_f (sqrt, 4, 2);
13350   TEST_f_f (sqrt, 2, M_SQRT2l);
13351   TEST_f_f (sqrt, 0.25, 0.5);
13352   TEST_f_f (sqrt, 6642.25, 81.5);
13353   TEST_f_f (sqrt, 15190.5625L, 123.25L);
13354   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
13355
13356   END (sqrt);
13357 }
13358
13359
13360 static void
13361 tan_test (void)
13362 {
13363   errno = 0;
13364   FUNC(tan) (0);
13365   if (errno == ENOSYS)
13366     /* Function not implemented.  */
13367     return;
13368
13369   START (tan);
13370
13371   TEST_f_f (tan, 0, 0);
13372   TEST_f_f (tan, minus_zero, minus_zero);
13373   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13374   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13375   TEST_f_f (tan, qnan_value, qnan_value, ERRNO_UNCHANGED);
13376
13377   TEST_f_f (tan, M_PI_4l, 1);
13378   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
13379
13380   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
13381   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
13382
13383   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
13384   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
13385   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
13386   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
13387   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
13388   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
13389   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
13390   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
13391   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
13392   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
13393   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
13394   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
13395   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
13396   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
13397   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
13398   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
13399   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
13400   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
13401
13402   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
13403   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
13404   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
13405   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
13406   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
13407   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
13408   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
13409   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
13410   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
13411   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
13412   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
13413   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
13414   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
13415   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
13416   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
13417   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
13418   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
13419   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
13420
13421 #ifndef TEST_FLOAT
13422   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
13423   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
13424 #endif
13425
13426 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13427   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
13428 #endif
13429
13430   END (tan);
13431 }
13432
13433
13434 static void
13435 tan_test_tonearest (void)
13436 {
13437   int save_round_mode;
13438   errno = 0;
13439   FUNC(tan) (0);
13440   if (errno == ENOSYS)
13441     /* Function not implemented.  */
13442     return;
13443
13444   START (tan_tonearest);
13445
13446   save_round_mode = fegetround ();
13447
13448   if (!fesetround (FE_TONEAREST))
13449     {
13450       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13451       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13452       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13453       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13454       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13455       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13456       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13457       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13458       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13459       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13460     }
13461
13462   fesetround (save_round_mode);
13463
13464   END (tan_tonearest);
13465 }
13466
13467
13468 static void
13469 tan_test_towardzero (void)
13470 {
13471   int save_round_mode;
13472   errno = 0;
13473   FUNC(tan) (0);
13474   if (errno == ENOSYS)
13475     /* Function not implemented.  */
13476     return;
13477
13478   START (tan_towardzero);
13479
13480   save_round_mode = fegetround ();
13481
13482   if (!fesetround (FE_TOWARDZERO))
13483     {
13484       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13485       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13486       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13487       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13488       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13489       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13490       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13491       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13492       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13493       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13494     }
13495
13496   fesetround (save_round_mode);
13497
13498   END (tan_towardzero);
13499 }
13500
13501
13502 static void
13503 tan_test_downward (void)
13504 {
13505   int save_round_mode;
13506   errno = 0;
13507   FUNC(tan) (0);
13508   if (errno == ENOSYS)
13509     /* Function not implemented.  */
13510     return;
13511
13512   START (tan_downward);
13513
13514   save_round_mode = fegetround ();
13515
13516   if (!fesetround (FE_DOWNWARD))
13517     {
13518       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13519       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13520       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13521       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13522       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13523       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13524       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13525       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13526       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13527       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13528     }
13529
13530   fesetround (save_round_mode);
13531
13532   END (tan_downward);
13533 }
13534
13535
13536 static void
13537 tan_test_upward (void)
13538 {
13539   int save_round_mode;
13540   errno = 0;
13541   FUNC(tan) (0);
13542   if (errno == ENOSYS)
13543     /* Function not implemented.  */
13544     return;
13545
13546   START (tan_upward);
13547
13548   save_round_mode = fegetround ();
13549
13550   if (!fesetround (FE_UPWARD))
13551     {
13552       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13553       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13554       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13555       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13556       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13557       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13558       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13559       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13560       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13561       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13562     }
13563
13564   fesetround (save_round_mode);
13565
13566   END (tan_upward);
13567 }
13568
13569
13570 static void
13571 tanh_test (void)
13572 {
13573   errno = 0;
13574   FUNC(tanh) (0.7L);
13575   if (errno == ENOSYS)
13576     /* Function not implemented.  */
13577     return;
13578
13579   START (tanh);
13580
13581   TEST_f_f (tanh, 0, 0);
13582   TEST_f_f (tanh, minus_zero, minus_zero);
13583
13584 #ifndef TEST_INLINE
13585   TEST_f_f (tanh, plus_infty, 1);
13586   TEST_f_f (tanh, minus_infty, -1);
13587 #endif
13588   TEST_f_f (tanh, qnan_value, qnan_value);
13589
13590   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
13591   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
13592
13593   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
13594   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
13595
13596   /* 2^-57  */
13597   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
13598
13599   END (tanh);
13600 }
13601
13602 static void
13603 tgamma_test (void)
13604 {
13605   errno = 0;
13606   FUNC(tgamma) (1);
13607   if (errno == ENOSYS)
13608     /* Function not implemented.  */
13609     return;
13610
13611   START (tgamma);
13612
13613   TEST_f_f (tgamma, plus_infty, plus_infty);
13614   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
13615   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13616   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13617   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
13618   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
13619   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
13620   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
13621   TEST_f_f (tgamma, qnan_value, qnan_value);
13622
13623   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
13624   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
13625
13626   TEST_f_f (tgamma, 1, 1);
13627   TEST_f_f (tgamma, 2, 1);
13628   TEST_f_f (tgamma, 3, 2);
13629   TEST_f_f (tgamma, 4, 6);
13630   TEST_f_f (tgamma, 5, 24);
13631   TEST_f_f (tgamma, 6, 120);
13632   TEST_f_f (tgamma, 7, 720);
13633   TEST_f_f (tgamma, 8, 5040);
13634   TEST_f_f (tgamma, 9,  40320);
13635   TEST_f_f (tgamma, 10, 362880);
13636
13637   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
13638   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
13639
13640   TEST_f_f (tgamma, 1.5L, 8.8622692545275801364908374167057259139877e-01L);
13641   TEST_f_f (tgamma, 2.5L, 1.3293403881791370204736256125058588870982e+00L);
13642   TEST_f_f (tgamma, 3.5L, 3.3233509704478425511840640312646472177454e+00L);
13643   TEST_f_f (tgamma, 4.5L, 1.1631728396567448929144224109426265262109e+01L);
13644   TEST_f_f (tgamma, 5.5L, 5.2342777784553520181149008492418193679490e+01L);
13645   TEST_f_f (tgamma, 6.5L, 2.8788527781504436099631954670830006523720e+02L);
13646   TEST_f_f (tgamma, 7.5L, 1.8712543057977883464760770536039504240418e+03L);
13647   TEST_f_f (tgamma, 8.5L, 1.4034407293483412598570577902029628180313e+04L);
13648   TEST_f_f (tgamma, 9.5L, 1.1929246199460900708784991216725183953266e+05L);
13649   TEST_f_f (tgamma, -1.5L, 2.3632718012073547030642233111215269103967e+00L);
13650   TEST_f_f (tgamma, -2.5L, -9.4530872048294188122568932444861076415869e-01L);
13651   TEST_f_f (tgamma, -3.5L, 2.7008820585226910892162552127103164690248e-01L);
13652   TEST_f_f (tgamma, -4.5L, -6.0019601300504246427027893615784810422774e-02L);
13653   TEST_f_f (tgamma, -5.5L, 1.0912654781909862986732344293779056440504e-02L);
13654   TEST_f_f (tgamma, -6.5L, -1.6788699664476712287280529682737009908468e-03L);
13655   TEST_f_f (tgamma, -7.5L, 2.2384932885968949716374039576982679877958e-04L);
13656   TEST_f_f (tgamma, -8.5L, -2.6335215159963470254557693619979623385833e-05L);
13657   TEST_f_f (tgamma, -9.5L, 2.7721279115751021320587045915768024616666e-06L);
13658   TEST_f_f (tgamma, 0x1p-24L, 1.6777215422784394050795179874582764575261e+07L);
13659   TEST_f_f (tgamma, -0x1p-24L, -1.6777216577215723853867349114260580375249e+07L);
13660   TEST_f_f (tgamma, 0x1p-53L, 9.0071992547409914227843350984672492007618e+15L);
13661   TEST_f_f (tgamma, -0x1p-53L, -9.0071992547409925772156649015329704137860e+15L);
13662   TEST_f_f (tgamma, 0x1p-64L, 1.8446744073709551615422784335098467139447e+19L);
13663   TEST_f_f (tgamma, -0x1p-64L, -1.8446744073709551616577215664901532860660e+19L);
13664   TEST_f_f (tgamma, 0x1p-106L, 8.1129638414606681695789005144063422784335e+31L);
13665   TEST_f_f (tgamma, -0x1p-106L, -8.1129638414606681695789005144064577215665e+31L);
13666   TEST_f_f (tgamma, 0x1p-113L, 1.0384593717069655257060992658440191422784e+34L);
13667   TEST_f_f (tgamma, -0x1p-113L, -1.0384593717069655257060992658440192577216e+34L);
13668   TEST_f_f (tgamma, 0x1p-127L, 1.7014118346046923173168730371588410572742e+38L);
13669   TEST_f_f (tgamma, -0x1p-127L, -1.7014118346046923173168730371588410572858e+38L);
13670 #ifdef TEST_FLOAT
13671   TEST_f_f (tgamma, 0x1p-128L, plus_infty, OVERFLOW_EXCEPTION);
13672   TEST_f_f (tgamma, -0x1p-128L, minus_infty, OVERFLOW_EXCEPTION);
13673   TEST_f_f (tgamma, 0x1p-149L, plus_infty, OVERFLOW_EXCEPTION);
13674   TEST_f_f (tgamma, -0x1p-149L, minus_infty, OVERFLOW_EXCEPTION);
13675 #else
13676   TEST_f_f (tgamma, 0x1p-128L, 3.4028236692093846346337460743176821145542e+38L);
13677   TEST_f_f (tgamma, -0x1p-128L, -3.4028236692093846346337460743176821145658e+38L);
13678   TEST_f_f (tgamma, 0x1p-149L, 7.1362384635297994052914298472474756819137e+44L);
13679   TEST_f_f (tgamma, -0x1p-149L, -7.1362384635297994052914298472474756819137e+44L);
13680 #endif
13681 #ifndef TEST_FLOAT
13682   TEST_f_f (tgamma, 0x1p-1023L, 8.9884656743115795386465259539451236680899e+307L);
13683   TEST_f_f (tgamma, -0x1p-1023L, -8.9884656743115795386465259539451236680899e+307L);
13684 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
13685   TEST_f_f (tgamma, 0x1p-1024L, plus_infty, OVERFLOW_EXCEPTION);
13686   TEST_f_f (tgamma, -0x1p-1024L, minus_infty, OVERFLOW_EXCEPTION);
13687   TEST_f_f (tgamma, 0x1p-1074L, plus_infty, OVERFLOW_EXCEPTION);
13688   TEST_f_f (tgamma, -0x1p-1074L, minus_infty, OVERFLOW_EXCEPTION);
13689 # else
13690   TEST_f_f (tgamma, 0x1p-1024L, 1.7976931348623159077293051907890247336180e+308L);
13691   TEST_f_f (tgamma, -0x1p-1024L, -1.7976931348623159077293051907890247336180e+308L);
13692   TEST_f_f (tgamma, 0x1p-1074L, 2.0240225330731061835249534671891730704956e+323L);
13693   TEST_f_f (tgamma, -0x1p-1074L, -2.0240225330731061835249534671891730704956e+323L);
13694 # endif
13695 #endif
13696 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
13697   TEST_f_f (tgamma, 0x1p-16383L, 5.9486574767861588254287966331400356538172e+4931L);
13698   TEST_f_f (tgamma, -0x1p-16383L, -5.9486574767861588254287966331400356538172e+4931L);
13699   TEST_f_f (tgamma, 0x1p-16384L, plus_infty, OVERFLOW_EXCEPTION);
13700   TEST_f_f (tgamma, -0x1p-16384L, minus_infty, OVERFLOW_EXCEPTION);
13701   TEST_f_f (tgamma, 0x1p-16445L, plus_infty, OVERFLOW_EXCEPTION);
13702   TEST_f_f (tgamma, -0x1p-16445L, minus_infty, OVERFLOW_EXCEPTION);
13703 # if LDBL_MANT_DIG >= 113
13704   TEST_f_f (tgamma, 0x1p-16494L, plus_infty, OVERFLOW_EXCEPTION);
13705   TEST_f_f (tgamma, -0x1p-16494L, minus_infty, OVERFLOW_EXCEPTION);
13706 # endif
13707 #endif
13708   TEST_f_f (tgamma, 0x8.00001p0L, 5.0400096882277802019946778420223050233915e+03L);
13709   TEST_f_f (tgamma, 0x7.fffff8p0L, 5.0399951558933225045148935487583089307135e+03L);
13710   TEST_f_f (tgamma, 0x7.000008p0L, 7.2000064296977505705636258629805621178587e+02L);
13711   TEST_f_f (tgamma, 0x6.fffff8p0L, 7.1999935703082425988147448928288557689866e+02L);
13712   TEST_f_f (tgamma, 0x6.000008p0L, 1.2000009762487825358530770343720418162783e+02L);
13713   TEST_f_f (tgamma, 0x5.fffff8p0L, 1.1999990237520611552119807476573441975106e+02L);
13714   TEST_f_f (tgamma, 0x5.000008p0L, 2.4000017236155647574166073485628713443799e+01L);
13715   TEST_f_f (tgamma, 0x4.fffff8p0L, 2.3999982763857938712639837029547357501709e+01L);
13716   TEST_f_f (tgamma, 0x4.000008p0L, 6.0000035937827461765660468073471093546129e+00L);
13717   TEST_f_f (tgamma, 0x3.fffffcp0L, 5.9999982031095793171233994481968816873643e+00L);
13718   TEST_f_f (tgamma, 0x3.000004p0L, 2.0000004400179308360529417942462250547999e+00L);
13719   TEST_f_f (tgamma, 0x2.fffffcp0L, 1.9999995599822108706107786027549565954046e+00L);
13720   TEST_f_f (tgamma, 0x2.000004p0L, 1.0000001007996638509889062631687945799175e+00L);
13721   TEST_f_f (tgamma, 0x1.fffffep0L, 9.9999994960018563231526611134590489120697e-01L);
13722   TEST_f_f (tgamma, 0x1.000002p0L, 9.9999993119054472483596471908942669644327e-01L);
13723   TEST_f_f (tgamma, 0x0.ffffffp0L, 1.0000000344047381790797322460568297132998e+00L);
13724   TEST_f_f (tgamma, -0x0.ffffffp0L, -1.6777216422784419250710305882992376932423e+07L);
13725   TEST_f_f (tgamma, -0x1.000002p0L, 8.3886075772158332060084424806449513922858e+06L);
13726   TEST_f_f (tgamma, -0x1.fffffep0L, 4.1943044613922792026014320172298377770578e+06L);
13727   TEST_f_f (tgamma, -0x2.000004p0L, -2.0971515386080557574407223895988378776747e+06L);
13728   TEST_f_f (tgamma, -0x2.fffffcp0L, -6.9905087601970247876992248591045142913324e+05L);
13729   TEST_f_f (tgamma, -0x3.000004p0L, 6.9905045731381300146131914617735687322025e+05L);
13730   TEST_f_f (tgamma, -0x3.fffffcp0L, 1.7476272942159602684441970627092458855771e+05L);
13731   TEST_f_f (tgamma, -0x4.000008p0L, -8.7381270578483499672965708923121931082305e+04L);
13732   TEST_f_f (tgamma, -0x4.fffff8p0L, -1.7476280884325863043793087474680780379554e+04L);
13733   TEST_f_f (tgamma, -0x5.000008p0L, 1.7476252449031389167286893378510439443844e+04L);
13734   TEST_f_f (tgamma, -0x5.fffff8p0L, 2.9127137122026653716311560165769071985443e+03L);
13735   TEST_f_f (tgamma, -0x6.000008p0L, -2.9127085100239567622341538102130981196910e+03L);
13736   TEST_f_f (tgamma, -0x6.fffff8p0L, -4.1610198723079349791939054365613377035519e+02L);
13737   TEST_f_f (tgamma, -0x7.000008p0L, 4.1610118737306415004517215226199741948733e+02L);
13738   TEST_f_f (tgamma, -0x7.fffff8p0L, 5.2012751504050764429534086402871289946986e+01L);
13739   TEST_f_f (tgamma, -0x8.00001p0L, -2.6006296115134418896533598545925084576702e+01L);
13740   TEST_f_f (tgamma, -0x9.fffffp0L, 2.8896008370721717567612135720915723136310e-01L);
13741   TEST_f_f (tgamma, -0xa.00001p0L, -2.8895878754728051776830454190076999107021e-01L);
13742   TEST_f_f (tgamma, -0x13.ffffep0L, 2.1550026214525536756224040483579183652119e-13L);
13743   TEST_f_f (tgamma, -0x14.00002p0L, -2.1549777908265594916405421768142757507179e-13L);
13744   TEST_f_f (tgamma, -0x1d.ffffep0L, 1.9765721589464867957912772592816027583176e-27L);
13745   TEST_f_f (tgamma, -0x1e.00002p0L, -1.9765463890341964384070157599286498212650e-27L);
13746   TEST_f_f (tgamma, -0x27.ffffcp0L, 3.2129279441390812141195076945616975790225e-43L, UNDERFLOW_EXCEPTION_FLOAT);
13747   TEST_f_f (tgamma, -0x28.00004p0L, -3.2128372159115252365699015758097981155793e-43L, UNDERFLOW_EXCEPTION_FLOAT);
13748   TEST_f_f (tgamma, -0x28.ffffcp0L, -7.8364103489619817539676737414096652170685e-45L, UNDERFLOW_EXCEPTION_FLOAT);
13749   TEST_f_f (tgamma, -0x29.00004p0L, 7.8361876024016854597745353972619195760515e-45L, UNDERFLOW_EXCEPTION_FLOAT);
13750 #ifdef TEST_FLOAT
13751   TEST_f_f (tgamma, -0x29.ffffcp0L, plus_zero, UNDERFLOW_EXCEPTION_FLOAT);
13752   TEST_f_f (tgamma, -0x2a.00004p0L, minus_zero, UNDERFLOW_EXCEPTION_FLOAT);
13753 #else
13754   TEST_f_f (tgamma, -0x29.ffffcp0L, 1.8658121573125798145204120066590953505132e-46L);
13755   TEST_f_f (tgamma, -0x2a.00004p0L, -1.8657587834931410688246126853566488626385e-46L);
13756 #endif
13757 #ifndef TEST_FLOAT
13758   TEST_f_f (tgamma, 0x8.0000000000008p0L, 5.0400000000000180457125667322294144477136e+03L);
13759   TEST_f_f (tgamma, 0x7.ffffffffffffcp0L, 5.0399999999999909771437166339103165198442e+03L);
13760   TEST_f_f (tgamma, 0x7.0000000000004p0L, 7.2000000000000119762397445457359071259652e+02L);
13761   TEST_f_f (tgamma, 0x6.ffffffffffffcp0L, 7.1999999999999880237602554542848858572672e+02L);
13762   TEST_f_f (tgamma, 0x6.0000000000004p0L, 1.2000000000000018184042734842640022086408e+02L);
13763   TEST_f_f (tgamma, 0x5.ffffffffffffcp0L, 1.1999999999999981815957265157389249327533e+02L);
13764   TEST_f_f (tgamma, 0x5.0000000000004p0L, 2.4000000000000032104829055124673225982803e+01L);
13765   TEST_f_f (tgamma, 0x4.ffffffffffffcp0L, 2.3999999999999967895170944875373910918544e+01L);
13766   TEST_f_f (tgamma, 0x4.0000000000004p0L, 6.0000000000000066939396342309789716341613e+00L);
13767   TEST_f_f (tgamma, 0x3.ffffffffffffep0L, 5.9999999999999966530301828845138185025345e+00L);
13768   TEST_f_f (tgamma, 0x3.0000000000002p0L, 2.0000000000000008195971324717875960213536e+00L);
13769   TEST_f_f (tgamma, 0x2.ffffffffffffep0L, 1.9999999999999991804028675282128956223990e+00L);
13770   TEST_f_f (tgamma, 0x2.0000000000002p0L, 1.0000000000000001877539613108624482361963e+00L);
13771   TEST_f_f (tgamma, 0x1.fffffffffffffp0L, 9.9999999999999990612301934456883679778984e-01L);
13772   TEST_f_f (tgamma, 0x1.0000000000001p0L, 9.9999999999999987183237573039992418700531e-01L);
13773   TEST_f_f (tgamma, 0x0.fffffffffffff8p0L, 1.0000000000000000640838121348000744796665e+00L);
13774   TEST_f_f (tgamma, -0x0.fffffffffffff8p0L, -9.0071992547409924227843350984672961392521e+15L);
13775   TEST_f_f (tgamma, -0x1.0000000000001p0L, 4.5035996273704955772156649015331740980405e+15L);
13776   TEST_f_f (tgamma, -0x1.fffffffffffffp0L, 2.2517998136852484613921675492337776673289e+15L);
13777   TEST_f_f (tgamma, -0x2.0000000000002p0L, -1.1258999068426235386078324507668462444260e+15L);
13778   TEST_f_f (tgamma, -0x2.ffffffffffffep0L, -3.7529996894754154268627807196691509198813e+14L);
13779   TEST_f_f (tgamma, -0x3.0000000000002p0L, 3.7529996894754112398038859470009084971438e+14L);
13780   TEST_f_f (tgamma, -0x3.ffffffffffffep0L, 9.3824992236885396088236184658402406857503e+13L);
13781   TEST_f_f (tgamma, -0x4.0000000000004p0L, -4.6912496118442603911763815341745722862351e+13L);
13782   TEST_f_f (tgamma, -0x4.ffffffffffffcp0L, -9.3824992236885475509805702650262155809819e+12L);
13783   TEST_f_f (tgamma, -0x5.0000000000004p0L, 9.3824992236885191156860964016850034672946e+12L);
13784   TEST_f_f (tgamma, -0x5.ffffffffffffcp0L, 1.5637498706147581566449098589862357835505e+12L);
13785   TEST_f_f (tgamma, -0x6.0000000000004p0L, -1.5637498706147529544662012521330708016396e+12L);
13786   TEST_f_f (tgamma, -0x6.ffffffffffffcp0L, -2.2339283865925119357965832452642909859289e+11L);
13787   TEST_f_f (tgamma, -0x7.0000000000004p0L, 2.2339283865925039372192897706214475877342e+11L);
13788   TEST_f_f (tgamma, -0x7.ffffffffffffcp0L, 2.7924104832406402297655703264222230055898e+10L);
13789   TEST_f_f (tgamma, -0x8.0000000000008p0L, -1.3962052416203121511868106259843527348026e+10L);
13790   TEST_f_f (tgamma, -0x9.ffffffffffff8p0L, 1.5513391573559147700413058496716749249803e+08L);
13791   TEST_f_f (tgamma, -0xa.0000000000008p0L, -1.5513391573559018084419393002828541166901e+08L);
13792   TEST_f_f (tgamma, -0x13.ffffffffffffp0L, 1.1569515572952029402736625857313236848570e-04L);
13793   TEST_f_f (tgamma, -0x14.000000000001p0L, -1.1569515572951781096476686854873801225397e-04L);
13794   TEST_f_f (tgamma, -0x1d.ffffffffffffp0L, 1.0611571800204311628217068863959963842891e-18L);
13795   TEST_f_f (tgamma, -0x1e.000000000001p0L, -1.0611571800204053929094168642022073530425e-18L);
13796   TEST_f_f (tgamma, -0x27.fffffffffffep0L, 1.7249032006742266376460389310340465554361e-34L);
13797   TEST_f_f (tgamma, -0x28.000000000002p0L, -1.7249032006741359094184881234822934593822e-34L);
13798   TEST_f_f (tgamma, -0x28.fffffffffffep0L, -4.2070809772542120404320040128839297118648e-36L);
13799   TEST_f_f (tgamma, -0x29.000000000002p0L, 4.2070809772539892938717205103652583609422e-36L);
13800   TEST_f_f (tgamma, -0x29.fffffffffffep0L, 1.0016859469652887505173040814397197718981e-37L);
13801   TEST_f_f (tgamma, -0x2a.000000000002p0L, -1.0016859469652353766978684241048308120274e-37L);
13802   TEST_f_f (tgamma, -0x31.fffffffffffep0L, 4.6273774273632946947805289899230181990085e-51L);
13803   TEST_f_f (tgamma, -0x32.000000000002p0L, -4.6273774273630367887073532197576655720178e-51L);
13804   TEST_f_f (tgamma, -0x63.fffffffffffcp0L, 7.5400833348840965463348754984345825364294e-145L);
13805   TEST_f_f (tgamma, -0x64.000000000004p0L, -7.5400833348831085791638490135462230991587e-145L);
13806   TEST_f_f (tgamma, -0x95.fffffffffff8p0L, 6.1582369322723207086020016423767264008839e-250L);
13807   TEST_f_f (tgamma, -0x96.000000000008p0L, -6.1582369322705655439003240743176243138734e-250L);
13808   TEST_f_f (tgamma, -0xb4.fffffffffff8p0L, -9.6760879059917574597728750098636253931457e-319L, UNDERFLOW_EXCEPTION_DOUBLE);
13809   TEST_f_f (tgamma, -0xb5.000000000008p0L, 9.6760879059888966544677044221698800670218e-319L, UNDERFLOW_EXCEPTION_DOUBLE);
13810   TEST_f_f (tgamma, -0xb5.fffffffffff8p0L, 5.3165318164789884455066481673086605454904e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13811   TEST_f_f (tgamma, -0xb6.000000000008p0L, -5.3165318164774149139661976747137185876909e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13812   TEST_f_f (tgamma, -0xb6.fffffffffff8p0L, -2.9052086428846935908287469917922960610289e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13813   TEST_f_f (tgamma, -0xb7.000000000008p0L, 2.9052086428838328351126988236541632950925e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13814 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
13815   TEST_f_f (tgamma, -0xb7.fffffffffff8p0L, plus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13816   TEST_f_f (tgamma, -0xb8.000000000008p0L, minus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13817 # else
13818   TEST_f_f (tgamma, -0xb7.fffffffffff8p0L, 1.5789177406982032823826953250736039527543e-325L);
13819   TEST_f_f (tgamma, -0xb8.000000000008p0L, -1.5789177406977349925854817486109369828857e-325L);
13820 # endif
13821 #endif
13822 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
13823   TEST_f_f (tgamma, 0x8.00000000000000000000000004p0L, 5.0400000000000000000000000000020034765587e+03L);
13824   TEST_f_f (tgamma, 0x7.fffffffffffffffffffffffffep0L, 5.0399999999999999999999999999989982617206e+03L);
13825   TEST_f_f (tgamma, 0x7.00000000000000000000000002p0L, 7.2000000000000000000000000000013296297113e+02L);
13826   TEST_f_f (tgamma, 0x6.fffffffffffffffffffffffffep0L, 7.1999999999999999999999999999986703702887e+02L);
13827   TEST_f_f (tgamma, 0x6.00000000000000000000000002p0L, 1.2000000000000000000000000000002018834292e+02L);
13828   TEST_f_f (tgamma, 0x5.fffffffffffffffffffffffffep0L, 1.1999999999999999999999999999997981165708e+02L);
13829   TEST_f_f (tgamma, 0x5.00000000000000000000000002p0L, 2.4000000000000000000000000000003564352042e+01L);
13830   TEST_f_f (tgamma, 0x4.fffffffffffffffffffffffffep0L, 2.3999999999999999999999999999996435647958e+01L);
13831   TEST_f_f (tgamma, 0x4.00000000000000000000000002p0L, 6.0000000000000000000000000000007431765907e+00L);
13832   TEST_f_f (tgamma, 0x3.ffffffffffffffffffffffffffp0L, 5.9999999999999999999999999999996284117046e+00L);
13833   TEST_f_f (tgamma, 0x3.00000000000000000000000001p0L, 2.0000000000000000000000000000000909935607e+00L);
13834   TEST_f_f (tgamma, 0x2.ffffffffffffffffffffffffffp0L, 1.9999999999999999999999999999999090064393e+00L);
13835   TEST_f_f (tgamma, 0x2.00000000000000000000000001p0L, 1.0000000000000000000000000000000208448771e+00L);
13836   TEST_f_f (tgamma, 0x1.ffffffffffffffffffffffffff8p0L, 9.9999999999999999999999999999998957756146e-01L);
13837   TEST_f_f (tgamma, 0x1.000000000000000000000000008p0L, 9.9999999999999999999999999999998577053525e-01L);
13838   TEST_f_f (tgamma, 0x0.ffffffffffffffffffffffffffcp0L, 1.0000000000000000000000000000000071147324e+00L);
13839   TEST_f_f (tgamma, -0x0.ffffffffffffffffffffffffffcp0L, -8.1129638414606681695789005144064422784335e+31L);
13840   TEST_f_f (tgamma, -0x1.000000000000000000000000008p0L, 4.0564819207303340847894502572031577215665e+31L);
13841   TEST_f_f (tgamma, -0x1.ffffffffffffffffffffffffff8p0L, 2.0282409603651670423947251286016461392168e+31L);
13842   TEST_f_f (tgamma, -0x2.00000000000000000000000001p0L, -1.0141204801825835211973625643007538607832e+31L);
13843   TEST_f_f (tgamma, -0x2.ffffffffffffffffffffffffffp0L, -3.3804016006086117373245418810028760196114e+30L);
13844   TEST_f_f (tgamma, -0x3.00000000000000000000000001p0L, 3.3804016006086117373245418810024573137219e+30L);
13845   TEST_f_f (tgamma, -0x3.ffffffffffffffffffffffffffp0L, 8.4510040015215293433113547025072942156952e+29L);
13846   TEST_f_f (tgamma, -0x4.00000000000000000000000002p0L, -4.2255020007607646716556773512527057843048e+29L);
13847   TEST_f_f (tgamma, -0x4.fffffffffffffffffffffffffep0L, -8.4510040015215293433113547025080884313904e+28L);
13848   TEST_f_f (tgamma, -0x5.00000000000000000000000002p0L, 8.4510040015215293433113547025052449019430e+28L);
13849   TEST_f_f (tgamma, -0x5.fffffffffffffffffffffffffep0L, 1.4085006669202548905518924504180378867132e+28L);
13850   TEST_f_f (tgamma, -0x6.00000000000000000000000002p0L, -1.4085006669202548905518924504175176688423e+28L);
13851   TEST_f_f (tgamma, -0x6.fffffffffffffffffffffffffep0L, -2.0121438098860784150741320720257967542615e+27L);
13852   TEST_f_f (tgamma, -0x7.00000000000000000000000002p0L, 2.0121438098860784150741320720249968965322e+27L);
13853   TEST_f_f (tgamma, -0x7.fffffffffffffffffffffffffep0L, 2.5151797623575980188426650900322769448110e+26L);
13854   TEST_f_f (tgamma, -0x8.00000000000000000000000004p0L, -1.2575898811787990094213325450153421028080e+26L);
13855   TEST_f_f (tgamma, -0x9.fffffffffffffffffffffffffcp0L, 1.3973220901986655660237028277960625420495e+24L);
13856   TEST_f_f (tgamma, -0xa.00000000000000000000000004p0L, -1.3973220901986655660237028277947663821128e+24L);
13857   TEST_f_f (tgamma, -0x13.fffffffffffffffffffffffff8p0L, 1.0420893204640670202556853709074896123293e+12L);
13858   TEST_f_f (tgamma, -0x14.00000000000000000000000008p0L, -1.0420893204640670202556853709050065497299e+12L);
13859   TEST_f_f (tgamma, -0x1d.fffffffffffffffffffffffff8p0L, 9.5580541610429641982963434151488827190079e-03L);
13860   TEST_f_f (tgamma, -0x1e.00000000000000000000000008p0L, -9.5580541610429641982963434151231128067179e-03L);
13861   TEST_f_f (tgamma, -0x27.fffffffffffffffffffffffffp0L, 1.5536546823612837336494536911280147806523e-18L);
13862   TEST_f_f (tgamma, -0x28.0000000000000000000000001p0L, -1.5536546823612837336494536911189419578973e-18L);
13863   TEST_f_f (tgamma, -0x28.fffffffffffffffffffffffffp0L, -3.7894016642958139845108626612879138384405e-20L);
13864   TEST_f_f (tgamma, -0x29.0000000000000000000000001p0L, 3.7894016642958139845108626612656391824122e-20L);
13865   TEST_f_f (tgamma, -0x29.fffffffffffffffffffffffffp0L, 9.0223849149900332964544349078285357440663e-22L);
13866   TEST_f_f (tgamma, -0x2a.0000000000000000000000001p0L, -9.0223849149900332964544349077751619246306e-22L);
13867   TEST_f_f (tgamma, -0x31.fffffffffffffffffffffffffp0L, 4.1679710515150795310771069868348482819424e-35L);
13868   TEST_f_f (tgamma, -0x32.0000000000000000000000001p0L, -4.1679710515150795310771069868090576746248e-35L);
13869   TEST_f_f (tgamma, -0x63.ffffffffffffffffffffffffep0L, 6.7915032994648558610510614163560656864280e-129L);
13870   TEST_f_f (tgamma, -0x64.0000000000000000000000002p0L, -6.7915032994648558610510614162572689693253e-129L);
13871   TEST_f_f (tgamma, -0x95.ffffffffffffffffffffffffcp0L, 5.5468467106873795353190582463444660395353e-234L);
13872   TEST_f_f (tgamma, -0x96.0000000000000000000000004p0L, -5.5468467106873795353190582461689495693675e-234L);
13873   TEST_f_f (tgamma, -0xb4.ffffffffffffffffffffffffcp0L, -8.7154451775644399729745472278589884205029e-303L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13874   TEST_f_f (tgamma, -0xb5.0000000000000000000000004p0L, 8.7154451775644399729745472275729078899858e-303L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13875   TEST_f_f (tgamma, -0xb5.ffffffffffffffffffffffffcp0L, 4.7887061415189230620739270482742524864974e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13876   TEST_f_f (tgamma, -0xb6.0000000000000000000000004p0L, -4.7887061415189230620739270481168993324524e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13877   TEST_f_f (tgamma, -0xb6.ffffffffffffffffffffffffcp0L, -2.6167793123054224382917634143575601407067e-307L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13878   TEST_f_f (tgamma, -0xb7.0000000000000000000000004p0L, 2.6167793123054224382917634142714845691019e-307L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13879   TEST_f_f (tgamma, -0xb7.ffffffffffffffffffffffffcp0L, 1.4221626697312078468976975078030462044826e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
13880   TEST_f_f (tgamma, -0xb8.0000000000000000000000004p0L, -1.4221626697312078468976975077562172247612e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
13881   TEST_f_f (tgamma, -0xbb.ffffffffffffffffffffffffcp0L, 1.1756150745511026776007338998283058108448e-318L, UNDERFLOW_EXCEPTION_DOUBLE);
13882   TEST_f_f (tgamma, -0xbc.0000000000000000000000004p0L, -1.1756150745511026776007338997894360215107e-318L, UNDERFLOW_EXCEPTION_DOUBLE);
13883   TEST_f_f (tgamma, -0xbc.ffffffffffffffffffffffffcp0L, -6.2201855796354639026493857133773832713743e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13884   TEST_f_f (tgamma, -0xbd.0000000000000000000000004p0L, 6.2201855796354639026493857131715153125175e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13885   TEST_f_f (tgamma, -0xbd.ffffffffffffffffffffffffcp0L, 3.2737818840186652119207293228302560914295e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13886   TEST_f_f (tgamma, -0xbe.0000000000000000000000004p0L, -3.2737818840186652119207293227217957948294e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13887 # if LDBL_MAX_EXP <= 1024
13888   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffcp0L, minus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13889   TEST_f_f (tgamma, -0xbf.0000000000000000000000004p0L, plus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13890 # else
13891   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffcp0L, -1.7140219288055838805867692789687487834686e-325L);
13892   TEST_f_f (tgamma, -0xbf.0000000000000000000000004p0L, 1.7140219288055838805867692789119066543632e-325L);
13893 # endif
13894 #endif
13895 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13896   TEST_f_f (tgamma, 0x8.000000000000001p0L, 5.0400000000000000088113830892247051102283e+03L);
13897   TEST_f_f (tgamma, 0x7.fffffffffffffff8p0L, 5.0399999999999999955943084553876474508520e+03L);
13898   TEST_f_f (tgamma, 0x7.0000000000000008p0L, 7.2000000000000000058477733127664675369681e+02L);
13899   TEST_f_f (tgamma, 0x6.fffffffffffffff8p0L, 7.1999999999999999941522266872335324679893e+02L);
13900   TEST_f_f (tgamma, 0x6.0000000000000008p0L, 1.2000000000000000008878927116622375680433e+02L);
13901   TEST_f_f (tgamma, 0x5.fffffffffffffff8p0L, 1.1999999999999999991121072883377624326546e+02L);
13902   TEST_f_f (tgamma, 0x5.0000000000000008p0L, 2.4000000000000000015676186062072582846211e+01L);
13903   TEST_f_f (tgamma, 0x4.fffffffffffffff8p0L, 2.3999999999999999984323813937927417165027e+01L);
13904   TEST_f_f (tgamma, 0x4.0000000000000008p0L, 6.0000000000000000032685252120268430507939e+00L);
13905   TEST_f_f (tgamma, 0x3.fffffffffffffffcp0L, 5.9999999999999999983657373939865784753909e+00L);
13906   TEST_f_f (tgamma, 0x3.0000000000000004p0L, 2.0000000000000000004001939123397399171482e+00L);
13907   TEST_f_f (tgamma, 0x2.fffffffffffffffcp0L, 1.9999999999999999995998060876602600829690e+00L);
13908   TEST_f_f (tgamma, 0x2.0000000000000004p0L, 1.0000000000000000000916767389213195151634e+00L);
13909   TEST_f_f (tgamma, 0x1.fffffffffffffffep0L, 9.9999999999999999995416163053934024243282e-01L);
13910   TEST_f_f (tgamma, 0x1.0000000000000002p0L, 9.9999999999999999993741815221210931418291e-01L);
13911   TEST_f_f (tgamma, 0x0.ffffffffffffffffp0L, 1.0000000000000000000312909238939453429173e+00L);
13912   TEST_f_f (tgamma, -0x0.ffffffffffffffffp0L, -1.8446744073709551616422784335098467139470e+19L);
13913   TEST_f_f (tgamma, -0x1.0000000000000002p0L, 9.2233720368547758075772156649015328607596e+18L);
13914   TEST_f_f (tgamma, -0x1.fffffffffffffffep0L, 4.6116860184273879044613921675492335697983e+18L);
13915   TEST_f_f (tgamma, -0x2.0000000000000004p0L, -2.3058430092136939515386078324507664305064e+18L);
13916   TEST_f_f (tgamma, -0x2.fffffffffffffffcp0L, -7.6861433640456465087601961140530007887063e+17L);
13917   TEST_f_f (tgamma, -0x3.0000000000000004p0L, 7.6861433640456465045731372192803325462836e+17L);
13918   TEST_f_f (tgamma, -0x3.fffffffffffffffcp0L, 1.9215358410114116272942156951799168638773e+17L);
13919   TEST_f_f (tgamma, -0x4.0000000000000008p0L, -9.6076792050570581270578430482008313684602e+16L);
13920   TEST_f_f (tgamma, -0x4.fffffffffffffff8p0L, -1.9215358410114116280884313903598337283601e+16L);
13921   TEST_f_f (tgamma, -0x5.0000000000000008p0L, 1.9215358410114116252449019429734996071487e+16L);
13922   TEST_f_f (tgamma, -0x5.fffffffffffffff8p0L, 3.2025597350190193803788671320812043622696e+15L);
13923   TEST_f_f (tgamma, -0x6.0000000000000008p0L, -3.2025597350190193751766884234743511972877e+15L);
13924   TEST_f_f (tgamma, -0x6.fffffffffffffff8p0L, -4.5750853357414562579675426149912896787735e+14L);
13925   TEST_f_f (tgamma, -0x7.0000000000000008p0L, 4.5750853357414562499689653215166468353753e+14L);
13926   TEST_f_f (tgamma, -0x7.fffffffffffffff8p0L, 5.7188566696768203227694481100089533685959e+13L);
13927   TEST_f_f (tgamma, -0x8.000000000000001p0L, -2.8594283348384101534210280804672371201060e+13L);
13928   TEST_f_f (tgamma, -0x9.fffffffffffffffp0L, 3.1771425942649001828476427167843945971988e+11L);
13929   TEST_f_f (tgamma, -0xa.000000000000001p0L, -3.1771425942649001698860433502350057763905e+11L);
13930   TEST_f_f (tgamma, -0x13.ffffffffffffffep0L, 2.3694367893405502075347562184931828448654e-01L);
13931   TEST_f_f (tgamma, -0x14.000000000000002p0L, -2.3694367893405501827041302245929389013031e-01L);
13932   TEST_f_f (tgamma, -0x1d.ffffffffffffffep0L, 2.1732499046818166459536268654187775086902e-15L);
13933   TEST_f_f (tgamma, -0x1e.000000000000002p0L, -2.1732499046818166201837145753965837196590e-15L);
13934   TEST_f_f (tgamma, -0x27.ffffffffffffffcp0L, 3.5326017549807232935581894777156474496719e-31L);
13935   TEST_f_f (tgamma, -0x28.000000000000004p0L, -3.5326017549807232028299619269080956965758e-31L);
13936   TEST_f_f (tgamma, -0x28.ffffffffffffffcp0L, -8.6161018414163982777002940498289948893044e-33L);
13937   TEST_f_f (tgamma, -0x29.000000000000004p0L, 8.6161018414163980549537337663264762179535e-33L);
13938   TEST_f_f (tgamma, -0x29.ffffffffffffffcp0L, 2.0514528193848567329552463626090806737389e-34L);
13939   TEST_f_f (tgamma, -0x2a.000000000000004p0L, -2.0514528193848566795814269269517457847791e-34L);
13940   TEST_f_f (tgamma, -0x31.ffffffffffffffcp0L, 9.4768689712397635680446279661359728835046e-48L);
13941   TEST_f_f (tgamma, -0x32.000000000000004p0L, -9.4768689712397633101385547903658075308777e-48L);
13942   TEST_f_f (tgamma, -0x63.ffffffffffffff8p0L, 1.5442090669841618542494279375256856430049e-141L);
13943   TEST_f_f (tgamma, -0x64.000000000000008p0L, -1.5442090669841617554527108348771968070612e-141L);
13944   TEST_f_f (tgamma, -0x95.ffffffffffffffp0L, 1.2612069237291916400144732227892704713839e-246L);
13945   TEST_f_f (tgamma, -0x96.00000000000001p0L, -1.2612069237291914644980030550324645611752e-246L);
13946   TEST_f_f (tgamma, -0xb4.ffffffffffffffp0L, -1.9816628031468191243385005680879281767694e-315L);
13947   TEST_f_f (tgamma, -0xb5.00000000000001p0L, 1.9816628031468188382579700510291588022368e-315L);
13948   TEST_f_f (tgamma, -0xb5.ffffffffffffffp0L, 1.0888257160147357826865964233809723297472e-317L);
13949   TEST_f_f (tgamma, -0xb6.00000000000001p0L, -1.0888257160147356253334423783317128355514e-317L);
13950   TEST_f_f (tgamma, -0xb6.ffffffffffffffp0L, -5.9498673006269714905418984659220067091260e-320L);
13951   TEST_f_f (tgamma, -0xb7.00000000000001p0L, 5.9498673006269706297861824177538685763601e-320L);
13952   TEST_f_f (tgamma, -0xb7.ffffffffffffffp0L, 3.2336235329494410277123118903958061569834e-322L);
13953   TEST_f_f (tgamma, -0xb8.00000000000001p0L, -3.2336235329494405594225146768193434900135e-322L);
13954   TEST_f_f (tgamma, -0xbb.ffffffffffffffp0L, 2.6730392040715350119087465463119939092815e-331L);
13955   TEST_f_f (tgamma, -0xbc.00000000000001p0L, -2.6730392040715346232108532050343031951651e-331L);
13956   TEST_f_f (tgamma, -0xbc.ffffffffffffffp0L, -1.4143064571807063556111222197839950086445e-333L);
13957   TEST_f_f (tgamma, -0xbd.00000000000001p0L, 1.4143064571807061497431633629389135273431e-333L);
13958   TEST_f_f (tgamma, -0xbd.ffffffffffffffp0L, 7.4437181956879281879706555863416819210399e-336L);
13959   TEST_f_f (tgamma, -0xbe.00000000000001p0L, -7.4437181956879271033676895858841525581153e-336L);
13960   TEST_f_f (tgamma, -0xbe.ffffffffffffffp0L, -3.8972346574282346536709453101948570578636e-338L);
13961   TEST_f_f (tgamma, -0xbf.00000000000001p0L, 3.8972346574282340852496542564155275274974e-338L);
13962   TEST_f_f (tgamma, -0xf9.ffffffffffffffp0L, 2.2289142548411573883553287678043297937797e-476L);
13963   TEST_f_f (tgamma, -0xfa.00000000000001p0L, -2.2289142548411570466476165308364665814265e-476L);
13964   TEST_f_f (tgamma, -0x1f3.fffffffffffffep0L, 2.9528489142763141594943668922610562530068e-1118L);
13965   TEST_f_f (tgamma, -0x1f4.00000000000002p0L, -2.9528489142763131406565394149878256133744e-1118L);
13966   TEST_f_f (tgamma, -0x2ed.fffffffffffffcp0L, 6.9801511765871818502006905472380418430269e-1817L);
13967   TEST_f_f (tgamma, -0x2ee.00000000000004p0L, -6.9801511765871767194421856376592926002995e-1817L);
13968   TEST_f_f (tgamma, -0x3e7.fffffffffffffcp0L, 4.4768809295877296071892611539415773519036e-2552L);
13969   TEST_f_f (tgamma, -0x3e8.00000000000004p0L, -4.4768809295877261735541135972060089530309e-2552L);
13970   TEST_f_f (tgamma, -0x4e1.fffffffffffff8p0L, 5.4651488569236507565341414077911790252381e-3315L);
13971   TEST_f_f (tgamma, -0x4e2.00000000000008p0L, -5.4651488569236421026544487194247355967789e-3315L);
13972   TEST_f_f (tgamma, -0x5db.fffffffffffff8p0L, 1.8718211510339187689122114747834510481993e-4099L);
13973   TEST_f_f (tgamma, -0x5dc.00000000000008p0L, -1.8718211510339157291960718369454861898499e-4099L);
13974   TEST_f_f (tgamma, -0x6d5.fffffffffffff8p0L, 4.2925786447266492555651378780094011518063e-4902L);
13975   TEST_f_f (tgamma, -0x6d6.00000000000008p0L, -4.2925786447266421378134368786479937285900e-4902L);
13976   TEST_f_f (tgamma, -0x6e2.fffffffffffff8p0L, -2.8229173528168668283609231628661510187536e-4944L, UNDERFLOW_EXCEPTION);
13977   TEST_f_f (tgamma, -0x6e3.00000000000008p0L, 2.8229173528168621428945467532322397890424e-4944L, UNDERFLOW_EXCEPTION);
13978   TEST_f_f (tgamma, -0x6e3.fffffffffffff8p0L, 1.6002932839097884515524894602387278842659e-4947L, UNDERFLOW_EXCEPTION);
13979   TEST_f_f (tgamma, -0x6e4.00000000000008p0L, -1.6002932839097857951909742110188634438017e-4947L, UNDERFLOW_EXCEPTION);
13980   TEST_f_f (tgamma, -0x6e4.fffffffffffff8p0L, -9.0668174725767051085164382743343408095146e-4951L, UNDERFLOW_EXCEPTION);
13981   TEST_f_f (tgamma, -0x6e5.00000000000008p0L, 9.0668174725766900571689083050287838090189e-4951L, UNDERFLOW_EXCEPTION);
13982 # if LDBL_MANT_DIG <= 64
13983   TEST_f_f (tgamma, -0x6e5.fffffffffffff8p0L, plus_zero, UNDERFLOW_EXCEPTION);
13984   TEST_f_f (tgamma, -0x6e6.00000000000008p0L, minus_zero, UNDERFLOW_EXCEPTION);
13985 # else
13986   TEST_f_f (tgamma, -0x6e5.fffffffffffff8p0L, 5.1340982290921319983501912122292601780326e-4954L, UNDERFLOW_EXCEPTION);
13987   TEST_f_f (tgamma, -0x6e6.00000000000008p0L, -5.1340982290921234748578193083614111497314e-4954L, UNDERFLOW_EXCEPTION);
13988 # endif
13989 # if LDBL_MANT_DIG >= 113
13990   TEST_f_f (tgamma, 0x8.0000000000000000000000000008p0L, 5.0400000000000000000000000000000156521606e+03L);
13991   TEST_f_f (tgamma, 0x7.fffffffffffffffffffffffffffcp0L, 5.0399999999999999999999999999999921739197e+03L);
13992   TEST_f_f (tgamma, 0x7.0000000000000000000000000004p0L, 7.2000000000000000000000000000000103877321e+02L);
13993   TEST_f_f (tgamma, 0x6.fffffffffffffffffffffffffffcp0L, 7.1999999999999999999999999999999896122679e+02L);
13994   TEST_f_f (tgamma, 0x6.0000000000000000000000000004p0L, 1.2000000000000000000000000000000015772143e+02L);
13995   TEST_f_f (tgamma, 0x5.fffffffffffffffffffffffffffcp0L, 1.1999999999999999999999999999999984227857e+02L);
13996   TEST_f_f (tgamma, 0x5.0000000000000000000000000004p0L, 2.4000000000000000000000000000000027846500e+01L);
13997   TEST_f_f (tgamma, 0x4.fffffffffffffffffffffffffffcp0L, 2.3999999999999999999999999999999972153500e+01L);
13998   TEST_f_f (tgamma, 0x4.0000000000000000000000000004p0L, 6.0000000000000000000000000000000058060671e+00L);
13999   TEST_f_f (tgamma, 0x3.fffffffffffffffffffffffffffep0L, 5.9999999999999999999999999999999970969664e+00L);
14000   TEST_f_f (tgamma, 0x3.0000000000000000000000000002p0L, 2.0000000000000000000000000000000007108872e+00L);
14001   TEST_f_f (tgamma, 0x2.fffffffffffffffffffffffffffep0L, 1.9999999999999999999999999999999992891128e+00L);
14002   TEST_f_f (tgamma, 0x2.0000000000000000000000000002p0L, 1.0000000000000000000000000000000001628506e+00L);
14003   TEST_f_f (tgamma, 0x1.ffffffffffffffffffffffffffffp0L, 9.9999999999999999999999999999999991857470e-01L);
14004   TEST_f_f (tgamma, 0x1.0000000000000000000000000001p0L, 9.9999999999999999999999999999999988883231e-01L);
14005   TEST_f_f (tgamma, 0x0.ffffffffffffffffffffffffffff8p0L, 1.0000000000000000000000000000000000555838e+00L);
14006   TEST_f_f (tgamma, -0x0.ffffffffffffffffffffffffffff8p0L, -1.0384593717069655257060992658440192422784e+34L);
14007   TEST_f_f (tgamma, -0x1.0000000000000000000000000001p0L, 5.1922968585348276285304963292200955772157e+33L);
14008   TEST_f_f (tgamma, -0x1.ffffffffffffffffffffffffffffp0L, 2.5961484292674138142652481646100484613922e+33L);
14009   TEST_f_f (tgamma, -0x2.0000000000000000000000000002p0L, -1.2980742146337069071326240823050235386078e+33L);
14010   TEST_f_f (tgamma, -0x2.fffffffffffffffffffffffffffep0L, -4.3269140487790230237754136076834154268628e+32L);
14011   TEST_f_f (tgamma, -0x3.0000000000000000000000000002p0L, 4.3269140487790230237754136076834112398039e+32L);
14012   TEST_f_f (tgamma, -0x3.fffffffffffffffffffffffffffep0L, 1.0817285121947557559438534019208539608824e+32L);
14013   TEST_f_f (tgamma, -0x4.0000000000000000000000000004p0L, -5.4086425609737787797192670096042603911764e+31L);
14014   TEST_f_f (tgamma, -0x4.fffffffffffffffffffffffffffcp0L, -1.0817285121947557559438534019208547550981e+31L);
14015   TEST_f_f (tgamma, -0x5.0000000000000000000000000004p0L, 1.0817285121947557559438534019208519115686e+31L);
14016   TEST_f_f (tgamma, -0x5.fffffffffffffffffffffffffffcp0L, 1.8028808536579262599064223365347581566449e+30L);
14017   TEST_f_f (tgamma, -0x6.0000000000000000000000000004p0L, -1.8028808536579262599064223365347529544662e+30L);
14018   TEST_f_f (tgamma, -0x6.fffffffffffffffffffffffffffcp0L, -2.5755440766541803712948890521925119357966e+29L);
14019   TEST_f_f (tgamma, -0x7.0000000000000000000000000004p0L, 2.5755440766541803712948890521925039372193e+29L);
14020   TEST_f_f (tgamma, -0x7.fffffffffffffffffffffffffffcp0L, 3.2194300958177254641186113152406402297656e+28L);
14021   TEST_f_f (tgamma, -0x8.0000000000000000000000000008p0L, -1.6097150479088627320593056576203121511868e+28L);
14022   TEST_f_f (tgamma, -0x9.fffffffffffffffffffffffffff8p0L, 1.7885722754542919245103396195781369922635e+26L);
14023   TEST_f_f (tgamma, -0xa.0000000000000000000000000008p0L, -1.7885722754542919245103396195781240306642e+26L);
14024   TEST_f_f (tgamma, -0x13.fffffffffffffffffffffffffffp0L, 1.3338743301940057859272772747600099590309e+14L);
14025   TEST_f_f (tgamma, -0x14.000000000000000000000000001p0L, -1.3338743301940057859272772747599851284049e+14L);
14026   TEST_f_f (tgamma, -0x1d.fffffffffffffffffffffffffffp0L, 1.2234309326134994173819319571374205986026e+00L);
14027   TEST_f_f (tgamma, -0x1e.000000000000000000000000001p0L, -1.2234309326134994173819319571373948286903e+00L);
14028   TEST_f_f (tgamma, -0x27.ffffffffffffffffffffffffffep0L, 1.9886779934224431790713007246380976767855e-16L);
14029   TEST_f_f (tgamma, -0x28.000000000000000000000000002p0L, -1.9886779934224431790713007246380069485580e-16L);
14030   TEST_f_f (tgamma, -0x28.ffffffffffffffffffffffffffep0L, -4.8504341302986419001739042064343853066259e-18L);
14031   TEST_f_f (tgamma, -0x29.000000000000000000000000002p0L, 4.8504341302986419001739042064341625600656e-18L);
14032   TEST_f_f (tgamma, -0x29.ffffffffffffffffffffffffffep0L, 1.1548652691187242619461676681986633377063e-19L);
14033   TEST_f_f (tgamma, -0x2a.000000000000000000000000002p0L, -1.1548652691187242619461676681986099638869e-19L);
14034   TEST_f_f (tgamma, -0x31.ffffffffffffffffffffffffffep0L, 5.3350029459393017997786969431322287652396e-33L);
14035   TEST_f_f (tgamma, -0x32.000000000000000000000000002p0L, -5.3350029459393017997786969431319708591664e-33L);
14036   TEST_f_f (tgamma, -0x63.ffffffffffffffffffffffffffcp0L, 8.6931242233150155021453586128730281632676e-127L);
14037   TEST_f_f (tgamma, -0x64.000000000000000000000000004p0L, -8.6931242233150155021453586128720401960966e-127L);
14038   TEST_f_f (tgamma, -0x95.ffffffffffffffffffffffffff8p0L, 7.0999637896798458052083945552094635720486e-232L);
14039   TEST_f_f (tgamma, -0x96.000000000000000000000000008p0L, -7.0999637896798458052083945552077084073470e-232L);
14040   TEST_f_f (tgamma, -0xb4.ffffffffffffffffffffffffff8p0L, -1.1155769827282483165407420451477844041365e-300L);
14041   TEST_f_f (tgamma, -0xb5.000000000000000000000000008p0L, 1.1155769827282483165407420451474983236060e-300L);
14042   TEST_f_f (tgamma, -0xb5.ffffffffffffffffffffffffff8p0L, 6.1295438611442215194546266216911239298981e-303L);
14043   TEST_f_f (tgamma, -0xb6.000000000000000000000000008p0L, -6.1295438611442215194546266216895503983577e-303L);
14044   TEST_f_f (tgamma, -0xb6.ffffffffffffffffffffffffff8p0L, -3.3494775197509407210134571703230189921356e-305L);
14045   TEST_f_f (tgamma, -0xb7.000000000000000000000000008p0L, 3.3494775197509407210134571703221582364195e-305L);
14046   TEST_f_f (tgamma, -0xb7.ffffffffffffffffffffffffff8p0L, 1.8203682172559460440290528099581627396147e-307L);
14047   TEST_f_f (tgamma, -0xb8.000000000000000000000000008p0L, -1.8203682172559460440290528099576944498174e-307L);
14048   TEST_f_f (tgamma, -0xbb.ffffffffffffffffffffffffff8p0L, 1.5047872954254114273289393917555491216542e-316L);
14049   TEST_f_f (tgamma, -0xbc.000000000000000000000000008p0L, -1.5047872954254114273289393917551604237609e-316L);
14050   TEST_f_f (tgamma, -0xbc.ffffffffffffffffffffffffff8p0L, -7.9618375419333937953912137129923244334851e-319L);
14051   TEST_f_f (tgamma, -0xbd.000000000000000000000000008p0L, 7.9618375419333937953912137129902657538965e-319L);
14052   TEST_f_f (tgamma, -0xbd.ffffffffffffffffffffffffff8p0L, 4.1904408115438914712585335331538555086887e-321L);
14053   TEST_f_f (tgamma, -0xbe.000000000000000000000000008p0L, -4.1904408115438914712585335331527709057227e-321L);
14054   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffff8p0L, -2.1939480688711473671510646770439036908579e-323L);
14055   TEST_f_f (tgamma, -0xbf.000000000000000000000000008p0L, 2.1939480688711473671510646770433352695669e-323L);
14056   TEST_f_f (tgamma, -0xf9.ffffffffffffffffffffffffff8p0L, 1.2547671759429278005937024349858508569625e-461L);
14057   TEST_f_f (tgamma, -0xfa.000000000000000000000000008p0L, -1.2547671759429278005937024349855091492502e-461L);
14058   TEST_f_f (tgamma, -0x1f3.ffffffffffffffffffffffffffp0L, 1.6623061587520224800948170558276526986560e-1103L);
14059   TEST_f_f (tgamma, -0x1f4.00000000000000000000000001p0L, -1.6623061587520224800948170558266338608285e-1103L);
14060   TEST_f_f (tgamma, -0x2ed.fffffffffffffffffffffffffep0L, 3.9294757797334687313030998663853566763041e-1802L);
14061   TEST_f_f (tgamma, -0x2ee.00000000000000000000000002p0L, -3.9294757797334687313030998663802259177992e-1802L);
14062   TEST_f_f (tgamma, -0x3e7.fffffffffffffffffffffffffep0L, 2.5202599107841713834679953735597552855978e-2537L);
14063   TEST_f_f (tgamma, -0x3e8.00000000000000000000000002p0L, -2.5202599107841713834679953735563216504503e-2537L);
14064   TEST_f_f (tgamma, -0x4e1.fffffffffffffffffffffffffcp0L, 3.0766052944457032773369415396747635242705e-3300L);
14065   TEST_f_f (tgamma, -0x4e2.00000000000000000000000004p0L, -3.0766052944457032773369415396661096445778e-3300L);
14066   TEST_f_f (tgamma, -0x5db.fffffffffffffffffffffffffcp0L, 1.0537416297875703295453200836588944487917e-4084L);
14067   TEST_f_f (tgamma, -0x5dc.00000000000000000000000004p0L, -1.0537416297875703295453200836558547326520e-4084L);
14068   TEST_f_f (tgamma, -0x6d5.fffffffffffffffffffffffffcp0L, 2.4165069481061837867659591369998698607387e-4887L);
14069   TEST_f_f (tgamma, -0x6d6.00000000000000000000000004p0L, -2.4165069481061837867659591369927521090377e-4887L);
14070   TEST_f_f (tgamma, -0x6e2.fffffffffffffffffffffffffcp0L, -1.5891611922804672355414813803008070609431e-4929L);
14071   TEST_f_f (tgamma, -0x6e3.00000000000000000000000004p0L, 1.5891611922804672355414813802961215945667e-4929L);
14072   TEST_f_f (tgamma, -0x6e3.fffffffffffffffffffffffffcp0L, 9.0088502963745308137272187091882496519917e-4933L, UNDERFLOW_EXCEPTION);
14073   TEST_f_f (tgamma, -0x6e4.00000000000000000000000004p0L, -9.0088502963745308137272187091616860368392e-4933L, UNDERFLOW_EXCEPTION);
14074   TEST_f_f (tgamma, -0x6e4.fffffffffffffffffffffffffcp0L, -5.1041644738665896961627301468488672286746e-4936L, UNDERFLOW_EXCEPTION);
14075   TEST_f_f (tgamma, -0x6e5.00000000000000000000000004p0L, 5.1041644738665896961627301468338158811446e-4936L, UNDERFLOW_EXCEPTION);
14076   TEST_f_f (tgamma, -0x6e5.fffffffffffffffffffffffffcp0L, 2.8902403589278537350864836618623260468143e-4939L, UNDERFLOW_EXCEPTION);
14077   TEST_f_f (tgamma, -0x6e6.00000000000000000000000004p0L, -2.8902403589278537350864836618538025544424e-4939L, UNDERFLOW_EXCEPTION);
14078   TEST_f_f (tgamma, -0x6eb.fffffffffffffffffffffffffcp0L, 9.4152481960798287090819640211017219042636e-4959L, UNDERFLOW_EXCEPTION);
14079   TEST_f_f (tgamma, -0x6ec.00000000000000000000000004p0L, -9.4152481960798287090819640210739431797168e-4959L, UNDERFLOW_EXCEPTION);
14080   TEST_f_f (tgamma, -0x6ec.fffffffffffffffffffffffffcp0L, -5.3103486723518492437010513373388172315540e-4962L, UNDERFLOW_EXCEPTION);
14081   TEST_f_f (tgamma, -0x6ed.00000000000000000000000004p0L, 5.3103486723518492437010513373231484108489e-4962L, UNDERFLOW_EXCEPTION);
14082   TEST_f_f (tgamma, -0x6ed.fffffffffffffffffffffffffcp0L, 2.9934321715624854812294539669328172615019e-4965L, UNDERFLOW_EXCEPTION);
14083   TEST_f_f (tgamma, -0x6ee.00000000000000000000000004p0L, -2.9934321715624854812294539669239841152754e-4965L, UNDERFLOW_EXCEPTION);
14084   TEST_f_f (tgamma, -0x6ee.fffffffffffffffffffffffffcp0L, minus_zero, UNDERFLOW_EXCEPTION);
14085   TEST_f_f (tgamma, -0x6ef.00000000000000000000000004p0L, plus_zero, UNDERFLOW_EXCEPTION);
14086 # endif
14087 #endif
14088   TEST_f_f (tgamma, -0x1.0a32a2p+5L, 1.8125267978155035272941154746083439329912e-37L);
14089 #ifndef TEST_FLOAT
14090   TEST_f_f (tgamma, -0x1.5800000080001p+7L, -3.1439271448823567326093363350637118195240e-304L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
14091 #endif
14092   TEST_f_f (tgamma, 18.5L, 1.4986120533153361177371791123515513270334e+15L);
14093   TEST_f_f (tgamma, 19.5L, 2.7724322986333718178137813578503699550119e+16L);
14094   TEST_f_f (tgamma, 23.5L, 5.3613035875444147334274983856108155717836e+21L);
14095   TEST_f_f (tgamma, 29.5L, 1.6348125198274266444378807806868221866931e+30L);
14096   TEST_f_f (tgamma, 30.5L, 4.8226969334909086010917483030261254507447e+31L);
14097   TEST_f_f (tgamma, 31.5L, 1.4709225647147271233329832324229682624771e+33L);
14098   TEST_f_f (tgamma, 32.5L, 4.6334060788513904384988971821323500268029e+34L);
14099   TEST_f_f (tgamma, 33.5L, 1.5058569756267018925121415841930137587110e+36L);
14100   TEST_f_f (tgamma, 34.5L, 5.0446208683494513399156743070465960916817e+37L);
14101   TEST_f_f (tgamma, 0x2.30a43cp+4L, 3.4027979115654976101247558405326779640190e+38L);
14102 #ifdef TEST_FLOAT
14103   TEST_f_f (tgamma, 0x2.30a44p+4L, plus_infty, OVERFLOW_EXCEPTION);
14104 #else
14105   TEST_f_f (tgamma, 0x2.30a44p+4L, 3.4028438913396451054667218138127983367181e+38L);
14106 #endif
14107 #ifndef TEST_FLOAT
14108   TEST_f_f (tgamma, 0xa.b9fd72b0fb238p+4L, 1.7976931348622298700886249281842651388250e+308L);
14109 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
14110   TEST_f_f (tgamma, 0xa.b9fd72b0fb24p+4L, plus_infty, OVERFLOW_EXCEPTION);
14111 # else
14112   TEST_f_f (tgamma, 0xa.b9fd72b0fb24p+4L, 1.7976931348624926129589466917917870782484e+308L);
14113 # endif
14114 #endif
14115 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
14116   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f4p+4L, 1.7976931348623158079372897140307719334857e+308L);
14117 # if LDBL_MAX_EXP <= 1024
14118   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f8p+4L, plus_infty, OVERFLOW_EXCEPTION);
14119 # else
14120   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f8p+4L, 1.7976931348623158079372897140599422519044e+308L);
14121 # endif
14122 #endif
14123 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14124   TEST_f_f (tgamma, 0x6.db8c603359a97108p+8L, 1.1897314953572317517071551278058233700012e+4932L);
14125   TEST_f_f (tgamma, 0x6.db8c603359a9711p+8L, plus_infty, OVERFLOW_EXCEPTION);
14126 # if LDBL_MANT_DIG >= 113
14127   TEST_f_f (tgamma, 0x6.db8c603359a971081bc4a2e9dfdp+8L, 1.1897314953572317650857593266265995494998e+4932L);
14128   TEST_f_f (tgamma, 0x6.db8c603359a971081bc4a2e9dfd4p+8L, plus_infty, OVERFLOW_EXCEPTION);
14129 # endif
14130 #endif
14131
14132   END (tgamma);
14133 }
14134
14135
14136 static void
14137 trunc_test (void)
14138 {
14139   START (trunc);
14140
14141   TEST_f_f (trunc, plus_infty, plus_infty);
14142   TEST_f_f (trunc, minus_infty, minus_infty);
14143   TEST_f_f (trunc, qnan_value, qnan_value);
14144
14145   TEST_f_f (trunc, 0, 0);
14146   TEST_f_f (trunc, minus_zero, minus_zero);
14147   TEST_f_f (trunc, 0.1, 0);
14148   TEST_f_f (trunc, 0.25, 0);
14149   TEST_f_f (trunc, 0.625, 0);
14150   TEST_f_f (trunc, -0.1, minus_zero);
14151   TEST_f_f (trunc, -0.25, minus_zero);
14152   TEST_f_f (trunc, -0.625, minus_zero);
14153   TEST_f_f (trunc, 1, 1);
14154   TEST_f_f (trunc, -1, -1);
14155   TEST_f_f (trunc, 1.625, 1);
14156   TEST_f_f (trunc, -1.625, -1);
14157
14158   TEST_f_f (trunc, 1048580.625L, 1048580L);
14159   TEST_f_f (trunc, -1048580.625L, -1048580L);
14160
14161   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
14162   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
14163
14164   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
14165   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
14166
14167 #ifdef TEST_LDOUBLE
14168   /* The result can only be represented in long double.  */
14169   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
14170   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
14171   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
14172   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
14173   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
14174
14175 # if LDBL_MANT_DIG > 100
14176   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
14177   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
14178   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
14179 # endif
14180
14181   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
14182   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
14183   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
14184   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
14185   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
14186
14187 # if LDBL_MANT_DIG > 100
14188   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
14189   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
14190   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
14191 # endif
14192
14193   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
14194   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
14195   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
14196   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
14197   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
14198
14199 # if LDBL_MANT_DIG > 100
14200   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
14201   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
14202   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
14203   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
14204   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
14205   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
14206 # endif
14207
14208   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
14209   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
14210   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
14211   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
14212   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
14213
14214 # if LDBL_MANT_DIG > 100
14215   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
14216   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
14217   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
14218   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
14219   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
14220   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
14221 # endif
14222
14223   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
14224   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
14225   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
14226   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
14227   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
14228
14229   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
14230   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
14231   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
14232   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
14233   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
14234
14235   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
14236   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
14237   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
14238   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
14239   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
14240 #endif
14241
14242   END (trunc);
14243 }
14244
14245 static void
14246 y0_test (void)
14247 {
14248   FLOAT s, c;
14249   errno = 0;
14250   FUNC (sincos) (0, &s, &c);
14251   if (errno == ENOSYS)
14252     /* Required function not implemented.  */
14253     return;
14254   FUNC(y0) (1);
14255   if (errno == ENOSYS)
14256     /* Function not implemented.  */
14257     return;
14258
14259   /* y0 is the Bessel function of the second kind of order 0 */
14260   START (y0);
14261
14262   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
14263   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
14264   TEST_f_f (y0, 0.0, minus_infty);
14265   TEST_f_f (y0, qnan_value, qnan_value);
14266   TEST_f_f (y0, plus_infty, 0);
14267
14268   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
14269   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
14270   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
14271   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
14272   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
14273   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
14274   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
14275
14276   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
14277
14278 #ifndef TEST_FLOAT
14279   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
14280   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
14281 #endif
14282
14283 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14284   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
14285   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
14286 #endif
14287
14288   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
14289   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
14290   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
14291   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
14292   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
14293   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
14294   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
14295   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
14296   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
14297   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
14298   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
14299
14300   END (y0);
14301 }
14302
14303
14304 static void
14305 y1_test (void)
14306 {
14307   FLOAT s, c;
14308   errno = 0;
14309   FUNC (sincos) (0, &s, &c);
14310   if (errno == ENOSYS)
14311     /* Required function not implemented.  */
14312     return;
14313   FUNC(y1) (1);
14314   if (errno == ENOSYS)
14315     /* Function not implemented.  */
14316     return;
14317
14318   /* y1 is the Bessel function of the second kind of order 1 */
14319   START (y1);
14320
14321   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
14322   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
14323   TEST_f_f (y1, 0.0, minus_infty);
14324   TEST_f_f (y1, plus_infty, 0);
14325   TEST_f_f (y1, qnan_value, qnan_value);
14326
14327   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
14328   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
14329   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
14330   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
14331   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
14332   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
14333   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
14334
14335   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
14336
14337 #ifndef TEST_FLOAT
14338   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
14339   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
14340 #endif
14341
14342 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14343   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
14344   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
14345 #endif
14346
14347   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
14348   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
14349   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
14350   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
14351   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
14352   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
14353   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
14354   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
14355   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
14356   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
14357   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
14358
14359   END (y1);
14360 }
14361
14362
14363 static void
14364 yn_test (void)
14365 {
14366   FLOAT s, c;
14367   errno = 0;
14368   FUNC (sincos) (0, &s, &c);
14369   if (errno == ENOSYS)
14370     /* Required function not implemented.  */
14371     return;
14372   FUNC(yn) (1, 1);
14373   if (errno == ENOSYS)
14374     /* Function not implemented.  */
14375     return;
14376
14377   /* yn is the Bessel function of the second kind of order n */
14378   START (yn);
14379
14380   /* yn (0, x) == y0 (x)  */
14381   TEST_if_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
14382   TEST_if_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
14383   TEST_if_f (yn, 0, 0.0, minus_infty);
14384   TEST_if_f (yn, 0, qnan_value, qnan_value);
14385   TEST_if_f (yn, 0, plus_infty, 0);
14386
14387   TEST_if_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
14388   TEST_if_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
14389   TEST_if_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
14390   TEST_if_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
14391   TEST_if_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
14392   TEST_if_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
14393   TEST_if_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
14394
14395   /* yn (1, x) == y1 (x)  */
14396   TEST_if_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
14397   TEST_if_f (yn, 1, 0.0, minus_infty);
14398   TEST_if_f (yn, 1, plus_infty, 0);
14399   TEST_if_f (yn, 1, qnan_value, qnan_value);
14400
14401   TEST_if_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
14402   TEST_if_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
14403   TEST_if_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
14404   TEST_if_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
14405   TEST_if_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
14406   TEST_if_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
14407   TEST_if_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
14408
14409   /* yn (3, x)  */
14410   TEST_if_f (yn, 3, plus_infty, 0);
14411   TEST_if_f (yn, 3, qnan_value, qnan_value);
14412
14413   TEST_if_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
14414   TEST_if_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
14415   TEST_if_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
14416   TEST_if_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
14417   TEST_if_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
14418
14419   /* yn (10, x)  */
14420   TEST_if_f (yn, 10, plus_infty, 0);
14421   TEST_if_f (yn, 10, qnan_value, qnan_value);
14422
14423   TEST_if_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
14424   TEST_if_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
14425   TEST_if_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
14426   TEST_if_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
14427   TEST_if_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
14428
14429   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
14430      and FLT_MIN.  See Bug 14173.  */
14431   TEST_if_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
14432
14433   TEST_if_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
14434
14435   END (yn);
14436 }
14437
14438
14439 static void
14440 significand_test (void)
14441 {
14442   /* significand returns the mantissa of the exponential representation.  */
14443
14444   /* TODO: missing +/-Inf as well as qNaN tests.  */
14445
14446   START (significand);
14447
14448   TEST_f_f (significand, 4.0, 1.0);
14449   TEST_f_f (significand, 6.0, 1.5);
14450   TEST_f_f (significand, 8.0, 1.0);
14451
14452   END (significand);
14453 }
14454
14455
14456 static void
14457 initialize (void)
14458 {
14459   fpstack_test ("start *init*");
14460
14461   /* Clear all exceptions.  From now on we must not get random exceptions.  */
14462   feclearexcept (FE_ALL_EXCEPT);
14463   errno = 0;
14464
14465   /* Test to make sure we start correctly.  */
14466   fpstack_test ("end *init*");
14467 }
14468
14469 /* Definitions of arguments for argp functions.  */
14470 static const struct argp_option options[] =
14471 {
14472   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
14473   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
14474   { "no-max-error", 'f', NULL, 0,
14475     "Don't output maximal errors of functions"},
14476   { "no-points", 'p', NULL, 0,
14477     "Don't output results of functions invocations"},
14478   { "ignore-max-ulp", 'i', "yes/no", 0,
14479     "Ignore given maximal errors"},
14480   { "output-dir", 'o', "DIR", 0,
14481     "Directory where generated files will be placed"},
14482   { NULL, 0, NULL, 0, NULL }
14483 };
14484
14485 /* Short description of program.  */
14486 static const char doc[] = "Math test suite: " TEST_MSG ;
14487
14488 /* Prototype for option handler.  */
14489 static error_t parse_opt (int key, char *arg, struct argp_state *state);
14490
14491 /* Data structure to communicate with argp functions.  */
14492 static struct argp argp =
14493 {
14494   options, parse_opt, NULL, doc,
14495 };
14496
14497
14498 /* Handle program arguments.  */
14499 static error_t
14500 parse_opt (int key, char *arg, struct argp_state *state)
14501 {
14502   switch (key)
14503     {
14504     case 'f':
14505       output_max_error = 0;
14506       break;
14507     case 'i':
14508       if (strcmp (arg, "yes") == 0)
14509         ignore_max_ulp = 1;
14510       else if (strcmp (arg, "no") == 0)
14511         ignore_max_ulp = 0;
14512       break;
14513     case 'o':
14514       output_dir = (char *) malloc (strlen (arg) + 1);
14515       if (output_dir != NULL)
14516         strcpy (output_dir, arg);
14517       else
14518         return errno;
14519       break;
14520     case 'p':
14521       output_points = 0;
14522       break;
14523     case 'u':
14524       output_ulps = 1;
14525       break;
14526     case 'v':
14527       if (optarg)
14528         verbose = (unsigned int) strtoul (optarg, NULL, 0);
14529       else
14530         verbose = 3;
14531       break;
14532     default:
14533       return ARGP_ERR_UNKNOWN;
14534     }
14535   return 0;
14536 }
14537
14538 #if 0
14539 /* function to check our ulp calculation.  */
14540 void
14541 check_ulp (void)
14542 {
14543   int i;
14544
14545   FLOAT u, diff, ulp;
14546   /* This gives one ulp.  */
14547   u = FUNC(nextafter) (10, 20);
14548   check_equal (10.0, u, 1, &diff, &ulp);
14549   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
14550
14551   /* This gives one more ulp.  */
14552   u = FUNC(nextafter) (u, 20);
14553   check_equal (10.0, u, 2, &diff, &ulp);
14554   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
14555
14556   /* And now calculate 100 ulp.  */
14557   for (i = 2; i < 100; i++)
14558     u = FUNC(nextafter) (u, 20);
14559   check_equal (10.0, u, 100, &diff, &ulp);
14560   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
14561 }
14562 #endif
14563
14564 int
14565 main (int argc, char **argv)
14566 {
14567
14568   int remaining;
14569   char *ulps_file_path;
14570   size_t dir_len = 0;
14571
14572   verbose = 1;
14573   output_ulps = 0;
14574   output_max_error = 1;
14575   output_points = 1;
14576   output_dir = NULL;
14577   /* XXX set to 0 for releases.  */
14578   ignore_max_ulp = 0;
14579
14580   /* Parse and process arguments.  */
14581   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
14582
14583   if (remaining != argc)
14584     {
14585       fprintf (stderr, "wrong number of arguments");
14586       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
14587       exit (EXIT_FAILURE);
14588     }
14589
14590   if (output_ulps)
14591     {
14592       if (output_dir != NULL)
14593         dir_len = strlen (output_dir);
14594       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
14595       if (ulps_file_path == NULL)
14596         {
14597           perror ("can't allocate path for `ULPs' file: ");
14598           exit (1);
14599         }
14600       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
14601       ulps_file = fopen (ulps_file_path, "a");
14602       if (ulps_file == NULL)
14603         {
14604           perror ("can't open file `ULPs' for writing: ");
14605           exit (1);
14606         }
14607     }
14608
14609
14610   initialize ();
14611   printf (TEST_MSG);
14612
14613 #if 0
14614   check_ulp ();
14615 #endif
14616
14617   /* Keep the tests a wee bit ordered (according to ISO C99).  */
14618   /* Classification macros:  */
14619   finite_test ();
14620   fpclassify_test ();
14621   isfinite_test ();
14622   isinf_test ();
14623   isnan_test ();
14624   isnormal_test ();
14625   issignaling_test ();
14626   signbit_test ();
14627
14628   /* Trigonometric functions:  */
14629   acos_test ();
14630   acos_test_tonearest ();
14631   acos_test_towardzero ();
14632   acos_test_downward ();
14633   acos_test_upward ();
14634   asin_test ();
14635   asin_test_tonearest ();
14636   asin_test_towardzero ();
14637   asin_test_downward ();
14638   asin_test_upward ();
14639   atan_test ();
14640   atan2_test ();
14641   cos_test ();
14642   cos_test_tonearest ();
14643   cos_test_towardzero ();
14644   cos_test_downward ();
14645   cos_test_upward ();
14646   sin_test ();
14647   sin_test_tonearest ();
14648   sin_test_towardzero ();
14649   sin_test_downward ();
14650   sin_test_upward ();
14651   sincos_test ();
14652   tan_test ();
14653   tan_test_tonearest ();
14654   tan_test_towardzero ();
14655   tan_test_downward ();
14656   tan_test_upward ();
14657
14658   /* Hyperbolic functions:  */
14659   acosh_test ();
14660   asinh_test ();
14661   atanh_test ();
14662   cosh_test ();
14663   cosh_test_tonearest ();
14664   cosh_test_towardzero ();
14665   cosh_test_downward ();
14666   cosh_test_upward ();
14667   sinh_test ();
14668   sinh_test_tonearest ();
14669   sinh_test_towardzero ();
14670   sinh_test_downward ();
14671   sinh_test_upward ();
14672   tanh_test ();
14673
14674   /* Exponential and logarithmic functions:  */
14675   exp_test ();
14676   exp_test_tonearest ();
14677   exp_test_towardzero ();
14678   exp_test_downward ();
14679   exp_test_upward ();
14680   exp10_test ();
14681   exp2_test ();
14682   expm1_test ();
14683   frexp_test ();
14684   ldexp_test ();
14685   log_test ();
14686   log10_test ();
14687   log1p_test ();
14688   log2_test ();
14689   logb_test ();
14690   logb_test_downward ();
14691   modf_test ();
14692   ilogb_test ();
14693   scalb_test ();
14694   scalbn_test ();
14695   scalbln_test ();
14696   significand_test ();
14697
14698   /* Power and absolute value functions:  */
14699   cbrt_test ();
14700   fabs_test ();
14701   hypot_test ();
14702   pow_test ();
14703   pow_test_tonearest ();
14704   pow_test_towardzero ();
14705   pow_test_downward ();
14706   pow_test_upward ();
14707   sqrt_test ();
14708
14709   /* Error and gamma functions:  */
14710   erf_test ();
14711   erfc_test ();
14712   gamma_test ();
14713   lgamma_test ();
14714   tgamma_test ();
14715
14716   /* Nearest integer functions:  */
14717   ceil_test ();
14718   floor_test ();
14719   nearbyint_test ();
14720   rint_test ();
14721   rint_test_tonearest ();
14722   rint_test_towardzero ();
14723   rint_test_downward ();
14724   rint_test_upward ();
14725   lrint_test ();
14726   lrint_test_tonearest ();
14727   lrint_test_towardzero ();
14728   lrint_test_downward ();
14729   lrint_test_upward ();
14730   llrint_test ();
14731   llrint_test_tonearest ();
14732   llrint_test_towardzero ();
14733   llrint_test_downward ();
14734   llrint_test_upward ();
14735   round_test ();
14736   lround_test ();
14737   llround_test ();
14738   trunc_test ();
14739
14740   /* Remainder functions:  */
14741   fmod_test ();
14742   remainder_test ();
14743   remquo_test ();
14744
14745   /* Manipulation functions:  */
14746   copysign_test ();
14747   nextafter_test ();
14748   nexttoward_test ();
14749
14750   /* maximum, minimum and positive difference functions */
14751   fdim_test ();
14752   fmax_test ();
14753   fmin_test ();
14754
14755   /* Multiply and add:  */
14756   fma_test ();
14757   fma_test_towardzero ();
14758   fma_test_downward ();
14759   fma_test_upward ();
14760
14761   /* Comparison macros:  */
14762   isgreater_test ();
14763   isgreaterequal_test ();
14764   isless_test ();
14765   islessequal_test ();
14766   islessgreater_test ();
14767   isunordered_test ();
14768
14769   /* Complex functions:  */
14770   cabs_test ();
14771   cacos_test ();
14772   cacosh_test ();
14773   carg_test ();
14774   casin_test ();
14775   casinh_test ();
14776   catan_test ();
14777   catanh_test ();
14778   ccos_test ();
14779   ccosh_test ();
14780   cexp_test ();
14781   cimag_test ();
14782   clog10_test ();
14783   clog_test ();
14784   conj_test ();
14785   cpow_test ();
14786   cproj_test ();
14787   creal_test ();
14788   csin_test ();
14789   csinh_test ();
14790   csqrt_test ();
14791   ctan_test ();
14792   ctan_test_tonearest ();
14793   ctan_test_towardzero ();
14794   ctan_test_downward ();
14795   ctan_test_upward ();
14796   ctanh_test ();
14797   ctanh_test_tonearest ();
14798   ctanh_test_towardzero ();
14799   ctanh_test_downward ();
14800   ctanh_test_upward ();
14801
14802   /* Bessel functions:  */
14803   j0_test ();
14804   j1_test ();
14805   jn_test ();
14806   y0_test ();
14807   y1_test ();
14808   yn_test ();
14809
14810   if (output_ulps)
14811     fclose (ulps_file);
14812
14813   printf ("\nTest suite completed:\n");
14814   printf ("  %d test cases plus %d tests for exception flags and\n"
14815           "    %d tests for errno executed.\n",
14816           noTests, noExcTests, noErrnoTests);
14817   if (noErrors)
14818     {
14819       printf ("  %d errors occurred.\n", noErrors);
14820       return 1;
14821     }
14822   printf ("  All tests passed successfully.\n");
14823
14824   return 0;
14825 }
14826
14827 /*
14828  * Local Variables:
14829  * mode:c
14830  * End:
14831  */