c58bd4567848ae1a754fbe909012f6fcee86dcde
[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                (M_PIl - M_PI_4l)               /* 3*pi/4 */
211 #define M_PI_34_LOG10El         (M_PIl - M_PI_4l) * M_LOG10El
212 #define M_PI2_LOG10El           M_PI_2l * M_LOG10El
213 #define M_PI4_LOG10El           M_PI_4l * M_LOG10El
214 #define M_PI_LOG10El            M_PIl * M_LOG10El
215 #define M_SQRT_2_2              0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
216
217 #define ulps_file_name "ULPs"   /* Name of the ULPs file.  */
218 static FILE *ulps_file;         /* File to document difference.  */
219 static int output_ulps;         /* Should ulps printed?  */
220 static char *output_dir;        /* Directory where generated files will be written.  */
221
222 static int noErrors;    /* number of errors */
223 static int noTests;     /* number of tests (without testing exceptions) */
224 static int noExcTests;  /* number of tests for exception flags */
225 static int noErrnoTests;/* number of tests for errno values */
226 static int noXFails;    /* number of expected failures.  */
227 static int noXPasses;   /* number of unexpected passes.  */
228
229 static int verbose;
230 static int output_max_error;    /* Should the maximal errors printed?  */
231 static int output_points;       /* Should the single function results printed?  */
232 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
233
234 static const FLOAT plus_zero = CHOOSE (0.0L, 0.0, 0.0f,
235                                        0.0L, 0.0, 0.0f);
236 static const FLOAT minus_zero = CHOOSE (-0.0L, -0.0, -0.0f,
237                                         -0.0L, -0.0, -0.0f);
238 static const FLOAT plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
239                                         HUGE_VALL, HUGE_VAL, HUGE_VALF);
240 static const FLOAT minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
241                                          -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
242 static const FLOAT qnan_value = FUNC (__builtin_nan) ("");
243 static const FLOAT max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
244                                        LDBL_MAX, DBL_MAX, FLT_MAX);
245 static const FLOAT min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
246                                        LDBL_MIN, DBL_MIN, FLT_MIN);
247 static const FLOAT min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
248                                                __DBL_DENORM_MIN__,
249                                                __FLT_DENORM_MIN__,
250                                                __LDBL_DENORM_MIN__,
251                                                __DBL_DENORM_MIN__,
252                                                __FLT_DENORM_MIN__);
253
254 static FLOAT max_error, real_max_error, imag_max_error;
255
256
257 #define BUILD_COMPLEX(real, imag) \
258   ({ __complex__ FLOAT __retval;                                              \
259      __real__ __retval = (real);                                              \
260      __imag__ __retval = (imag);                                              \
261      __retval; })
262
263 #define BUILD_COMPLEX_INT(real, imag) \
264   ({ __complex__ int __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, int xfail)
308 {
309   if (output_points
310       && (verbose > 1
311           || (verbose == 1 && ok == xfail)))
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, int xfail)
321 {
322   if (output_max_error
323       && (verbose > 1
324           || ((verbose == 1) && (ok == xfail))))
325     return 1;
326   return 0;
327 }
328
329 /* Update statistic counters.  */
330 static void
331 update_stats (int ok, int xfail)
332 {
333   ++noTests;
334   if (ok && xfail)
335     ++noXPasses;
336   else if (!ok && xfail)
337     ++noXFails;
338   else if (!ok && !xfail)
339     ++noErrors;
340 }
341
342 static void
343 print_ulps (const char *test_name, FLOAT ulp)
344 {
345   if (output_ulps)
346     {
347       fprintf (ulps_file, "Test \"%s\":\n", test_name);
348       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
349                CHOOSE("ldouble", "double", "float",
350                       "ildouble", "idouble", "ifloat"),
351                FUNC(ceil) (ulp));
352     }
353 }
354
355 static void
356 print_function_ulps (const char *function_name, FLOAT ulp)
357 {
358   if (output_ulps)
359     {
360       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
361       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
362                CHOOSE("ldouble", "double", "float",
363                       "ildouble", "idouble", "ifloat"),
364                FUNC(ceil) (ulp));
365     }
366 }
367
368
369 static void
370 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
371                              FLOAT imag_ulp)
372 {
373   if (output_ulps)
374     {
375       if (real_ulp != 0.0)
376         {
377           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
378           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
379                    CHOOSE("ldouble", "double", "float",
380                           "ildouble", "idouble", "ifloat"),
381                    FUNC(ceil) (real_ulp));
382         }
383       if (imag_ulp != 0.0)
384         {
385           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
386           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
387                    CHOOSE("ldouble", "double", "float",
388                           "ildouble", "idouble", "ifloat"),
389                    FUNC(ceil) (imag_ulp));
390         }
391
392
393     }
394 }
395
396
397
398 /* Test if Floating-Point stack hasn't changed */
399 static void
400 fpstack_test (const char *test_name)
401 {
402 #if defined (__i386__) || defined (__x86_64__)
403   static int old_stack;
404   int sw;
405
406   asm ("fnstsw" : "=a" (sw));
407   sw >>= 11;
408   sw &= 7;
409
410   if (sw != old_stack)
411     {
412       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
413               test_name, sw, old_stack);
414       ++noErrors;
415       old_stack = sw;
416     }
417 #endif
418 }
419
420
421 static void
422 print_max_error (const char *func_name, FLOAT allowed, int xfail)
423 {
424   int ok = 0;
425
426   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
427     {
428       ok = 1;
429     }
430
431   if (!ok)
432     print_function_ulps (func_name, max_error);
433
434
435   if (print_screen_max_error (ok, xfail))
436     {
437       printf ("Maximal error of `%s'\n", func_name);
438       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
439       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
440     }
441
442   update_stats (ok, xfail);
443 }
444
445
446 static void
447 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
448                          __complex__ int xfail)
449 {
450   int ok = 0;
451
452   if ((real_max_error == 0 && imag_max_error == 0)
453       || (real_max_error <= __real__ allowed
454           && imag_max_error <= __imag__ allowed
455           && !ignore_max_ulp))
456     {
457       ok = 1;
458     }
459
460   if (!ok)
461     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
462
463
464   if (print_screen_max_error (ok, xfail))
465     {
466       printf ("Maximal error of real part of: %s\n", func_name);
467       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
468               FUNC(ceil) (real_max_error));
469       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
470               FUNC(ceil) (__real__ allowed));
471       printf ("Maximal error of imaginary part of: %s\n", func_name);
472       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
473               FUNC(ceil) (imag_max_error));
474       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
475               FUNC(ceil) (__imag__ allowed));
476     }
477
478   update_stats (ok, xfail);
479 }
480
481
482 /* Test whether a given exception was raised.  */
483 static void
484 test_single_exception (const char *test_name,
485                        int exception,
486                        int exc_flag,
487                        int fe_flag,
488                        const char *flag_name)
489 {
490 #ifndef TEST_INLINE
491   int ok = 1;
492   if (exception & exc_flag)
493     {
494       if (fetestexcept (fe_flag))
495         {
496           if (print_screen (1, 0))
497             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
498         }
499       else
500         {
501           ok = 0;
502           if (print_screen (0, 0))
503             printf ("Failure: %s: Exception \"%s\" not set\n",
504                     test_name, flag_name);
505         }
506     }
507   else
508     {
509       if (fetestexcept (fe_flag))
510         {
511           ok = 0;
512           if (print_screen (0, 0))
513             printf ("Failure: %s: Exception \"%s\" set\n",
514                     test_name, flag_name);
515         }
516       else
517         {
518           if (print_screen (1, 0))
519             printf ("%s: Exception \"%s\" not set\n", test_name,
520                     flag_name);
521         }
522     }
523   if (!ok)
524     ++noErrors;
525
526 #endif
527 }
528
529
530 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
531    allowed but not required exceptions.
532 */
533 static void
534 test_exceptions (const char *test_name, int exception)
535 {
536   ++noExcTests;
537 #ifdef FE_DIVBYZERO
538   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
539     test_single_exception (test_name, exception,
540                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
541                            "Divide by zero");
542 #endif
543 #ifdef FE_INVALID
544   if ((exception & INVALID_EXCEPTION_OK) == 0)
545     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
546                          "Invalid operation");
547 #endif
548 #ifdef FE_OVERFLOW
549   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
550     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
551                            FE_OVERFLOW, "Overflow");
552 #endif
553 #ifdef FE_UNDERFLOW
554   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
555     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
556                            FE_UNDERFLOW, "Underflow");
557 #endif
558   feclearexcept (FE_ALL_EXCEPT);
559 }
560
561 /* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value
562    EXPECTED_VALUE (description EXPECTED_NAME).  */
563 static void
564 test_single_errno (const char *test_name, int errno_value,
565                    int expected_value, const char *expected_name)
566 {
567   if (errno_value == expected_value)
568     {
569       if (print_screen (1, 0))
570         printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value,
571                 expected_name);
572     }
573   else
574     {
575       ++noErrors;
576       if (print_screen (0, 0))
577         printf ("Failure: %s: errno set to %d, expected %d (%s)\n",
578                 test_name, errno_value, expected_value, expected_name);
579     }
580 }
581
582 /* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set
583    as required by EXCEPTIONS.  */
584 static void
585 test_errno (const char *test_name, int errno_value, int exceptions)
586 {
587   ++noErrnoTests;
588   if (exceptions & ERRNO_UNCHANGED)
589     test_single_errno (test_name, errno_value, 0, "unchanged");
590   if (exceptions & ERRNO_EDOM)
591     test_single_errno (test_name, errno_value, EDOM, "EDOM");
592   if (exceptions & ERRNO_ERANGE)
593     test_single_errno (test_name, errno_value, ERANGE, "ERANGE");
594 }
595
596 static void
597 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
598                       FLOAT max_ulp, int xfail, int exceptions,
599                       FLOAT *curr_max_error)
600 {
601   int ok = 0;
602   int print_diff = 0;
603   FLOAT diff = 0;
604   FLOAT ulp = 0;
605   int errno_value = errno;
606
607   test_exceptions (test_name, exceptions);
608   test_errno (test_name, errno_value, exceptions);
609   if (issignaling (computed) && issignaling (expected))
610     ok = 1;
611   else if (issignaling (computed) || issignaling (expected))
612     ok = 0;
613   else if (isnan (computed) && isnan (expected))
614     ok = 1;
615   else if (isinf (computed) && isinf (expected))
616     {
617       /* Test for sign of infinities.  */
618       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
619           && signbit (computed) != signbit (expected))
620         {
621           ok = 0;
622           printf ("infinity has wrong sign.\n");
623         }
624       else
625         ok = 1;
626     }
627   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
628   else if (isinf (computed) || isnan (computed)
629            || isinf (expected) || isnan (expected))
630     ok = 0;
631   else
632     {
633       diff = FUNC(fabs) (computed - expected);
634       switch (fpclassify (expected))
635         {
636         case FP_ZERO:
637           /* ilogb (0) isn't allowed. */
638           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
639           break;
640         case FP_NORMAL:
641           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
642           break;
643         case FP_SUBNORMAL:
644           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
645              least normal value.  */
646           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
647           break;
648         default:
649           /* It should never happen. */
650           abort ();
651           break;
652         }
653       set_max_error (ulp, curr_max_error);
654       print_diff = 1;
655       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
656           && computed == 0.0 && expected == 0.0
657           && signbit(computed) != signbit (expected))
658         ok = 0;
659       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
660         ok = 1;
661       else
662         {
663           ok = 0;
664           print_ulps (test_name, ulp);
665         }
666
667     }
668   if (print_screen (ok, xfail))
669     {
670       if (!ok)
671         printf ("Failure: ");
672       printf ("Test: %s\n", test_name);
673       printf ("Result:\n");
674       printf (" is:         ");
675       print_float (computed);
676       printf (" should be:  ");
677       print_float (expected);
678       if (print_diff)
679         {
680           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
681                   "\n", diff, diff);
682           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
683           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
684         }
685     }
686   update_stats (ok, xfail);
687
688   fpstack_test (test_name);
689   errno = 0;
690 }
691
692
693 static void
694 check_float (const char *test_name, FLOAT computed, FLOAT expected,
695              FLOAT max_ulp, int xfail, int exceptions)
696 {
697   check_float_internal (test_name, computed, expected, max_ulp, xfail,
698                         exceptions, &max_error);
699 }
700
701
702 static void
703 check_complex (const char *test_name, __complex__ FLOAT computed,
704                __complex__ FLOAT expected,
705                __complex__ FLOAT max_ulp, __complex__ int xfail,
706                int exception)
707 {
708   FLOAT part_comp, part_exp, part_max_ulp;
709   int part_xfail;
710   char *str;
711
712   if (asprintf (&str, "Real part of: %s", test_name) == -1)
713     abort ();
714
715   part_comp = __real__ computed;
716   part_exp = __real__ expected;
717   part_max_ulp = __real__ max_ulp;
718   part_xfail = __real__ xfail;
719
720   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
721                         exception, &real_max_error);
722   free (str);
723
724   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
725     abort ();
726
727   part_comp = __imag__ computed;
728   part_exp = __imag__ expected;
729   part_max_ulp = __imag__ max_ulp;
730   part_xfail = __imag__ xfail;
731
732   /* Don't check again for exceptions or errno, just pass through the
733      zero/inf sign test.  */
734   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
735                         exception & IGNORE_ZERO_INF_SIGN,
736                         &imag_max_error);
737   free (str);
738 }
739
740
741 /* Check that computed and expected values are equal (int values).  */
742 static void
743 check_int (const char *test_name, int computed, int expected, int max_ulp,
744            int xfail, int exceptions)
745 {
746   int diff = computed - expected;
747   int ok = 0;
748   int errno_value = errno;
749
750   test_exceptions (test_name, exceptions);
751   test_errno (test_name, errno_value, exceptions);
752   noTests++;
753   if (abs (diff) <= max_ulp)
754     ok = 1;
755
756   if (!ok)
757     print_ulps (test_name, diff);
758
759   if (print_screen (ok, xfail))
760     {
761       if (!ok)
762         printf ("Failure: ");
763       printf ("Test: %s\n", test_name);
764       printf ("Result:\n");
765       printf (" is:         %d\n", computed);
766       printf (" should be:  %d\n", expected);
767     }
768
769   update_stats (ok, xfail);
770   fpstack_test (test_name);
771   errno = 0;
772 }
773
774
775 /* Check that computed and expected values are equal (long int values).  */
776 static void
777 check_long (const char *test_name, long int computed, long int expected,
778             long int max_ulp, int xfail, int exceptions)
779 {
780   long int diff = computed - expected;
781   int ok = 0;
782   int errno_value = errno;
783
784   test_exceptions (test_name, exceptions);
785   test_errno (test_name, errno_value, exceptions);
786   noTests++;
787   if (labs (diff) <= max_ulp)
788     ok = 1;
789
790   if (!ok)
791     print_ulps (test_name, diff);
792
793   if (print_screen (ok, xfail))
794     {
795       if (!ok)
796         printf ("Failure: ");
797       printf ("Test: %s\n", test_name);
798       printf ("Result:\n");
799       printf (" is:         %ld\n", computed);
800       printf (" should be:  %ld\n", expected);
801     }
802
803   update_stats (ok, xfail);
804   fpstack_test (test_name);
805   errno = 0;
806 }
807
808
809 /* Check that computed value is true/false.  */
810 static void
811 check_bool (const char *test_name, int computed, int expected,
812             long int max_ulp, int xfail, int exceptions)
813 {
814   int ok = 0;
815   int errno_value = errno;
816
817   test_exceptions (test_name, exceptions);
818   test_errno (test_name, errno_value, exceptions);
819   noTests++;
820   if ((computed == 0) == (expected == 0))
821     ok = 1;
822
823   if (print_screen (ok, xfail))
824     {
825       if (!ok)
826         printf ("Failure: ");
827       printf ("Test: %s\n", test_name);
828       printf ("Result:\n");
829       printf (" is:         %d\n", computed);
830       printf (" should be:  %d\n", expected);
831     }
832
833   update_stats (ok, xfail);
834   fpstack_test (test_name);
835   errno = 0;
836 }
837
838
839 /* check that computed and expected values are equal (long int values) */
840 static void
841 check_longlong (const char *test_name, long long int computed,
842                 long long int expected,
843                 long long int max_ulp, int xfail,
844                 int exceptions)
845 {
846   long long int diff = computed - expected;
847   int ok = 0;
848   int errno_value = errno;
849
850   test_exceptions (test_name, exceptions);
851   test_errno (test_name, errno_value, exceptions);
852   noTests++;
853   if (llabs (diff) <= max_ulp)
854     ok = 1;
855
856   if (!ok)
857     print_ulps (test_name, diff);
858
859   if (print_screen (ok, xfail))
860     {
861       if (!ok)
862         printf ("Failure:");
863       printf ("Test: %s\n", test_name);
864       printf ("Result:\n");
865       printf (" is:         %lld\n", computed);
866       printf (" should be:  %lld\n", expected);
867     }
868
869   update_stats (ok, xfail);
870   fpstack_test (test_name);
871   errno = 0;
872 }
873
874
875
876 /* This is to prevent messages from the SVID libm emulation.  */
877 int
878 matherr (struct exception *x __attribute__ ((unused)))
879 {
880   return 1;
881 }
882
883
884 /****************************************************************************
885   Tests for single functions of libm.
886   Please keep them alphabetically sorted!
887 ****************************************************************************/
888
889 static void
890 acos_test (void)
891 {
892   errno = 0;
893   FUNC(acos) (0);
894   if (errno == ENOSYS)
895     /* Function not implemented.  */
896     return;
897
898   START (acos);
899
900   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
901   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
902   TEST_f_f (acos, qnan_value, qnan_value);
903
904   /* |x| > 1: */
905   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
906   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
907   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
908   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
909
910   TEST_f_f (acos, 0, M_PI_2l);
911   TEST_f_f (acos, minus_zero, M_PI_2l);
912   TEST_f_f (acos, 1, 0);
913   TEST_f_f (acos, -1, M_PIl);
914   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
915   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
916   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
917   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
918   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
919   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
920   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
921 #ifndef TEST_FLOAT
922   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
923   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
924   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
925   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
926 #endif
927 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
928   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
929   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
930 #endif
931   END (acos);
932 }
933
934
935 static void
936 acos_test_tonearest (void)
937 {
938   int save_round_mode;
939   errno = 0;
940   FUNC(acos) (0);
941   if (errno == ENOSYS)
942     /* Function not implemented.  */
943     return;
944
945   START (acos_tonearest);
946
947   save_round_mode = fegetround ();
948
949   if (!fesetround (FE_TONEAREST))
950     {
951       TEST_f_f (acos, 0, M_PI_2l);
952       TEST_f_f (acos, minus_zero, M_PI_2l);
953       TEST_f_f (acos, 1, 0);
954       TEST_f_f (acos, -1, M_PIl);
955       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
956       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
957     }
958
959   fesetround (save_round_mode);
960
961   END (acos_tonearest);
962 }
963
964
965 static void
966 acos_test_towardzero (void)
967 {
968   int save_round_mode;
969   errno = 0;
970   FUNC(acos) (0);
971   if (errno == ENOSYS)
972     /* Function not implemented.  */
973     return;
974
975   START (acos_towardzero);
976
977   save_round_mode = fegetround ();
978
979   if (!fesetround (FE_TOWARDZERO))
980     {
981       TEST_f_f (acos, 0, M_PI_2l);
982       TEST_f_f (acos, minus_zero, M_PI_2l);
983       TEST_f_f (acos, 1, 0);
984       TEST_f_f (acos, -1, M_PIl);
985       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
986       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
987     }
988
989   fesetround (save_round_mode);
990
991   END (acos_towardzero);
992 }
993
994
995 static void
996 acos_test_downward (void)
997 {
998   int save_round_mode;
999   errno = 0;
1000   FUNC(acos) (0);
1001   if (errno == ENOSYS)
1002     /* Function not implemented.  */
1003     return;
1004
1005   START (acos_downward);
1006
1007   save_round_mode = fegetround ();
1008
1009   if (!fesetround (FE_DOWNWARD))
1010     {
1011       TEST_f_f (acos, 0, M_PI_2l);
1012       TEST_f_f (acos, minus_zero, M_PI_2l);
1013       TEST_f_f (acos, 1, 0);
1014       TEST_f_f (acos, -1, M_PIl);
1015       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1016       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1017     }
1018
1019   fesetround (save_round_mode);
1020
1021   END (acos_downward);
1022 }
1023
1024
1025 static void
1026 acos_test_upward (void)
1027 {
1028   int save_round_mode;
1029   errno = 0;
1030   FUNC(acos) (0);
1031   if (errno == ENOSYS)
1032     /* Function not implemented.  */
1033     return;
1034
1035   START (acos_upward);
1036
1037   save_round_mode = fegetround ();
1038
1039   if (!fesetround (FE_UPWARD))
1040     {
1041       TEST_f_f (acos, 0, M_PI_2l);
1042       TEST_f_f (acos, minus_zero, M_PI_2l);
1043       TEST_f_f (acos, 1, 0);
1044       TEST_f_f (acos, -1, M_PIl);
1045       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1046       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1047     }
1048
1049   fesetround (save_round_mode);
1050
1051   END (acos_upward);
1052 }
1053
1054 static void
1055 acosh_test (void)
1056 {
1057   errno = 0;
1058   FUNC(acosh) (7);
1059   if (errno == ENOSYS)
1060     /* Function not implemented.  */
1061     return;
1062
1063   START (acosh);
1064
1065   TEST_f_f (acosh, plus_infty, plus_infty);
1066   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
1067   TEST_f_f (acosh, qnan_value, qnan_value);
1068
1069   /* x < 1:  */
1070   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1071   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1072
1073   TEST_f_f (acosh, 1, 0);
1074   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1075
1076   END (acosh);
1077 }
1078
1079 static void
1080 asin_test (void)
1081 {
1082   errno = 0;
1083   FUNC(asin) (0);
1084   if (errno == ENOSYS)
1085     /* Function not implemented.  */
1086     return;
1087
1088   START (asin);
1089
1090   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1091   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1092   TEST_f_f (asin, qnan_value, qnan_value);
1093
1094   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1095   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1096   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1097   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1098   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1099
1100   TEST_f_f (asin, 0, 0);
1101   TEST_f_f (asin, minus_zero, minus_zero);
1102   TEST_f_f (asin, 0.5, M_PI_6l);
1103   TEST_f_f (asin, -0.5, -M_PI_6l);
1104   TEST_f_f (asin, 1.0, M_PI_2l);
1105   TEST_f_f (asin, -1.0, -M_PI_2l);
1106   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1107   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1108   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1109 #ifndef TEST_FLOAT
1110   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1111   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1112   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1113   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1114 #endif
1115 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1116   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1117   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1118 #endif
1119
1120   END (asin);
1121 }
1122
1123
1124 static void
1125 asin_test_tonearest (void)
1126 {
1127   int save_round_mode;
1128   errno = 0;
1129   FUNC(asin) (0);
1130   if (errno == ENOSYS)
1131     /* Function not implemented.  */
1132     return;
1133
1134   START (asin_tonearest);
1135
1136   save_round_mode = fegetround ();
1137
1138   if (!fesetround (FE_TONEAREST))
1139     {
1140       TEST_f_f (asin, 0, 0);
1141       TEST_f_f (asin, minus_zero, minus_zero);
1142       TEST_f_f (asin, 0.5, M_PI_6l);
1143       TEST_f_f (asin, -0.5, -M_PI_6l);
1144       TEST_f_f (asin, 1.0, M_PI_2l);
1145       TEST_f_f (asin, -1.0, -M_PI_2l);
1146     }
1147
1148   fesetround (save_round_mode);
1149
1150   END (asin_tonearest);
1151 }
1152
1153
1154 static void
1155 asin_test_towardzero (void)
1156 {
1157   int save_round_mode;
1158   errno = 0;
1159   FUNC(asin) (0);
1160   if (errno == ENOSYS)
1161     /* Function not implemented.  */
1162     return;
1163
1164   START (asin_towardzero);
1165
1166   save_round_mode = fegetround ();
1167
1168   if (!fesetround (FE_TOWARDZERO))
1169     {
1170       TEST_f_f (asin, 0, 0);
1171       TEST_f_f (asin, minus_zero, minus_zero);
1172       TEST_f_f (asin, 0.5, M_PI_6l);
1173       TEST_f_f (asin, -0.5, -M_PI_6l);
1174       TEST_f_f (asin, 1.0, M_PI_2l);
1175       TEST_f_f (asin, -1.0, -M_PI_2l);
1176     }
1177
1178   fesetround (save_round_mode);
1179
1180   END (asin_towardzero);
1181 }
1182
1183
1184 static void
1185 asin_test_downward (void)
1186 {
1187   int save_round_mode;
1188   errno = 0;
1189   FUNC(asin) (0);
1190   if (errno == ENOSYS)
1191     /* Function not implemented.  */
1192     return;
1193
1194   START (asin_downward);
1195
1196   save_round_mode = fegetround ();
1197
1198   if (!fesetround (FE_DOWNWARD))
1199     {
1200       TEST_f_f (asin, 0, 0);
1201       TEST_f_f (asin, minus_zero, minus_zero);
1202       TEST_f_f (asin, 0.5, M_PI_6l);
1203       TEST_f_f (asin, -0.5, -M_PI_6l);
1204       TEST_f_f (asin, 1.0, M_PI_2l);
1205       TEST_f_f (asin, -1.0, -M_PI_2l);
1206     }
1207
1208   fesetround (save_round_mode);
1209
1210   END (asin_downward);
1211 }
1212
1213
1214 static void
1215 asin_test_upward (void)
1216 {
1217   int save_round_mode;
1218   errno = 0;
1219   FUNC(asin) (0);
1220   if (errno == ENOSYS)
1221     /* Function not implemented.  */
1222     return;
1223
1224   START (asin_upward);
1225
1226   save_round_mode = fegetround ();
1227
1228   if (!fesetround (FE_UPWARD))
1229     {
1230       TEST_f_f (asin, 0, 0);
1231       TEST_f_f (asin, minus_zero, minus_zero);
1232       TEST_f_f (asin, 0.5, M_PI_6l);
1233       TEST_f_f (asin, -0.5, -M_PI_6l);
1234       TEST_f_f (asin, 1.0, M_PI_2l);
1235       TEST_f_f (asin, -1.0, -M_PI_2l);
1236     }
1237
1238   fesetround (save_round_mode);
1239
1240   END (asin_upward);
1241 }
1242
1243 static void
1244 asinh_test (void)
1245 {
1246   errno = 0;
1247   FUNC(asinh) (0.7L);
1248   if (errno == ENOSYS)
1249     /* Function not implemented.  */
1250     return;
1251
1252   START (asinh);
1253
1254   TEST_f_f (asinh, 0, 0);
1255   TEST_f_f (asinh, minus_zero, minus_zero);
1256 #ifndef TEST_INLINE
1257   TEST_f_f (asinh, plus_infty, plus_infty);
1258   TEST_f_f (asinh, minus_infty, minus_infty);
1259 #endif
1260   TEST_f_f (asinh, qnan_value, qnan_value);
1261   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1262
1263   END (asinh);
1264 }
1265
1266 static void
1267 atan_test (void)
1268 {
1269   errno = 0;
1270   FUNC(atan) (0);
1271   if (errno == ENOSYS)
1272     /* Function not implemented.  */
1273     return;
1274
1275   START (atan);
1276
1277   TEST_f_f (atan, 0, 0);
1278   TEST_f_f (atan, minus_zero, minus_zero);
1279
1280   TEST_f_f (atan, plus_infty, M_PI_2l);
1281   TEST_f_f (atan, minus_infty, -M_PI_2l);
1282   TEST_f_f (atan, qnan_value, qnan_value);
1283   TEST_f_f (atan, max_value, M_PI_2l);
1284   TEST_f_f (atan, -max_value, -M_PI_2l);
1285
1286   TEST_f_f (atan, 1, M_PI_4l);
1287   TEST_f_f (atan, -1, -M_PI_4l);
1288
1289   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1290
1291   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1292 #ifndef TEST_FLOAT
1293   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1294 #endif
1295 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1296   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1297 #endif
1298
1299   END (atan);
1300 }
1301
1302
1303
1304 static void
1305 atanh_test (void)
1306 {
1307   errno = 0;
1308   FUNC(atanh) (0.7L);
1309   if (errno == ENOSYS)
1310     /* Function not implemented.  */
1311     return;
1312
1313   START (atanh);
1314
1315
1316   TEST_f_f (atanh, 0, 0);
1317   TEST_f_f (atanh, minus_zero, minus_zero);
1318
1319   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1320   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1321   TEST_f_f (atanh, qnan_value, qnan_value);
1322
1323   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1324   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1325   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1326   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1327   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1328
1329   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1330
1331   END (atanh);
1332 }
1333
1334 static void
1335 atan2_test (void)
1336 {
1337   errno = 0;
1338   FUNC(atan2) (-0, 1);
1339   if (errno == ENOSYS)
1340     /* Function not implemented.  */
1341     return;
1342
1343   START (atan2);
1344
1345   /* atan2 (0,x) == 0 for x > 0.  */
1346   TEST_ff_f (atan2, 0, 1, 0);
1347
1348   /* atan2 (-0,x) == -0 for x > 0.  */
1349   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1350
1351   TEST_ff_f (atan2, 0, 0, 0);
1352   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1353
1354   /* atan2 (+0,x) == +pi for x < 0.  */
1355   TEST_ff_f (atan2, 0, -1, M_PIl);
1356
1357   /* atan2 (-0,x) == -pi for x < 0.  */
1358   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1359
1360   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1361   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1362
1363   /* atan2 (y,+0) == pi/2 for y > 0.  */
1364   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1365
1366   /* atan2 (y,-0) == pi/2 for y > 0.  */
1367   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1368
1369   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1370   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1371
1372   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1373   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1374
1375   /* atan2 (y,inf) == +0 for finite y > 0.  */
1376   TEST_ff_f (atan2, 1, plus_infty, 0);
1377
1378   /* atan2 (y,inf) == -0 for finite y < 0.  */
1379   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1380
1381   /* atan2(+inf, x) == pi/2 for finite x.  */
1382   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1383
1384   /* atan2(-inf, x) == -pi/2 for finite x.  */
1385   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1386
1387   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1388   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1389
1390   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1391   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1392
1393   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1394   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1395   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1396   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1397   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1398
1399   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1400
1401   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1402   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1403
1404   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1405   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1406   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1407   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1408   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1409   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1410
1411   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1412 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1413   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1414 #endif
1415
1416   END (atan2);
1417 }
1418
1419 static void
1420 cabs_test (void)
1421 {
1422   errno = 0;
1423   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1424   if (errno == ENOSYS)
1425     /* Function not implemented.  */
1426     return;
1427
1428   START (cabs);
1429
1430   /* cabs (x + iy) is specified as hypot (x,y) */
1431
1432   /* cabs (+inf + i x) == +inf.  */
1433   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1434   /* cabs (-inf + i x) == +inf.  */
1435   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1436
1437   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1438   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1439
1440   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1441
1442   /* cabs (x,y) == cabs (y,x).  */
1443   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1444   /* cabs (x,y) == cabs (-x,y).  */
1445   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1446   /* cabs (x,y) == cabs (-y,x).  */
1447   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1448   /* cabs (x,y) == cabs (-x,-y).  */
1449   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1450   /* cabs (x,y) == cabs (-y,-x).  */
1451   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1452   /* cabs (x,0) == fabs (x).  */
1453   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1454   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1455   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1456   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1457   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1458   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1459
1460   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1461
1462   END (cabs);
1463 }
1464
1465
1466 static void
1467 cacos_test (void)
1468 {
1469   errno = 0;
1470   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1471   if (errno == ENOSYS)
1472     /* Function not implemented.  */
1473     return;
1474
1475   START (cacos);
1476
1477
1478   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1479   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1480   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1481   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1482
1483   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1484   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1485
1486   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1487   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1488
1489   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1490   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1491   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1492   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1493   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1494   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1495
1496   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1497   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1498   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1499   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1500
1501   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1502   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1503   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1504   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1505
1506   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1507   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1508
1509   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1510   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1511
1512   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1513   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1514
1515   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1516   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1517
1518   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1519   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1520
1521   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1522
1523   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1524   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1525   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1526   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1527   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1528   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1529   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1530   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1531   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1532   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1533   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1534   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1535
1536   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1537   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1538   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1539   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1540   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1541   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1542   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1543   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1544   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1545   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1546   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1547   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1548
1549   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1550   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1551   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1552   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1553   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1554   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1555   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1556   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1557 #ifndef TEST_FLOAT
1558   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1559   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1560   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1561   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1562   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1563   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1564   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1565   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1566 #endif
1567 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1568   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1569   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1570   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1571   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1572   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1573   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1574   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1575   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1576 #endif
1577
1578   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1579 #ifndef TEST_FLOAT
1580   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1581 #endif
1582 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1583   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1584 #endif
1585
1586   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1587   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1588   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1589   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1590   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1591   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1592   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1593   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1594 #ifndef TEST_FLOAT
1595   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1596   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1597   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1598   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1599   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1600   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1601   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1602   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1603 #endif
1604 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1605   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1606   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1607   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1608   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1609   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1610   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1611   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1612   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1613 #endif
1614
1615   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1616   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1617   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1618   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1619   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1620   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1621   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1622   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1623   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1624   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1625   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1626   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1627   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1628   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1629   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1630   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1631   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1632   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1633   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1634   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1635   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1636   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1637   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1638   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1639   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1640   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1641   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1642   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1643   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1644   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1645   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1646   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1647   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1648   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1649   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1650   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1651   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1652   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1653   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1654   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1655   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1656   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1657   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1658   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1659   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1660   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1661   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1662   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1663 #ifndef TEST_FLOAT
1664   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1665   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1666   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1667   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1668   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1669   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1670   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1671   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1672   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1673   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1674   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1675   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1676   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1677   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1678   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1679   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1680 #endif
1681 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1682   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1683   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1684   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1685   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1686   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1687   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1688   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1689   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1690   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1691   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1692   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1693   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1694   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1695   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1696   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1697   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1698 #endif
1699
1700   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L);
1701   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L);
1702   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L);
1703   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L);
1704   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L);
1705   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L);
1706   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L);
1707   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L);
1708   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L);
1709   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L);
1710   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L);
1711   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L);
1712   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L);
1713   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L);
1714   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L);
1715   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L);
1716   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1717   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1718   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1719   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1720   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L);
1721   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L);
1722   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L);
1723   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L);
1724 #ifndef TEST_FLOAT
1725   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L);
1726   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L);
1727   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L);
1728   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L);
1729   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L);
1730   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L);
1731   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L);
1732   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L);
1733   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1734   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1735   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1736   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1737   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1738   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1739   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1740   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1741   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1742   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1743   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1744   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1745   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L);
1746   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1747   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L);
1748   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1749 #endif
1750 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1751   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L);
1752   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L);
1753   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L);
1754   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L);
1755   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L);
1756   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L);
1757   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L);
1758   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L);
1759 # if LDBL_MIN_EXP <= -16381
1760   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1761   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1762   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1763   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1764   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L);
1765   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1766   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L);
1767   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1768 # endif
1769   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1770   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1771   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1772   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1773   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L);
1774   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1775   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L);
1776   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1777 #endif
1778 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1779   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L);
1780   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L);
1781   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L);
1782   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L);
1783   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L);
1784   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L);
1785   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L);
1786   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L);
1787   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1788   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1789   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1790   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1791   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L);
1792   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1793   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L);
1794   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1795   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1796   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1797   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1798   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1799   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L);
1800   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1801   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L);
1802   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1803 #endif
1804 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1805   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L);
1806   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L);
1807   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L);
1808   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L);
1809   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L);
1810   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L);
1811   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L);
1812   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L);
1813   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1814   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1815   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1816   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1817   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L);
1818   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1819   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L);
1820   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1821   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1822   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1823   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1824   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1825   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L);
1826   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1827   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L);
1828   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1829 #endif
1830
1831   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1832   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1833   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1834   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1835   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1836   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1837   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1838   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1839   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1840   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1841   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1842   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1843   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1844   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1845   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1846   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1847   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1848   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1849   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1850   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1851   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1852   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1853   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1854   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1855   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1856   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1857   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1858   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1859   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1860   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1861   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1862   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1863   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1864   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1865   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1866   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1867   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1868   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1869   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1870   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1871   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1872   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1873   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
1874   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
1875   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
1876   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
1877   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
1878   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
1879   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1880   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1881   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1882   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1883   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1884   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1885   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1886   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1887   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
1888   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
1889   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
1890   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
1891   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1892   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1893   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1894   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1895 #ifndef TEST_FLOAT
1896   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
1897   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
1898   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
1899   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
1900   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
1901   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
1902   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
1903   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
1904   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1905   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1906   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1907   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1908   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1909   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1910   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1911   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1912   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1913   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1914   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1915   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1916   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
1917   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
1918   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
1919   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
1920 #endif
1921   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
1922   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
1923   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
1924   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
1925   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
1926   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
1927   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
1928   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
1929 #ifndef TEST_FLOAT
1930   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1931   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1932   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1933   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1934   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1935   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1936   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1937   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1938 #endif
1939   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
1940   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
1941   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
1942   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
1943 #ifndef TEST_FLOAT
1944   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1945   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1946   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1947   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1948   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1949   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1950   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1951   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1952 #endif
1953   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1954   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1955   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1956   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1957   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
1958   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
1959   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
1960   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
1961 #ifndef TEST_FLOAT
1962   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1963   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1964   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1965   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1966 #endif
1967 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1968   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
1969   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
1970   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
1971   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
1972   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
1973   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
1974   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
1975   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
1976 # if LDBL_MIN_EXP <= -16381
1977   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1978   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1979   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1980   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1981   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
1982   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
1983   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
1984   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
1985 # endif
1986   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1987   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1988   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1989   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1990   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
1991   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
1992   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
1993   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
1994 #endif
1995   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
1996   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
1997   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
1998   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
1999   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
2000   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
2001   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
2002   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
2003 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2004   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2005   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2006   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2007   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2008   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2009   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2010   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2011   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2012 #endif
2013   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
2014   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
2015   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
2016   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
2017 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2018   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2019   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2020   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2021   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2022   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2023   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2024   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2025   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2026 #endif
2027   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2028   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2029   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2030   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2031   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
2032   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
2033   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
2034   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
2035 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2036   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2037   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2038   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2039   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2040 #endif
2041 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2042   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
2043   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
2044   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
2045   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
2046   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
2047   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
2048   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
2049   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
2050   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2051   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2052   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2053   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2054   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2055   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2056   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2057   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2058   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2059   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2060   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2061   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2062   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
2063   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
2064   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
2065   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
2066 #endif
2067   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
2068   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
2069   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
2070   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2071   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2072   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2073   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2074   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2075   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2076   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2077   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2078   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2079 #ifndef TEST_FLOAT
2080   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2081   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2082   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2083   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2084   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2085   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2086   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2087   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2088 #endif
2089   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2090   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2091   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2092   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2093   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2094   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2095   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2096   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2097 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2098   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2099   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2100   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2101   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2102   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2103   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2104   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2105   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2106   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2107   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2108   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2109   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2110   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2111   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2112   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2113   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2114   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2115   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2116   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2117   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2118   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2119   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2120   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2121   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2122 #endif
2123   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2124   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2125   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2126   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2127   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2128   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2129   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2130   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2131   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2132   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2133   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2134   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2135 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2136   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2137   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2138   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2139   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2140   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2141   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2142   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2143   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2144 #endif
2145   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2146   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2147   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2148   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2149   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2150   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2151   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2152   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2153
2154   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2155   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2156
2157   END (cacos, complex);
2158 }
2159
2160 static void
2161 cacosh_test (void)
2162 {
2163   errno = 0;
2164   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2165   if (errno == ENOSYS)
2166     /* Function not implemented.  */
2167     return;
2168
2169   START (cacosh);
2170
2171
2172   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2173   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2174   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2175   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2176   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2177   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2178
2179   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2180   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2181
2182   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2183   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2184   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2185   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2186   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2187   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2188
2189   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2190   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2191   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2192   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2193
2194   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2195   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2196   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2197   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2198
2199   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2200   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2201
2202   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2203   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2204
2205   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2206   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2207
2208   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2209   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2210
2211   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2212   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2213
2214   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2215
2216   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2217   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2218   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2219   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2220   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2221   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2222   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2223   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2224   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2225   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2226   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2227   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2228
2229   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2230   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2231   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2232   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2233   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2234   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2235   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2236   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2237   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2238   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2239   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2240   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2241
2242   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2243   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2244   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2245   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2246   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2247   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2248   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2249   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2250 #ifndef TEST_FLOAT
2251   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2252   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2253   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2254   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2255   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2256   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2257   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2258   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2259 #endif
2260 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2261   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2262   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2263   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2264   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2265   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2266   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2267   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2268   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2269 #endif
2270   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2271 #ifndef TEST_FLOAT
2272   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2273 #endif
2274 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2275   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2276 #endif
2277   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2278   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2279   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2280   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2281   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2282   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2283   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2284   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2285 #ifndef TEST_FLOAT
2286   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2287   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2288   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2289   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2290   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2291   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2292   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2293   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2294 #endif
2295 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2296   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2297   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2298   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2299   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2300   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2301   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2302   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2303   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2304 #endif
2305   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2306   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2307   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2308   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2309   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2310   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2311   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2312   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2313   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2314   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2315   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2316   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2317   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2318   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2319   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2320   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2321   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2322   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2323   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2324   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2325   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2326   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2327   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2328   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2329   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2330   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2331   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2332   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2333   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2334   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2335   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2336   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2337   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2338   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2339   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2340   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2341   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2342   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2343   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2344   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2345   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2346   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2347   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2348   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2349   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2350   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2351   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2352   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2353 #ifndef TEST_FLOAT
2354   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2355   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2356   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2357   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2358   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2359   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2360   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2361   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2362   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2363   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2364   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2365   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2366   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2367   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2368   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2369   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2370 #endif
2371 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2372   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2373   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2374   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2375   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2376   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2377   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2378   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2379   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2380   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2381   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2382   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2383   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2384   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2385   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2386   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2387   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2388 #endif
2389   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2390   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2391   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2392   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2393   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2394   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2395   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2396   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2397   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2398   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2399   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2400   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2401   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2402   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2403   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2404   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2405   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2406   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2407   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2408   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2409   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2410   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2411   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2412   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2413 #ifndef TEST_FLOAT
2414   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2415   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2416   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2417   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2418   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2419   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2420   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2421   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2422   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2423   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2424   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2425   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2426   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2427   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2428   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2429   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2430   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2431   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2432   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2433   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2434   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2435   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2436   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2437   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2438 #endif
2439 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2440   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2441   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2442   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2443   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2444   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2445   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2446   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2447   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2448 # if LDBL_MIN_EXP <= -16381
2449   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2450   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2451   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2452   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2453   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2454   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2455   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2456   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2457 # endif
2458   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2459   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2460   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2461   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2462   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2463   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2464   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2465   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2466 #endif
2467 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2468   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2469   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2470   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2471   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2472   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2473   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2474   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2475   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2476   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2477   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2478   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2479   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2480   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2481   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2482   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2483   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2484   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2485   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2486   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2487   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2488   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2489   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2490   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2491   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2492 #endif
2493 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2494   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2495   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2496   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2497   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2498   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2499   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2500   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2501   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2502   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2503   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2504   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2505   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2506   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2507   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2508   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2509   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2510   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2511   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2512   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2513   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2514   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2515   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2516   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2517   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2518 #endif
2519   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2520   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2521   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2522   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2523   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2524   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2525   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2526   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2527   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2528   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2529   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2530   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2531   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2532   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2533   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2534   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2535   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2536   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2537   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2538   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2539   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2540   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2541   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2542   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2543   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2544   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2545   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2546   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2547   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2548   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2549   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2550   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2551   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2552   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2553   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2554   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2555   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2556   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2557   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2558   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2559   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2560   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2561   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2562   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2563   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2564   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2565   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2566   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2567   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2568   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2569   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2570   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2571   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2572   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2573   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2574   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2575   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2576   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2577   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2578   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2579   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2580   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2581   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2582   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2583 #ifndef TEST_FLOAT
2584   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2585   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2586   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2587   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2588   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2589   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2590   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2591   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2592   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2593   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2594   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2595   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2596   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2597   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2598   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2599   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2600   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2601   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2602   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2603   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2605   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2606   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2607   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2608 #endif
2609   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2610   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2611   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2612   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2613   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2614   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2615   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2616   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2617 #ifndef TEST_FLOAT
2618   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2619   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2620   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2621   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2622   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2623   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2624   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2625   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2626 #endif
2627   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2628   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2629   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2630   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2631 #ifndef TEST_FLOAT
2632   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2633   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2634   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2635   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2636   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2637   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2638   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2639   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2640 #endif
2641   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2642   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2643   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2644   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2645   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2646   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2647   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2648   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2649 #ifndef TEST_FLOAT
2650   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2651   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2652   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2653   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2654 #endif
2655 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2656   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2657   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2658   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2659   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2660   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2661   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2662   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2663   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2664 # if LDBL_MIN_EXP <= -16381
2665   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2666   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2667   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2668   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2669   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2670   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2671   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2672   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2673 # endif
2674   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2675   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2676   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2677   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2678   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2679   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2680   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2681   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2682 #endif
2683   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2684   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2685   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2686   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2687   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2688   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2689   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2690   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2691 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2692   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2693   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2694   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2695   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2696   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2697   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2698   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2699   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2700 #endif
2701   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2702   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2703   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2704   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2705 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2706   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2707   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2708   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2709   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2710   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2711   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2712   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2713   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2714 #endif
2715   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2716   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2717   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2718   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2719   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2720   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2721   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2722   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2723 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2724   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2725   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2726   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2727   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2728 #endif
2729 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2730   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2731   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2732   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2733   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2734   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2735   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2736   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2737   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2738   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2739   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2740   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2741   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2742   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2743   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2744   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2745   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2746   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2747   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2748   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2749   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2750   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2751   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2752   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2753   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2754 #endif
2755   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2756   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2757   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2758   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2759   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2760   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2761   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2762   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2763   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2764   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2765   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2766   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2767 #ifndef TEST_FLOAT
2768   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2769   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2770   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2771   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2772   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2773   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2774   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2775   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2776 #endif
2777   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2778   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2779   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2780   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2781   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2782   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2783   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2784   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2785 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2786   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2787   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2788   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2789   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2790   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2791   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2792   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2793   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2794   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2795   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2796   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2797   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2798   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2799   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2800   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2801   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2802   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2803   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2804   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2805   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2806   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2807   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2808   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2809   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2810 #endif
2811   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2812   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2813   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2814   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2815   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2816   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2817   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2818   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2819   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2820   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2821   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2822   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2823 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2824   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2825   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2826   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2827   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2828   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2829   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2830   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2831   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2832 #endif
2833   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2834   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2835   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2836   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2837   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2838   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2839   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2840   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2841
2842   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2843   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2844
2845   END (cacosh, complex);
2846 }
2847
2848
2849 static void
2850 carg_test (void)
2851 {
2852   START (carg);
2853
2854   /* carg (x + iy) is specified as atan2 (y, x) */
2855
2856   /* carg (x + i 0) == 0 for x > 0.  */
2857   TEST_c_f (carg, 2.0, 0, 0);
2858   /* carg (x - i 0) == -0 for x > 0.  */
2859   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2860
2861   TEST_c_f (carg, 0, 0, 0);
2862   TEST_c_f (carg, 0, minus_zero, minus_zero);
2863
2864   /* carg (x + i 0) == +pi for x < 0.  */
2865   TEST_c_f (carg, -2.0, 0, M_PIl);
2866
2867   /* carg (x - i 0) == -pi for x < 0.  */
2868   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2869
2870   TEST_c_f (carg, minus_zero, 0, M_PIl);
2871   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2872
2873   /* carg (+0 + i y) == pi/2 for y > 0.  */
2874   TEST_c_f (carg, 0, 2.0, M_PI_2l);
2875
2876   /* carg (-0 + i y) == pi/2 for y > 0.  */
2877   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
2878
2879   /* carg (+0 + i y) == -pi/2 for y < 0.  */
2880   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
2881
2882   /* carg (-0 + i y) == -pi/2 for y < 0.  */
2883   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
2884
2885   /* carg (inf + i y) == +0 for finite y > 0.  */
2886   TEST_c_f (carg, plus_infty, 2.0, 0);
2887
2888   /* carg (inf + i y) == -0 for finite y < 0.  */
2889   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
2890
2891   /* carg(x + i inf) == pi/2 for finite x.  */
2892   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
2893
2894   /* carg(x - i inf) == -pi/2 for finite x.  */
2895   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
2896
2897   /* carg (-inf + i y) == +pi for finite y > 0.  */
2898   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
2899
2900   /* carg (-inf + i y) == -pi for finite y < 0.  */
2901   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
2902
2903   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
2904
2905   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
2906
2907   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
2908
2909   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
2910
2911   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
2912
2913   END (carg);
2914 }
2915
2916 static void
2917 casin_test (void)
2918 {
2919   errno = 0;
2920   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
2921   if (errno == ENOSYS)
2922     /* Function not implemented.  */
2923     return;
2924
2925   START (casin);
2926
2927   TEST_c_c (casin, 0, 0, 0.0, 0.0);
2928   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
2929   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
2930   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
2931
2932   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
2933   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
2934   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
2935   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
2936
2937   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
2938   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
2939   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
2940   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
2941   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
2942   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
2943   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
2944   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
2945
2946   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
2947   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
2948   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
2949   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
2950
2951   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
2952   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
2953   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
2954   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
2955
2956   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
2957   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
2958
2959   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
2960   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
2961
2962   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2963   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2964
2965   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2966   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2967
2968   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2969   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2970
2971   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
2972
2973   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
2974   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
2975   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
2976   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
2977   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
2978   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
2979   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
2980   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
2981   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
2982   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
2983   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
2984   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
2985
2986   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
2987   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
2988   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
2989   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
2990   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
2991   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
2992   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
2993   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
2994   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
2995   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
2996   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
2997   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
2998
2999   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3000   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3001   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3002   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3003   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3004   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3005   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3006   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3007 #ifndef TEST_FLOAT
3008   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3009   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3010   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3011   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3012   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3013   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3014   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3015   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3016 #endif
3017 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3018   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3019   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3020   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3021   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3022   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3023   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3024   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3025   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3026 #endif
3027
3028   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
3029 #ifndef TEST_FLOAT
3030   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
3031 #endif
3032 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3033   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
3034 #endif
3035
3036   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3037   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3038   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3039   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3040   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3041   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3042   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3043   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3044 #ifndef TEST_FLOAT
3045   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3046   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3047   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3048   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3049   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3050   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3051   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3052   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3053 #endif
3054 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3055   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3056   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3057   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3058   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3059   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3060   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3061   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3062   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3063 #endif
3064
3065   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3066   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3067   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3068   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3069   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3070   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3071   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3072   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3073   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3074   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3075   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3076   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3077   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3078   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3079   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3080   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3081   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3082   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3083   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3084   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3085   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3086   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3087   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3088   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3089   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3090   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3091   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3092   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3093   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3094   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3095   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3096   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3097   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3098   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3099   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3100   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3101   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3102   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3103   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3104   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3105   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3106   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3107   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3108   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3109   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3110   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3111   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3112   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3113 #ifndef TEST_FLOAT
3114   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3115   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3116   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3117   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3118   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3119   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3120   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3121   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3122   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3123   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3124   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3125   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3126   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3127   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3128   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3129   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3130 #endif
3131 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3132   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3133   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3134   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3135   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3136   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3137   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3138   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3139   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3140   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3141   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3142   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3143   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3144   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3145   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3146   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3147   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3148 #endif
3149
3150   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3151   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3152   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3153   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3154   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3155   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3156   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3157   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3158   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3159   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3160   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3161   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3162   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3163   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3164   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3165   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3166   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L);
3167   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L);
3168   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L);
3169   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L);
3170   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3171   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3172   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3173   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3174 #ifndef TEST_FLOAT
3175   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3176   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3177   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3178   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3179   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3180   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3181   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3182   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3183   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3184   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3185   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3186   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3187   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3188   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3189   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3190   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3191   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L);
3192   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L);
3193   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L);
3194   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L);
3195   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3196   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3197   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3198   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3199 #endif
3200 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3201   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3202   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3203   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3204   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3205   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3206   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3207   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3208   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3209 # if LDBL_MIN_EXP <= -16381
3210   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3211   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3212   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3213   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3214   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3215   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3216   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3217   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3218 # endif
3219   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L);
3220   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L);
3221   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L);
3222   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L);
3223   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3224   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3225   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3226   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3227 #endif
3228 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3229   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3230   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3231   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3232   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3233   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3234   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3235   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3236   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3237   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3238   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3239   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3240   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3241   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3242   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3243   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3244   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3245   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L);
3246   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L);
3247   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L);
3248   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L);
3249   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3250   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3251   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3252   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3253 #endif
3254 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3255   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3256   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3257   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3258   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3259   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3260   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3261   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3262   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3263   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3264   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3265   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3266   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3267   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3268   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3269   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3270   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3271   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L);
3272   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L);
3273   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L);
3274   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L);
3275   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3276   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3277   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3278   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3279 #endif
3280
3281   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3282   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3283   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3284   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3285   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3286   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3287   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3288   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3289   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3290   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3291   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3292   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3293   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3294   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3295   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3296   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3297   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3298   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3299   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3300   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3301   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3302   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3303   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3304   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3305   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3306   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3307   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3308   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3309   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3310   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3311   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3312   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3313   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3314   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3315   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3316   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3317   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3318   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3319   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3320   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3321   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3322   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3323   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3324   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3325   /* Bug 15319: underflow exception may be missing.  */
3326   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3327   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3328   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3329   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3330   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3331   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3332   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3333   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3334   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3335   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3336   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3337   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3338   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3339   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3340   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3341   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3342   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3343   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3344   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3345   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3346 #ifndef TEST_FLOAT
3347   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3348   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3349   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3350   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3351   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3352   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3353   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3354   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3355   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3356   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3357   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3358   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3359   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3360   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3361   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3362   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3363   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3364   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3365   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3366   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3367   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3368   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3369   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3370   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3371 #endif
3372   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3373   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3374   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3375   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3376   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3377   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3378   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3379   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3380 #ifndef TEST_FLOAT
3381   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3382   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3383   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3384   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3385   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3386   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3387   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3388   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3389 #endif
3390   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3391   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3392   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3393   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3394 #ifndef TEST_FLOAT
3395   /* Bug 15319: underflow exception may be missing.  */
3396   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3397   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3398   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3399   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3400   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3401   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3402   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3403   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3404 #endif
3405   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3406   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3407   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3408   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3409   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3410   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3411   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3412   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3413 #ifndef TEST_FLOAT
3414   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3415   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3416   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3417   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3418 #endif
3419 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3420   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3421   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3422   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3423   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3424   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3425   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3426   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3427   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3428 # if LDBL_MIN_EXP <= -16381
3429   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3430   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3431   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3432   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3433   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3434   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3435   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3436   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3437 # endif
3438   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3439   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3440   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3441   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3442   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3443   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3444   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3445   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3446 #endif
3447   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3448   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3449   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3450   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3451   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3452   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3453   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3454   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3455 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3456   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3457   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3458   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3459   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3460   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3461   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3462   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3463   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3464 #endif
3465   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3466   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3467   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3468   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3469 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3470   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3471   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3472   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3473   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3474   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3475   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3476   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3477   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3478 #endif
3479   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3480   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3481   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3482   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3483   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3484   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3485   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3486   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3487 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3488   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3489   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3490   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3491   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3492 #endif
3493 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3494   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3495   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3496   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3497   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3498   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3499   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3500   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3501   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3502   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3503   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3504   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3505   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3506   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3507   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3508   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3509   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3510   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3511   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3512   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3513   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3514   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3515   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3516   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3517   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3518 #endif
3519   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3520   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3521   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3522   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3523   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3524   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3525   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3526   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3527   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3528   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3529   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3530   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3531 #ifndef TEST_FLOAT
3532   /* Bug 15319: underflow exception may be missing.  */
3533   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3534   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3535   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3536   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3537   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3538   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3539   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3540   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3541 #endif
3542   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3543   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3544   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3545   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3546   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3547   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3548   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3549   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3550 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3551   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3552   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3553   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3554   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3555   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3556   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3557   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3558   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3559   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3560   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3561   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3562   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3563   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3564   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3565   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3566   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3567   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3568   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3569   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3570   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3571   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3572   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3573   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3574   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3575 #endif
3576   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3577   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3578   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3579   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3580   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3581   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3582   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3583   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3584   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3585   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3586   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3587   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3588 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3589   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3590   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3591   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3592   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3593   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3594   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3595   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3596   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3597 #endif
3598   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3599   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3600   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3601   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3602   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3603   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3604   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3605   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3606
3607   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3608   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3609
3610   END (casin, complex);
3611 }
3612
3613
3614 static void
3615 casinh_test (void)
3616 {
3617   errno = 0;
3618   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3619   if (errno == ENOSYS)
3620     /* Function not implemented.  */
3621     return;
3622
3623   START (casinh);
3624
3625   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3626   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3627   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3628   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3629
3630   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3631   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3632   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3633   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3634
3635   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3636   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3637   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3638   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3639   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3640   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3641   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3642   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3643
3644   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3645   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3646   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3647   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3648
3649   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3650   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3651   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3652   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3653
3654   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3655   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3656
3657   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3658   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3659
3660   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3661   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3662
3663   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3664   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3665
3666   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3667   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3668
3669   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3670
3671   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3672   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3673   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3674   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3675   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3676   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3677   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3678   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3679   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3680   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3681   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3682   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3683
3684   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3685   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3686   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3687   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3688   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3689   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3690   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3691   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3692   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3693   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3694   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3695   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3696
3697   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3698   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3699   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3700   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3701   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3702   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3703   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3704   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3705 #ifndef TEST_FLOAT
3706   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3707   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3708   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3709   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3710   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3711   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3712   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3713   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3714 #endif
3715 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3716   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3717   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3718   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3719   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3720   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3721   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3722   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3723   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3724 #endif
3725
3726   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3727 #ifndef TEST_FLOAT
3728   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3729 #endif
3730 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3731   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3732 #endif
3733
3734   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3735   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3736   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3737   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3738   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3739   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3740   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3741   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3742 #ifndef TEST_FLOAT
3743   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3744   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3745   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3746   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3747   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3748   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3749   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3750   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3751 #endif
3752 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3753   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3754   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3755   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3756   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3757   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3758   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3759   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3760   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3761 #endif
3762
3763   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3764   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3765   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3766   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3767   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3768   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3769   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3770   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3771   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3772   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3773   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3774   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3775   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3776   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3777   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3778   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3779   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3780   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3781   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3782   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3783   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3784   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3785   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3786   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3787   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3788   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3789   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3790   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3791   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3792   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3793   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3794   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3795   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3796   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3797   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3798   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3799   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3800   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3801   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3802   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3803   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3804   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3805   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3806   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3807   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3808   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3809   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3810   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3811 #ifndef TEST_FLOAT
3812   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3813   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3814   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3815   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3816   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3817   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3818   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3819   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3820   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3821   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3822   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3823   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3824   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3825   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3826   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3827   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3828 #endif
3829 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3830   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3831   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3832   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3833   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3834   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3835   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3836   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3837   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3838   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3839   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3840   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3841   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3842   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3843   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3844   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3845   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3846 #endif
3847
3848   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3849   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3850   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3851   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3852   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3853   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3854   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3855   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3856   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3857   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3858   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3859   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3860   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3861   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3862   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3863   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3864   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3865   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3866   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3867   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3868   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L);
3869   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L);
3870   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L);
3871   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L);
3872 #ifndef TEST_FLOAT
3873   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
3874   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
3875   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
3876   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
3877   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
3878   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
3879   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
3880   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
3881   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3882   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3883   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3884   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3885   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3886   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3887   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3888   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3889   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3890   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3891   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
3892   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
3893   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L);
3894   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L);
3895   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L);
3896   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L);
3897 #endif
3898 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3899   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
3900   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
3901   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
3902   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
3903   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
3904   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
3905   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
3906   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
3907 # if LDBL_MIN_EXP <= -16381
3908   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3909   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3910   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3911   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3912   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3913   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3914   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3915   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
3916 # endif
3917   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3918   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3919   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
3920   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
3921   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L);
3922   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L);
3923   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L);
3924   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L);
3925 #endif
3926 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3927   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
3928   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
3929   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
3930   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
3931   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
3932   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
3933   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
3934   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
3935   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3936   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3937   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3938   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3939   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3940   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3941   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3942   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3943   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3944   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3945   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
3946   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
3947   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L);
3948   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L);
3949   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L);
3950   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L);
3951 #endif
3952 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3953   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
3954   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
3955   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
3956   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
3957   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
3958   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
3959   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
3960   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
3961   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3962   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3963   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3964   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3965   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3966   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3967   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3968   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
3969   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3970   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3971   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
3972   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
3973   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L);
3974   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L);
3975   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L);
3976   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L);
3977 #endif
3978
3979   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3980   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3981   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3982   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3983   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3984   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3985   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3986   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3987   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3988   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3989   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3990   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3991   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3992   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3993   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3994   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3995   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
3996   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
3997   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
3998   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
3999   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
4000   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
4001   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
4002   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
4003   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4004   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4005   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4006   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4007   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4008   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4009   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4010   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4011   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4012   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4013   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4014   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4015   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4016   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4017   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4018   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4019   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4020   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4021   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4022   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4023   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4024   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4025   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4026   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4027   /* Bug 15319: underflow exception may be missing.  */
4028   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4029   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4030   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4031   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4032   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
4033   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
4034   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
4035   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
4036   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
4037   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
4038   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
4039   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
4040   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4041   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4042   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4043   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4044 #ifndef TEST_FLOAT
4045   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4046   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4047   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4048   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4049   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4050   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4051   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4052   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4053   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4054   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4055   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4056   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4057   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4058   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4059   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4060   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4061   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
4062   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
4063   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
4064   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
4065   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
4066   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
4067   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
4068   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
4069 #endif
4070   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4071   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4072   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4073   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4074   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4075   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4076   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4077   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4078 #ifndef TEST_FLOAT
4079   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4080   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4081   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4082   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4083   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4084   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4085   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4086   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4087 #endif
4088   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4089   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4090   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4091   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4092 #ifndef TEST_FLOAT
4093   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4094   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4095   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4096   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4097   /* Bug 15319: underflow exception may be missing.  */
4098   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4099   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4100   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4101   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4102 #endif
4103   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4104   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4105   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4106   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4107   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4108   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4109   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4110   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4111 #ifndef TEST_FLOAT
4112   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4113   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4114   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4115   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4116 #endif
4117 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4118   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4119   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4120   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4121   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4122   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4123   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4124   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4125   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4126 # if LDBL_MIN_EXP <= -16381
4127   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4128   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4129   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4130   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4131   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4132   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4133   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4134   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4135 # endif
4136   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4137   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4138   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4139   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4140   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4141   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4142   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4143   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4144 #endif
4145   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4146   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4147   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4148   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4149   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4150   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4151   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4152   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4153 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4154   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4155   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4156   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4157   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4158   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4159   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4160   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4161   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4162 #endif
4163   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4164   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4165   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4166   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4167 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4168   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4169   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4170   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4171   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4172   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4173   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4174   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4175   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4176 #endif
4177   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4178   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4179   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4180   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4181   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4182   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4183   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4184   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4185 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4186   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4187   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4188   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4189   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4190 #endif
4191 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4192   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4193   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4194   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4195   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4196   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4197   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4198   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4199   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4200   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4201   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4202   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4203   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4204   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4205   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4206   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4207   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4208   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4209   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4210   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4211   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4212   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4213   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4214   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4215   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4216 #endif
4217   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4218   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4219   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4220   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4221   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4222   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4223   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4224   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4225   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4226   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4227   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4228   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4229 #ifndef TEST_FLOAT
4230   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4231   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4232   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4233   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4234   /* Bug 15319: underflow exception may be missing.  */
4235   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4236   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4237   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4238   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4239 #endif
4240   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4241   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4242   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4243   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4244   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4245   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4246   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4247   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4248 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4249   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4250   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4251   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4252   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4253   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4254   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4255   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4256   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4257   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4258   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4259   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4260   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4261   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4262   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4263   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4264   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4265   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4266   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4267   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4268   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4269   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4270   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4271   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4272   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4273 #endif
4274   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4275   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4276   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4277   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4278   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4279   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4280   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4281   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4282   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4283   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4284   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4285   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4286 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4287   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4288   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4289   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4290   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4291   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4292   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4293   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4294   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4295 #endif
4296   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4297   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4298   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4299   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4300   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4301   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4302   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4303   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4304
4305   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4306   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4307
4308   END (casinh, complex);
4309 }
4310
4311
4312 static void
4313 catan_test (void)
4314 {
4315   errno = 0;
4316   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4317   if (errno == ENOSYS)
4318     /* Function not implemented.  */
4319     return;
4320
4321   START (catan);
4322
4323   TEST_c_c (catan, 0, 0, 0, 0);
4324   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4325   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4326   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4327
4328   TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero);
4329   TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero);
4330   TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero);
4331   TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero);
4332   TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4333   TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4334   TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4335   TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4336
4337   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4338   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4339   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4340   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4341
4342
4343   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4344   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4345   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4346   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4347   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4348   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4349   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4350   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4351
4352   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4353   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4354   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4355   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4356
4357   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4358   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4359   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4360   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4361
4362   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4363   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4364
4365   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4366   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4367
4368   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4369   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4370
4371   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4372   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4373
4374   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4375   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4376
4377   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4378   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4379
4380   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4381
4382   TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L);
4383   TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L);
4384   TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L);
4385   TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L);
4386   TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4387   TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4388   TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4389   TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4390 #ifndef TEST_FLOAT
4391   TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4392   TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4393   TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4394   TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4395   TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4396   TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4397   TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4398   TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4399 #endif
4400 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4401   TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4402   TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4403   TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4404   TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4405   TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4406   TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4407   TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4408   TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4409 #endif
4410   TEST_c_c (catan, 0x1p63L, 0.5L, 1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4411   TEST_c_c (catan, 0x1p63L, -0.5L, 1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4412   TEST_c_c (catan, -0x1p63L, 0.5L, -1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4413   TEST_c_c (catan, -0x1p63L, -0.5L, -1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4414   TEST_c_c (catan, 0.5L, 0x1p63L, 1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4415   TEST_c_c (catan, -0.5L, 0x1p63L, -1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4416   TEST_c_c (catan, 0.5L, -0x1p63L, 1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4417   TEST_c_c (catan, -0.5L, -0x1p63L, -1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4418 #ifndef TEST_FLOAT
4419   TEST_c_c (catan, 0x1p511L, 0.5L, 1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4420   TEST_c_c (catan, 0x1p511L, -0.5L, 1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4421   TEST_c_c (catan, -0x1p511L, 0.5L, -1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4422   TEST_c_c (catan, -0x1p511L, -0.5L, -1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4423   TEST_c_c (catan, 0.5L, 0x1p511L, 1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4424   TEST_c_c (catan, -0.5L, 0x1p511L, -1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4425   TEST_c_c (catan, 0.5L, -0x1p511L, 1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4426   TEST_c_c (catan, -0.5L, -0x1p511L, -1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4427 #endif
4428 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4429   TEST_c_c (catan, 0x1p8191L, 0.5L, 1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4430   TEST_c_c (catan, 0x1p8191L, -0.5L, 1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4431   TEST_c_c (catan, -0x1p8191L, 0.5L, -1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4432   TEST_c_c (catan, -0x1p8191L, -0.5L, -1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4433   TEST_c_c (catan, 0.5L, 0x1p8191L, 1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4434   TEST_c_c (catan, -0.5L, 0x1p8191L, -1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4435   TEST_c_c (catan, 0.5L, -0x1p8191L, 1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4436   TEST_c_c (catan, -0.5L, -0x1p8191L, -1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4437 #endif
4438   TEST_c_c (catan, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L, 0.0L);
4439   TEST_c_c (catan, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L, -0.0L);
4440   TEST_c_c (catan, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L, 0.0L);
4441   TEST_c_c (catan, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L, -0.0L);
4442   TEST_c_c (catan, 0.0L, 0x1p100L, 1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4443   TEST_c_c (catan, -0.0L, 0x1p100L, -1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4444   TEST_c_c (catan, 0.0L, -0x1p100L, 1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4445   TEST_c_c (catan, -0.0L, -0x1p100L, -1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4446   TEST_c_c (catan, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L, 0.0L);
4447   TEST_c_c (catan, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L, -0.0L);
4448   TEST_c_c (catan, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L, 0.0L);
4449   TEST_c_c (catan, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L, -0.0L);
4450   TEST_c_c (catan, 0.0L, 0x1.fp127L, 1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4451   TEST_c_c (catan, -0.0L, 0x1.fp127L, -1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4452   TEST_c_c (catan, 0.0L, -0x1.fp127L, 1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4453   TEST_c_c (catan, -0.0L, -0x1.fp127L, -1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4454   TEST_c_c (catan, 0x1.fp127L, 0x1.fp127L, 1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4455   TEST_c_c (catan, 0x1.fp127L, -0x1.fp127L, 1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4456   TEST_c_c (catan, -0x1.fp127L, 0x1.fp127L, -1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4457   TEST_c_c (catan, -0x1.fp127L, -0x1.fp127L, -1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4458 #ifndef TEST_FLOAT
4459   TEST_c_c (catan, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4460   TEST_c_c (catan, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4461   TEST_c_c (catan, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4462   TEST_c_c (catan, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4463   TEST_c_c (catan, 0.0L, 0x1p900L, 1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4464   TEST_c_c (catan, -0.0L, 0x1p900L, -1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4465   TEST_c_c (catan, 0.0L, -0x1p900L, 1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4466   TEST_c_c (catan, -0.0L, -0x1p900L, -1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4467   TEST_c_c (catan, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4468   TEST_c_c (catan, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4469   TEST_c_c (catan, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4470   TEST_c_c (catan, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4471   TEST_c_c (catan, 0.0L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4472   TEST_c_c (catan, -0.0L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4473   TEST_c_c (catan, 0.0L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4474   TEST_c_c (catan, -0.0L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4475   TEST_c_c (catan, 0x1.fp1023L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4476   TEST_c_c (catan, 0x1.fp1023L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4477   TEST_c_c (catan, -0x1.fp1023L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4478   TEST_c_c (catan, -0x1.fp1023L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4479 #endif
4480 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4481   TEST_c_c (catan, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4482   TEST_c_c (catan, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4483   TEST_c_c (catan, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4484   TEST_c_c (catan, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4485   TEST_c_c (catan, 0.0L, 0x1p10000L, 1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4486   TEST_c_c (catan, -0.0L, 0x1p10000L, -1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4487   TEST_c_c (catan, 0.0L, -0x1p10000L, 1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4488   TEST_c_c (catan, -0.0L, -0x1p10000L, -1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4489   TEST_c_c (catan, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4490   TEST_c_c (catan, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4491   TEST_c_c (catan, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4492   TEST_c_c (catan, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4493   TEST_c_c (catan, 0.0L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4494   TEST_c_c (catan, -0.0L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4495   TEST_c_c (catan, 0.0L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4496   TEST_c_c (catan, -0.0L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4497   TEST_c_c (catan, 0x1.fp16383L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4498   TEST_c_c (catan, 0x1.fp16383L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4499   TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4500   TEST_c_c (catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4501 #endif
4502   TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4503   TEST_c_c (catan, 0x1p-13L, -1.0L, 7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4504   TEST_c_c (catan, -0x1p-13L, 1.0L, -7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4505   TEST_c_c (catan, -0x1p-13L, -1.0L, -7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4506   TEST_c_c (catan, 1.0L, 0x1p-13L, 7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4507   TEST_c_c (catan, -1.0L, 0x1p-13L, -7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4508   TEST_c_c (catan, 1.0L, -0x1p-13L, 7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4509   TEST_c_c (catan, -1.0L, -0x1p-13L, -7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4510   TEST_c_c (catan, 0x1p-27L, 1.0L, 7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4511   TEST_c_c (catan, 0x1p-27L, -1.0L, 7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4512   TEST_c_c (catan, -0x1p-27L, 1.0L, -7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4513   TEST_c_c (catan, -0x1p-27L, -1.0L, -7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4514   TEST_c_c (catan, 1.0L, 0x1p-27L, 7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4515   TEST_c_c (catan, -1.0L, 0x1p-27L, -7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4516   TEST_c_c (catan, 1.0L, -0x1p-27L, 7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4517   TEST_c_c (catan, -1.0L, -0x1p-27L, -7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4518   TEST_c_c (catan, 0x1p-33L, 1.0L, 7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4519   TEST_c_c (catan, 0x1p-33L, -1.0L, 7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4520   TEST_c_c (catan, -0x1p-33L, 1.0L, -7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4521   TEST_c_c (catan, -0x1p-33L, -1.0L, -7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4522   TEST_c_c (catan, 1.0L, 0x1p-33L, 7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4523   TEST_c_c (catan, -1.0L, 0x1p-33L, -7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4524   TEST_c_c (catan, 1.0L, -0x1p-33L, 7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4525   TEST_c_c (catan, -1.0L, -0x1p-33L, -7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4526   TEST_c_c (catan, 0x1p-54L, 1.0L, 7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4527   TEST_c_c (catan, 0x1p-54L, -1.0L, 7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4528   TEST_c_c (catan, -0x1p-54L, 1.0L, -7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4529   TEST_c_c (catan, -0x1p-54L, -1.0L, -7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4530   TEST_c_c (catan, 1.0L, 0x1p-54L, 7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4531   TEST_c_c (catan, -1.0L, 0x1p-54L, -7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4532   TEST_c_c (catan, 1.0L, -0x1p-54L, 7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4533   TEST_c_c (catan, -1.0L, -0x1p-54L, -7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4534   TEST_c_c (catan, 0x1p-57L, 1.0L, 7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4535   TEST_c_c (catan, 0x1p-57L, -1.0L, 7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4536   TEST_c_c (catan, -0x1p-57L, 1.0L, -7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4537   TEST_c_c (catan, -0x1p-57L, -1.0L, -7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4538   TEST_c_c (catan, 1.0L, 0x1p-57L, 7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4539   TEST_c_c (catan, -1.0L, 0x1p-57L, -7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4540   TEST_c_c (catan, 1.0L, -0x1p-57L, 7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4541   TEST_c_c (catan, -1.0L, -0x1p-57L, -7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4542   TEST_c_c (catan, 0x1p-13L, 0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4543   TEST_c_c (catan, 0x1p-13L, -0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4544   TEST_c_c (catan, -0x1p-13L, 0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4545   TEST_c_c (catan, -0x1p-13L, -0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4546   TEST_c_c (catan, 0x1.000002p0L, 0x1p-13L, 7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4547   TEST_c_c (catan, -0x1.000002p0L, 0x1p-13L, -7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4548   TEST_c_c (catan, 0x1.000002p0L, -0x1p-13L, 7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4549   TEST_c_c (catan, -0x1.000002p0L, -0x1p-13L, -7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4550   TEST_c_c (catan, 0x1p-13L, 0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4551   TEST_c_c (catan, 0x1p-13L, -0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4552   TEST_c_c (catan, -0x1p-13L, 0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4553   TEST_c_c (catan, -0x1p-13L, -0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4554   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-13L, 7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4555   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-13L, -7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4556   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-13L, 7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4557   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-13L, -7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4558 #ifndef TEST_FLOAT
4559   TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4560   TEST_c_c (catan, 0x1p-27L, -0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4561   TEST_c_c (catan, -0x1p-27L, 0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4562   TEST_c_c (catan, -0x1p-27L, -0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4563   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4564   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4565   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4566   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4567   TEST_c_c (catan, 0x1p-27L, 0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4568   TEST_c_c (catan, 0x1p-27L, -0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4569   TEST_c_c (catan, -0x1p-27L, 0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4570   TEST_c_c (catan, -0x1p-27L, -0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4571   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4572   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4573   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4574   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4575 #endif
4576 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4577   TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4578   TEST_c_c (catan, 0x1p-33L, -0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4579   TEST_c_c (catan, -0x1p-33L, 0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4580   TEST_c_c (catan, -0x1p-33L, -0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4581   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4582   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4583   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4584   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4585   TEST_c_c (catan, 0x1p-33L, 0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4586   TEST_c_c (catan, 0x1p-33L, -0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4587   TEST_c_c (catan, -0x1p-33L, 0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4588   TEST_c_c (catan, -0x1p-33L, -0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4589   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4590   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4591   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4592   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4593 #endif
4594 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4595   TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4596   TEST_c_c (catan, 0x1p-54L, -0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4597   TEST_c_c (catan, -0x1p-54L, 0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4598   TEST_c_c (catan, -0x1p-54L, -0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4599   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-54L, 7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4600   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-54L, -7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4601   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-54L, 7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4602   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-54L, -7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4603   TEST_c_c (catan, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4604   TEST_c_c (catan, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4605   TEST_c_c (catan, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4606   TEST_c_c (catan, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4607   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4608   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4609   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4610   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4611 #endif
4612 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4613   TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4614   TEST_c_c (catan, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4615   TEST_c_c (catan, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4616   TEST_c_c (catan, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4617   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4618   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4619   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4620   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4621   TEST_c_c (catan, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4622   TEST_c_c (catan, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4623   TEST_c_c (catan, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4624   TEST_c_c (catan, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4625   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4626   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4627   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4628   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4629 #endif
4630   TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4631   TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4632   TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4633   TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4634   TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4635   TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4636   TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4637   TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4638   TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4639   TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4640   TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4641   TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4642   TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4643   TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4644   TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4645   TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4646   TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4647   TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4648   TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4649   TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4650   TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4651   TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4652   TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4653   TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4654   TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4655   TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4656   TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4657   TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4658   TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4659   TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4660   TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4661   TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4662   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4663   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4664   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4665   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4666   TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4667   TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4668   TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4669   TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4670 #ifndef TEST_FLOAT
4671   TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4672   TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4673   TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4674   TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4675   TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4676   TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4677   TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4678   TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4679   TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4680   TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4681   TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4682   TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4683   TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4684   TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4685   TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4686   TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4687   TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4688   TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4689   TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4690   TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4691   TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4692   TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4693   TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4694   TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4695   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4696   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4697   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4698   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4699   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4700   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4701   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4702   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4703   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4704   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4705   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4706   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4707   TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4708   TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4709   TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4710   TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4711 #endif
4712 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4713   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4714   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4715   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4716   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4717   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4718   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4719   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4720   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4721   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4722   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4723   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4724   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4725   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4726   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4727   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4728   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4729 #endif
4730 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4731   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4732   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4733   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4734   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4735   TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4736   TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4737   TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4738   TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4739   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4740   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4741   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4742   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4743   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4744   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4745   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4746   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4747 #endif
4748 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4749   TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4750   TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4751   TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4752   TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4753   TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4754   TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4755   TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4756   TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4757   TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4758   TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4759   TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4760   TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4761   TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4762   TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4763   TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4764   TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4765   TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4766   TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4767   TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4768   TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4769   TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4770   TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4771   TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4772   TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4773   TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4774   TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4775   TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4776   TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4777   TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4778   TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4779   TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4780   TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4781   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4782   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4783   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4784   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4785   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4786   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4787   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4788   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4789   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4790   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4791   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4792   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4793   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4794   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4795   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4796   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4797 # if LDBL_MANT_DIG >= 113
4798   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4799   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4800   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4801   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4802   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4803   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4804   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4805   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4806   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4807   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4808   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4809   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4810   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4811   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4812   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4813   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4814 # endif
4815 #endif
4816
4817   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4818   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4819
4820   END (catan, complex);
4821 }
4822
4823 static void
4824 catanh_test (void)
4825 {
4826   errno = 0;
4827   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4828   if (errno == ENOSYS)
4829     /* Function not implemented.  */
4830     return;
4831
4832   START (catanh);
4833
4834   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4835   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4836   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4837   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4838
4839   TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4840   TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4841   TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4842   TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4843   TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l);
4844   TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l);
4845   TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l);
4846   TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l);
4847
4848   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4849   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4850   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4851   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4852
4853   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4854   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4855   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4856   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4857   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4858   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4859   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4860   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4861
4862   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4863   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4864   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4865   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4866
4867   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4868   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4869   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4870   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4871
4872   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
4873   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
4874
4875   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
4876   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
4877
4878   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
4879   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
4880
4881   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
4882   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
4883
4884   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4885   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4886
4887   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4888   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4889
4890   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
4891
4892   TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4893   TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4894   TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4895   TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4896   TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L);
4897   TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L);
4898   TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L);
4899   TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L);
4900 #ifndef TEST_FLOAT
4901   TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4902   TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4903   TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4904   TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4905   TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L);
4906   TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L);
4907   TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L);
4908   TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L);
4909 #endif
4910 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4911   TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4912   TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4913   TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4914   TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4915   TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L);
4916   TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L);
4917   TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L);
4918   TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L);
4919 #endif
4920   TEST_c_c (catanh, 0x1p63L, 0.5L, 1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
4921   TEST_c_c (catanh, 0x1p63L, -0.5L, 1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
4922   TEST_c_c (catanh, -0x1p63L, 0.5L, -1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
4923   TEST_c_c (catanh, -0x1p63L, -0.5L, -1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
4924   TEST_c_c (catanh, 0.5L, 0x1p63L, 5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4925   TEST_c_c (catanh, -0.5L, 0x1p63L, -5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4926   TEST_c_c (catanh, 0.5L, -0x1p63L, 5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4927   TEST_c_c (catanh, -0.5L, -0x1p63L, -5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4928 #ifndef TEST_FLOAT
4929   TEST_c_c (catanh, 0x1p511L, 0.5L, 1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
4930   TEST_c_c (catanh, 0x1p511L, -0.5L, 1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
4931   TEST_c_c (catanh, -0x1p511L, 0.5L, -1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
4932   TEST_c_c (catanh, -0x1p511L, -0.5L, -1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
4933   TEST_c_c (catanh, 0.5L, 0x1p511L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4934   TEST_c_c (catanh, -0.5L, 0x1p511L, -1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4935   TEST_c_c (catanh, 0.5L, -0x1p511L, 1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4936   TEST_c_c (catanh, -0.5L, -0x1p511L, -1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4937 #endif
4938 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4939   TEST_c_c (catanh, 0x1p8191L, 0.5L, 1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
4940   TEST_c_c (catanh, 0x1p8191L, -0.5L, 1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
4941   TEST_c_c (catanh, -0x1p8191L, 0.5L, -1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
4942   TEST_c_c (catanh, -0x1p8191L, -0.5L, -1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
4943   TEST_c_c (catanh, 0.5L, 0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4944   TEST_c_c (catanh, -0.5L, 0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4945   TEST_c_c (catanh, 0.5L, -0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4946   TEST_c_c (catanh, -0.5L, -0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4947 #endif
4948   TEST_c_c (catanh, 0x1p100L, 0.0L, 7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
4949   TEST_c_c (catanh, 0x1p100L, -0.0L, 7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
4950   TEST_c_c (catanh, -0x1p100L, 0.0L, -7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
4951   TEST_c_c (catanh, -0x1p100L, -0.0L, -7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
4952   TEST_c_c (catanh, 0.0L, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L);
4953   TEST_c_c (catanh, -0.0L, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L);
4954   TEST_c_c (catanh, 0.0L, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L);
4955   TEST_c_c (catanh, -0.0L, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L);
4956   TEST_c_c (catanh, 0x1.fp127L, 0.0L, 3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4957   TEST_c_c (catanh, 0x1.fp127L, -0.0L, 3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4958   TEST_c_c (catanh, -0x1.fp127L, 0.0L, -3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4959   TEST_c_c (catanh, -0x1.fp127L, -0.0L, -3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
4960   TEST_c_c (catanh, 0.0L, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L);
4961   TEST_c_c (catanh, -0.0L, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L);
4962   TEST_c_c (catanh, 0.0L, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L);
4963   TEST_c_c (catanh, -0.0L, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L);
4964   TEST_c_c (catanh, 0x1.fp127L, 0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4965   TEST_c_c (catanh, 0x1.fp127L, -0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4966   TEST_c_c (catanh, -0x1.fp127L, 0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4967   TEST_c_c (catanh, -0x1.fp127L, -0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
4968 #ifndef TEST_FLOAT
4969   TEST_c_c (catanh, 0x1p900L, 0.0L, 1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
4970   TEST_c_c (catanh, 0x1p900L, -0.0L, 1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
4971   TEST_c_c (catanh, -0x1p900L, 0.0L, -1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
4972   TEST_c_c (catanh, -0x1p900L, -0.0L, -1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
4973   TEST_c_c (catanh, 0.0L, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L);
4974   TEST_c_c (catanh, -0.0L, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L);
4975   TEST_c_c (catanh, 0.0L, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L);
4976   TEST_c_c (catanh, -0.0L, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L);
4977   TEST_c_c (catanh, 0x1.fp1023L, 0.0L, 5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4978   TEST_c_c (catanh, 0x1.fp1023L, -0.0L, 5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4979   TEST_c_c (catanh, -0x1.fp1023L, 0.0L, -5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4980   TEST_c_c (catanh, -0x1.fp1023L, -0.0L, -5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4981   TEST_c_c (catanh, 0.0L, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L);
4982   TEST_c_c (catanh, -0.0L, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L);
4983   TEST_c_c (catanh, 0.0L, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L);
4984   TEST_c_c (catanh, -0.0L, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L);
4985   TEST_c_c (catanh, 0x1.fp1023L, 0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4986   TEST_c_c (catanh, 0x1.fp1023L, -0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4987   TEST_c_c (catanh, -0x1.fp1023L, 0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4988   TEST_c_c (catanh, -0x1.fp1023L, -0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4989 #endif
4990 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4991   TEST_c_c (catanh, 0x1p10000L, 0.0L, 5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
4992   TEST_c_c (catanh, 0x1p10000L, -0.0L, 5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
4993   TEST_c_c (catanh, -0x1p10000L, 0.0L, -5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
4994   TEST_c_c (catanh, -0x1p10000L, -0.0L, -5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
4995   TEST_c_c (catanh, 0.0L, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L);
4996   TEST_c_c (catanh, -0.0L, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L);
4997   TEST_c_c (catanh, 0.0L, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L);
4998   TEST_c_c (catanh, -0.0L, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L);
4999   TEST_c_c (catanh, 0x1.fp16383L, 0.0L, 8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5000   TEST_c_c (catanh, 0x1.fp16383L, -0.0L, 8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5001   TEST_c_c (catanh, -0x1.fp16383L, 0.0L, -8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5002   TEST_c_c (catanh, -0x1.fp16383L, -0.0L, -8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5003   TEST_c_c (catanh, 0.0L, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L);
5004   TEST_c_c (catanh, -0.0L, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L);
5005   TEST_c_c (catanh, 0.0L, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L);
5006   TEST_c_c (catanh, -0.0L, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L);
5007   TEST_c_c (catanh, 0x1.fp16383L, 0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5008   TEST_c_c (catanh, 0x1.fp16383L, -0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5009   TEST_c_c (catanh, -0x1.fp16383L, 0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5010   TEST_c_c (catanh, -0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5011 #endif
5012   TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5013   TEST_c_c (catanh, 0x1p-13L, -1.0L, 6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5014   TEST_c_c (catanh, -0x1p-13L, 1.0L, -6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5015   TEST_c_c (catanh, -0x1p-13L, -1.0L, -6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5016   TEST_c_c (catanh, 1.0L, 0x1p-13L, 4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5017   TEST_c_c (catanh, -1.0L, 0x1p-13L, -4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5018   TEST_c_c (catanh, 1.0L, -0x1p-13L, 4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5019   TEST_c_c (catanh, -1.0L, -0x1p-13L, -4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5020   TEST_c_c (catanh, 0x1p-27L, 1.0L, 3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5021   TEST_c_c (catanh, 0x1p-27L, -1.0L, 3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5022   TEST_c_c (catanh, -0x1p-27L, 1.0L, -3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5023   TEST_c_c (catanh, -0x1p-27L, -1.0L, -3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5024   TEST_c_c (catanh, 1.0L, 0x1p-27L, 9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5025   TEST_c_c (catanh, -1.0L, 0x1p-27L, -9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5026   TEST_c_c (catanh, 1.0L, -0x1p-27L, 9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5027   TEST_c_c (catanh, -1.0L, -0x1p-27L, -9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5028   TEST_c_c (catanh, 0x1p-33L, 1.0L, 5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5029   TEST_c_c (catanh, 0x1p-33L, -1.0L, 5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5030   TEST_c_c (catanh, -0x1p-33L, 1.0L, -5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5031   TEST_c_c (catanh, -0x1p-33L, -1.0L, -5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5032   TEST_c_c (catanh, 1.0L, 0x1p-33L, 1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5033   TEST_c_c (catanh, -1.0L, 0x1p-33L, -1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5034   TEST_c_c (catanh, 1.0L, -0x1p-33L, 1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5035   TEST_c_c (catanh, -1.0L, -0x1p-33L, -1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5036   TEST_c_c (catanh, 0x1p-54L, 1.0L, 2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5037   TEST_c_c (catanh, 0x1p-54L, -1.0L, 2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5038   TEST_c_c (catanh, -0x1p-54L, 1.0L, -2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5039   TEST_c_c (catanh, -0x1p-54L, -1.0L, -2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5040   TEST_c_c (catanh, 1.0L, 0x1p-54L, 1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5041   TEST_c_c (catanh, -1.0L, 0x1p-54L, -1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5042   TEST_c_c (catanh, 1.0L, -0x1p-54L, 1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5043   TEST_c_c (catanh, -1.0L, -0x1p-54L, -1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5044   TEST_c_c (catanh, 0x1p-57L, 1.0L, 3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5045   TEST_c_c (catanh, 0x1p-57L, -1.0L, 3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5046   TEST_c_c (catanh, -0x1p-57L, 1.0L, -3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5047   TEST_c_c (catanh, -0x1p-57L, -1.0L, -3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5048   TEST_c_c (catanh, 1.0L, 0x1p-57L, 2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5049   TEST_c_c (catanh, -1.0L, 0x1p-57L, -2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5050   TEST_c_c (catanh, 1.0L, -0x1p-57L, 2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5051   TEST_c_c (catanh, -1.0L, -0x1p-57L, -2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5052   TEST_c_c (catanh, 0x1p-13L, 0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5053   TEST_c_c (catanh, 0x1p-13L, -0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5054   TEST_c_c (catanh, -0x1p-13L, 0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5055   TEST_c_c (catanh, -0x1p-13L, -0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5056   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-13L, 4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5057   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-13L, -4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5058   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-13L, 4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5059   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-13L, -4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5060   TEST_c_c (catanh, 0x1p-13L, 0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5061   TEST_c_c (catanh, 0x1p-13L, -0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5062   TEST_c_c (catanh, -0x1p-13L, 0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5063   TEST_c_c (catanh, -0x1p-13L, -0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5064   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-13L, 4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5065   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-13L, -4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5066   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-13L, 4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5067   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-13L, -4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5068 #ifndef TEST_FLOAT
5069   TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5070   TEST_c_c (catanh, 0x1p-27L, -0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5071   TEST_c_c (catanh, -0x1p-27L, 0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5072   TEST_c_c (catanh, -0x1p-27L, -0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5073   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5074   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5075   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5076   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5077   TEST_c_c (catanh, 0x1p-27L, 0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5078   TEST_c_c (catanh, 0x1p-27L, -0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5079   TEST_c_c (catanh, -0x1p-27L, 0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5080   TEST_c_c (catanh, -0x1p-27L, -0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5081   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5082   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5083   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5084   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5085 #endif
5086 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5087   TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5088   TEST_c_c (catanh, 0x1p-33L, -0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5089   TEST_c_c (catanh, -0x1p-33L, 0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5090   TEST_c_c (catanh, -0x1p-33L, -0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5091   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5092   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5093   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5094   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5095   TEST_c_c (catanh, 0x1p-33L, 0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5096   TEST_c_c (catanh, 0x1p-33L, -0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5097   TEST_c_c (catanh, -0x1p-33L, 0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5098   TEST_c_c (catanh, -0x1p-33L, -0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5099   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5100   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5101   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5102   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5103 #endif
5104 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5105   TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5106   TEST_c_c (catanh, 0x1p-54L, -0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5107   TEST_c_c (catanh, -0x1p-54L, 0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5108   TEST_c_c (catanh, -0x1p-54L, -0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5109   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-54L, 1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5110   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-54L, -1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5111   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-54L, 1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5112   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-54L, -1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5113   TEST_c_c (catanh, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5114   TEST_c_c (catanh, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5115   TEST_c_c (catanh, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5116   TEST_c_c (catanh, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5117   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5118   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5119   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5120   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5121 #endif
5122 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5123   TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5124   TEST_c_c (catanh, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5125   TEST_c_c (catanh, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5126   TEST_c_c (catanh, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5127   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5128   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5129   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5130   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5131   TEST_c_c (catanh, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5132   TEST_c_c (catanh, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5133   TEST_c_c (catanh, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5134   TEST_c_c (catanh, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5135   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5136   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5137   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5138   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5139 #endif
5140   TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5141   TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5142   TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5143   TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5144   TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5145   TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5146   TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5147   TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5148   TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5149   TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5150   TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5151   TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5152   TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5153   TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5154   TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5155   TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5156   TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5157   TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5158   TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5159   TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5160   TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5161   TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5162   TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5163   TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5164   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5165   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5166   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5167   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5168   TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5169   TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5170   TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5171   TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5172   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5173   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5174   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5175   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5176   TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5177   TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5178   TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5179   TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5180 #ifndef TEST_FLOAT
5181   TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5182   TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5183   TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5184   TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5185   TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5186   TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5187   TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5188   TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5189   TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5190   TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5191   TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5192   TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5193   TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5194   TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5195   TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5196   TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5197   TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5198   TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5199   TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5200   TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5201   TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5202   TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5203   TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5204   TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5205   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5206   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5207   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5208   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5209   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5210   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5211   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5212   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5213   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5214   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5215   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5216   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5217   TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5218   TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5219   TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5220   TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5221 #endif
5222 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5223   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5224   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5225   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5226   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5227   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5228   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5229   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5230   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5231   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5232   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5233   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5234   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5235   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5236   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5237   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5238   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5239 #endif
5240 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5241   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5242   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5243   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5244   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5245   TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5246   TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5247   TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5248   TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5249   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5250   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5251   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5252   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5253   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5254   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5255   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5256   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5257 #endif
5258 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5259   TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5260   TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5261   TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5262   TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5263   TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5264   TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5265   TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5266   TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5267   TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5268   TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5269   TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5270   TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5271   TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5272   TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5273   TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5274   TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5275   TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5276   TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5277   TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5278   TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5279   TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5280   TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5281   TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5282   TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5283   TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5284   TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5285   TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5286   TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5287   TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5288   TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5289   TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5290   TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5291   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5292   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5293   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5294   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5295   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5296   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5297   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5298   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5299   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5300   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5301   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5302   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5303   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5304   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5305   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5306   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5307 # if LDBL_MANT_DIG >= 113
5308   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5309   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5310   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5311   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5312   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5313   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5314   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5315   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5316   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5317   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5318   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5319   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5320   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5321   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5322   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5323   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5324 # endif
5325 #endif
5326
5327   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
5328   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
5329
5330   END (catanh, complex);
5331 }
5332
5333 static void
5334 cbrt_test (void)
5335 {
5336   errno = 0;
5337   FUNC(cbrt) (8);
5338   if (errno == ENOSYS)
5339     /* Function not implemented.  */
5340     return;
5341
5342   START (cbrt);
5343
5344   TEST_f_f (cbrt, 0.0, 0.0);
5345   TEST_f_f (cbrt, minus_zero, minus_zero);
5346
5347   TEST_f_f (cbrt, plus_infty, plus_infty);
5348   TEST_f_f (cbrt, minus_infty, minus_infty);
5349   TEST_f_f (cbrt, qnan_value, qnan_value);
5350
5351   TEST_f_f (cbrt, -0.001L, -0.1L);
5352   TEST_f_f (cbrt, 8, 2);
5353   TEST_f_f (cbrt, -27.0, -3.0);
5354   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
5355   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
5356
5357   END (cbrt);
5358 }
5359
5360
5361 static void
5362 ccos_test (void)
5363 {
5364   errno = 0;
5365   FUNC(ccos) (BUILD_COMPLEX (0, 0));
5366   if (errno == ENOSYS)
5367     /* Function not implemented.  */
5368     return;
5369
5370   START (ccos);
5371
5372   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
5373   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
5374   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
5375   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
5376
5377   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5378   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5379   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5380   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5381
5382   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
5383   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
5384   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
5385   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
5386
5387   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5388   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5389   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5390   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5391
5392   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
5393   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
5394   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
5395   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
5396
5397   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5398   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5399   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5400   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5401
5402   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5403   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5404
5405   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
5406   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
5407
5408   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5409   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5410
5411   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5412   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5413
5414   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5415   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5416
5417   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5418   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5419
5420   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
5421
5422   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
5423   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
5424
5425   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5426   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5427   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5428   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5429
5430 #ifndef TEST_FLOAT
5431   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5432   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5433   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5434   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5435 #endif
5436
5437 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5438   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5439   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5440   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5441   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5442 #endif
5443
5444 #ifdef TEST_FLOAT
5445   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5446 #endif
5447
5448 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5449   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5450 #endif
5451
5452 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5453   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5454 #endif
5455
5456   TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5457   TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5458
5459   END (ccos, complex);
5460 }
5461
5462
5463 static void
5464 ccosh_test (void)
5465 {
5466   errno = 0;
5467   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
5468   if (errno == ENOSYS)
5469     /* Function not implemented.  */
5470     return;
5471
5472   START (ccosh);
5473
5474   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
5475   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
5476   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
5477   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
5478
5479   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5480   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5481   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5482   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5483
5484   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
5485   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
5486   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
5487   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
5488
5489   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5490   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5491   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5492   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5493
5494   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
5495   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
5496   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
5497   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
5498
5499   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5500   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5501   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5502   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5503
5504   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5505   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5506
5507   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
5508   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
5509
5510   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5511   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5512
5513   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5514   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5515
5516   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5517   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5518
5519   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5520   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5521
5522   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
5523
5524   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
5525
5526   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
5527
5528   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5529   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5530   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5531   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5532
5533 #ifndef TEST_FLOAT
5534   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5535   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5536   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5537   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5538 #endif
5539
5540 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5541   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5542   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5543   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5544   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5545 #endif
5546
5547 #ifdef TEST_FLOAT
5548   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5549 #endif
5550
5551 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5552   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5553 #endif
5554
5555 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5556   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5557 #endif
5558
5559   TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5560   TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5561
5562   END (ccosh, complex);
5563 }
5564
5565
5566 static void
5567 ceil_test (void)
5568 {
5569   START (ceil);
5570
5571   TEST_f_f (ceil, 0.0, 0.0);
5572   TEST_f_f (ceil, minus_zero, minus_zero);
5573   TEST_f_f (ceil, plus_infty, plus_infty);
5574   TEST_f_f (ceil, minus_infty, minus_infty);
5575   TEST_f_f (ceil, qnan_value, qnan_value);
5576
5577   TEST_f_f (ceil, M_PIl, 4.0);
5578   TEST_f_f (ceil, -M_PIl, -3.0);
5579   TEST_f_f (ceil, 0.1, 1.0);
5580   TEST_f_f (ceil, 0.25, 1.0);
5581   TEST_f_f (ceil, 0.625, 1.0);
5582   TEST_f_f (ceil, -0.1, minus_zero);
5583   TEST_f_f (ceil, -0.25, minus_zero);
5584   TEST_f_f (ceil, -0.625, minus_zero);
5585
5586 #ifdef TEST_LDOUBLE
5587   /* The result can only be represented in long double.  */
5588   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
5589   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
5590   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
5591   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
5592   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
5593
5594   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
5595   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
5596   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
5597   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
5598   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
5599
5600 # if LDBL_MANT_DIG > 100
5601   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
5602   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
5603   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
5604   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
5605   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
5606   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
5607 # endif
5608
5609   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
5610   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
5611   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
5612   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
5613   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
5614
5615   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
5616   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
5617   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
5618   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
5619   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
5620
5621 # if LDBL_MANT_DIG > 100
5622   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
5623   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
5624   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
5625   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
5626   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
5627   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
5628
5629   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
5630   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
5631   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
5632   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
5633   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
5634   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
5635 # endif
5636
5637   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
5638   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
5639   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
5640   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
5641   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
5642
5643   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
5644   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
5645   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
5646   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
5647   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
5648
5649   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5650   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
5651   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
5652   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5653   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5654 #endif
5655
5656   END (ceil);
5657 }
5658
5659
5660 static void
5661 cexp_test (void)
5662 {
5663   errno = 0;
5664   FUNC(cexp) (BUILD_COMPLEX (0, 0));
5665   if (errno == ENOSYS)
5666     /* Function not implemented.  */
5667     return;
5668
5669   START (cexp);
5670
5671   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
5672   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
5673   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
5674   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
5675
5676   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
5677   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
5678
5679   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
5680   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
5681
5682   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5683   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5684
5685   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5686   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5687
5688   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5689   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5690
5691   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5692   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5693
5694   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
5695   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
5696   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
5697   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
5698
5699   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5700   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5701
5702   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
5703   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
5704
5705   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
5706
5707   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
5708
5709   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5710   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5711
5712   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5713   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5714   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5715   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
5716
5717   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
5718   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
5719
5720   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
5721   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
5722   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
5723
5724 #ifndef TEST_FLOAT
5725   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
5726   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
5727   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
5728 #endif
5729
5730 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5731   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
5732   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
5733 #endif
5734
5735   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
5736   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
5737
5738 #ifndef TEST_FLOAT
5739   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
5740   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
5741 #endif
5742
5743 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5744   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
5745   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
5746 #endif
5747
5748 #ifdef TEST_FLOAT
5749   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
5750 #endif
5751
5752 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5753   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
5754 #endif
5755
5756 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5757   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
5758 #endif
5759
5760   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
5761   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
5762   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
5763
5764   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5765   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5766
5767   END (cexp, complex);
5768 }
5769
5770
5771 static void
5772 cimag_test (void)
5773 {
5774   START (cimag);
5775   TEST_c_f (cimag, 1.0, 0.0, 0.0);
5776   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
5777   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
5778   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
5779   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
5780   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
5781   TEST_c_f (cimag, 2.0, 3.0, 3.0);
5782
5783   END (cimag);
5784 }
5785
5786 static void
5787 clog_test (void)
5788 {
5789   errno = 0;
5790   FUNC(clog) (BUILD_COMPLEX (-2, -3));
5791   if (errno == ENOSYS)
5792     /* Function not implemented.  */
5793     return;
5794
5795   START (clog);
5796
5797   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5798   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5799
5800   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5801   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5802
5803   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
5804   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
5805
5806   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
5807   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
5808
5809   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
5810   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
5811   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
5812   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
5813   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
5814   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
5815   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
5816   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
5817
5818   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
5819   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
5820   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
5821   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
5822
5823   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
5824   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
5825   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
5826   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
5827
5828   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
5829   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
5830
5831   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
5832   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
5833
5834   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5835   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5836   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5837   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5838
5839   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5840   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5841   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5842   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5843
5844   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
5845
5846   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
5847   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
5848
5849   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
5850   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5851   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
5852   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
5853
5854 #ifndef TEST_FLOAT
5855   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
5856   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
5857   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
5858   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
5859 #endif
5860
5861 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5862   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
5863   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
5864   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
5865 #endif
5866
5867   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5868   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5869   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5870   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5871   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
5872   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
5873 #ifdef TEST_FLOAT
5874   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
5875   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
5876 #endif
5877
5878 #ifndef TEST_FLOAT
5879   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
5880   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
5881   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
5882   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
5883   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
5884   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
5885 #endif
5886 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5887   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
5888   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
5889 #endif
5890
5891 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5892   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5893   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5894   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5895   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5896   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
5897   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
5898   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5899   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5900 # if LDBL_MANT_DIG >= 113
5901   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5902   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5903   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5904   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5905   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
5906   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
5907   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5908   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5909 # endif
5910 #endif
5911
5912   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
5913   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
5914   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
5915   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
5916   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
5917   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
5918   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
5919   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5920   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
5921 #ifndef TEST_FLOAT
5922   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5923   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5924   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5925 #endif
5926 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5927   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
5928   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5929   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5930 #endif
5931
5932   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
5933   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
5934 #ifndef TEST_FLOAT
5935   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
5936   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
5937 #endif
5938 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5939   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
5940   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5941 #endif
5942
5943   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
5944 #ifndef TEST_FLOAT
5945   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5946 #endif
5947 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5948   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
5949 #endif
5950
5951   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
5952   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
5953   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
5954   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
5955   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
5956   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
5957   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
5958   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
5959   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
5960   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
5961 #ifndef TEST_FLOAT
5962   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
5963   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
5964   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
5965   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
5966   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
5967   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
5968   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
5969   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
5970   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
5971   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
5972   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
5973   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
5974 #endif
5975 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5976   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
5977   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
5978   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
5979   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
5980   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
5981 #endif
5982 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5983   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
5984   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
5985   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
5986   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
5987   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
5988   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
5989   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
5990   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
5991   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
5992   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
5993 #endif
5994 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5995   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
5996   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
5997   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
5998   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
5999   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
6000   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
6001 #endif
6002
6003   END (clog, complex);
6004 }
6005
6006
6007 static void
6008 clog10_test (void)
6009 {
6010   errno = 0;
6011   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
6012   if (errno == ENOSYS)
6013     /* Function not implemented.  */
6014     return;
6015
6016   START (clog10);
6017
6018   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6019   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6020
6021   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
6022   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
6023
6024   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
6025
6026   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
6027   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
6028
6029   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
6030   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
6031   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
6032   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
6033   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
6034   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
6035   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
6036   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
6037
6038   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
6039   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
6040   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
6041   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
6042
6043   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
6044   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
6045   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
6046   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
6047
6048   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
6049   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
6050
6051   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
6052   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
6053
6054   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6055   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6056   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6057   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6058
6059   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6060   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6061   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6062   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6063
6064   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
6065
6066   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
6067   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
6068
6069   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
6070   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6071   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
6072   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
6073
6074 #ifndef TEST_FLOAT
6075   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
6076   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
6077   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
6078   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
6079 #endif
6080
6081 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6082   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
6083   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
6084   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
6085 #endif
6086
6087   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6088   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6089   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6090   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6091   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
6092   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
6093 #ifdef TEST_FLOAT
6094   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
6095   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
6096 #endif
6097
6098 #ifndef TEST_FLOAT
6099   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6100   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6101   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6102   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6103   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
6104   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
6105 #endif
6106 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6107   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
6108   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
6109 #endif
6110
6111 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6112   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6113   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6114   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6115   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6116   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6117   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6118   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6119   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6120 # if LDBL_MANT_DIG >= 113
6121   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6122   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6123   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6124   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6125   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6126   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6127   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6128   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6129 # endif
6130 #endif
6131
6132   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
6133   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
6134   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
6135   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
6136   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
6137   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
6138   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
6139   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6140   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6141 #ifndef TEST_FLOAT
6142   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6143   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6144   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6145 #endif
6146 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6147   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
6148   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6149   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6150 #endif
6151
6152   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
6153   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
6154 #ifndef TEST_FLOAT
6155   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
6156   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
6157 #endif
6158 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6159   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
6160   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6161 #endif
6162
6163   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
6164 #ifndef TEST_FLOAT
6165   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6166 #endif
6167 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6168   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
6169 #endif
6170
6171   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
6172   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
6173   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
6174   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
6175   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
6176   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
6177   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
6178   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
6179   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
6180   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
6181 #ifndef TEST_FLOAT
6182   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
6183   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
6184   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
6185   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
6186   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
6187   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
6188   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
6189   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
6190   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
6191   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
6192   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
6193   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
6194 #endif
6195 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6196   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
6197   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
6198   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
6199   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
6200   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
6201 #endif
6202 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6203   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
6204   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
6205   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
6206   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
6207   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
6208   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
6209   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
6210   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
6211   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
6212   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
6213 #endif
6214 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6215   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
6216   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
6217   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
6218   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
6219   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
6220   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
6221 #endif
6222
6223   END (clog10, complex);
6224 }
6225
6226
6227 static void
6228 conj_test (void)
6229 {
6230   START (conj);
6231   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
6232   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
6233   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
6234   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
6235   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
6236   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
6237   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
6238
6239   END (conj, complex);
6240 }
6241
6242
6243 static void
6244 copysign_test (void)
6245 {
6246   START (copysign);
6247
6248   TEST_ff_f (copysign, 0, 4, 0);
6249   TEST_ff_f (copysign, 0, -4, minus_zero);
6250   TEST_ff_f (copysign, minus_zero, 4, 0);
6251   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
6252
6253   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
6254   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
6255   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
6256   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
6257
6258   TEST_ff_f (copysign, 0, plus_infty, 0);
6259   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
6260   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
6261   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
6262
6263   /* XXX More correctly we would have to check the sign of the NaN.  */
6264   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
6265   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
6266   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
6267   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
6268
6269   END (copysign);
6270 }
6271
6272
6273 static void
6274 cos_test (void)
6275 {
6276   errno = 0;
6277   FUNC(cos) (0);
6278   if (errno == ENOSYS)
6279     /* Function not implemented.  */
6280     return;
6281
6282   START (cos);
6283
6284   TEST_f_f (cos, 0, 1);
6285   TEST_f_f (cos, minus_zero, 1);
6286   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6287   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6288   TEST_f_f (cos, qnan_value, qnan_value, ERRNO_UNCHANGED);
6289
6290   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
6291   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
6292
6293   /* The value of M_PI_2l is never exactly PI/2, and therefore the
6294      answer is never exactly zero. The answer is equal to the error
6295      in rounding PI/2 for the type used.  Thus the answer is unique
6296      to each type.  */
6297 #ifdef TEST_FLOAT
6298   /* 32-bit float.  */
6299   TEST_f_f (cos, M_PI_2l, -0x1.777a5cp-25L);
6300 #endif
6301 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
6302   /* 64-bit double or 64-bit long double.  */
6303   TEST_f_f (cos, M_PI_2l, 0x1.1a62633145c07p-54L);
6304 #endif
6305 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
6306   /* 96-bit long double.  */
6307   TEST_f_f (cos, M_PI_2l, -0xe.ce675d1fc8f8cbbp-69L);
6308 #endif
6309 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
6310   /* 128-bit IBM long double.  */
6311   TEST_f_f (cos, M_PI_2l, 0x1.c1cd129024e088a67cc74020bcp-107L);
6312 #endif
6313 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
6314   /* 128-bit long double.  */
6315   TEST_f_f (cos, M_PI_2l, 0x1.cd129024e088a67cc74020bbea64p-115L);
6316 #endif
6317
6318   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
6319
6320   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
6321   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
6322
6323 #ifdef TEST_DOUBLE
6324   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
6325 #endif
6326
6327   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
6328
6329 #ifndef TEST_FLOAT
6330   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
6331   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
6332 #endif
6333
6334 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6335   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
6336 #endif
6337
6338   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
6339   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
6340   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
6341   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
6342   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
6343   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
6344
6345   END (cos);
6346 }
6347
6348
6349 static void
6350 cos_test_tonearest (void)
6351 {
6352   int save_round_mode;
6353   errno = 0;
6354   FUNC(cos) (0);
6355   if (errno == ENOSYS)
6356     /* Function not implemented.  */
6357     return;
6358
6359   START (cos_tonearest);
6360
6361   save_round_mode = fegetround ();
6362
6363   if (!fesetround (FE_TONEAREST))
6364     {
6365       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6366       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6367       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6368       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6369       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6370       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6371       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6372       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6373       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6374       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6375     }
6376
6377   fesetround (save_round_mode);
6378
6379   END (cos_tonearest);
6380 }
6381
6382
6383 static void
6384 cos_test_towardzero (void)
6385 {
6386   int save_round_mode;
6387   errno = 0;
6388   FUNC(cos) (0);
6389   if (errno == ENOSYS)
6390     /* Function not implemented.  */
6391     return;
6392
6393   START (cos_towardzero);
6394
6395   save_round_mode = fegetround ();
6396
6397   if (!fesetround (FE_TOWARDZERO))
6398     {
6399       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6400       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6401       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6402       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6403       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6404       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6405       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6406       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6407       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6408       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6409     }
6410
6411   fesetround (save_round_mode);
6412
6413   END (cos_towardzero);
6414 }
6415
6416
6417 static void
6418 cos_test_downward (void)
6419 {
6420   int save_round_mode;
6421   errno = 0;
6422   FUNC(cos) (0);
6423   if (errno == ENOSYS)
6424     /* Function not implemented.  */
6425     return;
6426
6427   START (cos_downward);
6428
6429   save_round_mode = fegetround ();
6430
6431   if (!fesetround (FE_DOWNWARD))
6432     {
6433       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6434       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6435       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6436       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6437       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6438       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6439       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6440       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6441       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6442       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6443     }
6444
6445   fesetround (save_round_mode);
6446
6447   END (cos_downward);
6448 }
6449
6450
6451 static void
6452 cos_test_upward (void)
6453 {
6454   int save_round_mode;
6455   errno = 0;
6456   FUNC(cos) (0);
6457   if (errno == ENOSYS)
6458     /* Function not implemented.  */
6459     return;
6460
6461   START (cos_upward);
6462
6463   save_round_mode = fegetround ();
6464
6465   if (!fesetround (FE_UPWARD))
6466     {
6467       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6468       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6469       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6470       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6471       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6472       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6473       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6474       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6475       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6476       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6477     }
6478
6479   fesetround (save_round_mode);
6480
6481   END (cos_upward);
6482 }
6483
6484
6485 static void
6486 cosh_test (void)
6487 {
6488   errno = 0;
6489   FUNC(cosh) (0.7L);
6490   if (errno == ENOSYS)
6491     /* Function not implemented.  */
6492     return;
6493
6494   START (cosh);
6495   TEST_f_f (cosh, 0, 1);
6496   TEST_f_f (cosh, minus_zero, 1);
6497
6498 #ifndef TEST_INLINE
6499   TEST_f_f (cosh, plus_infty, plus_infty);
6500   TEST_f_f (cosh, minus_infty, plus_infty);
6501 #endif
6502   TEST_f_f (cosh, qnan_value, qnan_value);
6503
6504   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
6505
6506 #ifndef TEST_FLOAT
6507   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6508   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6509 #endif
6510
6511   END (cosh);
6512 }
6513
6514
6515 static void
6516 cosh_test_tonearest (void)
6517 {
6518   int save_round_mode;
6519   errno = 0;
6520   FUNC(cosh) (0);
6521   if (errno == ENOSYS)
6522     /* Function not implemented.  */
6523     return;
6524
6525   START (cosh_tonearest);
6526
6527   save_round_mode = fegetround ();
6528
6529   if (!fesetround (FE_TONEAREST))
6530     {
6531       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6532       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6533       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6534     }
6535
6536   fesetround (save_round_mode);
6537
6538   END (cosh_tonearest);
6539 }
6540
6541
6542 static void
6543 cosh_test_towardzero (void)
6544 {
6545   int save_round_mode;
6546   errno = 0;
6547   FUNC(cosh) (0);
6548   if (errno == ENOSYS)
6549     /* Function not implemented.  */
6550     return;
6551
6552   START (cosh_towardzero);
6553
6554   save_round_mode = fegetround ();
6555
6556   if (!fesetround (FE_TOWARDZERO))
6557     {
6558       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6559       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6560       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6561     }
6562
6563   fesetround (save_round_mode);
6564
6565   END (cosh_towardzero);
6566 }
6567
6568
6569 static void
6570 cosh_test_downward (void)
6571 {
6572   int save_round_mode;
6573   errno = 0;
6574   FUNC(cosh) (0);
6575   if (errno == ENOSYS)
6576     /* Function not implemented.  */
6577     return;
6578
6579   START (cosh_downward);
6580
6581   save_round_mode = fegetround ();
6582
6583   if (!fesetround (FE_DOWNWARD))
6584     {
6585       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6586       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6587       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6588     }
6589
6590   fesetround (save_round_mode);
6591
6592   END (cosh_downward);
6593 }
6594
6595
6596 static void
6597 cosh_test_upward (void)
6598 {
6599   int save_round_mode;
6600   errno = 0;
6601   FUNC(cosh) (0);
6602   if (errno == ENOSYS)
6603     /* Function not implemented.  */
6604     return;
6605
6606   START (cosh_upward);
6607
6608   save_round_mode = fegetround ();
6609
6610   if (!fesetround (FE_UPWARD))
6611     {
6612       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6613       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6614       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6615     }
6616
6617   fesetround (save_round_mode);
6618
6619   END (cosh_upward);
6620 }
6621
6622
6623 static void
6624 cpow_test (void)
6625 {
6626   errno = 0;
6627   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
6628   if (errno == ENOSYS)
6629     /* Function not implemented.  */
6630     return;
6631
6632   START (cpow);
6633
6634   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
6635   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
6636
6637   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
6638   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
6639
6640   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
6641
6642   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
6643   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
6644   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
6645   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
6646
6647   END (cpow, complex);
6648 }
6649
6650
6651 static void
6652 cproj_test (void)
6653 {
6654   START (cproj);
6655   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
6656   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
6657   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
6658   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
6659
6660   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
6661
6662   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
6663   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
6664   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
6665   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
6666
6667   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
6668   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
6669
6670   END (cproj, complex);
6671 }
6672
6673
6674 static void
6675 creal_test (void)
6676 {
6677   START (creal);
6678   TEST_c_f (creal, 0.0, 1.0, 0.0);
6679   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
6680   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
6681   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
6682   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
6683   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
6684   TEST_c_f (creal, 2.0, 3.0, 2.0);
6685
6686   END (creal);
6687 }
6688
6689 static void
6690 csin_test (void)
6691 {
6692   errno = 0;
6693   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
6694   if (errno == ENOSYS)
6695     /* Function not implemented.  */
6696     return;
6697
6698   START (csin);
6699
6700   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
6701   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
6702   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
6703   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
6704
6705   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
6706   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
6707   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
6708   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
6709
6710   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6711   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6712   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6713   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6714
6715   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6716   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6717   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6718   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6719
6720   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6721   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6722   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6723   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
6724
6725   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
6726   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
6727   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
6728   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
6729
6730   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6731   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6732
6733   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6734   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6735
6736   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6737   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6738
6739   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
6740   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
6741
6742   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6743   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6744
6745   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6746   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6747
6748   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
6749
6750   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
6751   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
6752
6753   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6754   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6755   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6756   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6757
6758 #ifndef TEST_FLOAT
6759   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6760   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6761   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6762   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6763 #endif
6764
6765 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6766   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6767   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6768   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6769   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6770 #endif
6771
6772 #ifdef TEST_FLOAT
6773   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
6774 #endif
6775
6776 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6777   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
6778 #endif
6779
6780 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6781   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
6782 #endif
6783
6784   TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6785   TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6786
6787   END (csin, complex);
6788 }
6789
6790
6791 static void
6792 csinh_test (void)
6793 {
6794   errno = 0;
6795   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
6796   if (errno == ENOSYS)
6797     /* Function not implemented.  */
6798     return;
6799
6800   START (csinh);
6801
6802   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
6803   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
6804   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
6805   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
6806
6807   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6808   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6809   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6810   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6811
6812   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
6813   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
6814   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
6815   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
6816
6817   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6818   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6819   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6820   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6821
6822   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
6823   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
6824   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
6825   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
6826
6827   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6828   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6829   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6830   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6831
6832   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6833   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6834
6835   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6836   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6837
6838   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6839   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6840
6841   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
6842   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
6843
6844   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6845   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6846
6847   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6848   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6849
6850   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
6851
6852   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
6853   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
6854
6855   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6856   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6857   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6858   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6859
6860 #ifndef TEST_FLOAT
6861   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6862   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6863   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6864   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6865 #endif
6866
6867 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6868   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6869   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6870   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6871   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6872 #endif
6873
6874 #ifdef TEST_FLOAT
6875   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
6876 #endif
6877
6878 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6879   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
6880 #endif
6881
6882 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6883   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
6884 #endif
6885
6886   TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6887   TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6888
6889   END (csinh, complex);
6890 }
6891
6892
6893 static void
6894 csqrt_test (void)
6895 {
6896   errno = 0;
6897   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
6898   if (errno == ENOSYS)
6899     /* Function not implemented.  */
6900     return;
6901
6902   START (csqrt);
6903
6904   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
6905   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
6906   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
6907   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
6908
6909   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
6910   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
6911   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
6912   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
6913
6914   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
6915   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
6916   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
6917   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
6918
6919   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
6920   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
6921   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
6922   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
6923   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
6924   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
6925   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
6926   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
6927   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
6928   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
6929   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
6930   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
6931
6932   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6933
6934   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
6935
6936   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6937   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6938   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6939   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6940
6941   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6942   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6943   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6944   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6945
6946   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
6947
6948   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
6949   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
6950   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
6951   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
6952   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
6953   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
6954   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
6955   /* Principal square root should be returned (i.e., non-negative real
6956      part).  */
6957   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
6958
6959   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
6960   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
6961   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
6962   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
6963
6964   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
6965   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
6966 #ifdef TEST_FLOAT
6967   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
6968 #endif
6969   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
6970   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
6971   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
6972
6973 #ifndef TEST_FLOAT
6974   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
6975   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
6976   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
6977   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
6978
6979   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
6980   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
6981 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6982   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
6983 #endif
6984   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
6985   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
6986   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
6987 #endif
6988
6989 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6990   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
6991   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
6992   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
6993
6994   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
6995   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
6996   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6997   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6998   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
6999   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
7000
7001 # if LDBL_MANT_DIG >= 113
7002   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
7003   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
7004   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
7005   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
7006   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
7007   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
7008 # endif
7009 #endif
7010
7011   END (csqrt, complex);
7012 }
7013
7014 static void
7015 ctan_test (void)
7016 {
7017   errno = 0;
7018   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7019   if (errno == ENOSYS)
7020     /* Function not implemented.  */
7021     return;
7022
7023   START (ctan);
7024
7025   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
7026   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
7027   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
7028   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
7029
7030   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
7031   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
7032   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
7033   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
7034
7035   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
7036   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
7037   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
7038   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
7039
7040   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7041   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7042   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7043   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7044   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7045   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7046   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7047   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7048
7049   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
7050   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
7051
7052   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
7053   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
7054
7055   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7056   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7057
7058   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7059   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7060   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7061   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7062
7063   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
7064
7065   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
7066   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
7067
7068   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
7069   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
7070
7071 #ifndef TEST_FLOAT
7072   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7073   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7074 #endif
7075
7076 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7077   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
7078   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
7079 #endif
7080
7081   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
7082
7083   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
7084
7085 #ifndef TEST_FLOAT
7086   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
7087 #endif
7088
7089 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7090   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
7091 #endif
7092
7093   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
7094   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
7095   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
7096   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
7097
7098   END (ctan, complex);
7099 }
7100
7101
7102 static void
7103 ctan_test_tonearest (void)
7104 {
7105   int save_round_mode;
7106   errno = 0;
7107   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7108   if (errno == ENOSYS)
7109     /* Function not implemented.  */
7110     return;
7111
7112   START (ctan_tonearest);
7113
7114   save_round_mode = fegetround ();
7115
7116   if (!fesetround (FE_TONEAREST))
7117     {
7118       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7119
7120 #ifndef TEST_FLOAT
7121       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7122 #endif
7123
7124 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7125       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7126 #endif
7127     }
7128
7129   fesetround (save_round_mode);
7130
7131   END (ctan_tonearest, complex);
7132 }
7133
7134
7135 static void
7136 ctan_test_towardzero (void)
7137 {
7138   int save_round_mode;
7139   errno = 0;
7140   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7141   if (errno == ENOSYS)
7142     /* Function not implemented.  */
7143     return;
7144
7145   START (ctan_towardzero);
7146
7147   save_round_mode = fegetround ();
7148
7149   if (!fesetround (FE_TOWARDZERO))
7150     {
7151       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7152
7153 #ifndef TEST_FLOAT
7154       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7155 #endif
7156
7157 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7158       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7159 #endif
7160     }
7161
7162   fesetround (save_round_mode);
7163
7164   END (ctan_towardzero, complex);
7165 }
7166
7167
7168 static void
7169 ctan_test_downward (void)
7170 {
7171   int save_round_mode;
7172   errno = 0;
7173   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7174   if (errno == ENOSYS)
7175     /* Function not implemented.  */
7176     return;
7177
7178   START (ctan_downward);
7179
7180   save_round_mode = fegetround ();
7181
7182   if (!fesetround (FE_DOWNWARD))
7183     {
7184       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7185
7186 #ifndef TEST_FLOAT
7187       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7188 #endif
7189
7190 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7191       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7192 #endif
7193     }
7194
7195   fesetround (save_round_mode);
7196
7197   END (ctan_downward, complex);
7198 }
7199
7200
7201 static void
7202 ctan_test_upward (void)
7203 {
7204   int save_round_mode;
7205   errno = 0;
7206   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7207   if (errno == ENOSYS)
7208     /* Function not implemented.  */
7209     return;
7210
7211   START (ctan_upward);
7212
7213   save_round_mode = fegetround ();
7214
7215   if (!fesetround (FE_UPWARD))
7216     {
7217       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7218
7219 #ifndef TEST_FLOAT
7220       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7221 #endif
7222
7223 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7224       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7225 #endif
7226     }
7227
7228   fesetround (save_round_mode);
7229
7230   END (ctan_upward, complex);
7231 }
7232
7233
7234 static void
7235 ctanh_test (void)
7236 {
7237   errno = 0;
7238   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
7239   if (errno == ENOSYS)
7240     /* Function not implemented.  */
7241     return;
7242
7243   START (ctanh);
7244
7245   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
7246   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
7247   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
7248   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
7249
7250   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
7251   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
7252   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
7253   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
7254   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
7255   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
7256   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
7257   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
7258
7259   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7260   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7261   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7262   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7263   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7264   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7265   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7266   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7267
7268   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7269   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7270
7271   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
7272   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
7273
7274   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7275   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7276
7277   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7278   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7279   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7280   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7281
7282   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
7283
7284   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
7285
7286   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
7287   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
7288
7289   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
7290   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
7291
7292 #ifndef TEST_FLOAT
7293   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
7294   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
7295 #endif
7296
7297 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7298   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
7299   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
7300 #endif
7301
7302   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
7303
7304   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
7305
7306 #ifndef TEST_FLOAT
7307   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
7308 #endif
7309
7310 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7311   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
7312 #endif
7313
7314   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
7315   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
7316   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
7317   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
7318
7319   END (ctanh, complex);
7320 }
7321
7322
7323 static void
7324 ctanh_test_tonearest (void)
7325 {
7326   int save_round_mode;
7327   errno = 0;
7328   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7329   if (errno == ENOSYS)
7330     /* Function not implemented.  */
7331     return;
7332
7333   START (ctanh_tonearest);
7334
7335   save_round_mode = fegetround ();
7336
7337   if (!fesetround (FE_TONEAREST))
7338     {
7339       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7340
7341 #ifndef TEST_FLOAT
7342       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7343 #endif
7344
7345 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7346       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7347 #endif
7348     }
7349
7350   fesetround (save_round_mode);
7351
7352   END (ctanh_tonearest, complex);
7353 }
7354
7355
7356 static void
7357 ctanh_test_towardzero (void)
7358 {
7359   int save_round_mode;
7360   errno = 0;
7361   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7362   if (errno == ENOSYS)
7363     /* Function not implemented.  */
7364     return;
7365
7366   START (ctanh_towardzero);
7367
7368   save_round_mode = fegetround ();
7369
7370   if (!fesetround (FE_TOWARDZERO))
7371     {
7372       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7373
7374 #ifndef TEST_FLOAT
7375       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7376 #endif
7377
7378 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7379       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7380 #endif
7381     }
7382
7383   fesetround (save_round_mode);
7384
7385   END (ctanh_towardzero, complex);
7386 }
7387
7388
7389 static void
7390 ctanh_test_downward (void)
7391 {
7392   int save_round_mode;
7393   errno = 0;
7394   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7395   if (errno == ENOSYS)
7396     /* Function not implemented.  */
7397     return;
7398
7399   START (ctanh_downward);
7400
7401   save_round_mode = fegetround ();
7402
7403   if (!fesetround (FE_DOWNWARD))
7404     {
7405       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7406
7407 #ifndef TEST_FLOAT
7408       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7409 #endif
7410
7411 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7412       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7413 #endif
7414     }
7415
7416   fesetround (save_round_mode);
7417
7418   END (ctanh_downward, complex);
7419 }
7420
7421
7422 static void
7423 ctanh_test_upward (void)
7424 {
7425   int save_round_mode;
7426   errno = 0;
7427   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7428   if (errno == ENOSYS)
7429     /* Function not implemented.  */
7430     return;
7431
7432   START (ctanh_upward);
7433
7434   save_round_mode = fegetround ();
7435
7436   if (!fesetround (FE_UPWARD))
7437     {
7438       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7439
7440 #ifndef TEST_FLOAT
7441       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7442 #endif
7443
7444 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7445       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7446 #endif
7447     }
7448
7449   fesetround (save_round_mode);
7450
7451   END (ctanh_upward, complex);
7452 }
7453
7454
7455 static void
7456 erf_test (void)
7457 {
7458   errno = 0;
7459   FUNC(erf) (0);
7460   if (errno == ENOSYS)
7461     /* Function not implemented.  */
7462     return;
7463
7464   START (erf);
7465
7466   TEST_f_f (erf, 0, 0);
7467   TEST_f_f (erf, minus_zero, minus_zero);
7468   TEST_f_f (erf, plus_infty, 1);
7469   TEST_f_f (erf, minus_infty, -1);
7470   TEST_f_f (erf, qnan_value, qnan_value);
7471
7472   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
7473   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
7474   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
7475   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
7476   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
7477   TEST_f_f (erf, 27.0L, 1.0L);
7478
7479   END (erf);
7480 }
7481
7482
7483 static void
7484 erfc_test (void)
7485 {
7486   errno = 0;
7487   FUNC(erfc) (0);
7488   if (errno == ENOSYS)
7489     /* Function not implemented.  */
7490     return;
7491
7492   START (erfc);
7493
7494   TEST_f_f (erfc, plus_infty, 0.0);
7495   TEST_f_f (erfc, minus_infty, 2.0);
7496   TEST_f_f (erfc, 0.0, 1.0);
7497   TEST_f_f (erfc, minus_zero, 1.0);
7498   TEST_f_f (erfc, qnan_value, qnan_value);
7499
7500   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
7501   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
7502   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
7503   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7504   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
7505   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7506   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
7507   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
7508 #ifdef TEST_LDOUBLE
7509   /* The result can only be represented in long double.  */
7510 # if LDBL_MIN_10_EXP < -319
7511   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
7512 # endif
7513 # if LDBL_MANT_DIG >= 106
7514   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
7515 # endif
7516 #endif
7517
7518   END (erfc);
7519 }
7520
7521
7522 static void
7523 exp_test (void)
7524 {
7525   errno = 0;
7526   FUNC(exp) (0);
7527   if (errno == ENOSYS)
7528     /* Function not implemented.  */
7529     return;
7530
7531   START (exp);
7532
7533   TEST_f_f (exp, 0, 1);
7534   TEST_f_f (exp, minus_zero, 1);
7535
7536 #ifndef TEST_INLINE
7537   TEST_f_f (exp, plus_infty, plus_infty);
7538   TEST_f_f (exp, minus_infty, 0);
7539 #endif
7540   TEST_f_f (exp, qnan_value, qnan_value);
7541   TEST_f_f (exp, 1, M_El);
7542
7543   TEST_f_f (exp, 2, M_E2l);
7544   TEST_f_f (exp, 3, M_E3l);
7545   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
7546   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
7547   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
7548 #ifndef TEST_FLOAT
7549   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
7550 #endif
7551 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
7552   /* The result can only be represented in sane long double.  */
7553   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
7554 #endif
7555
7556 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
7557   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
7558   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
7559 #endif
7560   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
7561   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
7562   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
7563
7564   END (exp);
7565 }
7566
7567
7568 static void
7569 exp_test_tonearest (void)
7570 {
7571   int save_round_mode;
7572   errno = 0;
7573   FUNC(exp) (0);
7574   if (errno == ENOSYS)
7575     /* Function not implemented.  */
7576     return;
7577
7578   START (exp_tonearest);
7579
7580   save_round_mode = fegetround ();
7581
7582   if (!fesetround (FE_TONEAREST))
7583     {
7584       TEST_f_f (exp, 1, M_El);
7585       TEST_f_f (exp, 2, M_E2l);
7586       TEST_f_f (exp, 3, M_E3l);
7587     }
7588
7589   fesetround (save_round_mode);
7590
7591   END (exp_tonearest);
7592 }
7593
7594
7595 static void
7596 exp_test_towardzero (void)
7597 {
7598   int save_round_mode;
7599   errno = 0;
7600   FUNC(exp) (0);
7601   if (errno == ENOSYS)
7602     /* Function not implemented.  */
7603     return;
7604
7605   START (exp_towardzero);
7606
7607   save_round_mode = fegetround ();
7608
7609   if (!fesetround (FE_TOWARDZERO))
7610     {
7611       TEST_f_f (exp, 1, M_El);
7612       TEST_f_f (exp, 2, M_E2l);
7613       TEST_f_f (exp, 3, M_E3l);
7614     }
7615
7616   fesetround (save_round_mode);
7617
7618   END (exp_towardzero);
7619 }
7620
7621
7622 static void
7623 exp_test_downward (void)
7624 {
7625   int save_round_mode;
7626   errno = 0;
7627   FUNC(exp) (0);
7628   if (errno == ENOSYS)
7629     /* Function not implemented.  */
7630     return;
7631
7632   START (exp_downward);
7633
7634   save_round_mode = fegetround ();
7635
7636   if (!fesetround (FE_DOWNWARD))
7637     {
7638       TEST_f_f (exp, 1, M_El);
7639       TEST_f_f (exp, 2, M_E2l);
7640       TEST_f_f (exp, 3, M_E3l);
7641     }
7642
7643   fesetround (save_round_mode);
7644
7645   END (exp_downward);
7646 }
7647
7648
7649 static void
7650 exp_test_upward (void)
7651 {
7652   int save_round_mode;
7653   errno = 0;
7654   FUNC(exp) (0);
7655   if (errno == ENOSYS)
7656     /* Function not implemented.  */
7657     return;
7658
7659   START (exp_upward);
7660
7661   save_round_mode = fegetround ();
7662
7663   if (!fesetround (FE_UPWARD))
7664     {
7665       TEST_f_f (exp, 1, M_El);
7666       TEST_f_f (exp, 2, M_E2l);
7667       TEST_f_f (exp, 3, M_E3l);
7668     }
7669
7670   fesetround (save_round_mode);
7671
7672   END (exp_upward);
7673 }
7674
7675
7676 static void
7677 exp10_test (void)
7678 {
7679   errno = 0;
7680   FUNC(exp10) (0);
7681   if (errno == ENOSYS)
7682     /* Function not implemented.  */
7683     return;
7684
7685   START (exp10);
7686
7687   TEST_f_f (exp10, 0, 1);
7688   TEST_f_f (exp10, minus_zero, 1);
7689
7690   TEST_f_f (exp10, plus_infty, plus_infty);
7691   TEST_f_f (exp10, minus_infty, 0);
7692   TEST_f_f (exp10, qnan_value, qnan_value);
7693   TEST_f_f (exp10, 3, 1000);
7694   TEST_f_f (exp10, -1, 0.1L);
7695   TEST_f_f (exp10, 36, 1.0e36L);
7696   TEST_f_f (exp10, -36, 1.0e-36L);
7697 #ifndef TEST_FLOAT
7698   TEST_f_f (exp10, 305, 1.0e305L);
7699   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
7700 #endif
7701 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
7702   TEST_f_f (exp10, 4932, 1.0e4932L);
7703   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
7704 #endif
7705   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7706   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
7707   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
7708   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
7709   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
7710
7711   END (exp10);
7712 }
7713
7714
7715 static void
7716 exp2_test (void)
7717 {
7718   errno = 0;
7719   FUNC(exp2) (0);
7720   if (errno == ENOSYS)
7721     /* Function not implemented.  */
7722     return;
7723
7724   START (exp2);
7725
7726   TEST_f_f (exp2, 0, 1);
7727   TEST_f_f (exp2, minus_zero, 1);
7728   TEST_f_f (exp2, plus_infty, plus_infty);
7729   TEST_f_f (exp2, minus_infty, 0);
7730   TEST_f_f (exp2, qnan_value, qnan_value);
7731
7732   TEST_f_f (exp2, 10, 1024);
7733   TEST_f_f (exp2, -1, 0.5);
7734   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7735   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
7736   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
7737   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
7738   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
7739
7740   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
7741   TEST_f_f (exp2, 127, 0x1p127);
7742   TEST_f_f (exp2, -149, 0x1p-149);
7743
7744 #ifndef TEST_FLOAT
7745   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
7746   TEST_f_f (exp2, 1023, 0x1p1023);
7747   TEST_f_f (exp2, -1074, 0x1p-1074);
7748 #endif
7749
7750 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7751   TEST_f_f (exp2, 16383, 0x1p16383L);
7752   TEST_f_f (exp2, -16400, 0x1p-16400L);
7753 #endif
7754
7755   END (exp2);
7756 }
7757
7758
7759 static void
7760 expm1_test (void)
7761 {
7762   errno = 0;
7763   FUNC(expm1) (0);
7764   if (errno == ENOSYS)
7765     /* Function not implemented.  */
7766     return;
7767
7768   START (expm1);
7769
7770   TEST_f_f (expm1, 0, 0);
7771   TEST_f_f (expm1, minus_zero, minus_zero);
7772
7773 #ifndef TEST_INLINE
7774   TEST_f_f (expm1, plus_infty, plus_infty);
7775   TEST_f_f (expm1, minus_infty, -1);
7776 #endif
7777   TEST_f_f (expm1, qnan_value, qnan_value);
7778
7779   TEST_f_f (expm1, 1, M_El - 1.0);
7780   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
7781
7782   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
7783
7784 #ifndef TEST_FLOAT
7785   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
7786   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
7787 #endif
7788
7789 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7790   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
7791 #endif
7792
7793   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
7794   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
7795   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
7796   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
7797   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
7798   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
7799   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
7800   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
7801   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
7802   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
7803   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
7804   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
7805   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
7806   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
7807   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
7808   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
7809   TEST_f_f (expm1, -100.0, -1.0);
7810   TEST_f_f (expm1, -1000.0, -1.0);
7811   TEST_f_f (expm1, -10000.0, -1.0);
7812   TEST_f_f (expm1, -100000.0, -1.0);
7813
7814   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
7815   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
7816   TEST_f_f (expm1, -max_value, -1);
7817
7818   END (expm1);
7819 }
7820
7821
7822 static void
7823 fabs_test (void)
7824 {
7825   START (fabs);
7826
7827   TEST_f_f (fabs, 0, 0);
7828   TEST_f_f (fabs, minus_zero, 0);
7829
7830   TEST_f_f (fabs, plus_infty, plus_infty);
7831   TEST_f_f (fabs, minus_infty, plus_infty);
7832   TEST_f_f (fabs, qnan_value, qnan_value);
7833
7834   TEST_f_f (fabs, 38.0, 38.0);
7835   TEST_f_f (fabs, -M_El, M_El);
7836
7837   END (fabs);
7838 }
7839
7840
7841 static void
7842 fdim_test (void)
7843 {
7844   START (fdim);
7845
7846   TEST_ff_f (fdim, 0, 0, 0);
7847   TEST_ff_f (fdim, 9, 0, 9);
7848   TEST_ff_f (fdim, 0, 9, 0);
7849   TEST_ff_f (fdim, -9, 0, 0);
7850   TEST_ff_f (fdim, 0, -9, 9);
7851
7852   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
7853   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
7854   TEST_ff_f (fdim, minus_infty, 9, 0);
7855   TEST_ff_f (fdim, minus_infty, -9, 0);
7856   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
7857   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
7858   TEST_ff_f (fdim, 9, plus_infty, 0);
7859   TEST_ff_f (fdim, -9, plus_infty, 0);
7860
7861   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
7862   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
7863   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
7864   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
7865   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
7866   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
7867   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
7868   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
7869   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
7870   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
7871
7872   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
7873
7874   END (fdim);
7875 }
7876
7877
7878 static void
7879 finite_test (void)
7880 {
7881   START (finite);
7882
7883   TEST_f_b (finite, 0, 1);
7884   TEST_f_b (finite, minus_zero, 1);
7885   TEST_f_b (finite, 10, 1);
7886   TEST_f_b (finite, min_subnorm_value, 1);
7887   TEST_f_b (finite, plus_infty, 0);
7888   TEST_f_b (finite, minus_infty, 0);
7889   TEST_f_b (finite, qnan_value, 0);
7890
7891   END (finite);
7892 }
7893
7894
7895 static void
7896 floor_test (void)
7897 {
7898   START (floor);
7899
7900   TEST_f_f (floor, 0.0, 0.0);
7901   TEST_f_f (floor, minus_zero, minus_zero);
7902   TEST_f_f (floor, plus_infty, plus_infty);
7903   TEST_f_f (floor, minus_infty, minus_infty);
7904   TEST_f_f (floor, qnan_value, qnan_value);
7905
7906   TEST_f_f (floor, M_PIl, 3.0);
7907   TEST_f_f (floor, -M_PIl, -4.0);
7908
7909   TEST_f_f (floor, 0.1, 0.0);
7910   TEST_f_f (floor, 0.25, 0.0);
7911   TEST_f_f (floor, 0.625, 0.0);
7912   TEST_f_f (floor, -0.1, -1.0);
7913   TEST_f_f (floor, -0.25, -1.0);
7914   TEST_f_f (floor, -0.625, -1.0);
7915
7916 #ifdef TEST_LDOUBLE
7917   /* The result can only be represented in long double.  */
7918   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
7919   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
7920   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
7921   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
7922   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
7923 # if LDBL_MANT_DIG > 100
7924   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
7925   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
7926   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
7927 # endif
7928
7929   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
7930   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
7931   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
7932   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
7933   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
7934 # if LDBL_MANT_DIG > 100
7935   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
7936   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
7937   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
7938 # endif
7939
7940   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
7941   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
7942   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
7943   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
7944   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
7945
7946 # if LDBL_MANT_DIG > 100
7947   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
7948   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
7949   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
7950   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
7951   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
7952   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
7953 # endif
7954
7955   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
7956   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
7957   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
7958   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
7959   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
7960
7961 # if LDBL_MANT_DIG > 100
7962   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
7963   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
7964   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
7965   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
7966   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
7967   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
7968 # endif
7969
7970   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
7971   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
7972   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
7973   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
7974   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
7975
7976   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
7977   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
7978   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
7979   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
7980   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
7981
7982   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7983   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7984   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7985   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7986   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7987
7988   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
7989   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
7990 #endif
7991
7992   END (floor);
7993 }
7994
7995
7996 static void
7997 fma_test (void)
7998 {
7999   START (fma);
8000
8001   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
8002   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
8003   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
8004   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8005   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8006   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8007   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8008   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8009   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8010   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8011   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8012   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8013
8014   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8015   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8016   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8017   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8018   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8019   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8020   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8021   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
8022
8023   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
8024
8025   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
8026                          LDBL_MAX, DBL_MAX, FLT_MAX);
8027   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
8028   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
8029   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
8030   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
8031   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
8032   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
8033   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
8034   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
8035
8036   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8037   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8038   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8039   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8040   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8041   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8042   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8043   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8044   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8045   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8046   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8047   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8048   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8049   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8050   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8051   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8052   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8053   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8054   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8055   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8056   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8057   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8058   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8059   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8060
8061   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8062   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8063   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8064   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8065
8066   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8067   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8068   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8069   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8070   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8071   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8072   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8073   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8074
8075   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8076   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8077   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8078   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8079   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8080   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8081   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8082   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8083
8084 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8085   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
8086   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
8087   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
8088   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
8089   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
8090   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
8091   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
8092   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8093   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8094   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8095   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8096   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8097   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8098   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8099   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8100   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8101   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8102   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8103   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8104   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8105   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8106   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8107   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8108   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8109   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8110   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8111   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8112   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8113   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8114   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8115   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8116   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8117   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8118   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8119   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8120   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8121   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8122   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8123   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8124   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8125   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8126   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8127   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8128 #endif
8129 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8130   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
8131   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
8132   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
8133   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
8134   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
8135   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
8136   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
8137   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
8138   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
8139   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
8140   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
8141   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
8142   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
8143   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
8144   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
8145   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
8146   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
8147   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
8148   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
8149   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
8150   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8151   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8152   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8153   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8154   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8155   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8156   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8157   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8158   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8159   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8160   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8161   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8162   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8163   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8164   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8165   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8166   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8167   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8168   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8169   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8170   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8171   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8172   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8173   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8174   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8175   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8176   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8177   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8178   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8179   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8180   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8181   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8182   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8183   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8184   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8185   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8186 #endif
8187 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8188   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
8189   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
8190   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
8191   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
8192   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
8193   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
8194   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8195   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8196   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8197   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8198   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8199   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8200   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8201   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8202   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8203   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8204   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8205   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8206   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8207   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8208   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8209   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8210   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8211   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8212   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8213   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8214   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8215   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8216   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8217   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8218   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8219   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8220   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8221   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8222   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8223   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8224   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8225   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8226   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8227   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8228   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8229   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8230 #endif
8231 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8232   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
8233   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
8234   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
8235   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
8236   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
8237   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
8238   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
8239   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
8240   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
8241   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
8242   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
8243   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
8244   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
8245   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8246   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8247   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8248   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8249   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8250   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8251   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8252   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8253   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8254   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8255   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8256   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8257   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8258   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8259   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8260   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8261   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8262   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8263   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8264   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8265   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8266   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8267   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8268   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8269   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8270   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8271   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8272   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8273   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8274   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8275   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8276   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8277   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8278   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8279   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8280   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8281 #endif
8282
8283   END (fma);
8284 }
8285
8286
8287 static void
8288 fma_test_towardzero (void)
8289 {
8290   int save_round_mode;
8291   START (fma_towardzero);
8292
8293   save_round_mode = fegetround ();
8294
8295   if (!fesetround (FE_TOWARDZERO))
8296     {
8297       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8298       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8299       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8300       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8301       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8302       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8303       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8304       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8305       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8306       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8307       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8308       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8309       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8310       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8311       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8312       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8313       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8314       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8315       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8316       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8317       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8318       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8319       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8320       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8321
8322       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8323       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8324       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8325       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8326
8327       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8328       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8329       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8330       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8331       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8332       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8333       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8334       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8335
8336 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8337       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8338       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8339       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8340       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8341       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8342       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8343       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8344       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8345 #endif
8346
8347 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8348       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8349       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8350       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8351       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8352       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8353       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8354       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8355       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8356       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8357       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8358       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8359       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8360       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8361       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8362       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8363       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8364       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8365       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8366       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8367       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8368       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8369       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8370       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8371       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8372       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8373       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8374       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8375       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8376       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8377       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8378       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8379       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8380       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8381       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8382       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8383       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8384 #endif
8385 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8386       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8387       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8388       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8389       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8390       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8391       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8392       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8393       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8394       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8395       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8396       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8397       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8398       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8399       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8400       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8401       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8402       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8403       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8404       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8405       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8406       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8407       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8408       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8409       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8410       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8411       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8412       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8413       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8414       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8415       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8416       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8417       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8418       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8419       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8420       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8421       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8422 #endif
8423 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8424       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8425       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8426       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8427       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8428       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8429       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8430       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8431       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8432       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8433       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8434       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8435       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8436       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8437       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8438       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8439       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8440       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8441       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8442       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8443       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8444       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8445       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8446       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8447       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8448       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8449       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8450       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8451       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8452       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8453       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8454       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8455       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8456       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8457       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8458       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8459       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8460 #endif
8461 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8462       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8463       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8464       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8465       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8466       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8467       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8468       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8469       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8470       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8471       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8472       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8473       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8474       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8475       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8476       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8477       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8478       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8479       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8480       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8481       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8482       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8483       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8484       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8485       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8486       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8487       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8488       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8489       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8490       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8491       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8492       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8493       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8494       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8495       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8496       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8497       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8498 #endif
8499     }
8500
8501   fesetround (save_round_mode);
8502
8503   END (fma_towardzero);
8504 }
8505
8506
8507 static void
8508 fma_test_downward (void)
8509 {
8510   int save_round_mode;
8511   START (fma_downward);
8512
8513   save_round_mode = fegetround ();
8514
8515   if (!fesetround (FE_DOWNWARD))
8516     {
8517       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8518       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
8519       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
8520       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8521       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
8522       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8523       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8524       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
8525       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8526       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
8527       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
8528       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8529       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
8530       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8531       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8532       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
8533       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8534       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
8535       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
8536       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8537       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
8538       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8539       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8540       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
8541
8542       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
8543       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
8544       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
8545       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
8546
8547       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8548       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8549       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8550       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8551       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8552       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8553       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8554       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8555
8556 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8557       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8558       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8559       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8560       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8561       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8562       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8563       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8564       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8565 #endif
8566
8567 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8568       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8569       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8570       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8571       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8572       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8573       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8574       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8575       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8576       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8577       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8578       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8579       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
8580       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8581       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8582       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8583       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
8584       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8585       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8586       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8587       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8588       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8589       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8590       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8591       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
8592       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8593       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8594       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8595       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8596       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8597       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8598       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8599       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
8600       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8601       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8602       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8603       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
8604 #endif
8605 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8606       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8607       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8608       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8609       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8610       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8611       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8612       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8613       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8614       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8615       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8616       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8617       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
8618       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8619       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8620       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8621       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
8622       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8623       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8624       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8625       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8626       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8627       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8628       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8629       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
8630       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8631       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8632       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8633       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8634       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8635       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8636       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8637       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
8638       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8639       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8640       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8641       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
8642 #endif
8643 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8644       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8645       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8646       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8647       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8648       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8649       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8650       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8651       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8652       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8653       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8654       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8655       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
8656       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8657       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8658       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8659       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
8660       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8661       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8662       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8663       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8664       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8665       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8666       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8667       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
8668       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8669       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8670       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8671       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8672       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8673       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8674       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8675       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
8676       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8677       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8678       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8679       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
8680 #endif
8681 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8682       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8683       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8684       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8685       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8686       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8687       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8688       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8689       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8690       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8691       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8692       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8693       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8694       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8695       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8696       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8697       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
8698       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8699       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8700       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8701       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8702       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8703       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8704       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8705       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
8706       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8707       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8708       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8709       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8710       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8711       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8712       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8713       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8714       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8715       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8716       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8717       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
8718 #endif
8719     }
8720
8721   fesetround (save_round_mode);
8722
8723   END (fma_downward);
8724 }
8725
8726
8727 static void
8728 fma_test_upward (void)
8729 {
8730   int save_round_mode;
8731   START (fma_upward);
8732
8733   save_round_mode = fegetround ();
8734
8735   if (!fesetround (FE_UPWARD))
8736     {
8737       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8738       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8739       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8740       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8741       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8742       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8743       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8744       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8745       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8746       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8747       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8748       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8749       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8750       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8751       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8752       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8753       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8754       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8755       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8756       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8757       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8758       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8759       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8760       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8761
8762       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8763       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8764       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8765       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8766
8767       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8768       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8769       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8770       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8771       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8772       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8773       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8774       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8775
8776 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8777       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8778       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8779       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8780       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8781       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8782       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8783       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8784       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8785 #endif
8786
8787 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8788       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8789       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8790       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8791       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8792       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8793       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8794       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8795       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8796       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
8797       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8798       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8799       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8800       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
8801       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8802       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8803       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8804       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8805       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8806       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8807       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8808       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
8809       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8810       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8811       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8812       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8813       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8814       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8815       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8816       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
8817       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8818       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8819       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8820       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
8821       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8822       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8823       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8824 #endif
8825 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8826       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8827       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8828       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8829       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8830       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8831       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8832       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8833       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8834       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
8835       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8836       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8837       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8838       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
8839       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8840       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8841       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8842       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8843       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8844       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8845       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8846       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
8847       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8848       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8849       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8850       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8851       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8852       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8853       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8854       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
8855       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8856       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8857       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8858       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
8859       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8860       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8861       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8862 #endif
8863 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8864       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8865       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8866       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8867       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8868       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8869       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8870       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8871       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8872       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
8873       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8874       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8875       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8876       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
8877       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8878       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8879       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8880       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8881       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8882       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8883       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8884       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
8885       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8886       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8887       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8888       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8889       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8890       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8891       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8892       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
8893       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8894       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8895       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8896       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
8897       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8898       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8899       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8900 #endif
8901 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8902       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8903       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8904       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8905       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8906       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8907       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8908       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8909       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8910       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8911       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8912       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8913       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8914       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
8915       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8916       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8917       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8918       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8919       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8920       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8921       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8922       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
8923       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8924       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8925       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8926       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8927       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8928       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8929       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8930       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8931       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8932       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8933       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8934       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
8935       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8936       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8937       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8938 #endif
8939     }
8940
8941   fesetround (save_round_mode);
8942
8943   END (fma_upward);
8944 }
8945
8946
8947 static void
8948 fmax_test (void)
8949 {
8950   START (fmax);
8951
8952   TEST_ff_f (fmax, 0, 0, 0);
8953   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
8954   TEST_ff_f (fmax, 9, 0, 9);
8955   TEST_ff_f (fmax, 0, 9, 9);
8956   TEST_ff_f (fmax, -9, 0, 0);
8957   TEST_ff_f (fmax, 0, -9, 0);
8958
8959   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
8960   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
8961   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
8962   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
8963
8964   TEST_ff_f (fmax, minus_infty, 9, 9);
8965   TEST_ff_f (fmax, minus_infty, -9, -9);
8966   TEST_ff_f (fmax, 9, minus_infty, 9);
8967   TEST_ff_f (fmax, -9, minus_infty, -9);
8968
8969   TEST_ff_f (fmax, 0, qnan_value, 0);
8970   TEST_ff_f (fmax, 9, qnan_value, 9);
8971   TEST_ff_f (fmax, -9, qnan_value, -9);
8972   TEST_ff_f (fmax, qnan_value, 0, 0);
8973   TEST_ff_f (fmax, qnan_value, 9, 9);
8974   TEST_ff_f (fmax, qnan_value, -9, -9);
8975   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
8976   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
8977   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
8978   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
8979   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
8980
8981   END (fmax);
8982 }
8983
8984
8985 static void
8986 fmin_test (void)
8987 {
8988   START (fmin);
8989
8990   TEST_ff_f (fmin, 0, 0, 0);
8991   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
8992   TEST_ff_f (fmin, 9, 0, 0);
8993   TEST_ff_f (fmin, 0, 9, 0);
8994   TEST_ff_f (fmin, -9, 0, -9);
8995   TEST_ff_f (fmin, 0, -9, -9);
8996
8997   TEST_ff_f (fmin, plus_infty, 9, 9);
8998   TEST_ff_f (fmin, 9, plus_infty, 9);
8999   TEST_ff_f (fmin, plus_infty, -9, -9);
9000   TEST_ff_f (fmin, -9, plus_infty, -9);
9001   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
9002   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
9003   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
9004   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
9005
9006   TEST_ff_f (fmin, 0, qnan_value, 0);
9007   TEST_ff_f (fmin, 9, qnan_value, 9);
9008   TEST_ff_f (fmin, -9, qnan_value, -9);
9009   TEST_ff_f (fmin, qnan_value, 0, 0);
9010   TEST_ff_f (fmin, qnan_value, 9, 9);
9011   TEST_ff_f (fmin, qnan_value, -9, -9);
9012   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
9013   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
9014   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
9015   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
9016   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
9017
9018   END (fmin);
9019 }
9020
9021
9022 static void
9023 fmod_test (void)
9024 {
9025   errno = 0;
9026   FUNC(fmod) (6.5, 2.3L);
9027   if (errno == ENOSYS)
9028     /* Function not implemented.  */
9029     return;
9030
9031   START (fmod);
9032
9033   /* fmod (+0, y) == +0 for y != 0.  */
9034   TEST_ff_f (fmod, 0, 3, 0);
9035
9036   /* fmod (-0, y) == -0 for y != 0.  */
9037   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
9038
9039   /* fmod (+inf, y) == qNaN plus invalid exception.  */
9040   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9041   /* fmod (-inf, y) == qNaN plus invalid exception.  */
9042   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9043   /* fmod (x, +0) == qNaN plus invalid exception.  */
9044   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9045   /* fmod (x, -0) == qNaN plus invalid exception.  */
9046   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
9047
9048   /* fmod (x, +inf) == x for x not infinite.  */
9049   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
9050   /* fmod (x, -inf) == x for x not infinite.  */
9051   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
9052
9053   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
9054
9055   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
9056   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
9057   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
9058   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
9059
9060   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
9061 #ifndef TEST_FLOAT
9062   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
9063 #endif
9064 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
9065   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
9066 #endif
9067
9068   END (fmod);
9069 }
9070
9071
9072 static void
9073 fpclassify_test (void)
9074 {
9075   START (fpclassify);
9076
9077   TEST_f_i (fpclassify, qnan_value, FP_NAN);
9078   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
9079   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
9080   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
9081   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
9082   TEST_f_i (fpclassify, 1000, FP_NORMAL);
9083   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
9084
9085   END (fpclassify);
9086 }
9087
9088
9089 static void
9090 frexp_test (void)
9091 {
9092   int x;
9093
9094   START (frexp);
9095
9096   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
9097   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
9098   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
9099
9100   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
9101   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
9102
9103   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
9104   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
9105
9106   END (frexp);
9107 }
9108
9109
9110 static void
9111 gamma_test (void)
9112 {
9113   errno = 0;
9114   FUNC(gamma) (1);
9115
9116   if (errno == ENOSYS)
9117     /* Function not implemented.  */
9118     return;
9119
9120   START (gamma);
9121
9122   TEST_f_f (gamma, plus_infty, plus_infty);
9123   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9124   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9125   TEST_f_f (gamma, minus_infty, plus_infty);
9126   TEST_f_f (gamma, qnan_value, qnan_value);
9127
9128   TEST_f_f1 (gamma, 1, 0, 1);
9129   TEST_f_f1 (gamma, 3, M_LN2l, 1);
9130
9131   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
9132   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9133
9134   END (gamma);
9135 }
9136
9137 static void
9138 hypot_test (void)
9139 {
9140   errno = 0;
9141   FUNC(hypot) (0.7L, 12.4L);
9142   if (errno == ENOSYS)
9143     /* Function not implemented.  */
9144     return;
9145
9146   START (hypot);
9147
9148   TEST_ff_f (hypot, plus_infty, 1, plus_infty);
9149   TEST_ff_f (hypot, minus_infty, 1, plus_infty);
9150
9151 #ifndef TEST_INLINE
9152   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
9153   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
9154   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
9155   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
9156 #endif
9157
9158   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
9159
9160   /* hypot (x,y) == hypot (+-x, +-y)  */
9161   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
9162   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
9163   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
9164   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
9165   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
9166   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
9167   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
9168   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
9169
9170   /*  hypot (x,0) == fabs (x)  */
9171   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
9172   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
9173   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
9174
9175   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
9176
9177   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
9178 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
9179   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
9180 #endif
9181
9182 #if !(defined TEST_FLOAT && defined TEST_INLINE)
9183   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
9184   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
9185 #endif
9186
9187 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
9188   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
9189 #endif
9190
9191 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
9192   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
9193 #endif
9194
9195   END (hypot);
9196 }
9197
9198
9199 static void
9200 ilogb_test (void)
9201 {
9202   START (ilogb);
9203
9204   TEST_f_i (ilogb, 1, 0);
9205   TEST_f_i (ilogb, M_El, 1);
9206   TEST_f_i (ilogb, 1024, 10);
9207   TEST_f_i (ilogb, -2000, 10);
9208
9209   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
9210   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION|ERRNO_EDOM);
9211   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
9212   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION|ERRNO_EDOM);
9213   /* ilogb (inf) == INT_MAX plus invalid exception  */
9214   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9215   /* ilogb (-inf) == INT_MAX plus invalid exception  */
9216   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9217
9218   END (ilogb);
9219 }
9220
9221 static void
9222 isfinite_test (void)
9223 {
9224   START (isfinite);
9225
9226   TEST_f_b (isfinite, 0, 1);
9227   TEST_f_b (isfinite, minus_zero, 1);
9228   TEST_f_b (isfinite, 10, 1);
9229   TEST_f_b (isfinite, min_subnorm_value, 1);
9230   TEST_f_b (isfinite, plus_infty, 0);
9231   TEST_f_b (isfinite, minus_infty, 0);
9232   TEST_f_b (isfinite, qnan_value, 0);
9233
9234   END (isfinite);
9235 }
9236
9237 static void
9238 isgreater_test (void)
9239 {
9240   START (isgreater);
9241
9242   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
9243   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
9244   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
9245   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
9246   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
9247   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
9248   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
9249   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
9250   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
9251   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
9252   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
9253   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
9254   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
9255   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
9256   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
9257   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
9258
9259   END (isgreater);
9260 }
9261
9262 static void
9263 isgreaterequal_test (void)
9264 {
9265   START (isgreaterequal);
9266
9267   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
9268   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
9269   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
9270   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
9271   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
9272   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
9273   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
9274   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
9275   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
9276   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
9277   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
9278   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
9279   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
9280   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
9281   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
9282   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
9283
9284   END (isgreaterequal);
9285 }
9286
9287 static void
9288 isinf_test (void)
9289 {
9290   START (isinf);
9291
9292   TEST_f_b (isinf, 0, 0);
9293   TEST_f_b (isinf, minus_zero, 0);
9294   TEST_f_b (isinf, 10, 0);
9295   TEST_f_b (isinf, min_subnorm_value, 0);
9296   TEST_f_b (isinf, plus_infty, 1);
9297   TEST_f_b (isinf, minus_infty, 1);
9298   TEST_f_b (isinf, qnan_value, 0);
9299
9300   END (isinf);
9301 }
9302
9303 static void
9304 isless_test (void)
9305 {
9306   START (isless);
9307
9308   TEST_ff_i (isless, minus_zero, minus_zero, 0);
9309   TEST_ff_i (isless, minus_zero, plus_zero, 0);
9310   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
9311   TEST_ff_i (isless, minus_zero, qnan_value, 0);
9312   TEST_ff_i (isless, plus_zero, minus_zero, 0);
9313   TEST_ff_i (isless, plus_zero, plus_zero, 0);
9314   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
9315   TEST_ff_i (isless, plus_zero, qnan_value, 0);
9316   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
9317   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
9318   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
9319   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
9320   TEST_ff_i (isless, qnan_value, minus_zero, 0);
9321   TEST_ff_i (isless, qnan_value, plus_zero, 0);
9322   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
9323   TEST_ff_i (isless, qnan_value, qnan_value, 0);
9324
9325   END (isless);
9326 }
9327
9328 static void
9329 islessequal_test (void)
9330 {
9331   START (islessequal);
9332
9333   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
9334   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
9335   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
9336   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
9337   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
9338   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
9339   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
9340   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
9341   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
9342   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
9343   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
9344   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
9345   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
9346   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
9347   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
9348   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
9349
9350   END (islessequal);
9351 }
9352
9353 static void
9354 islessgreater_test (void)
9355 {
9356   START (islessgreater);
9357
9358   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
9359   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
9360   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
9361   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
9362   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
9363   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
9364   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
9365   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
9366   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
9367   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
9368   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
9369   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
9370   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
9371   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
9372   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
9373   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
9374
9375   END (islessgreater);
9376 }
9377
9378 static void
9379 isnan_test (void)
9380 {
9381   START (isnan);
9382
9383   TEST_f_b (isnan, 0, 0);
9384   TEST_f_b (isnan, minus_zero, 0);
9385   TEST_f_b (isnan, 10, 0);
9386   TEST_f_b (isnan, min_subnorm_value, 0);
9387   TEST_f_b (isnan, plus_infty, 0);
9388   TEST_f_b (isnan, minus_infty, 0);
9389   TEST_f_b (isnan, qnan_value, 1);
9390
9391   END (isnan);
9392 }
9393
9394 static void
9395 isnormal_test (void)
9396 {
9397   START (isnormal);
9398
9399   TEST_f_b (isnormal, 0, 0);
9400   TEST_f_b (isnormal, minus_zero, 0);
9401   TEST_f_b (isnormal, 10, 1);
9402   TEST_f_b (isnormal, min_subnorm_value, 0);
9403   TEST_f_b (isnormal, plus_infty, 0);
9404   TEST_f_b (isnormal, minus_infty, 0);
9405   TEST_f_b (isnormal, qnan_value, 0);
9406
9407   END (isnormal);
9408 }
9409
9410 static void
9411 issignaling_test (void)
9412 {
9413   START (issignaling);
9414
9415   TEST_f_b (issignaling, 0, 0);
9416   TEST_f_b (issignaling, minus_zero, 0);
9417   TEST_f_b (issignaling, 10, 0);
9418   TEST_f_b (issignaling, min_subnorm_value, 0);
9419   TEST_f_b (issignaling, plus_infty, 0);
9420   TEST_f_b (issignaling, minus_infty, 0);
9421   TEST_f_b (issignaling, qnan_value, 0);
9422
9423   END (issignaling);
9424 }
9425
9426 static void
9427 isunordered_test (void)
9428 {
9429   START (isunordered);
9430
9431   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
9432   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
9433   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
9434   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
9435   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
9436   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
9437   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
9438   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
9439   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
9440   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
9441   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
9442   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
9443   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
9444   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
9445   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
9446   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
9447
9448   END (isunordered);
9449 }
9450
9451 static void
9452 j0_test (void)
9453 {
9454   FLOAT s, c;
9455   errno = 0;
9456   FUNC (sincos) (0, &s, &c);
9457   if (errno == ENOSYS)
9458     /* Required function not implemented.  */
9459     return;
9460   FUNC(j0) (0);
9461   if (errno == ENOSYS)
9462     /* Function not implemented.  */
9463     return;
9464
9465   START (j0);
9466
9467   /* j0 is the Bessel function of the first kind of order 0 */
9468   TEST_f_f (j0, qnan_value, qnan_value);
9469   TEST_f_f (j0, plus_infty, 0);
9470   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
9471   TEST_f_f (j0, 0.0, 1.0);
9472   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
9473   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
9474   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
9475   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
9476   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
9477   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
9478   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
9479   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9480   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9481
9482   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
9483
9484 #ifndef TEST_FLOAT
9485   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
9486   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
9487 #endif
9488
9489 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9490   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
9491   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
9492 #endif
9493
9494   END (j0);
9495 }
9496
9497
9498 static void
9499 j1_test (void)
9500 {
9501   FLOAT s, c;
9502   errno = 0;
9503   FUNC (sincos) (0, &s, &c);
9504   if (errno == ENOSYS)
9505     /* Required function not implemented.  */
9506     return;
9507   FUNC(j1) (0);
9508   if (errno == ENOSYS)
9509     /* Function not implemented.  */
9510     return;
9511
9512   /* j1 is the Bessel function of the first kind of order 1 */
9513
9514   START (j1);
9515
9516   TEST_f_f (j1, qnan_value, qnan_value);
9517   TEST_f_f (j1, plus_infty, 0);
9518
9519   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
9520   TEST_f_f (j1, 0.0, 0.0);
9521   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
9522   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
9523   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
9524   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
9525   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
9526   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
9527   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
9528
9529   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
9530
9531 #ifndef TEST_FLOAT
9532   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
9533   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
9534 #endif
9535
9536 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9537   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
9538   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
9539 #endif
9540
9541   END (j1);
9542 }
9543
9544 static void
9545 jn_test (void)
9546 {
9547   FLOAT s, c;
9548   errno = 0;
9549   FUNC (sincos) (0, &s, &c);
9550   if (errno == ENOSYS)
9551     /* Required function not implemented.  */
9552     return;
9553   FUNC(jn) (1, 1);
9554   if (errno == ENOSYS)
9555     /* Function not implemented.  */
9556     return;
9557
9558   /* jn is the Bessel function of the first kind of order n.  */
9559   START (jn);
9560
9561   /* jn (0, x) == j0 (x)  */
9562   TEST_ff_f (jn, 0, qnan_value, qnan_value);
9563   TEST_ff_f (jn, 0, plus_infty, 0);
9564   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
9565   TEST_ff_f (jn, 0, 0.0, 1.0);
9566   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
9567   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
9568   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
9569   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
9570   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
9571   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
9572   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
9573   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9574   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9575
9576   /* jn (1, x) == j1 (x)  */
9577   TEST_ff_f (jn, 1, qnan_value, qnan_value);
9578   TEST_ff_f (jn, 1, plus_infty, 0);
9579   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
9580   TEST_ff_f (jn, 1, 0.0, 0.0);
9581   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
9582   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
9583   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
9584   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
9585   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
9586   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
9587   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
9588
9589   /* jn (3, x)  */
9590   TEST_ff_f (jn, 3, qnan_value, qnan_value);
9591   TEST_ff_f (jn, 3, plus_infty, 0);
9592
9593   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
9594   TEST_ff_f (jn, 3, 0.0, 0.0);
9595   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
9596   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
9597   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
9598   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
9599   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
9600
9601   /*  jn (10, x)  */
9602   TEST_ff_f (jn, 10, qnan_value, qnan_value);
9603   TEST_ff_f (jn, 10, plus_infty, 0);
9604
9605   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
9606   TEST_ff_f (jn, 10, 0.0, 0.0);
9607   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
9608   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
9609   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
9610   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
9611   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
9612
9613   /* BZ #11589 .*/
9614   TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
9615   TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
9616   TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
9617   TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
9618   TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
9619   TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
9620   TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
9621   TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
9622
9623   /* Bug 14155: spurious exception may occur.  */
9624   TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
9625
9626   END (jn);
9627 }
9628
9629
9630 static void
9631 ldexp_test (void)
9632 {
9633   START (ldexp);
9634
9635   TEST_ff_f (ldexp, 0, 0, 0);
9636   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
9637
9638   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
9639   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
9640   TEST_ff_f (ldexp, qnan_value, 1, qnan_value);
9641
9642   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
9643   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
9644
9645   /* ldexp (x, 0) == x.  */
9646   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
9647
9648   END (ldexp);
9649 }
9650
9651
9652 static void
9653 lgamma_test (void)
9654 {
9655   errno = 0;
9656   FUNC(lgamma) (0);
9657   if (errno == ENOSYS)
9658     /* Function not implemented.  */
9659     return;
9660
9661   START (lgamma);
9662
9663   TEST_f_f1 (lgamma, plus_infty, plus_infty, 1);
9664   TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9665   TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION);
9666   TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE);
9667
9668   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
9669   TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
9670   TEST_f_f1 (lgamma, minus_infty, plus_infty, IGNORE);
9671   TEST_f_f1 (lgamma, -max_value, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9672   TEST_f_f1 (lgamma, max_value, plus_infty, 1, OVERFLOW_EXCEPTION);
9673
9674   TEST_f_f1 (lgamma, 1, 0, 1);
9675
9676   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
9677
9678   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
9679   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9680   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
9681   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
9682
9683   END (lgamma);
9684 }
9685
9686
9687 static void
9688 lrint_test (void)
9689 {
9690   /* XXX this test is incomplete.  We need to have a way to specifiy
9691      the rounding method and test the critical cases.  So far, only
9692      unproblematic numbers are tested.  */
9693   /* TODO: missing +/-Inf as well as qNaN tests.  */
9694
9695   START (lrint);
9696
9697   TEST_f_l (lrint, 0.0, 0);
9698   TEST_f_l (lrint, minus_zero, 0);
9699   TEST_f_l (lrint, 0.2L, 0);
9700   TEST_f_l (lrint, -0.2L, 0);
9701
9702   TEST_f_l (lrint, 1.4L, 1);
9703   TEST_f_l (lrint, -1.4L, -1);
9704
9705   TEST_f_l (lrint, 8388600.3L, 8388600);
9706   TEST_f_l (lrint, -8388600.3L, -8388600);
9707
9708   TEST_f_l (lrint, 1071930.0008, 1071930);
9709 #ifndef TEST_FLOAT
9710   TEST_f_l (lrint, 1073741824.01, 1073741824);
9711 # if LONG_MAX > 281474976710656
9712   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9713 # endif
9714 #endif
9715
9716   END (lrint);
9717 }
9718
9719
9720 static void
9721 lrint_test_tonearest (void)
9722 {
9723   int save_round_mode;
9724   START (lrint_tonearest);
9725
9726   save_round_mode = fegetround ();
9727
9728   if (!fesetround (FE_TONEAREST))
9729     {
9730       TEST_f_l (lrint, 0.0, 0);
9731       TEST_f_l (lrint, minus_zero, 0);
9732       TEST_f_l (lrint, 0.2L, 0);
9733       TEST_f_l (lrint, -0.2L, 0);
9734       TEST_f_l (lrint, 0.5L, 0);
9735       TEST_f_l (lrint, -0.5L, 0);
9736       TEST_f_l (lrint, 0.8L, 1);
9737       TEST_f_l (lrint, -0.8L, -1);
9738
9739       TEST_f_l (lrint, 1.4L, 1);
9740       TEST_f_l (lrint, -1.4L, -1);
9741
9742       TEST_f_l (lrint, 8388600.3L, 8388600);
9743       TEST_f_l (lrint, -8388600.3L, -8388600);
9744
9745       TEST_f_l (lrint, 1071930.0008, 1071930);
9746 #ifndef TEST_FLOAT
9747       TEST_f_l (lrint, 1073741824.01, 1073741824);
9748 # if LONG_MAX > 281474976710656
9749       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9750 # endif
9751 #endif
9752     }
9753
9754   fesetround (save_round_mode);
9755
9756   END (lrint_tonearest);
9757 }
9758
9759
9760 static void
9761 lrint_test_towardzero (void)
9762 {
9763   int save_round_mode;
9764   START (lrint_towardzero);
9765
9766   save_round_mode = fegetround ();
9767
9768   if (!fesetround (FE_TOWARDZERO))
9769     {
9770       TEST_f_l (lrint, 0.0, 0);
9771       TEST_f_l (lrint, minus_zero, 0);
9772       TEST_f_l (lrint, 0.2L, 0);
9773       TEST_f_l (lrint, -0.2L, 0);
9774       TEST_f_l (lrint, 0.5L, 0);
9775       TEST_f_l (lrint, -0.5L, 0);
9776       TEST_f_l (lrint, 0.8L, 0);
9777       TEST_f_l (lrint, -0.8L, 0);
9778
9779       TEST_f_l (lrint, 1.4L, 1);
9780       TEST_f_l (lrint, -1.4L, -1);
9781
9782       TEST_f_l (lrint, 8388600.3L, 8388600);
9783       TEST_f_l (lrint, -8388600.3L, -8388600);
9784
9785       TEST_f_l (lrint, 1071930.0008, 1071930);
9786 #ifndef TEST_FLOAT
9787       TEST_f_l (lrint, 1073741824.01, 1073741824);
9788 # if LONG_MAX > 281474976710656
9789       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9790 # endif
9791 #endif
9792     }
9793
9794   fesetround (save_round_mode);
9795
9796   END (lrint_towardzero);
9797 }
9798
9799
9800 static void
9801 lrint_test_downward (void)
9802 {
9803   int save_round_mode;
9804   START (lrint_downward);
9805
9806   save_round_mode = fegetround ();
9807
9808   if (!fesetround (FE_DOWNWARD))
9809     {
9810       TEST_f_l (lrint, 0.0, 0);
9811       TEST_f_l (lrint, minus_zero, 0);
9812       TEST_f_l (lrint, 0.2L, 0);
9813       TEST_f_l (lrint, -0.2L, -1);
9814       TEST_f_l (lrint, 0.5L, 0);
9815       TEST_f_l (lrint, -0.5L, -1);
9816       TEST_f_l (lrint, 0.8L, 0);
9817       TEST_f_l (lrint, -0.8L, -1);
9818
9819       TEST_f_l (lrint, 1.4L, 1);
9820       TEST_f_l (lrint, -1.4L, -2);
9821
9822       TEST_f_l (lrint, 8388600.3L, 8388600);
9823       TEST_f_l (lrint, -8388600.3L, -8388601);
9824
9825       TEST_f_l (lrint, 1071930.0008, 1071930);
9826 #ifndef TEST_FLOAT
9827       TEST_f_l (lrint, 1073741824.01, 1073741824);
9828 # if LONG_MAX > 281474976710656
9829       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9830 # endif
9831 #endif
9832     }
9833
9834   fesetround (save_round_mode);
9835
9836   END (lrint_downward);
9837 }
9838
9839
9840 static void
9841 lrint_test_upward (void)
9842 {
9843   int save_round_mode;
9844   START (lrint_upward);
9845
9846   save_round_mode = fegetround ();
9847
9848   if (!fesetround (FE_UPWARD))
9849     {
9850       TEST_f_l (lrint, 0.0, 0);
9851       TEST_f_l (lrint, minus_zero, 0);
9852       TEST_f_l (lrint, 0.2L, 1);
9853       TEST_f_l (lrint, -0.2L, 0);
9854       TEST_f_l (lrint, 0.5L, 1);
9855       TEST_f_l (lrint, -0.5L, 0);
9856       TEST_f_l (lrint, 0.8L, 1);
9857       TEST_f_l (lrint, -0.8L, 0);
9858
9859       TEST_f_l (lrint, 1.4L, 2);
9860       TEST_f_l (lrint, -1.4L, -1);
9861
9862       TEST_f_l (lrint, 8388600.3L, 8388601);
9863       TEST_f_l (lrint, -8388600.3L, -8388600);
9864
9865 #ifndef TEST_FLOAT
9866       TEST_f_l (lrint, 1071930.0008, 1071931);
9867       TEST_f_l (lrint, 1073741824.01, 1073741825);
9868 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
9869       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9870 # endif
9871 #endif
9872     }
9873
9874   fesetround (save_round_mode);
9875
9876   END (lrint_upward);
9877 }
9878
9879
9880 static void
9881 llrint_test (void)
9882 {
9883   /* XXX this test is incomplete.  We need to have a way to specifiy
9884      the rounding method and test the critical cases.  So far, only
9885      unproblematic numbers are tested.  */
9886   /* TODO: missing +/-Inf as well as qNaN tests.  */
9887
9888   START (llrint);
9889
9890   TEST_f_L (llrint, 0.0, 0);
9891   TEST_f_L (llrint, minus_zero, 0);
9892   TEST_f_L (llrint, 0.2L, 0);
9893   TEST_f_L (llrint, -0.2L, 0);
9894
9895   TEST_f_L (llrint, 1.4L, 1);
9896   TEST_f_L (llrint, -1.4L, -1);
9897
9898   TEST_f_L (llrint, 8388600.3L, 8388600);
9899   TEST_f_L (llrint, -8388600.3L, -8388600);
9900
9901   TEST_f_l (llrint, 1071930.0008, 1071930);
9902
9903   /* Test boundary conditions.  */
9904   /* 0x1FFFFF */
9905   TEST_f_L (llrint, 2097151.0,2097151LL);
9906   /* 0x800000 */
9907   TEST_f_L (llrint, 8388608.0, 8388608LL);
9908   /* 0x1000000 */
9909   TEST_f_L (llrint, 16777216.0, 16777216LL);
9910   /* 0x20000000000 */
9911   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9912   /* 0x40000000000 */
9913   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9914   /* 0x1000000000000 */
9915   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9916   /* 0x10000000000000 */
9917   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9918   /* 0x10000080000000 */
9919   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9920   /* 0x20000000000000 */
9921   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9922   /* 0x80000000000000 */
9923   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9924   /* 0x100000000000000 */
9925   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9926 #ifdef TEST_LDOUBLE
9927   /* The input can only be represented in long double.  */
9928   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9929   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9930   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9931   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9932   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9933
9934   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9935   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9936   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9937   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9938   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9939
9940 # if LDBL_MANT_DIG > 100
9941   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9942   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9943   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9944   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9945   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9946   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9947
9948   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9949   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9950   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9951   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9952   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9953   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9954 #endif
9955
9956   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9957   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9958   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9959   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9960   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9961
9962   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9963   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9964   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9965   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9966   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9967
9968 # if LDBL_MANT_DIG > 100
9969   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9970   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9971   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9972   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9973   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9974   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9975
9976   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9977   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9978   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9979   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9980   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9981   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9982 #endif
9983
9984   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9985   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9986   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9987   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9988   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9989
9990   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9991   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9992   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9993   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9994   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9995
9996 # if LDBL_MANT_DIG > 100
9997   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9998   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9999   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10000   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10001   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10002   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10003   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10004   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10005   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10006   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10007   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10008   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10009 # endif
10010 #endif
10011
10012   END (llrint);
10013 }
10014
10015 static void
10016 llrint_test_tonearest (void)
10017 {
10018   int save_round_mode;
10019   START (llrint_tonearest);
10020
10021   save_round_mode = fegetround ();
10022
10023   if (!fesetround (FE_TONEAREST))
10024     {
10025       TEST_f_L (llrint, 0.0, 0);
10026       TEST_f_L (llrint, minus_zero, 0);
10027       TEST_f_L (llrint, 0.2L, 0);
10028       TEST_f_L (llrint, -0.2L, 0);
10029
10030       TEST_f_L (llrint, 1.4L, 1);
10031       TEST_f_L (llrint, -1.4L, -1);
10032
10033       TEST_f_L (llrint, 8388600.3L, 8388600);
10034       TEST_f_L (llrint, -8388600.3L, -8388600);
10035
10036       TEST_f_l (llrint, 1071930.0008, 1071930);
10037
10038       /* Test boundary conditions.  */
10039       /* 0x1FFFFF */
10040       TEST_f_L (llrint, 2097151.0,2097151LL);
10041       /* 0x800000 */
10042       TEST_f_L (llrint, 8388608.0, 8388608LL);
10043       /* 0x1000000 */
10044       TEST_f_L (llrint, 16777216.0, 16777216LL);
10045       /* 0x20000000000 */
10046       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10047       /* 0x40000000000 */
10048       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10049       /* 0x1000000000000 */
10050       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10051       /* 0x10000000000000 */
10052       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10053       /* 0x10000080000000 */
10054       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10055       /* 0x20000000000000 */
10056       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10057       /* 0x80000000000000 */
10058       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10059       /* 0x100000000000000 */
10060       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10061 #ifdef TEST_LDOUBLE
10062       /* The input can only be represented in long double.  */
10063       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10064       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10065       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10066       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10067       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10068
10069       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10070       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10071       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10072       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10073       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10074
10075 # if LDBL_MANT_DIG > 100
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
10083       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10084       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10085       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10086       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10087       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10088       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10089 #endif
10090
10091       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10092       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10093       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10094       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10095       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10096
10097       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10098       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10099       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10100       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10101       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10102
10103 # if LDBL_MANT_DIG > 100
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
10111       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10112       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10113       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10114       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10115       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10116       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10117 #endif
10118
10119       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10120       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10121       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10122       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10123       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10124
10125       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10126       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10127       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10128       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10129       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10130
10131 # if LDBL_MANT_DIG > 100
10132       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10133       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10134       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10135       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10136       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10137       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10138       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10139       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10140       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10141       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10142       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10143       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10144 # endif
10145 #endif
10146     }
10147
10148   fesetround (save_round_mode);
10149
10150   END (llrint_tonearest);
10151 }
10152
10153 static void
10154 llrint_test_towardzero (void)
10155 {
10156   int save_round_mode;
10157   START (llrint_towardzero);
10158
10159   save_round_mode = fegetround ();
10160
10161   if (!fesetround (FE_TOWARDZERO))
10162     {
10163       TEST_f_L (llrint, 0.0, 0);
10164       TEST_f_L (llrint, minus_zero, 0);
10165       TEST_f_L (llrint, 0.2L, 0);
10166       TEST_f_L (llrint, -0.2L, 0);
10167
10168       TEST_f_L (llrint, 1.4L, 1);
10169       TEST_f_L (llrint, -1.4L, -1);
10170
10171       TEST_f_L (llrint, 8388600.3L, 8388600);
10172       TEST_f_L (llrint, -8388600.3L, -8388600);
10173
10174       TEST_f_l (llrint, 1071930.0008, 1071930);
10175
10176       /* Test boundary conditions.  */
10177       /* 0x1FFFFF */
10178       TEST_f_L (llrint, 2097151.0,2097151LL);
10179       /* 0x800000 */
10180       TEST_f_L (llrint, 8388608.0, 8388608LL);
10181       /* 0x1000000 */
10182       TEST_f_L (llrint, 16777216.0, 16777216LL);
10183       /* 0x20000000000 */
10184       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10185       /* 0x40000000000 */
10186       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10187       /* 0x1000000000000 */
10188       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10189       /* 0x10000000000000 */
10190       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10191       /* 0x10000080000000 */
10192       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10193       /* 0x20000000000000 */
10194       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10195       /* 0x80000000000000 */
10196       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10197       /* 0x100000000000000 */
10198       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10199 #ifdef TEST_LDOUBLE
10200       /* The input can only be represented in long double.  */
10201       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10202       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10203       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10204       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10205       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10206
10207       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10208       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10209       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10210       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10211       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10212
10213 # if LDBL_MANT_DIG > 100
10214       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10215       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10216       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10217       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10218       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10219       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10220
10221       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10222       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10223       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10224       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10225       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10226       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10227 #endif
10228
10229       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10230       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10231       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10232       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10233       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10234
10235       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10236       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10237       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10238       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10239       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10240
10241 # if LDBL_MANT_DIG > 100
10242       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10243       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10244       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10245       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10246       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10247       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10248
10249       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10250       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10251       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10252       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10253       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10254       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10255 #endif
10256
10257       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10258       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10259       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10260       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10261       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10262
10263       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10264       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10265       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10266       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10267       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10268
10269 # if LDBL_MANT_DIG > 100
10270       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10271       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10272       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10273       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10274       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10275       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10276       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10277       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10278       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10279       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10280       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10281       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10282 # endif
10283 #endif
10284     }
10285
10286   fesetround (save_round_mode);
10287
10288   END (llrint_towardzero);
10289 }
10290
10291 static void
10292 llrint_test_downward (void)
10293 {
10294   int save_round_mode;
10295   START (llrint_downward);
10296
10297   save_round_mode = fegetround ();
10298
10299   if (!fesetround (FE_DOWNWARD))
10300     {
10301       TEST_f_L (llrint, 0.0, 0);
10302       TEST_f_L (llrint, minus_zero, 0);
10303       TEST_f_L (llrint, 0.2L, 0);
10304       TEST_f_L (llrint, -0.2L, -1);
10305
10306       TEST_f_L (llrint, 1.4L, 1);
10307       TEST_f_L (llrint, -1.4L, -2);
10308
10309       TEST_f_L (llrint, 8388600.3L, 8388600);
10310       TEST_f_L (llrint, -8388600.3L, -8388601);
10311
10312       TEST_f_l (llrint, 1071930.0008, 1071930);
10313
10314       /* Test boundary conditions.  */
10315       /* 0x1FFFFF */
10316       TEST_f_L (llrint, 2097151.0,2097151LL);
10317       /* 0x800000 */
10318       TEST_f_L (llrint, 8388608.0, 8388608LL);
10319       /* 0x1000000 */
10320       TEST_f_L (llrint, 16777216.0, 16777216LL);
10321       /* 0x20000000000 */
10322       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10323       /* 0x40000000000 */
10324       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10325       /* 0x1000000000000 */
10326       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10327       /* 0x10000000000000 */
10328       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10329       /* 0x10000080000000 */
10330       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10331       /* 0x20000000000000 */
10332       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10333       /* 0x80000000000000 */
10334       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10335       /* 0x100000000000000 */
10336       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10337 #ifdef TEST_LDOUBLE
10338       /* The input can only be represented in long double.  */
10339       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10340       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10341       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10342       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10343       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10344
10345       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10346       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10347       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10348       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10349       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10350       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10351
10352       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10353       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
10354       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
10355       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10356       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10357
10358       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
10359       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
10360       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
10361       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10362       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10363       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10364
10365       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10366       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10367       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10368       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10369       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10370
10371       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10372       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10373       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10374       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10375       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10376       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10377
10378       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10379       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
10380       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
10381       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10382       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10383
10384       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
10385       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
10386       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
10387       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10388       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10389       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
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       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10398       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
10399       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
10400       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10401       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10402
10403 # if LDBL_MANT_DIG > 100
10404       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10405       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10406       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10407       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10408       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10409       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
10410       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10411       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
10412       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10413       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10414       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10415       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10416 # endif
10417 #endif
10418     }
10419
10420   fesetround (save_round_mode);
10421
10422   END (llrint_downward);
10423 }
10424
10425 static void
10426 llrint_test_upward (void)
10427 {
10428   int save_round_mode;
10429   START (llrint_upward);
10430
10431   save_round_mode = fegetround ();
10432
10433   if (!fesetround (FE_UPWARD))
10434     {
10435       TEST_f_L (llrint, 0.0, 0);
10436       TEST_f_L (llrint, minus_zero, 0);
10437       TEST_f_L (llrint, 0.2L, 1);
10438       TEST_f_L (llrint, -0.2L, 0);
10439
10440       TEST_f_L (llrint, 1.4L, 2);
10441       TEST_f_L (llrint, -1.4L, -1);
10442
10443       TEST_f_L (llrint, 8388600.3L, 8388601);
10444       TEST_f_L (llrint, -8388600.3L, -8388600);
10445 #ifndef TEST_FLOAT
10446       TEST_f_l (llrint, 1071930.0008, 1071931);
10447 #endif
10448       /* Test boundary conditions.  */
10449       /* 0x1FFFFF */
10450       TEST_f_L (llrint, 2097151.0,2097151LL);
10451       /* 0x800000 */
10452       TEST_f_L (llrint, 8388608.0, 8388608LL);
10453       /* 0x1000000 */
10454       TEST_f_L (llrint, 16777216.0, 16777216LL);
10455       /* 0x20000000000 */
10456       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10457       /* 0x40000000000 */
10458       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10459       /* 0x1000000000000 */
10460       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10461       /* 0x10000000000000 */
10462       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10463       /* 0x10000080000000 */
10464       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10465       /* 0x20000000000000 */
10466       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10467       /* 0x80000000000000 */
10468       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10469       /* 0x100000000000000 */
10470       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10471 #ifdef TEST_LDOUBLE
10472       /* The input can only be represented in long double.  */
10473       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10474       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
10475       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
10476       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10477       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10478
10479       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
10480       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
10481       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
10482       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10483       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10484       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10485
10486       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10487       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10488       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10489       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10490       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10491
10492       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10493       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10494       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10495       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10496       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10497       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10498
10499       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10500       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
10501       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
10502       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10503       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10504
10505       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
10506       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
10507       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
10508       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10509       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10510       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10511
10512       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10513       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10514       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10515       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10516       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10517
10518       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10519       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10520       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10521       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10522       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10523       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
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       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10532       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10533       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10534       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10535       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10536
10537 # if LDBL_MANT_DIG > 100
10538       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10539       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10540       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10541       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10542       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
10543       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10544       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
10545       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10546       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10547       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10548       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10549       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10550 # endif
10551 #endif
10552     }
10553
10554   fesetround (save_round_mode);
10555
10556   END (llrint_upward);
10557 }
10558
10559
10560 static void
10561 log_test (void)
10562 {
10563   errno = 0;
10564   FUNC(log) (1);
10565   if (errno == ENOSYS)
10566     /* Function not implemented.  */
10567     return;
10568   START (log);
10569
10570   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10571   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10572
10573   TEST_f_f (log, 1, 0);
10574
10575   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
10576   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
10577   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
10578   TEST_f_f (log, plus_infty, plus_infty);
10579   TEST_f_f (log, qnan_value, qnan_value);
10580
10581   TEST_f_f (log, M_El, 1);
10582   TEST_f_f (log, 1.0 / M_El, -1);
10583   TEST_f_f (log, 2, M_LN2l);
10584   TEST_f_f (log, 10, M_LN10l);
10585   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
10586
10587   END (log);
10588 }
10589
10590
10591 static void
10592 log10_test (void)
10593 {
10594   errno = 0;
10595   FUNC(log10) (1);
10596   if (errno == ENOSYS)
10597     /* Function not implemented.  */
10598     return;
10599
10600   START (log10);
10601
10602   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10603   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10604
10605   TEST_f_f (log10, 1, 0);
10606
10607   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
10608   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
10609   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
10610   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
10611
10612   TEST_f_f (log10, plus_infty, plus_infty);
10613   TEST_f_f (log10, qnan_value, qnan_value);
10614
10615   TEST_f_f (log10, 0.1L, -1);
10616   TEST_f_f (log10, 10.0, 1);
10617   TEST_f_f (log10, 100.0, 2);
10618   TEST_f_f (log10, 10000.0, 4);
10619   TEST_f_f (log10, M_El, M_LOG10El);
10620   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
10621
10622   END (log10);
10623 }
10624
10625
10626 static void
10627 log1p_test (void)
10628 {
10629   errno = 0;
10630   FUNC(log1p) (0);
10631   if (errno == ENOSYS)
10632     /* Function not implemented.  */
10633     return;
10634
10635   START (log1p);
10636
10637   TEST_f_f (log1p, 0, 0);
10638   TEST_f_f (log1p, minus_zero, minus_zero);
10639
10640   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10641   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
10642   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
10643   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
10644
10645   TEST_f_f (log1p, plus_infty, plus_infty);
10646   TEST_f_f (log1p, qnan_value, qnan_value);
10647
10648   TEST_f_f (log1p, M_El - 1.0, 1);
10649
10650   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
10651   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
10652
10653   END (log1p);
10654 }
10655
10656
10657 static void
10658 log2_test (void)
10659 {
10660   errno = 0;
10661   FUNC(log2) (1);
10662   if (errno == ENOSYS)
10663     /* Function not implemented.  */
10664     return;
10665
10666   START (log2);
10667
10668   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10669   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10670
10671   TEST_f_f (log2, 1, 0);
10672
10673   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
10674   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
10675   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
10676
10677   TEST_f_f (log2, plus_infty, plus_infty);
10678   TEST_f_f (log2, qnan_value, qnan_value);
10679
10680   TEST_f_f (log2, M_El, M_LOG2El);
10681   TEST_f_f (log2, 2.0, 1);
10682   TEST_f_f (log2, 16.0, 4);
10683   TEST_f_f (log2, 256.0, 8);
10684   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
10685
10686   END (log2);
10687 }
10688
10689
10690 static void
10691 logb_test (void)
10692 {
10693   START (logb);
10694
10695   TEST_f_f (logb, plus_infty, plus_infty);
10696   TEST_f_f (logb, minus_infty, plus_infty);
10697
10698   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10699
10700   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10701   TEST_f_f (logb, qnan_value, qnan_value);
10702
10703   TEST_f_f (logb, 1, 0);
10704   TEST_f_f (logb, M_El, 1);
10705   TEST_f_f (logb, 1024, 10);
10706   TEST_f_f (logb, -2000, 10);
10707
10708   TEST_f_f (logb, 0x0.1p-127, -131);
10709   TEST_f_f (logb, 0x0.01p-127, -135);
10710   TEST_f_f (logb, 0x0.011p-127, -135);
10711 #ifndef TEST_FLOAT
10712   TEST_f_f (logb, 0x0.8p-1022, -1023);
10713   TEST_f_f (logb, 0x0.1p-1022, -1026);
10714   TEST_f_f (logb, 0x0.00111p-1022, -1034);
10715   TEST_f_f (logb, 0x0.00001p-1022, -1042);
10716   TEST_f_f (logb, 0x0.000011p-1022, -1042);
10717   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
10718 #endif
10719 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
10720   TEST_f_f (logb, 0x1p-16400L, -16400);
10721   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
10722 #endif
10723
10724   END (logb);
10725 }
10726
10727 static void
10728 logb_test_downward (void)
10729 {
10730   int save_round_mode;
10731   errno = 0;
10732
10733   FUNC(logb) (0);
10734   if (errno == ENOSYS)
10735     /* Function not implemented.  */
10736     return;
10737
10738   START (logb_downward);
10739
10740   save_round_mode = fegetround ();
10741
10742   if (!fesetround (FE_DOWNWARD))
10743     {
10744
10745       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
10746          should not return -0 from logb in any rounding mode.  PowerPC32 has
10747          failed with this test for power4 logb (and logbl on all PowerPC
10748          platforms) in the past due to instruction selection.  GCC PR 52775
10749          provides the availability of the fcfid insn in 32-bit mode which
10750          eliminates the use of fsub in this instance and prevents the negative
10751          signed 0.0.  */
10752
10753       /* BZ #887  */
10754       TEST_f_f (logb, 1.000e+0, plus_zero);
10755     }
10756
10757   fesetround (save_round_mode);
10758
10759   END (logb_downward);
10760 }
10761
10762 static void
10763 lround_test (void)
10764 {
10765   /* TODO: missing +/-Inf as well as qNaN tests.  */
10766
10767   START (lround);
10768
10769   TEST_f_l (lround, 0, 0);
10770   TEST_f_l (lround, minus_zero, 0);
10771   TEST_f_l (lround, 0.2L, 0.0);
10772   TEST_f_l (lround, -0.2L, 0);
10773   TEST_f_l (lround, 0.5, 1);
10774   TEST_f_l (lround, -0.5, -1);
10775   TEST_f_l (lround, 0.8L, 1);
10776   TEST_f_l (lround, -0.8L, -1);
10777   TEST_f_l (lround, 1.5, 2);
10778   TEST_f_l (lround, -1.5, -2);
10779   TEST_f_l (lround, 22514.5, 22515);
10780   TEST_f_l (lround, -22514.5, -22515);
10781   TEST_f_l (lround, 1071930.0008, 1071930);
10782 #ifndef TEST_FLOAT
10783   TEST_f_l (lround, 1073741824.01, 1073741824);
10784 # if LONG_MAX > 281474976710656
10785   TEST_f_l (lround, 281474976710656.025, 281474976710656);
10786   TEST_f_l (lround, 18014398509481974, 18014398509481974);
10787 # endif
10788   TEST_f_l (lround, 2097152.5, 2097153);
10789   TEST_f_l (lround, -2097152.5, -2097153);
10790   /* nextafter(0.5,-1)  */
10791   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
10792   /* nextafter(-0.5,1)  */
10793   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
10794 #else
10795   /* nextafter(0.5,-1)  */
10796   TEST_f_l (lround, 0x1.fffffp-2, 0);
10797   /* nextafter(-0.5,1)  */
10798   TEST_f_l (lround, -0x1.fffffp-2, 0);
10799   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
10800   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
10801 #endif
10802   END (lround);
10803 }
10804
10805
10806 static void
10807 llround_test (void)
10808 {
10809   /* TODO: missing +/-Inf as well as qNaN tests.  */
10810
10811   START (llround);
10812
10813   TEST_f_L (llround, 0, 0);
10814   TEST_f_L (llround, minus_zero, 0);
10815   TEST_f_L (llround, 0.2L, 0.0);
10816   TEST_f_L (llround, -0.2L, 0);
10817   TEST_f_L (llround, 0.5, 1);
10818   TEST_f_L (llround, -0.5, -1);
10819   TEST_f_L (llround, 0.8L, 1);
10820   TEST_f_L (llround, -0.8L, -1);
10821   TEST_f_L (llround, 1.5, 2);
10822   TEST_f_L (llround, -1.5, -2);
10823   TEST_f_L (llround, 22514.5, 22515);
10824   TEST_f_L (llround, -22514.5, -22515);
10825   TEST_f_l (llround, 1071930.0008, 1071930);
10826 #ifndef TEST_FLOAT
10827   TEST_f_L (llround, 2097152.5, 2097153);
10828   TEST_f_L (llround, -2097152.5, -2097153);
10829   TEST_f_L (llround, 34359738368.5, 34359738369ll);
10830   TEST_f_L (llround, -34359738368.5, -34359738369ll);
10831   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
10832 #endif
10833
10834   /* Test boundary conditions.  */
10835   /* 0x1FFFFF */
10836   TEST_f_L (llround, 2097151.0, 2097151LL);
10837   /* 0x800000 */
10838   TEST_f_L (llround, 8388608.0, 8388608LL);
10839   /* 0x1000000 */
10840   TEST_f_L (llround, 16777216.0, 16777216LL);
10841   /* 0x20000000000 */
10842   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
10843   /* 0x40000000000 */
10844   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
10845   /* 0x1000000000000 */
10846   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
10847   /* 0x10000000000000 */
10848   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
10849   /* 0x10000080000000 */
10850   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
10851   /* 0x20000000000000 */
10852   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
10853   /* 0x80000000000000 */
10854   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
10855   /* 0x100000000000000 */
10856   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
10857
10858 #ifndef TEST_FLOAT
10859   /* 0x100000000 */
10860   TEST_f_L (llround, 4294967295.5, 4294967296LL);
10861   /* 0x200000000 */
10862   TEST_f_L (llround, 8589934591.5, 8589934592LL);
10863
10864   /* nextafter(0.5,-1)  */
10865   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
10866   /* nextafter(-0.5,1)  */
10867   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
10868   /* On PowerPC an exponent of '52' is the largest incrementally
10869    * representable sequence of whole-numbers in the 'double' range.  We test
10870    * lround to make sure that a guard bit set during the lround operation
10871    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
10872    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
10873    * rightmost bit set.  */
10874   /* +-(2^52+1)  */
10875   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
10876   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
10877   /* +-(2^53-1): Input is the last (positive and negative) incrementally
10878    * representable whole-number in the 'double' range that might round
10879    * erroneously.  */
10880   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
10881   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
10882 #else
10883   /* nextafter(0.5,-1)  */
10884   TEST_f_L (llround, 0x1.fffffep-2, 0);
10885   /* nextafter(-0.5,1)  */
10886   TEST_f_L (llround, -0x1.fffffep-2, 0);
10887   /* As above, on PowerPC an exponent of '23' is the largest incrementally
10888    * representable sequence of whole-numbers in the 'float' range.
10889    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
10890   TEST_f_L (llround, 0x1.000002p+23,8388609);
10891   TEST_f_L (llround, -0x1.000002p+23,-8388609);
10892   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
10893   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
10894 #endif
10895
10896
10897 #ifdef TEST_LDOUBLE
10898   /* The input can only be represented in long double.  */
10899   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
10900   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
10901   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
10902   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
10903   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
10904
10905 # if LDBL_MANT_DIG > 100
10906   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
10907   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
10908   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
10909   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
10910   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
10911   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
10912
10913   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
10914   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
10915   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
10916   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
10917   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
10918   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
10919 # endif
10920
10921   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
10922   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
10923   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
10924   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
10925   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
10926
10927   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
10928   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
10929   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
10930   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
10931   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
10932
10933 # if LDBL_MANT_DIG > 100
10934   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
10935   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
10936   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
10937   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
10938   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
10939   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
10940
10941   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
10942   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
10943   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
10944   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
10945   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
10946   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
10947 # endif
10948
10949   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
10950   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
10951   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
10952   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
10953   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
10954
10955   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
10956   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
10957   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
10958   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
10959   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
10960
10961   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
10962   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
10963   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
10964   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
10965   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
10966
10967   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
10968   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
10969   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
10970   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
10971   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
10972   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
10973 #endif
10974
10975   END (llround);
10976 }
10977
10978 static void
10979 modf_test (void)
10980 {
10981   FLOAT x;
10982
10983   START (modf);
10984
10985   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
10986   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
10987   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
10988   TEST_fF_f1 (modf, 0, 0, 0);
10989   TEST_fF_f1 (modf, 1.5, 0.5, 1);
10990   TEST_fF_f1 (modf, 2.5, 0.5, 2);
10991   TEST_fF_f1 (modf, -2.5, -0.5, -2);
10992   TEST_fF_f1 (modf, 20, 0, 20);
10993   TEST_fF_f1 (modf, 21, 0, 21);
10994   TEST_fF_f1 (modf, 89.5, 0.5, 89);
10995
10996   END (modf);
10997 }
10998
10999
11000 static void
11001 nearbyint_test (void)
11002 {
11003   START (nearbyint);
11004
11005   TEST_f_f (nearbyint, 0.0, 0.0);
11006   TEST_f_f (nearbyint, minus_zero, minus_zero);
11007   TEST_f_f (nearbyint, plus_infty, plus_infty);
11008   TEST_f_f (nearbyint, minus_infty, minus_infty);
11009   TEST_f_f (nearbyint, qnan_value, qnan_value);
11010
11011   /* Subnormal values */
11012   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
11013   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
11014
11015   /* Default rounding mode is round to nearest.  */
11016   TEST_f_f (nearbyint, 0.5, 0.0);
11017   TEST_f_f (nearbyint, 1.5, 2.0);
11018   TEST_f_f (nearbyint, -0.5, minus_zero);
11019   TEST_f_f (nearbyint, -1.5, -2.0);
11020
11021   TEST_f_f (nearbyint, 262144.75, 262145.0);
11022   TEST_f_f (nearbyint, 262142.75, 262143.0);
11023   TEST_f_f (nearbyint, 524286.75, 524287.0);
11024   TEST_f_f (nearbyint, 524288.75, 524289.0);
11025
11026   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
11027   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
11028   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
11029   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
11030   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
11031   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
11032   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
11033   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
11034   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
11035   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
11036 #ifndef TEST_FLOAT
11037   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
11038   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
11039   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
11040   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
11041   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
11042   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
11043   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
11044   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
11045   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
11046   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
11047 #endif
11048
11049   END (nearbyint);
11050 }
11051
11052 static void
11053 nextafter_test (void)
11054 {
11055
11056   START (nextafter);
11057
11058   TEST_ff_f (nextafter, 0, 0, 0);
11059   TEST_ff_f (nextafter, minus_zero, 0, 0);
11060   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
11061   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
11062
11063   TEST_ff_f (nextafter, 9, 9, 9);
11064   TEST_ff_f (nextafter, -9, -9, -9);
11065   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
11066   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
11067
11068   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
11069   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
11070   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
11071
11072   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
11073                          LDBL_MAX, DBL_MAX, FLT_MAX);
11074   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
11075   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
11076
11077 #ifdef TEST_LDOUBLE
11078   // XXX Enable once gcc is fixed.
11079   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
11080 #endif
11081
11082   /* XXX We need the hexadecimal FP number representation here for further
11083      tests.  */
11084
11085   END (nextafter);
11086 }
11087
11088
11089 static void
11090 nexttoward_test (void)
11091 {
11092   START (nexttoward);
11093   TEST_ff_f (nexttoward, 0, 0, 0);
11094   TEST_ff_f (nexttoward, minus_zero, 0, 0);
11095   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
11096   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
11097
11098   TEST_ff_f (nexttoward, 9, 9, 9);
11099   TEST_ff_f (nexttoward, -9, -9, -9);
11100   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
11101   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
11102
11103   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
11104   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
11105   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
11106
11107 #ifdef TEST_FLOAT
11108   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
11109   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
11110   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
11111   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
11112   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
11113   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
11114   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
11115   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
11116   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
11117   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
11118   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
11119   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
11120   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
11121 # if LDBL_MANT_DIG >= 64
11122   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
11123   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
11124   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
11125   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
11126 # endif
11127 # if LDBL_MANT_DIG >= 106
11128   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
11129   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
11130   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
11131   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
11132 # endif
11133 # if LDBL_MANT_DIG >= 113
11134   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
11135   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
11136   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
11137   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
11138 # endif
11139 #endif
11140 #ifdef TEST_DOUBLE
11141   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
11142   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
11143   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
11144   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
11145   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
11146   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
11147   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
11148   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
11149   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
11150   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
11151   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
11152   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
11153   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
11154   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
11155 # if LDBL_MANT_DIG >= 64
11156   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
11157   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
11158   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
11159   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
11160 # endif
11161 # if LDBL_MANT_DIG >= 106
11162   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
11163   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
11164   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
11165   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
11166 # endif
11167 # if LDBL_MANT_DIG >= 113
11168   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
11169   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
11170   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
11171   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
11172 # endif
11173 #endif
11174
11175   END (nexttoward);
11176 }
11177
11178
11179 static void
11180 pow_test (void)
11181 {
11182
11183   errno = 0;
11184   FUNC(pow) (0, 0);
11185   if (errno == ENOSYS)
11186     /* Function not implemented.  */
11187     return;
11188
11189   START (pow);
11190
11191   TEST_ff_f (pow, 0, 0, 1);
11192   TEST_ff_f (pow, 0, minus_zero, 1);
11193   TEST_ff_f (pow, minus_zero, 0, 1);
11194   TEST_ff_f (pow, minus_zero, minus_zero, 1);
11195
11196   TEST_ff_f (pow, 10, 0, 1);
11197   TEST_ff_f (pow, 10, minus_zero, 1);
11198   TEST_ff_f (pow, -10, 0, 1);
11199   TEST_ff_f (pow, -10, minus_zero, 1);
11200
11201   TEST_ff_f (pow, qnan_value, 0, 1);
11202   TEST_ff_f (pow, qnan_value, minus_zero, 1);
11203
11204
11205 #ifndef TEST_INLINE
11206   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
11207   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
11208   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
11209   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
11210
11211   TEST_ff_f (pow, 0.9L, plus_infty, 0);
11212   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
11213   TEST_ff_f (pow, -0.9L, plus_infty, 0);
11214   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
11215
11216   TEST_ff_f (pow, 1.1L, minus_infty, 0);
11217   TEST_ff_f (pow, plus_infty, minus_infty, 0);
11218   TEST_ff_f (pow, -1.1L, minus_infty, 0);
11219   TEST_ff_f (pow, minus_infty, minus_infty, 0);
11220
11221   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
11222   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
11223   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
11224   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
11225
11226   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
11227   TEST_ff_f (pow, plus_infty, 1, plus_infty);
11228   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
11229   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
11230
11231   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
11232   TEST_ff_f (pow, plus_infty, -1, 0);
11233   TEST_ff_f (pow, plus_infty, -1e7L, 0);
11234   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
11235
11236   TEST_ff_f (pow, minus_infty, 1, minus_infty);
11237   TEST_ff_f (pow, minus_infty, 11, minus_infty);
11238   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
11239
11240   TEST_ff_f (pow, minus_infty, 2, plus_infty);
11241   TEST_ff_f (pow, minus_infty, 12, plus_infty);
11242   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
11243   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
11244   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
11245   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
11246   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
11247   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
11248
11249   TEST_ff_f (pow, minus_infty, -1, minus_zero);
11250   TEST_ff_f (pow, minus_infty, -11, minus_zero);
11251   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
11252
11253   TEST_ff_f (pow, minus_infty, -2, 0);
11254   TEST_ff_f (pow, minus_infty, -12, 0);
11255   TEST_ff_f (pow, minus_infty, -1002, 0);
11256   TEST_ff_f (pow, minus_infty, -0.1L, 0);
11257   TEST_ff_f (pow, minus_infty, -1.1L, 0);
11258   TEST_ff_f (pow, minus_infty, -11.1L, 0);
11259   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
11260   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
11261 #endif
11262
11263   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
11264   TEST_ff_f (pow, 0, qnan_value, qnan_value);
11265   TEST_ff_f (pow, 1, qnan_value, 1);
11266   TEST_ff_f (pow, -1, qnan_value, qnan_value);
11267   TEST_ff_f (pow, qnan_value, 1, qnan_value);
11268   TEST_ff_f (pow, qnan_value, -1, qnan_value);
11269
11270   /* pow (x, qNaN) == qNaN.  */
11271   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
11272   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
11273   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
11274   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
11275   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
11276
11277   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
11278   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
11279   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
11280   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
11281   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
11282   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
11283   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
11284   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
11285
11286   TEST_ff_f (pow, 1, plus_infty, 1);
11287   TEST_ff_f (pow, -1, plus_infty, 1);
11288   TEST_ff_f (pow, 1, minus_infty, 1);
11289   TEST_ff_f (pow, -1, minus_infty, 1);
11290   TEST_ff_f (pow, 1, 1, 1);
11291   TEST_ff_f (pow, 1, -1, 1);
11292   TEST_ff_f (pow, 1, 1.25, 1);
11293   TEST_ff_f (pow, 1, -1.25, 1);
11294   TEST_ff_f (pow, 1, 0x1p62L, 1);
11295   TEST_ff_f (pow, 1, 0x1p63L, 1);
11296   TEST_ff_f (pow, 1, 0x1p64L, 1);
11297   TEST_ff_f (pow, 1, 0x1p72L, 1);
11298   TEST_ff_f (pow, 1, min_subnorm_value, 1);
11299   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
11300
11301   /* pow (x, +-0) == 1.  */
11302   TEST_ff_f (pow, plus_infty, 0, 1);
11303   TEST_ff_f (pow, plus_infty, minus_zero, 1);
11304   TEST_ff_f (pow, minus_infty, 0, 1);
11305   TEST_ff_f (pow, minus_infty, minus_zero, 1);
11306   TEST_ff_f (pow, 32.75L, 0, 1);
11307   TEST_ff_f (pow, 32.75L, minus_zero, 1);
11308   TEST_ff_f (pow, -32.75L, 0, 1);
11309   TEST_ff_f (pow, -32.75L, minus_zero, 1);
11310   TEST_ff_f (pow, 0x1p72L, 0, 1);
11311   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
11312   TEST_ff_f (pow, 0x1p-72L, 0, 1);
11313   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
11314
11315   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11316   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11317   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11318   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11319   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11320   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11321   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11322   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11323
11324   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11325   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11326   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11327 #ifndef TEST_FLOAT
11328   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11329 #endif
11330 #ifdef TEST_LDOUBLE
11331 # if LDBL_MANT_DIG >= 64
11332   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11333 # endif
11334 # if LDBL_MANT_DIG >= 106
11335   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11336 # endif
11337 # if LDBL_MANT_DIG >= 113
11338   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11339 # endif
11340 #endif
11341   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11342   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11343   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11344   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11345 #ifndef TEST_FLOAT
11346   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11347   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11348 #endif
11349 #ifdef TEST_LDOUBLE
11350 # if LDBL_MANT_DIG >= 64
11351   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11352   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11353 # endif
11354 # if LDBL_MANT_DIG >= 106
11355   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11356   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11357 # endif
11358 # if LDBL_MANT_DIG >= 113
11359   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11360   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11361 # endif
11362 #endif
11363
11364   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11365   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11366   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11367   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11368   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11369   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11370   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11371   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11372   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11373   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11374   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11375   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11376
11377   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
11378   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
11379   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11380   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
11381
11382   TEST_ff_f (pow, 0, 1, 0);
11383   TEST_ff_f (pow, 0, 11, 0);
11384
11385   TEST_ff_f (pow, minus_zero, 1, minus_zero);
11386   TEST_ff_f (pow, minus_zero, 11, minus_zero);
11387
11388   TEST_ff_f (pow, 0, 2, 0);
11389   TEST_ff_f (pow, 0, 11.1L, 0);
11390
11391   TEST_ff_f (pow, minus_zero, 2, 0);
11392   TEST_ff_f (pow, minus_zero, 11.1L, 0);
11393   TEST_ff_f (pow, 0, plus_infty, 0);
11394   TEST_ff_f (pow, minus_zero, plus_infty, 0);
11395   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11396   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11397
11398 #ifndef TEST_INLINE
11399   /* pow (x, +inf) == +inf for |x| > 1.  */
11400   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
11401
11402   /* pow (x, +inf) == +0 for |x| < 1.  */
11403   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
11404
11405   /* pow (x, -inf) == +0 for |x| > 1.  */
11406   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
11407
11408   /* pow (x, -inf) == +inf for |x| < 1.  */
11409   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
11410 #endif
11411
11412   /* pow (+inf, y) == +inf for y > 0.  */
11413   TEST_ff_f (pow, plus_infty, 2, plus_infty);
11414   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
11415 #ifndef TEST_FLOAT
11416   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
11417 #endif
11418 #ifdef TEST_LDOUBLE
11419 # if LDBL_MANT_DIG >= 64
11420   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
11421 # endif
11422 # if LDBL_MANT_DIG >= 106
11423   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
11424 # endif
11425 # if LDBL_MANT_DIG >= 113
11426   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
11427 # endif
11428 #endif
11429   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
11430   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
11431   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
11432
11433   /* pow (+inf, y) == +0 for y < 0.  */
11434   TEST_ff_f (pow, plus_infty, -1, 0.0);
11435   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
11436 #ifndef TEST_FLOAT
11437   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
11438 #endif
11439 #ifdef TEST_LDOUBLE
11440 # if LDBL_MANT_DIG >= 64
11441   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
11442 # endif
11443 # if LDBL_MANT_DIG >= 106
11444   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11445 # endif
11446 # if LDBL_MANT_DIG >= 113
11447   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11448 # endif
11449 #endif
11450   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
11451   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
11452   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
11453
11454   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
11455   TEST_ff_f (pow, minus_infty, 27, minus_infty);
11456   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
11457   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
11458 #ifndef TEST_FLOAT
11459   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
11460   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
11461 #endif
11462 #ifdef TEST_LDOUBLE
11463 # if LDBL_MANT_DIG >= 64
11464   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
11465   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
11466 # endif
11467 # if LDBL_MANT_DIG >= 106
11468   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
11469   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
11470 # endif
11471 # if LDBL_MANT_DIG >= 113
11472   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
11473   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
11474 # endif
11475 #endif
11476
11477   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
11478   TEST_ff_f (pow, minus_infty, 28, plus_infty);
11479   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
11480   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
11481   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
11482
11483   /* pow (-inf, y) == -0 for y an odd integer < 0. */
11484   TEST_ff_f (pow, minus_infty, -3, minus_zero);
11485   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
11486   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
11487 #ifndef TEST_FLOAT
11488   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
11489   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
11490 #endif
11491 #ifdef TEST_LDOUBLE
11492 # if LDBL_MANT_DIG >= 64
11493   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
11494   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
11495 # endif
11496 # if LDBL_MANT_DIG >= 106
11497   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11498   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11499 # endif
11500 # if LDBL_MANT_DIG >= 113
11501   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11502   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11503 # endif
11504 #endif
11505   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
11506   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
11507   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
11508   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
11509   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
11510
11511   /* pow (+0, y) == +0 for y an odd integer > 0.  */
11512   TEST_ff_f (pow, 0.0, 27, 0.0);
11513   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
11514 #ifndef TEST_FLOAT
11515   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
11516 #endif
11517 #ifdef TEST_LDOUBLE
11518 # if LDBL_MANT_DIG >= 64
11519   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
11520 # endif
11521 # if LDBL_MANT_DIG >= 106
11522   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11523 # endif
11524 # if LDBL_MANT_DIG >= 113
11525   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11526 # endif
11527 #endif
11528
11529   /* pow (-0, y) == -0 for y an odd integer > 0.  */
11530   TEST_ff_f (pow, minus_zero, 27, minus_zero);
11531   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
11532   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
11533 #ifndef TEST_FLOAT
11534   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
11535   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
11536 #endif
11537 #ifdef TEST_LDOUBLE
11538 # if LDBL_MANT_DIG >= 64
11539   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
11540   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
11541 # endif
11542 # if LDBL_MANT_DIG >= 106
11543   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11544   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11545 # endif
11546 # if LDBL_MANT_DIG >= 113
11547   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11548   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11549 # endif
11550 #endif
11551
11552   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
11553   TEST_ff_f (pow, 0.0, 4, 0.0);
11554   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
11555   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
11556   TEST_ff_f (pow, 0.0, max_value, 0.0);
11557   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
11558
11559   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
11560   TEST_ff_f (pow, minus_zero, 4, 0.0);
11561   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
11562   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
11563   TEST_ff_f (pow, minus_zero, max_value, 0.0);
11564   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
11565
11566   TEST_ff_f (pow, 16, 0.25L, 2);
11567   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
11568   TEST_ff_f (pow, 2, 4, 16);
11569   TEST_ff_f (pow, 256, 8, 0x1p64L);
11570
11571   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
11572
11573 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
11574   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
11575 #endif
11576
11577   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
11578   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
11579 #ifndef TEST_FLOAT
11580   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
11581   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
11582 #endif
11583 #ifdef TEST_LDOUBLE
11584 # if LDBL_MANT_DIG >= 64
11585   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
11586   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
11587 # endif
11588 # if LDBL_MANT_DIG >= 106
11589   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11590   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11591 # endif
11592 # if LDBL_MANT_DIG >= 113
11593   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11594   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11595 # endif
11596 #endif
11597   TEST_ff_f (pow, -1.0, -max_value, 1.0);
11598
11599   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
11600   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
11601 #ifndef TEST_FLOAT
11602   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
11603   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
11604 #endif
11605 #ifdef TEST_LDOUBLE
11606 # if LDBL_MANT_DIG >= 64
11607   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
11608   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
11609 # endif
11610 # if LDBL_MANT_DIG >= 106
11611   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11612   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11613 # endif
11614 # if LDBL_MANT_DIG >= 113
11615   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11616   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11617 # endif
11618 #endif
11619   TEST_ff_f (pow, -1.0, max_value, 1.0);
11620
11621   TEST_ff_f (pow, -2.0, 126, 0x1p126);
11622   TEST_ff_f (pow, -2.0, 127, -0x1p127);
11623   /* Allow inexact results for float to be considered to underflow.  */
11624   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
11625   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
11626
11627   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11628   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11629 #ifndef TEST_FLOAT
11630   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11631   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11632 #endif
11633 #ifdef TEST_LDOUBLE
11634 # if LDBL_MANT_DIG >= 64
11635   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11636   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11637 # endif
11638 # if LDBL_MANT_DIG >= 106
11639   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11640   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11641 # endif
11642 # if LDBL_MANT_DIG >= 113
11643   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11644   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11645 # endif
11646 #endif
11647   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11648
11649   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11650   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11651 #ifndef TEST_FLOAT
11652   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11653   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11654 #endif
11655 #ifdef TEST_LDOUBLE
11656 # if LDBL_MANT_DIG >= 64
11657   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11658   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11659 # endif
11660 # if LDBL_MANT_DIG >= 106
11661   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11662   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11663 # endif
11664 # if LDBL_MANT_DIG >= 113
11665   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11666   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11667 # endif
11668 #endif
11669   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
11670
11671   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
11672   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
11673   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11674   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
11675   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
11676   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
11677   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
11678
11679   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11680   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11681 #ifndef TEST_FLOAT
11682   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11683   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11684 #endif
11685 #ifdef TEST_LDOUBLE
11686 # if LDBL_MANT_DIG >= 64
11687   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11688   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11689 # endif
11690 # if LDBL_MANT_DIG >= 106
11691   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11692   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11693 # endif
11694 # if LDBL_MANT_DIG >= 113
11695   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11696   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11697 # endif
11698 #endif
11699   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11700
11701   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11702   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11703 #ifndef TEST_FLOAT
11704   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11705   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11706 #endif
11707 #ifdef TEST_LDOUBLE
11708 # if LDBL_MANT_DIG >= 64
11709   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11710   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11711 # endif
11712 # if LDBL_MANT_DIG >= 106
11713   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11714   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11715 # endif
11716 # if LDBL_MANT_DIG >= 113
11717   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11718   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11719 # endif
11720 #endif
11721   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11722
11723   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
11724   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
11725   TEST_ff_f (pow, -0.5, -126, 0x1p126);
11726   TEST_ff_f (pow, -0.5, -127, -0x1p127);
11727
11728   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11729   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11730 #ifndef TEST_FLOAT
11731   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11732   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11733 #endif
11734 #ifdef TEST_LDOUBLE
11735 # if LDBL_MANT_DIG >= 64
11736   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11737   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11738 # endif
11739 # if LDBL_MANT_DIG >= 106
11740   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11741   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11742 # endif
11743 # if LDBL_MANT_DIG >= 113
11744   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11745   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11746 # endif
11747 #endif
11748   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11749
11750   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11751   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11752 #ifndef TEST_FLOAT
11753   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11754   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11755 #endif
11756 #ifdef TEST_LDOUBLE
11757 # if LDBL_MANT_DIG >= 64
11758   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11759   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11760 # endif
11761 # if LDBL_MANT_DIG >= 106
11762   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11763   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11764 # endif
11765 # if LDBL_MANT_DIG >= 113
11766   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11767   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11768 # endif
11769 #endif
11770   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11771
11772   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
11773   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
11774   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11775   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
11776   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
11777   /* Allow inexact results to be considered to underflow.  */
11778   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
11779   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
11780   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
11781
11782   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11783   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11784 #ifndef TEST_FLOAT
11785   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11786   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11787 #endif
11788 #ifdef TEST_LDOUBLE
11789 # if LDBL_MANT_DIG >= 64
11790   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11791   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11792 # endif
11793 # if LDBL_MANT_DIG >= 106
11794   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11795   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11796 # endif
11797 # if LDBL_MANT_DIG >= 113
11798   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11799   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11800 # endif
11801 #endif
11802   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11803
11804   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11805   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11806 #ifndef TEST_FLOAT
11807   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11808   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11809 #endif
11810 #ifdef TEST_LDOUBLE
11811 # if LDBL_MANT_DIG >= 64
11812   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11813   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11814 # endif
11815 # if LDBL_MANT_DIG >= 106
11816   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11817   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11818 # endif
11819 # if LDBL_MANT_DIG >= 113
11820   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11821   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11822 # endif
11823 #endif
11824   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11825
11826   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
11827   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
11828   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
11829   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
11830   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
11831   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
11832   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
11833   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
11834   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
11835   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
11836   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
11837   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
11838   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
11839   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
11840   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
11841
11842 #if !defined TEST_FLOAT
11843   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
11844   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
11845   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
11846   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
11847 #endif
11848
11849 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
11850   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
11851   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
11852   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
11853   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
11854 #endif
11855
11856 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
11857   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
11858   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
11859   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
11860   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
11861 #endif
11862
11863 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11864   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
11865   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
11866   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
11867   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
11868   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
11869   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
11870   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
11871   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
11872   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
11873   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
11874   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
11875   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
11876   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
11877 #endif
11878
11879   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
11880   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
11881   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
11882   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
11883   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
11884   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
11885   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
11886   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
11887
11888   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
11889
11890   END (pow);
11891 }
11892
11893
11894 static void
11895 pow_test_tonearest (void)
11896 {
11897   int save_round_mode;
11898   errno = 0;
11899   FUNC(pow) (0, 0);
11900   if (errno == ENOSYS)
11901     /* Function not implemented.  */
11902     return;
11903
11904   START (pow_tonearest);
11905
11906   save_round_mode = fegetround ();
11907
11908   if (!fesetround (FE_TONEAREST))
11909     {
11910       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11911       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11912     }
11913
11914   fesetround (save_round_mode);
11915
11916   END (pow_tonearest);
11917 }
11918
11919
11920 static void
11921 pow_test_towardzero (void)
11922 {
11923   int save_round_mode;
11924   errno = 0;
11925   FUNC(pow) (0, 0);
11926   if (errno == ENOSYS)
11927     /* Function not implemented.  */
11928     return;
11929
11930   START (pow_towardzero);
11931
11932   save_round_mode = fegetround ();
11933
11934   if (!fesetround (FE_TOWARDZERO))
11935     {
11936       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11937       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11938     }
11939
11940   fesetround (save_round_mode);
11941
11942   END (pow_towardzero);
11943 }
11944
11945
11946 static void
11947 pow_test_downward (void)
11948 {
11949   int save_round_mode;
11950   errno = 0;
11951   FUNC(pow) (0, 0);
11952   if (errno == ENOSYS)
11953     /* Function not implemented.  */
11954     return;
11955
11956   START (pow_downward);
11957
11958   save_round_mode = fegetround ();
11959
11960   if (!fesetround (FE_DOWNWARD))
11961     {
11962       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11963       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11964     }
11965
11966   fesetround (save_round_mode);
11967
11968   END (pow_downward);
11969 }
11970
11971
11972 static void
11973 pow_test_upward (void)
11974 {
11975   int save_round_mode;
11976   errno = 0;
11977   FUNC(pow) (0, 0);
11978   if (errno == ENOSYS)
11979     /* Function not implemented.  */
11980     return;
11981
11982   START (pow_upward);
11983
11984   save_round_mode = fegetround ();
11985
11986   if (!fesetround (FE_UPWARD))
11987     {
11988       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11989       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11990     }
11991
11992   fesetround (save_round_mode);
11993
11994   END (pow_upward);
11995 }
11996
11997
11998 static void
11999 remainder_test (void)
12000 {
12001   errno = 0;
12002   FUNC(remainder) (1.625, 1.0);
12003   if (errno == ENOSYS)
12004     /* Function not implemented.  */
12005     return;
12006
12007   START (remainder);
12008
12009   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12010   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12011   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12012   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12013   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12014   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12015   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12016   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12017   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12018   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12019   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, ERRNO_UNCHANGED);
12020   TEST_ff_f (remainder, 0, qnan_value, qnan_value, ERRNO_UNCHANGED);
12021   TEST_ff_f (remainder, qnan_value, 0, qnan_value, ERRNO_UNCHANGED);
12022
12023   TEST_ff_f (remainder, 7.0, plus_infty, 7.0, ERRNO_UNCHANGED);
12024   TEST_ff_f (remainder, 7.0, minus_infty, 7.0, ERRNO_UNCHANGED);
12025
12026   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
12027   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
12028   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
12029   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
12030   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
12031   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
12032
12033   END (remainder);
12034 }
12035
12036 static void
12037 remquo_test (void)
12038 {
12039   /* x is needed.  */
12040   int x;
12041
12042   errno = 0;
12043   FUNC(remquo) (1.625, 1.0, &x);
12044   if (errno == ENOSYS)
12045     /* Function not implemented.  */
12046     return;
12047
12048   START (remquo);
12049
12050   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
12051   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
12052   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12053   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12054   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
12055
12056   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
12057   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
12058   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
12059   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
12060
12061   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
12062   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
12063
12064   END (remquo);
12065 }
12066
12067 static void
12068 rint_test (void)
12069 {
12070   /* TODO: missing qNaN tests.  */
12071
12072   START (rint);
12073
12074   TEST_f_f (rint, 0.0, 0.0);
12075   TEST_f_f (rint, minus_zero, minus_zero);
12076   TEST_f_f (rint, plus_infty, plus_infty);
12077   TEST_f_f (rint, minus_infty, minus_infty);
12078
12079   /* Default rounding mode is round to even.  */
12080   TEST_f_f (rint, 0.5, 0.0);
12081   TEST_f_f (rint, 1.5, 2.0);
12082   TEST_f_f (rint, 2.5, 2.0);
12083   TEST_f_f (rint, 3.5, 4.0);
12084   TEST_f_f (rint, 4.5, 4.0);
12085   TEST_f_f (rint, -0.5, -0.0);
12086   TEST_f_f (rint, -1.5, -2.0);
12087   TEST_f_f (rint, -2.5, -2.0);
12088   TEST_f_f (rint, -3.5, -4.0);
12089   TEST_f_f (rint, -4.5, -4.0);
12090   TEST_f_f (rint, 0.1, 0.0);
12091   TEST_f_f (rint, 0.25, 0.0);
12092   TEST_f_f (rint, 0.625, 1.0);
12093   TEST_f_f (rint, -0.1, -0.0);
12094   TEST_f_f (rint, -0.25, -0.0);
12095   TEST_f_f (rint, -0.625, -1.0);
12096   TEST_f_f (rint, 262144.75, 262145.0);
12097   TEST_f_f (rint, 262142.75, 262143.0);
12098   TEST_f_f (rint, 524286.75, 524287.0);
12099   TEST_f_f (rint, 524288.75, 524289.0);
12100   TEST_f_f (rint, 1048576.75, 1048577.0);
12101   TEST_f_f (rint, 2097152.75, 2097153.0);
12102   TEST_f_f (rint, -1048576.75, -1048577.0);
12103   TEST_f_f (rint, -2097152.75, -2097153.0);
12104 #ifndef TEST_FLOAT
12105   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12106   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12107   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12108   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12109   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12110   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12111   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12112   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12113   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12114   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12115 #endif
12116 #ifdef TEST_LDOUBLE
12117   /* The result can only be represented in long double.  */
12118   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12119   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12120   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12121   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12122   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12123
12124 # if LDBL_MANT_DIG > 100
12125   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12126   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12127   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12128 # endif
12129
12130   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12131   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12132   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12133   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12134   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12135
12136 # if LDBL_MANT_DIG > 100
12137   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12138   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12139   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12140
12141   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12142   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12143   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12144   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12145   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12146   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12147
12148   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12149   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12150   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12151   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12152   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12153   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12154 # endif
12155
12156   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
12157   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
12158   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
12159   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
12160   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
12161
12162   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
12163   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
12164   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
12165   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
12166   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
12167
12168   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
12169   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
12170   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
12171   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
12172   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
12173
12174   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
12175   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
12176   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
12177   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
12178   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
12179
12180   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12181   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12182   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12183   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12184   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12185 #endif
12186
12187   END (rint);
12188 }
12189
12190 static void
12191 rint_test_tonearest (void)
12192 {
12193   int save_round_mode;
12194   START (rint_tonearest);
12195
12196   save_round_mode = fegetround ();
12197
12198   if (!fesetround (FE_TONEAREST))
12199     {
12200       TEST_f_f (rint, 2.0, 2.0);
12201       TEST_f_f (rint, 1.5, 2.0);
12202       TEST_f_f (rint, 1.0, 1.0);
12203       TEST_f_f (rint, 0.5, 0.0);
12204       TEST_f_f (rint, 0.0, 0.0);
12205       TEST_f_f (rint, minus_zero, minus_zero);
12206       TEST_f_f (rint, -0.5, -0.0);
12207       TEST_f_f (rint, -1.0, -1.0);
12208       TEST_f_f (rint, -1.5, -2.0);
12209       TEST_f_f (rint, -2.0, -2.0);
12210       TEST_f_f (rint, 0.1, 0.0);
12211       TEST_f_f (rint, 0.25, 0.0);
12212       TEST_f_f (rint, 0.625, 1.0);
12213       TEST_f_f (rint, -0.1, -0.0);
12214       TEST_f_f (rint, -0.25, -0.0);
12215       TEST_f_f (rint, -0.625, -1.0);
12216       TEST_f_f (rint, 1048576.75, 1048577.0);
12217       TEST_f_f (rint, 2097152.75, 2097153.0);
12218       TEST_f_f (rint, -1048576.75, -1048577.0);
12219       TEST_f_f (rint, -2097152.75, -2097153.0);
12220 #ifndef TEST_FLOAT
12221       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12222       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12223       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12224       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12225       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12226       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12227       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12228       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12229       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12230       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12231 #endif
12232 #ifdef TEST_LDOUBLE
12233       /* The result can only be represented in long double.  */
12234       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12235       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12236       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12237       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12238       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12239 # if LDBL_MANT_DIG > 100
12240       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12241       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12242       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12243 # endif
12244       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12245       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12246       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12247       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12248       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12249 # if LDBL_MANT_DIG > 100
12250       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12251       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12252       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12253
12254       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12255       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12256       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12257       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12258       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12259       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12260
12261       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12262       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12263       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12264       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12265       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12266       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12267 # endif
12268 #endif
12269     }
12270
12271   fesetround (save_round_mode);
12272
12273   END (rint_tonearest);
12274 }
12275
12276 static void
12277 rint_test_towardzero (void)
12278 {
12279   int save_round_mode;
12280   START (rint_towardzero);
12281
12282   save_round_mode = fegetround ();
12283
12284   if (!fesetround (FE_TOWARDZERO))
12285     {
12286       TEST_f_f (rint, 2.0, 2.0);
12287       TEST_f_f (rint, 1.5, 1.0);
12288       TEST_f_f (rint, 1.0, 1.0);
12289       TEST_f_f (rint, 0.5, 0.0);
12290       TEST_f_f (rint, 0.0, 0.0);
12291       TEST_f_f (rint, minus_zero, minus_zero);
12292       TEST_f_f (rint, -0.5, -0.0);
12293       TEST_f_f (rint, -1.0, -1.0);
12294       TEST_f_f (rint, -1.5, -1.0);
12295       TEST_f_f (rint, -2.0, -2.0);
12296       TEST_f_f (rint, 0.1, 0.0);
12297       TEST_f_f (rint, 0.25, 0.0);
12298       TEST_f_f (rint, 0.625, 0.0);
12299       TEST_f_f (rint, -0.1, -0.0);
12300       TEST_f_f (rint, -0.25, -0.0);
12301       TEST_f_f (rint, -0.625, -0.0);
12302       TEST_f_f (rint, 1048576.75, 1048576.0);
12303       TEST_f_f (rint, 2097152.75, 2097152.0);
12304       TEST_f_f (rint, -1048576.75, -1048576.0);
12305       TEST_f_f (rint, -2097152.75, -2097152.0);
12306 #ifndef TEST_FLOAT
12307       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12308       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12309       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12310       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12311       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12312       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12313       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12314       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12315       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12316       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12317 #endif
12318 #ifdef TEST_LDOUBLE
12319       /* The result can only be represented in long double.  */
12320       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12321       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12322       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12323       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12324       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12325 # if LDBL_MANT_DIG > 100
12326       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12327       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12328       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12329 # endif
12330       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12331       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12332       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12333       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12334       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12335 # if LDBL_MANT_DIG > 100
12336       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12337       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12338       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12339
12340       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12341       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12342       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12343       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12344       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12345       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12346
12347       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12348       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12349       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12350       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12351       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12352       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12353 # endif
12354 #endif
12355     }
12356
12357   fesetround (save_round_mode);
12358
12359   END (rint_towardzero);
12360 }
12361
12362 static void
12363 rint_test_downward (void)
12364 {
12365   int save_round_mode;
12366   START (rint_downward);
12367
12368   save_round_mode = fegetround ();
12369
12370   if (!fesetround (FE_DOWNWARD))
12371     {
12372       TEST_f_f (rint, 2.0, 2.0);
12373       TEST_f_f (rint, 1.5, 1.0);
12374       TEST_f_f (rint, 1.0, 1.0);
12375       TEST_f_f (rint, 0.5, 0.0);
12376       TEST_f_f (rint, 0.0, 0.0);
12377       TEST_f_f (rint, minus_zero, minus_zero);
12378       TEST_f_f (rint, -0.5, -1.0);
12379       TEST_f_f (rint, -1.0, -1.0);
12380       TEST_f_f (rint, -1.5, -2.0);
12381       TEST_f_f (rint, -2.0, -2.0);
12382       TEST_f_f (rint, 0.1, 0.0);
12383       TEST_f_f (rint, 0.25, 0.0);
12384       TEST_f_f (rint, 0.625, 0.0);
12385       TEST_f_f (rint, -0.1, -1.0);
12386       TEST_f_f (rint, -0.25, -1.0);
12387       TEST_f_f (rint, -0.625, -1.0);
12388       TEST_f_f (rint, 1048576.75, 1048576.0);
12389       TEST_f_f (rint, 2097152.75, 2097152.0);
12390       TEST_f_f (rint, -1048576.75, -1048577.0);
12391       TEST_f_f (rint, -2097152.75, -2097153.0);
12392 #ifndef TEST_FLOAT
12393       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12394       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12395       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12396       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12397       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12398       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12399       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12400       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12401       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12402       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12403 #endif
12404 #ifdef TEST_LDOUBLE
12405       /* The result can only be represented in long double.  */
12406       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12407       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12408       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12409       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12410       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12411 # if LDBL_MANT_DIG > 100
12412       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12413       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12414       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12415 # endif
12416       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12417       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
12418       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
12419       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12420       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12421 # if LDBL_MANT_DIG > 100
12422       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12423       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12424       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12425
12426       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12427       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12428       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12429       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12430       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12431       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12432
12433       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
12434       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
12435       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
12436       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12437       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12438       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12439 # endif
12440 #endif
12441     }
12442
12443   fesetround (save_round_mode);
12444
12445   END (rint_downward);
12446 }
12447
12448 static void
12449 rint_test_upward (void)
12450 {
12451   int save_round_mode;
12452   START (rint_upward);
12453
12454   save_round_mode = fegetround ();
12455
12456   if (!fesetround (FE_UPWARD))
12457     {
12458       TEST_f_f (rint, 2.0, 2.0);
12459       TEST_f_f (rint, 1.5, 2.0);
12460       TEST_f_f (rint, 1.0, 1.0);
12461       TEST_f_f (rint, 0.5, 1.0);
12462       TEST_f_f (rint, 0.0, 0.0);
12463       TEST_f_f (rint, minus_zero, minus_zero);
12464       TEST_f_f (rint, -0.5, -0.0);
12465       TEST_f_f (rint, -1.0, -1.0);
12466       TEST_f_f (rint, -1.5, -1.0);
12467       TEST_f_f (rint, -2.0, -2.0);
12468       TEST_f_f (rint, 0.1, 1.0);
12469       TEST_f_f (rint, 0.25, 1.0);
12470       TEST_f_f (rint, 0.625, 1.0);
12471       TEST_f_f (rint, -0.1, -0.0);
12472       TEST_f_f (rint, -0.25, -0.0);
12473       TEST_f_f (rint, -0.625, -0.0);
12474       TEST_f_f (rint, 1048576.75, 1048577.0);
12475       TEST_f_f (rint, 2097152.75, 2097153.0);
12476       TEST_f_f (rint, -1048576.75, -1048576.0);
12477       TEST_f_f (rint, -2097152.75, -2097152.0);
12478 #ifndef TEST_FLOAT
12479       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12480       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12481       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12482       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12483       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12484       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12485       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12486       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12487       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12488       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12489 #endif
12490 #ifdef TEST_LDOUBLE
12491       /* The result can only be represented in long double.  */
12492       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12493       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
12494       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
12495       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12496       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12497 # if LDBL_MANT_DIG > 100
12498       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12499       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12500       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12501 # endif
12502       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12503       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12504       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12505       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12506       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12507 # if LDBL_MANT_DIG > 100
12508       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12509       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12510       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12511
12512       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
12513       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
12514       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
12515       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12516       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12517       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12518
12519       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12520       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12521       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12522       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12523       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12524       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12525 # endif
12526 #endif
12527     }
12528
12529   fesetround (save_round_mode);
12530
12531   END (rint_upward);
12532 }
12533
12534 static void
12535 round_test (void)
12536 {
12537   /* TODO: missing +/-Inf as well as qNaN tests.  */
12538
12539   START (round);
12540
12541   TEST_f_f (round, 0, 0);
12542   TEST_f_f (round, minus_zero, minus_zero);
12543   TEST_f_f (round, 0.2L, 0.0);
12544   TEST_f_f (round, -0.2L, minus_zero);
12545   TEST_f_f (round, 0.5, 1.0);
12546   TEST_f_f (round, -0.5, -1.0);
12547   TEST_f_f (round, 0.8L, 1.0);
12548   TEST_f_f (round, -0.8L, -1.0);
12549   TEST_f_f (round, 1.5, 2.0);
12550   TEST_f_f (round, -1.5, -2.0);
12551   TEST_f_f (round, 0.1, 0.0);
12552   TEST_f_f (round, 0.25, 0.0);
12553   TEST_f_f (round, 0.625, 1.0);
12554   TEST_f_f (round, -0.1, -0.0);
12555   TEST_f_f (round, -0.25, -0.0);
12556   TEST_f_f (round, -0.625, -1.0);
12557   TEST_f_f (round, 2097152.5, 2097153);
12558   TEST_f_f (round, -2097152.5, -2097153);
12559
12560 #ifdef TEST_LDOUBLE
12561   /* The result can only be represented in long double.  */
12562   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
12563   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
12564   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
12565   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
12566   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
12567 # if LDBL_MANT_DIG > 100
12568   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
12569   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
12570   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
12571 # endif
12572
12573   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
12574   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
12575   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
12576   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
12577   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
12578 # if LDBL_MANT_DIG > 100
12579   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
12580   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
12581   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
12582 # endif
12583
12584   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
12585   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
12586   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
12587   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
12588   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
12589
12590   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
12591   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
12592   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
12593   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
12594   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
12595
12596 # if LDBL_MANT_DIG > 100
12597   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
12598   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
12599   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
12600   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
12601   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
12602   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
12603
12604   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
12605   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
12606   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
12607   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
12608   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
12609   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
12610 # endif
12611
12612   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
12613   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
12614   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
12615   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
12616   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
12617
12618   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
12619   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
12620   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
12621   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
12622   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
12623
12624   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12625   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12626   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
12627   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12628   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12629 #endif
12630
12631   END (round);
12632 }
12633
12634
12635 static void
12636 scalb_test (void)
12637 {
12638
12639   START (scalb);
12640
12641   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
12642   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
12643
12644   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12645   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12646
12647   TEST_ff_f (scalb, 1, 0, 1);
12648   TEST_ff_f (scalb, -1, 0, -1);
12649
12650   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
12651   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
12652
12653   TEST_ff_f (scalb, 0, 2, 0);
12654   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
12655   TEST_ff_f (scalb, 0, 0, 0);
12656   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
12657   TEST_ff_f (scalb, 0, -1, 0);
12658   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
12659   TEST_ff_f (scalb, 0, minus_infty, 0);
12660   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
12661
12662   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
12663   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
12664   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
12665   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
12666   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
12667   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
12668
12669   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
12670   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
12671
12672   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
12673   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
12674   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
12675   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
12676
12677   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12678   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12679
12680   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
12681   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12682   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
12683   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12684   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
12685   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
12686   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
12687
12688   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
12689   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
12690
12691   END (scalb);
12692 }
12693
12694
12695 static void
12696 scalbn_test (void)
12697 {
12698
12699   START (scalbn);
12700
12701   TEST_fi_f (scalbn, 0, 0, 0);
12702   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
12703
12704   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
12705   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
12706   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
12707
12708   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
12709   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
12710
12711   TEST_fi_f (scalbn, 1, 0L, 1);
12712
12713   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12714   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12715   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12716   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12717   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12718   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12719   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12720   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12721
12722   END (scalbn);
12723 }
12724
12725
12726 static void
12727 scalbln_test (void)
12728 {
12729
12730   START (scalbln);
12731
12732   TEST_fl_f (scalbln, 0, 0, 0);
12733   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
12734
12735   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
12736   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
12737   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
12738
12739   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
12740   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
12741
12742   TEST_fl_f (scalbln, 1, 0L, 1);
12743
12744   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12745   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12746   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12747   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12748   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12749   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12750   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12751   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12752
12753   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12754   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12755   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12756   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12757   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12758   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12759   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12760   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12761
12762 #if LONG_MAX >= 0x100000000
12763   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12764   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12765   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12766   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12767   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12768   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12769   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12770   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12771 #endif
12772
12773   END (scalbn);
12774 }
12775
12776
12777 static void
12778 signbit_test (void)
12779 {
12780   /* TODO: missing qNaN tests.  */
12781
12782   START (signbit);
12783
12784   TEST_f_b (signbit, 0, 0);
12785   TEST_f_b (signbit, minus_zero, 1);
12786   TEST_f_b (signbit, plus_infty, 0);
12787   TEST_f_b (signbit, minus_infty, 1);
12788
12789   /* signbit (x) != 0 for x < 0.  */
12790   TEST_f_b (signbit, -1, 1);
12791   /* signbit (x) == 0 for x >= 0.  */
12792   TEST_f_b (signbit, 1, 0);
12793
12794   END (signbit);
12795 }
12796
12797
12798 static void
12799 sin_test (void)
12800 {
12801   errno = 0;
12802   FUNC(sin) (0);
12803   if (errno == ENOSYS)
12804     /* Function not implemented.  */
12805     return;
12806
12807   START (sin);
12808
12809   TEST_f_f (sin, 0, 0);
12810   TEST_f_f (sin, minus_zero, minus_zero);
12811   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12812   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12813   TEST_f_f (sin, qnan_value, qnan_value, ERRNO_UNCHANGED);
12814
12815   TEST_f_f (sin, M_PI_6l, 0.5);
12816   TEST_f_f (sin, -M_PI_6l, -0.5);
12817   TEST_f_f (sin, M_PI_2l, 1);
12818   TEST_f_f (sin, -M_PI_2l, -1);
12819   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
12820
12821   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
12822   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
12823
12824   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
12825
12826 #ifdef TEST_DOUBLE
12827   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
12828   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
12829 #endif
12830
12831 #ifndef TEST_FLOAT
12832   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
12833   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
12834 #endif
12835
12836 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12837   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
12838 #endif
12839
12840   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
12841   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
12842   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
12843   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
12844   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
12845   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
12846
12847   END (sin);
12848
12849 }
12850
12851
12852 static void
12853 sin_test_tonearest (void)
12854 {
12855   int save_round_mode;
12856   errno = 0;
12857   FUNC(sin) (0);
12858   if (errno == ENOSYS)
12859     /* Function not implemented.  */
12860     return;
12861
12862   START (sin_tonearest);
12863
12864   save_round_mode = fegetround ();
12865
12866   if (!fesetround (FE_TONEAREST))
12867     {
12868       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12869       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12870       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12871       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12872       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12873       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12874       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12875       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12876       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12877       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12878     }
12879
12880   fesetround (save_round_mode);
12881
12882   END (sin_tonearest);
12883 }
12884
12885
12886 static void
12887 sin_test_towardzero (void)
12888 {
12889   int save_round_mode;
12890   errno = 0;
12891   FUNC(sin) (0);
12892   if (errno == ENOSYS)
12893     /* Function not implemented.  */
12894     return;
12895
12896   START (sin_towardzero);
12897
12898   save_round_mode = fegetround ();
12899
12900   if (!fesetround (FE_TOWARDZERO))
12901     {
12902       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12903       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12904       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12905       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12906       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12907       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12908       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12909       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12910       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12911       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12912     }
12913
12914   fesetround (save_round_mode);
12915
12916   END (sin_towardzero);
12917 }
12918
12919
12920 static void
12921 sin_test_downward (void)
12922 {
12923   int save_round_mode;
12924   errno = 0;
12925   FUNC(sin) (0);
12926   if (errno == ENOSYS)
12927     /* Function not implemented.  */
12928     return;
12929
12930   START (sin_downward);
12931
12932   save_round_mode = fegetround ();
12933
12934   if (!fesetround (FE_DOWNWARD))
12935     {
12936       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12937       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12938       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12939       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12940       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12941       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12942       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12943       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12944       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12945       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12946     }
12947
12948   fesetround (save_round_mode);
12949
12950   END (sin_downward);
12951 }
12952
12953
12954 static void
12955 sin_test_upward (void)
12956 {
12957   int save_round_mode;
12958   errno = 0;
12959   FUNC(sin) (0);
12960   if (errno == ENOSYS)
12961     /* Function not implemented.  */
12962     return;
12963
12964   START (sin_upward);
12965
12966   save_round_mode = fegetround ();
12967
12968   if (!fesetround (FE_UPWARD))
12969     {
12970       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12971       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12972       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12973       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12974       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12975       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12976       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12977       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12978       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12979       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12980     }
12981
12982   fesetround (save_round_mode);
12983
12984   END (sin_upward);
12985 }
12986
12987
12988 static void
12989 sincos_test (void)
12990 {
12991   FLOAT sin_res, cos_res;
12992
12993   errno = 0;
12994   FUNC(sincos) (0, &sin_res, &cos_res);
12995   if (errno == ENOSYS)
12996     /* Function not implemented.  */
12997     return;
12998
12999   START (sincos);
13000
13001   /* sincos is treated differently because it returns void.  */
13002   TEST_extra (sincos, 0, 0, 1);
13003
13004   TEST_extra (sincos, minus_zero, minus_zero, 1);
13005   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13006   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13007   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
13008
13009   /* The value of M_PI_2l is never exactly PI/2, and therefore the
13010      answer is never exactly zero. The answer is equal to the error
13011      in rounding PI/2 for the type used.  Thus the answer is unique
13012      to each type.  */
13013 #ifdef TEST_FLOAT
13014   /* 32-bit float.  */
13015   TEST_extra (sincos, M_PI_2l, 1, -0x1.777a5cp-25L);
13016 #endif
13017 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
13018   /* 64-bit double or 64-bit long double.  */
13019   TEST_extra (sincos, M_PI_2l, 1, 0x1.1a62633145c07p-54L);
13020 #endif
13021 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
13022   /* 96-bit long double.  */
13023   TEST_extra (sincos, M_PI_2l, 1, -0xe.ce675d1fc8f8cbbp-69L);
13024 #endif
13025 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
13026   /* 128-bit IBM long double.  */
13027   TEST_extra (sincos, M_PI_2l, 1, 0x1.c1cd129024e088a67cc74020bcp-107L);
13028 #endif
13029 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
13030   /* 128-bit long double.  */
13031   TEST_extra (sincos, M_PI_2l, 1, 0x1.cd129024e088a67cc74020bbea64p-115L);
13032 #endif
13033
13034   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
13035   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
13036   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
13037
13038   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13039   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13040
13041 #ifdef TEST_DOUBLE
13042   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
13043 #endif
13044
13045 #ifndef TEST_FLOAT
13046   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
13047   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
13048 #endif
13049
13050 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13051   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
13052 #endif
13053
13054   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
13055   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
13056   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
13057   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
13058   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
13059   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
13060
13061   END (sincos);
13062 }
13063
13064 static void
13065 sinh_test (void)
13066 {
13067   errno = 0;
13068   FUNC(sinh) (0.7L);
13069   if (errno == ENOSYS)
13070     /* Function not implemented.  */
13071     return;
13072
13073   START (sinh);
13074   TEST_f_f (sinh, 0, 0);
13075   TEST_f_f (sinh, minus_zero, minus_zero);
13076
13077 #ifndef TEST_INLINE
13078   TEST_f_f (sinh, plus_infty, plus_infty);
13079   TEST_f_f (sinh, minus_infty, minus_infty);
13080 #endif
13081   TEST_f_f (sinh, qnan_value, qnan_value);
13082
13083   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
13084   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
13085
13086   END (sinh);
13087 }
13088
13089
13090 static void
13091 sinh_test_tonearest (void)
13092 {
13093   int save_round_mode;
13094   errno = 0;
13095   FUNC(sinh) (0);
13096   if (errno == ENOSYS)
13097     /* Function not implemented.  */
13098     return;
13099
13100   START (sinh_tonearest);
13101
13102   save_round_mode = fegetround ();
13103
13104   if (!fesetround (FE_TONEAREST))
13105     {
13106       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13107       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13108       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13109     }
13110
13111   fesetround (save_round_mode);
13112
13113   END (sinh_tonearest);
13114 }
13115
13116
13117 static void
13118 sinh_test_towardzero (void)
13119 {
13120   int save_round_mode;
13121   errno = 0;
13122   FUNC(sinh) (0);
13123   if (errno == ENOSYS)
13124     /* Function not implemented.  */
13125     return;
13126
13127   START (sinh_towardzero);
13128
13129   save_round_mode = fegetround ();
13130
13131   if (!fesetround (FE_TOWARDZERO))
13132     {
13133       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13134       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13135       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13136     }
13137
13138   fesetround (save_round_mode);
13139
13140   END (sinh_towardzero);
13141 }
13142
13143
13144 static void
13145 sinh_test_downward (void)
13146 {
13147   int save_round_mode;
13148   errno = 0;
13149   FUNC(sinh) (0);
13150   if (errno == ENOSYS)
13151     /* Function not implemented.  */
13152     return;
13153
13154   START (sinh_downward);
13155
13156   save_round_mode = fegetround ();
13157
13158   if (!fesetround (FE_DOWNWARD))
13159     {
13160       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13161       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13162       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13163     }
13164
13165   fesetround (save_round_mode);
13166
13167   END (sinh_downward);
13168 }
13169
13170
13171 static void
13172 sinh_test_upward (void)
13173 {
13174   int save_round_mode;
13175   errno = 0;
13176   FUNC(sinh) (0);
13177   if (errno == ENOSYS)
13178     /* Function not implemented.  */
13179     return;
13180
13181   START (sinh_upward);
13182
13183   save_round_mode = fegetround ();
13184
13185   if (!fesetround (FE_UPWARD))
13186     {
13187       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13188       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13189       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13190     }
13191
13192   fesetround (save_round_mode);
13193
13194   END (sinh_upward);
13195 }
13196
13197
13198 static void
13199 sqrt_test (void)
13200 {
13201   errno = 0;
13202   FUNC(sqrt) (1);
13203   if (errno == ENOSYS)
13204     /* Function not implemented.  */
13205     return;
13206
13207   START (sqrt);
13208
13209   TEST_f_f (sqrt, 0, 0);
13210   TEST_f_f (sqrt, qnan_value, qnan_value);
13211   TEST_f_f (sqrt, plus_infty, plus_infty);
13212
13213   TEST_f_f (sqrt, minus_zero, minus_zero);
13214
13215   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
13216   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
13217   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
13218   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
13219
13220   TEST_f_f (sqrt, 2209, 47);
13221   TEST_f_f (sqrt, 4, 2);
13222   TEST_f_f (sqrt, 2, M_SQRT2l);
13223   TEST_f_f (sqrt, 0.25, 0.5);
13224   TEST_f_f (sqrt, 6642.25, 81.5);
13225   TEST_f_f (sqrt, 15190.5625L, 123.25L);
13226   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
13227
13228   END (sqrt);
13229 }
13230
13231
13232 static void
13233 tan_test (void)
13234 {
13235   errno = 0;
13236   FUNC(tan) (0);
13237   if (errno == ENOSYS)
13238     /* Function not implemented.  */
13239     return;
13240
13241   START (tan);
13242
13243   TEST_f_f (tan, 0, 0);
13244   TEST_f_f (tan, minus_zero, minus_zero);
13245   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13246   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13247   TEST_f_f (tan, qnan_value, qnan_value, ERRNO_UNCHANGED);
13248
13249   TEST_f_f (tan, M_PI_4l, 1);
13250   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
13251
13252   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
13253   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
13254
13255   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
13256   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
13257   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
13258   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
13259   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
13260   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
13261   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
13262   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
13263   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
13264   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
13265   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
13266   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
13267   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
13268   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
13269   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
13270   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
13271   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
13272   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
13273
13274   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
13275   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
13276   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
13277   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
13278   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
13279   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
13280   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
13281   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
13282   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
13283   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
13284   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
13285   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
13286   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
13287   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
13288   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
13289   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
13290   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
13291   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
13292
13293 #ifndef TEST_FLOAT
13294   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
13295   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
13296 #endif
13297
13298 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13299   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
13300 #endif
13301
13302   END (tan);
13303 }
13304
13305
13306 static void
13307 tan_test_tonearest (void)
13308 {
13309   int save_round_mode;
13310   errno = 0;
13311   FUNC(tan) (0);
13312   if (errno == ENOSYS)
13313     /* Function not implemented.  */
13314     return;
13315
13316   START (tan_tonearest);
13317
13318   save_round_mode = fegetround ();
13319
13320   if (!fesetround (FE_TONEAREST))
13321     {
13322       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13323       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13324       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13325       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13326       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13327       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13328       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13329       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13330       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13331       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13332     }
13333
13334   fesetround (save_round_mode);
13335
13336   END (tan_tonearest);
13337 }
13338
13339
13340 static void
13341 tan_test_towardzero (void)
13342 {
13343   int save_round_mode;
13344   errno = 0;
13345   FUNC(tan) (0);
13346   if (errno == ENOSYS)
13347     /* Function not implemented.  */
13348     return;
13349
13350   START (tan_towardzero);
13351
13352   save_round_mode = fegetround ();
13353
13354   if (!fesetround (FE_TOWARDZERO))
13355     {
13356       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13357       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13358       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13359       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13360       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13361       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13362       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13363       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13364       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13365       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13366     }
13367
13368   fesetround (save_round_mode);
13369
13370   END (tan_towardzero);
13371 }
13372
13373
13374 static void
13375 tan_test_downward (void)
13376 {
13377   int save_round_mode;
13378   errno = 0;
13379   FUNC(tan) (0);
13380   if (errno == ENOSYS)
13381     /* Function not implemented.  */
13382     return;
13383
13384   START (tan_downward);
13385
13386   save_round_mode = fegetround ();
13387
13388   if (!fesetround (FE_DOWNWARD))
13389     {
13390       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13391       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13392       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13393       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13394       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13395       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13396       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13397       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13398       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13399       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13400     }
13401
13402   fesetround (save_round_mode);
13403
13404   END (tan_downward);
13405 }
13406
13407
13408 static void
13409 tan_test_upward (void)
13410 {
13411   int save_round_mode;
13412   errno = 0;
13413   FUNC(tan) (0);
13414   if (errno == ENOSYS)
13415     /* Function not implemented.  */
13416     return;
13417
13418   START (tan_upward);
13419
13420   save_round_mode = fegetround ();
13421
13422   if (!fesetround (FE_UPWARD))
13423     {
13424       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13425       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13426       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13427       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13428       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13429       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13430       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13431       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13432       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13433       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13434     }
13435
13436   fesetround (save_round_mode);
13437
13438   END (tan_upward);
13439 }
13440
13441
13442 static void
13443 tanh_test (void)
13444 {
13445   errno = 0;
13446   FUNC(tanh) (0.7L);
13447   if (errno == ENOSYS)
13448     /* Function not implemented.  */
13449     return;
13450
13451   START (tanh);
13452
13453   TEST_f_f (tanh, 0, 0);
13454   TEST_f_f (tanh, minus_zero, minus_zero);
13455
13456 #ifndef TEST_INLINE
13457   TEST_f_f (tanh, plus_infty, 1);
13458   TEST_f_f (tanh, minus_infty, -1);
13459 #endif
13460   TEST_f_f (tanh, qnan_value, qnan_value);
13461
13462   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
13463   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
13464
13465   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
13466   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
13467
13468   /* 2^-57  */
13469   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
13470
13471   END (tanh);
13472 }
13473
13474 static void
13475 tgamma_test (void)
13476 {
13477   errno = 0;
13478   FUNC(tgamma) (1);
13479   if (errno == ENOSYS)
13480     /* Function not implemented.  */
13481     return;
13482
13483   START (tgamma);
13484
13485   TEST_f_f (tgamma, plus_infty, plus_infty);
13486   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
13487   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13488   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13489   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
13490   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
13491   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
13492   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
13493   TEST_f_f (tgamma, qnan_value, qnan_value);
13494
13495   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
13496   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
13497
13498   TEST_f_f (tgamma, 1, 1);
13499   TEST_f_f (tgamma, 4, 6);
13500
13501   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
13502   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
13503
13504   END (tgamma);
13505 }
13506
13507
13508 static void
13509 trunc_test (void)
13510 {
13511   START (trunc);
13512
13513   TEST_f_f (trunc, plus_infty, plus_infty);
13514   TEST_f_f (trunc, minus_infty, minus_infty);
13515   TEST_f_f (trunc, qnan_value, qnan_value);
13516
13517   TEST_f_f (trunc, 0, 0);
13518   TEST_f_f (trunc, minus_zero, minus_zero);
13519   TEST_f_f (trunc, 0.1, 0);
13520   TEST_f_f (trunc, 0.25, 0);
13521   TEST_f_f (trunc, 0.625, 0);
13522   TEST_f_f (trunc, -0.1, minus_zero);
13523   TEST_f_f (trunc, -0.25, minus_zero);
13524   TEST_f_f (trunc, -0.625, minus_zero);
13525   TEST_f_f (trunc, 1, 1);
13526   TEST_f_f (trunc, -1, -1);
13527   TEST_f_f (trunc, 1.625, 1);
13528   TEST_f_f (trunc, -1.625, -1);
13529
13530   TEST_f_f (trunc, 1048580.625L, 1048580L);
13531   TEST_f_f (trunc, -1048580.625L, -1048580L);
13532
13533   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
13534   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
13535
13536   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
13537   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
13538
13539 #ifdef TEST_LDOUBLE
13540   /* The result can only be represented in long double.  */
13541   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
13542   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
13543   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
13544   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
13545   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
13546
13547 # if LDBL_MANT_DIG > 100
13548   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
13549   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
13550   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
13551 # endif
13552
13553   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
13554   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
13555   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
13556   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
13557   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
13558
13559 # if LDBL_MANT_DIG > 100
13560   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
13561   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
13562   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
13563 # endif
13564
13565   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
13566   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
13567   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
13568   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
13569   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
13570
13571 # if LDBL_MANT_DIG > 100
13572   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
13573   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
13574   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
13575   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
13576   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
13577   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
13578 # endif
13579
13580   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
13581   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
13582   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
13583   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
13584   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
13585
13586 # if LDBL_MANT_DIG > 100
13587   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
13588   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
13589   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
13590   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
13591   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
13592   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
13593 # endif
13594
13595   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
13596   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
13597   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
13598   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
13599   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
13600
13601   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
13602   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
13603   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
13604   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
13605   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
13606
13607   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
13608   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
13609   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
13610   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
13611   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
13612 #endif
13613
13614   END (trunc);
13615 }
13616
13617 static void
13618 y0_test (void)
13619 {
13620   FLOAT s, c;
13621   errno = 0;
13622   FUNC (sincos) (0, &s, &c);
13623   if (errno == ENOSYS)
13624     /* Required function not implemented.  */
13625     return;
13626   FUNC(y0) (1);
13627   if (errno == ENOSYS)
13628     /* Function not implemented.  */
13629     return;
13630
13631   /* y0 is the Bessel function of the second kind of order 0 */
13632   START (y0);
13633
13634   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
13635   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
13636   TEST_f_f (y0, 0.0, minus_infty);
13637   TEST_f_f (y0, qnan_value, qnan_value);
13638   TEST_f_f (y0, plus_infty, 0);
13639
13640   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
13641   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
13642   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
13643   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
13644   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
13645   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
13646   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
13647
13648   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
13649
13650 #ifndef TEST_FLOAT
13651   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
13652   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
13653 #endif
13654
13655 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13656   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
13657   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
13658 #endif
13659
13660   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
13661   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
13662   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
13663   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
13664   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
13665   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
13666   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
13667   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
13668   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
13669   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
13670   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
13671
13672   END (y0);
13673 }
13674
13675
13676 static void
13677 y1_test (void)
13678 {
13679   FLOAT s, c;
13680   errno = 0;
13681   FUNC (sincos) (0, &s, &c);
13682   if (errno == ENOSYS)
13683     /* Required function not implemented.  */
13684     return;
13685   FUNC(y1) (1);
13686   if (errno == ENOSYS)
13687     /* Function not implemented.  */
13688     return;
13689
13690   /* y1 is the Bessel function of the second kind of order 1 */
13691   START (y1);
13692
13693   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
13694   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
13695   TEST_f_f (y1, 0.0, minus_infty);
13696   TEST_f_f (y1, plus_infty, 0);
13697   TEST_f_f (y1, qnan_value, qnan_value);
13698
13699   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
13700   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
13701   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
13702   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
13703   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
13704   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
13705   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
13706
13707   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
13708
13709 #ifndef TEST_FLOAT
13710   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
13711   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
13712 #endif
13713
13714 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13715   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
13716   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
13717 #endif
13718
13719   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
13720   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
13721   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
13722   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
13723   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
13724   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
13725   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
13726   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
13727   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
13728   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
13729   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
13730
13731   END (y1);
13732 }
13733
13734
13735 static void
13736 yn_test (void)
13737 {
13738   FLOAT s, c;
13739   errno = 0;
13740   FUNC (sincos) (0, &s, &c);
13741   if (errno == ENOSYS)
13742     /* Required function not implemented.  */
13743     return;
13744   FUNC(yn) (1, 1);
13745   if (errno == ENOSYS)
13746     /* Function not implemented.  */
13747     return;
13748
13749   /* yn is the Bessel function of the second kind of order n */
13750   START (yn);
13751
13752   /* yn (0, x) == y0 (x)  */
13753   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
13754   TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
13755   TEST_ff_f (yn, 0, 0.0, minus_infty);
13756   TEST_ff_f (yn, 0, qnan_value, qnan_value);
13757   TEST_ff_f (yn, 0, plus_infty, 0);
13758
13759   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
13760   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
13761   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
13762   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
13763   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
13764   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
13765   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
13766
13767   /* yn (1, x) == y1 (x)  */
13768   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
13769   TEST_ff_f (yn, 1, 0.0, minus_infty);
13770   TEST_ff_f (yn, 1, plus_infty, 0);
13771   TEST_ff_f (yn, 1, qnan_value, qnan_value);
13772
13773   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
13774   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
13775   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
13776   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
13777   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
13778   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
13779   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
13780
13781   /* yn (3, x)  */
13782   TEST_ff_f (yn, 3, plus_infty, 0);
13783   TEST_ff_f (yn, 3, qnan_value, qnan_value);
13784
13785   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
13786   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
13787   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
13788   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
13789   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
13790
13791   /* yn (10, x)  */
13792   TEST_ff_f (yn, 10, plus_infty, 0);
13793   TEST_ff_f (yn, 10, qnan_value, qnan_value);
13794
13795   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
13796   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
13797   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
13798   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
13799   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
13800
13801   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
13802      and FLT_MIN.  See Bug 14173.  */
13803   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
13804
13805   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
13806
13807   END (yn);
13808 }
13809
13810
13811 static void
13812 significand_test (void)
13813 {
13814   /* significand returns the mantissa of the exponential representation.  */
13815
13816   /* TODO: missing +/-Inf as well as qNaN tests.  */
13817
13818   START (significand);
13819
13820   TEST_f_f (significand, 4.0, 1.0);
13821   TEST_f_f (significand, 6.0, 1.5);
13822   TEST_f_f (significand, 8.0, 1.0);
13823
13824   END (significand);
13825 }
13826
13827
13828 static void
13829 initialize (void)
13830 {
13831   fpstack_test ("start *init*");
13832
13833   /* Clear all exceptions.  From now on we must not get random exceptions.  */
13834   feclearexcept (FE_ALL_EXCEPT);
13835   errno = 0;
13836
13837   /* Test to make sure we start correctly.  */
13838   fpstack_test ("end *init*");
13839 }
13840
13841 /* Definitions of arguments for argp functions.  */
13842 static const struct argp_option options[] =
13843 {
13844   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
13845   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
13846   { "no-max-error", 'f', NULL, 0,
13847     "Don't output maximal errors of functions"},
13848   { "no-points", 'p', NULL, 0,
13849     "Don't output results of functions invocations"},
13850   { "ignore-max-ulp", 'i', "yes/no", 0,
13851     "Ignore given maximal errors"},
13852   { "output-dir", 'o', "DIR", 0,
13853     "Directory where generated files will be placed"},
13854   { NULL, 0, NULL, 0, NULL }
13855 };
13856
13857 /* Short description of program.  */
13858 static const char doc[] = "Math test suite: " TEST_MSG ;
13859
13860 /* Prototype for option handler.  */
13861 static error_t parse_opt (int key, char *arg, struct argp_state *state);
13862
13863 /* Data structure to communicate with argp functions.  */
13864 static struct argp argp =
13865 {
13866   options, parse_opt, NULL, doc,
13867 };
13868
13869
13870 /* Handle program arguments.  */
13871 static error_t
13872 parse_opt (int key, char *arg, struct argp_state *state)
13873 {
13874   switch (key)
13875     {
13876     case 'f':
13877       output_max_error = 0;
13878       break;
13879     case 'i':
13880       if (strcmp (arg, "yes") == 0)
13881         ignore_max_ulp = 1;
13882       else if (strcmp (arg, "no") == 0)
13883         ignore_max_ulp = 0;
13884       break;
13885     case 'o':
13886       output_dir = (char *) malloc (strlen (arg) + 1);
13887       if (output_dir != NULL)
13888         strcpy (output_dir, arg);
13889       else
13890         return errno;
13891       break;
13892     case 'p':
13893       output_points = 0;
13894       break;
13895     case 'u':
13896       output_ulps = 1;
13897       break;
13898     case 'v':
13899       if (optarg)
13900         verbose = (unsigned int) strtoul (optarg, NULL, 0);
13901       else
13902         verbose = 3;
13903       break;
13904     default:
13905       return ARGP_ERR_UNKNOWN;
13906     }
13907   return 0;
13908 }
13909
13910 #if 0
13911 /* function to check our ulp calculation.  */
13912 void
13913 check_ulp (void)
13914 {
13915   int i;
13916
13917   FLOAT u, diff, ulp;
13918   /* This gives one ulp.  */
13919   u = FUNC(nextafter) (10, 20);
13920   check_equal (10.0, u, 1, &diff, &ulp);
13921   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
13922
13923   /* This gives one more ulp.  */
13924   u = FUNC(nextafter) (u, 20);
13925   check_equal (10.0, u, 2, &diff, &ulp);
13926   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
13927
13928   /* And now calculate 100 ulp.  */
13929   for (i = 2; i < 100; i++)
13930     u = FUNC(nextafter) (u, 20);
13931   check_equal (10.0, u, 100, &diff, &ulp);
13932   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
13933 }
13934 #endif
13935
13936 int
13937 main (int argc, char **argv)
13938 {
13939
13940   int remaining;
13941   char *ulps_file_path;
13942   size_t dir_len = 0;
13943
13944   verbose = 1;
13945   output_ulps = 0;
13946   output_max_error = 1;
13947   output_points = 1;
13948   output_dir = NULL;
13949   /* XXX set to 0 for releases.  */
13950   ignore_max_ulp = 0;
13951
13952   /* Parse and process arguments.  */
13953   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
13954
13955   if (remaining != argc)
13956     {
13957       fprintf (stderr, "wrong number of arguments");
13958       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
13959       exit (EXIT_FAILURE);
13960     }
13961
13962   if (output_ulps)
13963     {
13964       if (output_dir != NULL)
13965         dir_len = strlen (output_dir);
13966       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
13967       if (ulps_file_path == NULL)
13968         {
13969           perror ("can't allocate path for `ULPs' file: ");
13970           exit (1);
13971         }
13972       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
13973       ulps_file = fopen (ulps_file_path, "a");
13974       if (ulps_file == NULL)
13975         {
13976           perror ("can't open file `ULPs' for writing: ");
13977           exit (1);
13978         }
13979     }
13980
13981
13982   initialize ();
13983   printf (TEST_MSG);
13984
13985 #if 0
13986   check_ulp ();
13987 #endif
13988
13989   /* Keep the tests a wee bit ordered (according to ISO C99).  */
13990   /* Classification macros:  */
13991   finite_test ();
13992   fpclassify_test ();
13993   isfinite_test ();
13994   isinf_test ();
13995   isnan_test ();
13996   isnormal_test ();
13997   issignaling_test ();
13998   signbit_test ();
13999
14000   /* Trigonometric functions:  */
14001   acos_test ();
14002   acos_test_tonearest ();
14003   acos_test_towardzero ();
14004   acos_test_downward ();
14005   acos_test_upward ();
14006   asin_test ();
14007   asin_test_tonearest ();
14008   asin_test_towardzero ();
14009   asin_test_downward ();
14010   asin_test_upward ();
14011   atan_test ();
14012   atan2_test ();
14013   cos_test ();
14014   cos_test_tonearest ();
14015   cos_test_towardzero ();
14016   cos_test_downward ();
14017   cos_test_upward ();
14018   sin_test ();
14019   sin_test_tonearest ();
14020   sin_test_towardzero ();
14021   sin_test_downward ();
14022   sin_test_upward ();
14023   sincos_test ();
14024   tan_test ();
14025   tan_test_tonearest ();
14026   tan_test_towardzero ();
14027   tan_test_downward ();
14028   tan_test_upward ();
14029
14030   /* Hyperbolic functions:  */
14031   acosh_test ();
14032   asinh_test ();
14033   atanh_test ();
14034   cosh_test ();
14035   cosh_test_tonearest ();
14036   cosh_test_towardzero ();
14037   cosh_test_downward ();
14038   cosh_test_upward ();
14039   sinh_test ();
14040   sinh_test_tonearest ();
14041   sinh_test_towardzero ();
14042   sinh_test_downward ();
14043   sinh_test_upward ();
14044   tanh_test ();
14045
14046   /* Exponential and logarithmic functions:  */
14047   exp_test ();
14048   exp_test_tonearest ();
14049   exp_test_towardzero ();
14050   exp_test_downward ();
14051   exp_test_upward ();
14052   exp10_test ();
14053   exp2_test ();
14054   expm1_test ();
14055   frexp_test ();
14056   ldexp_test ();
14057   log_test ();
14058   log10_test ();
14059   log1p_test ();
14060   log2_test ();
14061   logb_test ();
14062   logb_test_downward ();
14063   modf_test ();
14064   ilogb_test ();
14065   scalb_test ();
14066   scalbn_test ();
14067   scalbln_test ();
14068   significand_test ();
14069
14070   /* Power and absolute value functions:  */
14071   cbrt_test ();
14072   fabs_test ();
14073   hypot_test ();
14074   pow_test ();
14075   pow_test_tonearest ();
14076   pow_test_towardzero ();
14077   pow_test_downward ();
14078   pow_test_upward ();
14079   sqrt_test ();
14080
14081   /* Error and gamma functions:  */
14082   erf_test ();
14083   erfc_test ();
14084   gamma_test ();
14085   lgamma_test ();
14086   tgamma_test ();
14087
14088   /* Nearest integer functions:  */
14089   ceil_test ();
14090   floor_test ();
14091   nearbyint_test ();
14092   rint_test ();
14093   rint_test_tonearest ();
14094   rint_test_towardzero ();
14095   rint_test_downward ();
14096   rint_test_upward ();
14097   lrint_test ();
14098   lrint_test_tonearest ();
14099   lrint_test_towardzero ();
14100   lrint_test_downward ();
14101   lrint_test_upward ();
14102   llrint_test ();
14103   llrint_test_tonearest ();
14104   llrint_test_towardzero ();
14105   llrint_test_downward ();
14106   llrint_test_upward ();
14107   round_test ();
14108   lround_test ();
14109   llround_test ();
14110   trunc_test ();
14111
14112   /* Remainder functions:  */
14113   fmod_test ();
14114   remainder_test ();
14115   remquo_test ();
14116
14117   /* Manipulation functions:  */
14118   copysign_test ();
14119   nextafter_test ();
14120   nexttoward_test ();
14121
14122   /* maximum, minimum and positive difference functions */
14123   fdim_test ();
14124   fmax_test ();
14125   fmin_test ();
14126
14127   /* Multiply and add:  */
14128   fma_test ();
14129   fma_test_towardzero ();
14130   fma_test_downward ();
14131   fma_test_upward ();
14132
14133   /* Comparison macros:  */
14134   isgreater_test ();
14135   isgreaterequal_test ();
14136   isless_test ();
14137   islessequal_test ();
14138   islessgreater_test ();
14139   isunordered_test ();
14140
14141   /* Complex functions:  */
14142   cabs_test ();
14143   cacos_test ();
14144   cacosh_test ();
14145   carg_test ();
14146   casin_test ();
14147   casinh_test ();
14148   catan_test ();
14149   catanh_test ();
14150   ccos_test ();
14151   ccosh_test ();
14152   cexp_test ();
14153   cimag_test ();
14154   clog10_test ();
14155   clog_test ();
14156   conj_test ();
14157   cpow_test ();
14158   cproj_test ();
14159   creal_test ();
14160   csin_test ();
14161   csinh_test ();
14162   csqrt_test ();
14163   ctan_test ();
14164   ctan_test_tonearest ();
14165   ctan_test_towardzero ();
14166   ctan_test_downward ();
14167   ctan_test_upward ();
14168   ctanh_test ();
14169   ctanh_test_tonearest ();
14170   ctanh_test_towardzero ();
14171   ctanh_test_downward ();
14172   ctanh_test_upward ();
14173
14174   /* Bessel functions:  */
14175   j0_test ();
14176   j1_test ();
14177   jn_test ();
14178   y0_test ();
14179   y1_test ();
14180   yn_test ();
14181
14182   if (output_ulps)
14183     fclose (ulps_file);
14184
14185   printf ("\nTest suite completed:\n");
14186   printf ("  %d test cases plus %d tests for exception flags and\n"
14187           "    %d tests for errno executed.\n",
14188           noTests, noExcTests, noErrnoTests);
14189   if (noXFails)
14190     printf ("  %d expected failures occurred.\n", noXFails);
14191   if (noXPasses)
14192     printf ("  %d unexpected passes occurred.\n", noXPasses);
14193   if (noErrors)
14194     {
14195       printf ("  %d errors occurred.\n", noErrors);
14196       return 1;
14197     }
14198   printf ("  All tests passed successfully.\n");
14199
14200   return 0;
14201 }
14202
14203 /*
14204  * Local Variables:
14205  * mode:c
14206  * End:
14207  */