Use M_PI_34l consistently in libm-test.inc.
[glibc.git] / math / libm-test.inc
blob8845054d19a6e93ae5649da615144f72fbd11804
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.
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.
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.
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/>.  */
19 /* Part of testsuite for libm.
21    This file is processed by a perl script.  The resulting file has to
22    be included by a master file that defines:
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.  */
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
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.
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).
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  */
75 /* "Philosophy":
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.
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.
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.
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.
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
109    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
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.  */
118 #ifndef _GNU_SOURCE
119 # define _GNU_SOURCE
120 #endif
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>
129 #include <errno.h>
130 #include <stdlib.h>
131 #include <stdio.h>
132 #include <string.h>
133 #include <argp.h>
134 #include <tininess.h>
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
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
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)
202 /* Various constants (we must supply them precalculated for accuracy).  */
203 #define M_PI_6l                 .52359877559829887307710723054658383L
204 #define M_E2l                   7.389056098930650227230427460575008L
205 #define M_E3l                   20.085536923187667740928529654581719L
206 #define M_2_SQRT_PIl            3.5449077018110320545963349666822903L   /* 2 sqrt (M_PIl)  */
207 #define M_SQRT_PIl              1.7724538509055160272981674833411451L   /* sqrt (M_PIl)  */
208 #define M_LOG_SQRT_PIl          0.57236494292470008707171367567652933L  /* log(sqrt(M_PIl))  */
209 #define M_LOG_2_SQRT_PIl        1.265512123484645396488945797134706L    /* log(2*sqrt(M_PIl))  */
210 #define M_PI_34l                2.356194490192344928846982537459627163L /* 3*pi/4 */
211 #define M_PI_34_LOG10El         1.023282265381381010614337719073516828L
212 #define M_PI2_LOG10El           0.682188176920920673742891812715677885L
213 #define M_PI4_LOG10El           0.341094088460460336871445906357838943L
214 #define M_PI_LOG10El            1.364376353841841347485783625431355770L
215 #define M_SQRT_2_2              0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
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.  */
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 */
227 static int verbose;
228 static int output_max_error;    /* Should the maximal errors printed?  */
229 static int output_points;       /* Should the single function results printed?  */
230 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
232 #define PLUS_ZERO_INIT  CHOOSE (0.0L, 0.0, 0.0f,        \
233                                 0.0L, 0.0, 0.0f)
234 #define MINUS_ZERO_INIT CHOOSE (-0.0L, -0.0, -0.0f,     \
235                                 -0.0L, -0.0, -0.0f)
236 #define PLUS_INFTY_INIT CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF, \
237                                 HUGE_VALL, HUGE_VAL, HUGE_VALF)
238 #define MINUS_INFTY_INIT        CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF, \
239                                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF)
240 #define QNAN_VALUE_INIT FUNC (__builtin_nan) ("")
241 #define MAX_VALUE_INIT  CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,     \
242                                 LDBL_MAX, DBL_MAX, FLT_MAX)
243 #define MIN_VALUE_INIT  CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,     \
244                                 LDBL_MIN, DBL_MIN, FLT_MIN)
245 #define MIN_SUBNORM_VALUE_INIT  CHOOSE (__LDBL_DENORM_MIN__,    \
246                                         __DBL_DENORM_MIN__,     \
247                                         __FLT_DENORM_MIN__,     \
248                                         __LDBL_DENORM_MIN__,    \
249                                         __DBL_DENORM_MIN__,     \
250                                         __FLT_DENORM_MIN__)
252 static const FLOAT plus_zero = PLUS_ZERO_INIT;
253 static const FLOAT minus_zero = MINUS_ZERO_INIT;
254 static const FLOAT plus_infty = PLUS_INFTY_INIT;
255 static const FLOAT minus_infty = MINUS_INFTY_INIT;
256 static const FLOAT qnan_value = QNAN_VALUE_INIT;
257 static const FLOAT max_value = MAX_VALUE_INIT;
258 static const FLOAT min_value = MIN_VALUE_INIT;
259 static const FLOAT min_subnorm_value = MIN_SUBNORM_VALUE_INIT;
261 static FLOAT max_error, real_max_error, imag_max_error;
264 #define BUILD_COMPLEX(real, imag) \
265   ({ __complex__ FLOAT __retval;                                              \
266      __real__ __retval = (real);                                              \
267      __imag__ __retval = (imag);                                              \
268      __retval; })
271 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
272                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
274 static void
275 init_max_error (void)
277   max_error = 0;
278   real_max_error = 0;
279   imag_max_error = 0;
280   feclearexcept (FE_ALL_EXCEPT);
281   errno = 0;
284 static void
285 set_max_error (FLOAT current, FLOAT *curr_max_error)
287   if (current > *curr_max_error)
288     *curr_max_error = current;
292 /* Print a FLOAT.  */
293 static void
294 print_float (FLOAT f)
296   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
297   if (issignaling (f))
298     printf ("sNaN\n");
299   else if (isnan (f))
300     printf ("qNaN\n");
301   else
302     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
305 /* Should the message print to screen?  This depends on the verbose flag,
306    and the test status.  */
307 static int
308 print_screen (int ok)
310   if (output_points
311       && (verbose > 1
312           || (verbose == 1 && ok == 0)))
313     return 1;
314   return 0;
318 /* Should the message print to screen?  This depends on the verbose flag,
319    and the test status.  */
320 static int
321 print_screen_max_error (int ok)
323   if (output_max_error
324       && (verbose > 1
325           || ((verbose == 1) && (ok == 0))))
326     return 1;
327   return 0;
330 /* Update statistic counters.  */
331 static void
332 update_stats (int ok)
334   ++noTests;
335   if (!ok)
336     ++noErrors;
339 static void
340 print_ulps (const char *test_name, FLOAT ulp)
342   if (output_ulps)
343     {
344       fprintf (ulps_file, "Test \"%s\":\n", test_name);
345       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
346                CHOOSE("ldouble", "double", "float",
347                       "ildouble", "idouble", "ifloat"),
348                FUNC(ceil) (ulp));
349     }
352 static void
353 print_function_ulps (const char *function_name, FLOAT ulp)
355   if (output_ulps)
356     {
357       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
358       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
359                CHOOSE("ldouble", "double", "float",
360                       "ildouble", "idouble", "ifloat"),
361                FUNC(ceil) (ulp));
362     }
366 static void
367 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
368                              FLOAT imag_ulp)
370   if (output_ulps)
371     {
372       if (real_ulp != 0.0)
373         {
374           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
375           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
376                    CHOOSE("ldouble", "double", "float",
377                           "ildouble", "idouble", "ifloat"),
378                    FUNC(ceil) (real_ulp));
379         }
380       if (imag_ulp != 0.0)
381         {
382           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
383           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
384                    CHOOSE("ldouble", "double", "float",
385                           "ildouble", "idouble", "ifloat"),
386                    FUNC(ceil) (imag_ulp));
387         }
390     }
395 /* Test if Floating-Point stack hasn't changed */
396 static void
397 fpstack_test (const char *test_name)
399 #if defined (__i386__) || defined (__x86_64__)
400   static int old_stack;
401   int sw;
403   asm ("fnstsw" : "=a" (sw));
404   sw >>= 11;
405   sw &= 7;
407   if (sw != old_stack)
408     {
409       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
410               test_name, sw, old_stack);
411       ++noErrors;
412       old_stack = sw;
413     }
414 #endif
418 static void
419 print_max_error (const char *func_name, FLOAT allowed)
421   int ok = 0;
423   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
424     {
425       ok = 1;
426     }
428   if (!ok)
429     print_function_ulps (func_name, max_error);
432   if (print_screen_max_error (ok))
433     {
434       printf ("Maximal error of `%s'\n", func_name);
435       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
436       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
437     }
439   update_stats (ok);
443 static void
444 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed)
446   int ok = 0;
448   if ((real_max_error == 0 && imag_max_error == 0)
449       || (real_max_error <= __real__ allowed
450           && imag_max_error <= __imag__ allowed
451           && !ignore_max_ulp))
452     {
453       ok = 1;
454     }
456   if (!ok)
457     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
460   if (print_screen_max_error (ok))
461     {
462       printf ("Maximal error of real part of: %s\n", func_name);
463       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
464               FUNC(ceil) (real_max_error));
465       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
466               FUNC(ceil) (__real__ allowed));
467       printf ("Maximal error of imaginary part of: %s\n", func_name);
468       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
469               FUNC(ceil) (imag_max_error));
470       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
471               FUNC(ceil) (__imag__ allowed));
472     }
474   update_stats (ok);
478 /* Test whether a given exception was raised.  */
479 static void
480 test_single_exception (const char *test_name,
481                        int exception,
482                        int exc_flag,
483                        int fe_flag,
484                        const char *flag_name)
486 #ifndef TEST_INLINE
487   int ok = 1;
488   if (exception & exc_flag)
489     {
490       if (fetestexcept (fe_flag))
491         {
492           if (print_screen (1))
493             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
494         }
495       else
496         {
497           ok = 0;
498           if (print_screen (0))
499             printf ("Failure: %s: Exception \"%s\" not set\n",
500                     test_name, flag_name);
501         }
502     }
503   else
504     {
505       if (fetestexcept (fe_flag))
506         {
507           ok = 0;
508           if (print_screen (0))
509             printf ("Failure: %s: Exception \"%s\" set\n",
510                     test_name, flag_name);
511         }
512       else
513         {
514           if (print_screen (1))
515             printf ("%s: Exception \"%s\" not set\n", test_name,
516                     flag_name);
517         }
518     }
519   if (!ok)
520     ++noErrors;
522 #endif
526 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
527    allowed but not required exceptions.
529 static void
530 test_exceptions (const char *test_name, int exception)
532   ++noExcTests;
533 #ifdef FE_DIVBYZERO
534   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
535     test_single_exception (test_name, exception,
536                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
537                            "Divide by zero");
538 #endif
539 #ifdef FE_INVALID
540   if ((exception & INVALID_EXCEPTION_OK) == 0)
541     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
542                          "Invalid operation");
543 #endif
544 #ifdef FE_OVERFLOW
545   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
546     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
547                            FE_OVERFLOW, "Overflow");
548 #endif
549 #ifdef FE_UNDERFLOW
550   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
551     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
552                            FE_UNDERFLOW, "Underflow");
553 #endif
554   feclearexcept (FE_ALL_EXCEPT);
557 /* Test whether errno for TEST_NAME, set to ERRNO_VALUE, has value
558    EXPECTED_VALUE (description EXPECTED_NAME).  */
559 static void
560 test_single_errno (const char *test_name, int errno_value,
561                    int expected_value, const char *expected_name)
563   if (errno_value == expected_value)
564     {
565       if (print_screen (1))
566         printf ("Pass: %s: errno set to %d (%s)\n", test_name, errno_value,
567                 expected_name);
568     }
569   else
570     {
571       ++noErrors;
572       if (print_screen (0))
573         printf ("Failure: %s: errno set to %d, expected %d (%s)\n",
574                 test_name, errno_value, expected_value, expected_name);
575     }
578 /* Test whether errno (value ERRNO_VALUE) has been for TEST_NAME set
579    as required by EXCEPTIONS.  */
580 static void
581 test_errno (const char *test_name, int errno_value, int exceptions)
583   ++noErrnoTests;
584   if (exceptions & ERRNO_UNCHANGED)
585     test_single_errno (test_name, errno_value, 0, "unchanged");
586   if (exceptions & ERRNO_EDOM)
587     test_single_errno (test_name, errno_value, EDOM, "EDOM");
588   if (exceptions & ERRNO_ERANGE)
589     test_single_errno (test_name, errno_value, ERANGE, "ERANGE");
592 static void
593 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
594                       FLOAT max_ulp, int exceptions,
595                       FLOAT *curr_max_error)
597   int ok = 0;
598   int print_diff = 0;
599   FLOAT diff = 0;
600   FLOAT ulp = 0;
601   int errno_value = errno;
603   test_exceptions (test_name, exceptions);
604   test_errno (test_name, errno_value, exceptions);
605   if (issignaling (computed) && issignaling (expected))
606     ok = 1;
607   else if (issignaling (computed) || issignaling (expected))
608     ok = 0;
609   else if (isnan (computed) && isnan (expected))
610     ok = 1;
611   else if (isinf (computed) && isinf (expected))
612     {
613       /* Test for sign of infinities.  */
614       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
615           && signbit (computed) != signbit (expected))
616         {
617           ok = 0;
618           printf ("infinity has wrong sign.\n");
619         }
620       else
621         ok = 1;
622     }
623   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
624   else if (isinf (computed) || isnan (computed)
625            || isinf (expected) || isnan (expected))
626     ok = 0;
627   else
628     {
629       diff = FUNC(fabs) (computed - expected);
630       switch (fpclassify (expected))
631         {
632         case FP_ZERO:
633           /* ilogb (0) isn't allowed. */
634           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
635           break;
636         case FP_NORMAL:
637           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
638           break;
639         case FP_SUBNORMAL:
640           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
641              least normal value.  */
642           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
643           break;
644         default:
645           /* It should never happen. */
646           abort ();
647           break;
648         }
649       set_max_error (ulp, curr_max_error);
650       print_diff = 1;
651       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
652           && computed == 0.0 && expected == 0.0
653           && signbit(computed) != signbit (expected))
654         ok = 0;
655       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
656         ok = 1;
657       else
658         {
659           ok = 0;
660           print_ulps (test_name, ulp);
661         }
663     }
664   if (print_screen (ok))
665     {
666       if (!ok)
667         printf ("Failure: ");
668       printf ("Test: %s\n", test_name);
669       printf ("Result:\n");
670       printf (" is:         ");
671       print_float (computed);
672       printf (" should be:  ");
673       print_float (expected);
674       if (print_diff)
675         {
676           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
677                   "\n", diff, diff);
678           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
679           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
680         }
681     }
682   update_stats (ok);
684   fpstack_test (test_name);
685   errno = 0;
689 static void
690 check_float (const char *test_name, FLOAT computed, FLOAT expected,
691              FLOAT max_ulp, int exceptions)
693   check_float_internal (test_name, computed, expected, max_ulp,
694                         exceptions, &max_error);
698 static void
699 check_complex (const char *test_name, __complex__ FLOAT computed,
700                __complex__ FLOAT expected,
701                __complex__ FLOAT max_ulp,
702                int exception)
704   FLOAT part_comp, part_exp, part_max_ulp;
705   char *str;
707   if (asprintf (&str, "Real part of: %s", test_name) == -1)
708     abort ();
710   part_comp = __real__ computed;
711   part_exp = __real__ expected;
712   part_max_ulp = __real__ max_ulp;
714   check_float_internal (str, part_comp, part_exp, part_max_ulp,
715                         exception, &real_max_error);
716   free (str);
718   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
719     abort ();
721   part_comp = __imag__ computed;
722   part_exp = __imag__ expected;
723   part_max_ulp = __imag__ max_ulp;
725   /* Don't check again for exceptions or errno, just pass through the
726      zero/inf sign test.  */
727   check_float_internal (str, part_comp, part_exp, part_max_ulp,
728                         exception & IGNORE_ZERO_INF_SIGN,
729                         &imag_max_error);
730   free (str);
734 /* Check that computed and expected values are equal (int values).  */
735 static void
736 check_int (const char *test_name, int computed, int expected, int max_ulp,
737            int exceptions)
739   int diff = computed - expected;
740   int ok = 0;
741   int errno_value = errno;
743   test_exceptions (test_name, exceptions);
744   test_errno (test_name, errno_value, exceptions);
745   noTests++;
746   if (abs (diff) <= max_ulp)
747     ok = 1;
749   if (!ok)
750     print_ulps (test_name, diff);
752   if (print_screen (ok))
753     {
754       if (!ok)
755         printf ("Failure: ");
756       printf ("Test: %s\n", test_name);
757       printf ("Result:\n");
758       printf (" is:         %d\n", computed);
759       printf (" should be:  %d\n", expected);
760     }
762   update_stats (ok);
763   fpstack_test (test_name);
764   errno = 0;
768 /* Check that computed and expected values are equal (long int values).  */
769 static void
770 check_long (const char *test_name, long int computed, long int expected,
771             long int max_ulp, int exceptions)
773   long int diff = computed - expected;
774   int ok = 0;
775   int errno_value = errno;
777   test_exceptions (test_name, exceptions);
778   test_errno (test_name, errno_value, exceptions);
779   noTests++;
780   if (labs (diff) <= max_ulp)
781     ok = 1;
783   if (!ok)
784     print_ulps (test_name, diff);
786   if (print_screen (ok))
787     {
788       if (!ok)
789         printf ("Failure: ");
790       printf ("Test: %s\n", test_name);
791       printf ("Result:\n");
792       printf (" is:         %ld\n", computed);
793       printf (" should be:  %ld\n", expected);
794     }
796   update_stats (ok);
797   fpstack_test (test_name);
798   errno = 0;
802 /* Check that computed value is true/false.  */
803 static void
804 check_bool (const char *test_name, int computed, int expected,
805             long int max_ulp, int exceptions)
807   int ok = 0;
808   int errno_value = errno;
810   test_exceptions (test_name, exceptions);
811   test_errno (test_name, errno_value, exceptions);
812   noTests++;
813   if ((computed == 0) == (expected == 0))
814     ok = 1;
816   if (print_screen (ok))
817     {
818       if (!ok)
819         printf ("Failure: ");
820       printf ("Test: %s\n", test_name);
821       printf ("Result:\n");
822       printf (" is:         %d\n", computed);
823       printf (" should be:  %d\n", expected);
824     }
826   update_stats (ok);
827   fpstack_test (test_name);
828   errno = 0;
832 /* check that computed and expected values are equal (long int values) */
833 static void
834 check_longlong (const char *test_name, long long int computed,
835                 long long int expected,
836                 long long int max_ulp,
837                 int exceptions)
839   long long int diff = computed - expected;
840   int ok = 0;
841   int errno_value = errno;
843   test_exceptions (test_name, exceptions);
844   test_errno (test_name, errno_value, exceptions);
845   noTests++;
846   if (llabs (diff) <= max_ulp)
847     ok = 1;
849   if (!ok)
850     print_ulps (test_name, diff);
852   if (print_screen (ok))
853     {
854       if (!ok)
855         printf ("Failure:");
856       printf ("Test: %s\n", test_name);
857       printf ("Result:\n");
858       printf (" is:         %lld\n", computed);
859       printf (" should be:  %lld\n", expected);
860     }
862   update_stats (ok);
863   fpstack_test (test_name);
864   errno = 0;
867 /* Run an individual test, including any required setup and checking
868    of results.  */
869 #define RUN_TEST_f_f(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
870                      MAX_ULP, EXCEPTIONS)                       \
871   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,     \
872                MAX_ULP, EXCEPTIONS)
873 #define RUN_TEST_2_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,        \
874                      MAX_ULP, EXCEPTIONS)                               \
875   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED,      \
876                MAX_ULP, EXCEPTIONS)
877 #define RUN_TEST_ff_f RUN_TEST_2_f
878 #define RUN_TEST_fi_f RUN_TEST_2_f
879 #define RUN_TEST_fl_f RUN_TEST_2_f
880 #define RUN_TEST_if_f RUN_TEST_2_f
881 #define RUN_TEST_fff_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, ARG3,  \
882                        EXPECTED, MAX_ULP, EXCEPTIONS)           \
883   check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3),  \
884                EXPECTED, MAX_ULP, EXCEPTIONS)
885 #define RUN_TEST_c_f(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,        \
886                      MAX_ULP, EXCEPTIONS)                               \
887   check_float (TEST_NAME,                                               \
888                FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)),           \
889                EXPECTED, MAX_ULP, EXCEPTIONS)
890 #define RUN_TEST_f_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,              \
891                       MAX_ULP, EXCEPTIONS,                              \
892                       EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,    \
893                       EXTRA_EXPECTED, EXTRA_ULP)                        \
894   do                                                                    \
895     {                                                                   \
896       (EXTRA_VAR) = (EXTRA_INIT);                                       \
897       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,         \
898                    MAX_ULP, EXCEPTIONS);                                \
899       if (EXTRA_TEST)                                                   \
900         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
901                    EXTRA_ULP, 0);                                       \
902     }                                                                   \
903   while (0)
904 #define RUN_TEST_fF_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,             \
905                        MAX_ULP, EXCEPTIONS,                             \
906                        EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,   \
907                        EXTRA_EXPECTED, EXTRA_ULP)                       \
908   do                                                                    \
909     {                                                                   \
910       (EXTRA_VAR) = (EXTRA_INIT);                                       \
911       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),     \
912                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
913       if (EXTRA_TEST)                                                   \
914         check_float (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,             \
915                      EXTRA_ULP, 0);                                     \
916     }                                                                   \
917   while (0)
918 #define RUN_TEST_fI_f1(TEST_NAME, FUNC_NAME, ARG, EXPECTED,             \
919                        MAX_ULP, EXCEPTIONS,                             \
920                        EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,   \
921                        EXTRA_EXPECTED, EXTRA_ULP)                       \
922   do                                                                    \
923     {                                                                   \
924       (EXTRA_VAR) = (EXTRA_INIT);                                       \
925       check_float (TEST_NAME, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)),     \
926                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
927       if (EXTRA_TEST)                                                   \
928         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
929                    EXTRA_ULP, 0);                                       \
930     }                                                                   \
931   while (0)
932 #define RUN_TEST_ffI_f1(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,     \
933                         MAX_ULP, EXCEPTIONS,                            \
934                         EXTRA_NAME, EXTRA_VAR, EXTRA_INIT, EXTRA_TEST,  \
935                         EXTRA_EXPECTED, EXTRA_ULP)                      \
936   do                                                                    \
937     {                                                                   \
938       (EXTRA_VAR) = (EXTRA_INIT);                                       \
939       check_float (TEST_NAME,                                           \
940                    FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)),         \
941                    EXPECTED, MAX_ULP, EXCEPTIONS);                      \
942       if (EXTRA_TEST)                                                   \
943         check_int (EXTRA_NAME, EXTRA_VAR, EXTRA_EXPECTED,               \
944                    EXTRA_ULP, 0);                                       \
945     }                                                                   \
946   while (0)
947 #define RUN_TEST_c_c(TEST_NAME, FUNC_NAME, ARGR, ARGC, EXPR, EXPC,      \
948                      MAX_ULP, EXCEPTIONS)                               \
949   check_complex (TEST_NAME,                                             \
950                  FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)),         \
951                  BUILD_COMPLEX (EXPR, EXPC),                            \
952                  MAX_ULP, EXCEPTIONS)
953 #define RUN_TEST_cc_c(TEST_NAME, FUNC_NAME, ARG1R, ARG1C, ARG2R, ARG2C, \
954                       EXPR, EXPC, MAX_ULP, EXCEPTIONS)                  \
955   check_complex (TEST_NAME,                                             \
956                  FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C),        \
957                                    BUILD_COMPLEX (ARG2R, ARG2C)),       \
958                  BUILD_COMPLEX (EXPR, EXPC),                            \
959                  MAX_ULP, EXCEPTIONS)
960 #define RUN_TEST_f_i(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
961                      MAX_ULP, EXCEPTIONS)                       \
962   check_int (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,       \
963              MAX_ULP, EXCEPTIONS)
964 #define RUN_TEST_f_i_tg(TEST_NAME, FUNC_NAME, ARG, EXPECTED,    \
965                         MAX_ULP, EXCEPTIONS)                    \
966   check_int (TEST_NAME, FUNC_NAME (ARG), EXPECTED,              \
967              MAX_ULP, EXCEPTIONS)
968 #define RUN_TEST_ff_i_tg(TEST_NAME, FUNC_NAME, ARG1, ARG2, EXPECTED,    \
969                          MAX_ULP, EXCEPTIONS)                           \
970   check_int (TEST_NAME, FUNC_NAME (ARG1, ARG2), EXPECTED,               \
971              MAX_ULP, EXCEPTIONS)
972 #define RUN_TEST_f_b(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
973                      MAX_ULP, EXCEPTIONS)                       \
974   check_bool (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,      \
975               MAX_ULP, EXCEPTIONS)
976 #define RUN_TEST_f_b_tg(TEST_NAME, FUNC_NAME, ARG, EXPECTED,    \
977                         MAX_ULP, EXCEPTIONS)                    \
978   check_bool (TEST_NAME, FUNC_NAME (ARG), EXPECTED,             \
979               MAX_ULP, EXCEPTIONS)
980 #define RUN_TEST_f_l(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
981                      MAX_ULP, EXCEPTIONS)                       \
982   check_long (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,      \
983               MAX_ULP, EXCEPTIONS)
984 #define RUN_TEST_f_L(TEST_NAME, FUNC_NAME, ARG, EXPECTED,       \
985                      MAX_ULP, EXCEPTIONS)                       \
986   check_longlong (TEST_NAME, FUNC (FUNC_NAME) (ARG), EXPECTED,  \
987                   MAX_ULP, EXCEPTIONS)
988 #define RUN_TEST_sincos(ARG, TEST_NAME_SIN, SIN_RES_VAR, EXPECTED_SIN,  \
989                         MAX_ULP_SIN, TEST_NAME_COS, COS_RES_VAR,        \
990                         EXPECTED_COS, MAX_ULP_COS, EXCEPTIONS)          \
991   do                                                                    \
992     {                                                                   \
993       FUNC (sincos) (ARG, &(SIN_RES_VAR), &(COS_RES_VAR));              \
994       check_float (TEST_NAME_SIN, SIN_RES_VAR,                          \
995                    EXPECTED_SIN, MAX_ULP_SIN, EXCEPTIONS);              \
996       check_float (TEST_NAME_COS, COS_RES_VAR,                          \
997                    EXPECTED_COS, MAX_ULP_COS, 0);                       \
998     }                                                                   \
999   while (0)
1003 /* This is to prevent messages from the SVID libm emulation.  */
1005 matherr (struct exception *x __attribute__ ((unused)))
1007   return 1;
1011 /****************************************************************************
1012   Tests for single functions of libm.
1013   Please keep them alphabetically sorted!
1014 ****************************************************************************/
1016 static void
1017 acos_test (void)
1019   errno = 0;
1020   FUNC(acos) (0);
1021   if (errno == ENOSYS)
1022     /* Function not implemented.  */
1023     return;
1025   START (acos);
1027   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
1028   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
1029   TEST_f_f (acos, qnan_value, qnan_value);
1031   /* |x| > 1: */
1032   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
1033   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
1034   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
1035   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
1037   TEST_f_f (acos, 0, M_PI_2l);
1038   TEST_f_f (acos, minus_zero, M_PI_2l);
1039   TEST_f_f (acos, 1, 0);
1040   TEST_f_f (acos, -1, M_PIl);
1041   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1042   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1043   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
1044   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
1045   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
1046   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
1047   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
1048 #ifndef TEST_FLOAT
1049   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
1050   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
1051   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
1052   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
1053 #endif
1054 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1055   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
1056   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
1057 #endif
1058   END (acos);
1062 static void
1063 acos_test_tonearest (void)
1065   int save_round_mode;
1066   errno = 0;
1067   FUNC(acos) (0);
1068   if (errno == ENOSYS)
1069     /* Function not implemented.  */
1070     return;
1072   START (acos_tonearest);
1074   save_round_mode = fegetround ();
1076   if (!fesetround (FE_TONEAREST))
1077     {
1078       TEST_f_f (acos, 0, M_PI_2l);
1079       TEST_f_f (acos, minus_zero, M_PI_2l);
1080       TEST_f_f (acos, 1, 0);
1081       TEST_f_f (acos, -1, M_PIl);
1082       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1083       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1084     }
1086   fesetround (save_round_mode);
1088   END (acos_tonearest);
1092 static void
1093 acos_test_towardzero (void)
1095   int save_round_mode;
1096   errno = 0;
1097   FUNC(acos) (0);
1098   if (errno == ENOSYS)
1099     /* Function not implemented.  */
1100     return;
1102   START (acos_towardzero);
1104   save_round_mode = fegetround ();
1106   if (!fesetround (FE_TOWARDZERO))
1107     {
1108       TEST_f_f (acos, 0, M_PI_2l);
1109       TEST_f_f (acos, minus_zero, M_PI_2l);
1110       TEST_f_f (acos, 1, 0);
1111       TEST_f_f (acos, -1, M_PIl);
1112       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1113       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1114     }
1116   fesetround (save_round_mode);
1118   END (acos_towardzero);
1122 static void
1123 acos_test_downward (void)
1125   int save_round_mode;
1126   errno = 0;
1127   FUNC(acos) (0);
1128   if (errno == ENOSYS)
1129     /* Function not implemented.  */
1130     return;
1132   START (acos_downward);
1134   save_round_mode = fegetround ();
1136   if (!fesetround (FE_DOWNWARD))
1137     {
1138       TEST_f_f (acos, 0, M_PI_2l);
1139       TEST_f_f (acos, minus_zero, M_PI_2l);
1140       TEST_f_f (acos, 1, 0);
1141       TEST_f_f (acos, -1, M_PIl);
1142       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1143       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1144     }
1146   fesetround (save_round_mode);
1148   END (acos_downward);
1152 static void
1153 acos_test_upward (void)
1155   int save_round_mode;
1156   errno = 0;
1157   FUNC(acos) (0);
1158   if (errno == ENOSYS)
1159     /* Function not implemented.  */
1160     return;
1162   START (acos_upward);
1164   save_round_mode = fegetround ();
1166   if (!fesetround (FE_UPWARD))
1167     {
1168       TEST_f_f (acos, 0, M_PI_2l);
1169       TEST_f_f (acos, minus_zero, M_PI_2l);
1170       TEST_f_f (acos, 1, 0);
1171       TEST_f_f (acos, -1, M_PIl);
1172       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
1173       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
1174     }
1176   fesetround (save_round_mode);
1178   END (acos_upward);
1181 static void
1182 acosh_test (void)
1184   errno = 0;
1185   FUNC(acosh) (7);
1186   if (errno == ENOSYS)
1187     /* Function not implemented.  */
1188     return;
1190   START (acosh);
1192   TEST_f_f (acosh, plus_infty, plus_infty);
1193   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
1194   TEST_f_f (acosh, qnan_value, qnan_value);
1196   /* x < 1:  */
1197   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1198   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1200   TEST_f_f (acosh, 1, 0);
1201   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1203   END (acosh);
1206 static void
1207 asin_test (void)
1209   errno = 0;
1210   FUNC(asin) (0);
1211   if (errno == ENOSYS)
1212     /* Function not implemented.  */
1213     return;
1215   START (asin);
1217   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1218   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1219   TEST_f_f (asin, qnan_value, qnan_value);
1221   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1222   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1223   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1224   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1225   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1227   TEST_f_f (asin, 0, 0);
1228   TEST_f_f (asin, minus_zero, minus_zero);
1229   TEST_f_f (asin, 0.5, M_PI_6l);
1230   TEST_f_f (asin, -0.5, -M_PI_6l);
1231   TEST_f_f (asin, 1.0, M_PI_2l);
1232   TEST_f_f (asin, -1.0, -M_PI_2l);
1233   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1234   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1235   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1236 #ifndef TEST_FLOAT
1237   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1238   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1239   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1240   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1241 #endif
1242 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1243   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1244   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1245 #endif
1247   END (asin);
1251 static void
1252 asin_test_tonearest (void)
1254   int save_round_mode;
1255   errno = 0;
1256   FUNC(asin) (0);
1257   if (errno == ENOSYS)
1258     /* Function not implemented.  */
1259     return;
1261   START (asin_tonearest);
1263   save_round_mode = fegetround ();
1265   if (!fesetround (FE_TONEAREST))
1266     {
1267       TEST_f_f (asin, 0, 0);
1268       TEST_f_f (asin, minus_zero, minus_zero);
1269       TEST_f_f (asin, 0.5, M_PI_6l);
1270       TEST_f_f (asin, -0.5, -M_PI_6l);
1271       TEST_f_f (asin, 1.0, M_PI_2l);
1272       TEST_f_f (asin, -1.0, -M_PI_2l);
1273     }
1275   fesetround (save_round_mode);
1277   END (asin_tonearest);
1281 static void
1282 asin_test_towardzero (void)
1284   int save_round_mode;
1285   errno = 0;
1286   FUNC(asin) (0);
1287   if (errno == ENOSYS)
1288     /* Function not implemented.  */
1289     return;
1291   START (asin_towardzero);
1293   save_round_mode = fegetround ();
1295   if (!fesetround (FE_TOWARDZERO))
1296     {
1297       TEST_f_f (asin, 0, 0);
1298       TEST_f_f (asin, minus_zero, minus_zero);
1299       TEST_f_f (asin, 0.5, M_PI_6l);
1300       TEST_f_f (asin, -0.5, -M_PI_6l);
1301       TEST_f_f (asin, 1.0, M_PI_2l);
1302       TEST_f_f (asin, -1.0, -M_PI_2l);
1303     }
1305   fesetround (save_round_mode);
1307   END (asin_towardzero);
1311 static void
1312 asin_test_downward (void)
1314   int save_round_mode;
1315   errno = 0;
1316   FUNC(asin) (0);
1317   if (errno == ENOSYS)
1318     /* Function not implemented.  */
1319     return;
1321   START (asin_downward);
1323   save_round_mode = fegetround ();
1325   if (!fesetround (FE_DOWNWARD))
1326     {
1327       TEST_f_f (asin, 0, 0);
1328       TEST_f_f (asin, minus_zero, minus_zero);
1329       TEST_f_f (asin, 0.5, M_PI_6l);
1330       TEST_f_f (asin, -0.5, -M_PI_6l);
1331       TEST_f_f (asin, 1.0, M_PI_2l);
1332       TEST_f_f (asin, -1.0, -M_PI_2l);
1333     }
1335   fesetround (save_round_mode);
1337   END (asin_downward);
1341 static void
1342 asin_test_upward (void)
1344   int save_round_mode;
1345   errno = 0;
1346   FUNC(asin) (0);
1347   if (errno == ENOSYS)
1348     /* Function not implemented.  */
1349     return;
1351   START (asin_upward);
1353   save_round_mode = fegetround ();
1355   if (!fesetround (FE_UPWARD))
1356     {
1357       TEST_f_f (asin, 0, 0);
1358       TEST_f_f (asin, minus_zero, minus_zero);
1359       TEST_f_f (asin, 0.5, M_PI_6l);
1360       TEST_f_f (asin, -0.5, -M_PI_6l);
1361       TEST_f_f (asin, 1.0, M_PI_2l);
1362       TEST_f_f (asin, -1.0, -M_PI_2l);
1363     }
1365   fesetround (save_round_mode);
1367   END (asin_upward);
1370 static void
1371 asinh_test (void)
1373   errno = 0;
1374   FUNC(asinh) (0.7L);
1375   if (errno == ENOSYS)
1376     /* Function not implemented.  */
1377     return;
1379   START (asinh);
1381   TEST_f_f (asinh, 0, 0);
1382   TEST_f_f (asinh, minus_zero, minus_zero);
1383 #ifndef TEST_INLINE
1384   TEST_f_f (asinh, plus_infty, plus_infty);
1385   TEST_f_f (asinh, minus_infty, minus_infty);
1386 #endif
1387   TEST_f_f (asinh, qnan_value, qnan_value);
1388   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1390   END (asinh);
1393 static void
1394 atan_test (void)
1396   errno = 0;
1397   FUNC(atan) (0);
1398   if (errno == ENOSYS)
1399     /* Function not implemented.  */
1400     return;
1402   START (atan);
1404   TEST_f_f (atan, 0, 0);
1405   TEST_f_f (atan, minus_zero, minus_zero);
1407   TEST_f_f (atan, plus_infty, M_PI_2l);
1408   TEST_f_f (atan, minus_infty, -M_PI_2l);
1409   TEST_f_f (atan, qnan_value, qnan_value);
1410   TEST_f_f (atan, max_value, M_PI_2l);
1411   TEST_f_f (atan, -max_value, -M_PI_2l);
1413   TEST_f_f (atan, 1, M_PI_4l);
1414   TEST_f_f (atan, -1, -M_PI_4l);
1416   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1418   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1419 #ifndef TEST_FLOAT
1420   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1421 #endif
1422 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1423   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1424 #endif
1426   END (atan);
1431 static void
1432 atanh_test (void)
1434   errno = 0;
1435   FUNC(atanh) (0.7L);
1436   if (errno == ENOSYS)
1437     /* Function not implemented.  */
1438     return;
1440   START (atanh);
1443   TEST_f_f (atanh, 0, 0);
1444   TEST_f_f (atanh, minus_zero, minus_zero);
1446   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1447   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1448   TEST_f_f (atanh, qnan_value, qnan_value);
1450   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1451   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1452   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1453   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1454   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1456   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1458   END (atanh);
1461 static void
1462 atan2_test (void)
1464   errno = 0;
1465   FUNC(atan2) (-0, 1);
1466   if (errno == ENOSYS)
1467     /* Function not implemented.  */
1468     return;
1470   START (atan2);
1472   /* atan2 (0,x) == 0 for x > 0.  */
1473   TEST_ff_f (atan2, 0, 1, 0);
1475   /* atan2 (-0,x) == -0 for x > 0.  */
1476   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1478   TEST_ff_f (atan2, 0, 0, 0);
1479   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1481   /* atan2 (+0,x) == +pi for x < 0.  */
1482   TEST_ff_f (atan2, 0, -1, M_PIl);
1484   /* atan2 (-0,x) == -pi for x < 0.  */
1485   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1487   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1488   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1490   /* atan2 (y,+0) == pi/2 for y > 0.  */
1491   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1493   /* atan2 (y,-0) == pi/2 for y > 0.  */
1494   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1496   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1497   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1499   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1500   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1502   /* atan2 (y,inf) == +0 for finite y > 0.  */
1503   TEST_ff_f (atan2, 1, plus_infty, 0);
1505   /* atan2 (y,inf) == -0 for finite y < 0.  */
1506   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1508   /* atan2(+inf, x) == pi/2 for finite x.  */
1509   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1511   /* atan2(-inf, x) == -pi/2 for finite x.  */
1512   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1514   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1515   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1517   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1518   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1520   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1521   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1522   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1523   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1524   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1526   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1528   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1529   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1531   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1532   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1533   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1534   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1535   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1536   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1538   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1539 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1540   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1541 #endif
1543   END (atan2);
1546 static void
1547 cabs_test (void)
1549   errno = 0;
1550   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1551   if (errno == ENOSYS)
1552     /* Function not implemented.  */
1553     return;
1555   START (cabs);
1557   /* cabs (x + iy) is specified as hypot (x,y) */
1559   /* cabs (+inf + i x) == +inf.  */
1560   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1561   /* cabs (-inf + i x) == +inf.  */
1562   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1564   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1565   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1567   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1569   /* cabs (x,y) == cabs (y,x).  */
1570   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1571   /* cabs (x,y) == cabs (-x,y).  */
1572   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1573   /* cabs (x,y) == cabs (-y,x).  */
1574   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1575   /* cabs (x,y) == cabs (-x,-y).  */
1576   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1577   /* cabs (x,y) == cabs (-y,-x).  */
1578   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1579   /* cabs (x,0) == fabs (x).  */
1580   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1581   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1582   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1583   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1584   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1585   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1587   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1589   END (cabs);
1593 static void
1594 cacos_test (void)
1596   errno = 0;
1597   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1598   if (errno == ENOSYS)
1599     /* Function not implemented.  */
1600     return;
1602   START (cacos);
1605   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1606   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1607   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1608   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1610   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1611   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1613   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1614   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1616   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1617   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1618   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1619   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1620   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1621   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1623   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1624   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1625   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1626   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1628   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1629   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1630   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1631   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1633   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1634   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1636   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1637   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1639   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1640   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1642   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1643   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1645   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1646   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1648   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1650   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1651   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1652   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1653   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1654   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1655   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1656   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1657   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1658   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1659   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1660   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1661   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1663   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1664   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1665   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1666   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1667   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1668   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1669   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1670   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1671   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1672   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1673   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1674   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1676   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1677   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1678   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1679   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1680   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1681   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1682   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1683   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1684 #ifndef TEST_FLOAT
1685   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1686   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1687   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1688   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1689   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1690   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1691   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1692   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1693 #endif
1694 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1695   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1696   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1697   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1698   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1699   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1700   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1701   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1702   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1703 #endif
1705   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1706 #ifndef TEST_FLOAT
1707   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1708 #endif
1709 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1710   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1711 #endif
1713   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1714   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1715   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1716   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1717   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1718   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1719   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1720   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1721 #ifndef TEST_FLOAT
1722   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1723   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1724   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1725   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1726   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1727   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1728   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1729   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1730 #endif
1731 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1732   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1733   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1734   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1735   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1736   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1737   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1738   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1739   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1740 #endif
1742   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1743   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1744   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1745   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1746   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1747   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1748   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1749   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1750   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1751   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1752   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1753   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1754   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1755   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1756   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1757   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1758   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1759   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1760   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1761   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1762   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1763   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1764   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1765   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1766   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1767   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1768   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1769   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1770   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1771   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1772   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1773   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1774   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1775   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1776   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1777   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1778   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1779   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1780   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1781   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1782   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1783   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1784   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1785   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1786   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1787   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1788   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1789   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1790 #ifndef TEST_FLOAT
1791   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1792   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1793   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1794   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1795   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1796   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1797   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1798   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1799   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1800   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1801   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1802   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1803   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1804   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1805   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1806   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1807 #endif
1808 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1809   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1810   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1811   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1812   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1813   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1814   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1815   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1816   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1817   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1818   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1819   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1820   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1821   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1822   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1823   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1824   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1825 #endif
1827   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L);
1828   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L);
1829   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L);
1830   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L);
1831   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L);
1832   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L);
1833   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L);
1834   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L);
1835   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L);
1836   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L);
1837   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L);
1838   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L);
1839   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L);
1840   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L);
1841   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L);
1842   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L);
1843   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1844   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1845   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L);
1846   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L);
1847   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L);
1848   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L);
1849   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L);
1850   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L);
1851 #ifndef TEST_FLOAT
1852   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L);
1853   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L);
1854   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L);
1855   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L);
1856   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L);
1857   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L);
1858   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L);
1859   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L);
1860   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1861   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1862   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1863   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1864   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1865   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1866   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1867   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1868   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1869   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1870   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L);
1871   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L);
1872   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L);
1873   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L);
1874   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L);
1875   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L);
1876 #endif
1877 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1878   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L);
1879   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L);
1880   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L);
1881   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L);
1882   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L);
1883   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L);
1884   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L);
1885   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L);
1886 # if LDBL_MIN_EXP <= -16381
1887   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1888   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1889   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1890   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1891   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L);
1892   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1893   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L);
1894   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1895 # endif
1896   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1897   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1898   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L);
1899   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L);
1900   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L);
1901   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L);
1902   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L);
1903   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L);
1904 #endif
1905 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1906   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L);
1907   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L);
1908   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L);
1909   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L);
1910   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L);
1911   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L);
1912   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L);
1913   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L);
1914   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1915   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1916   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1917   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1918   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L);
1919   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1920   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L);
1921   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1922   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1923   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1924   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L);
1925   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L);
1926   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L);
1927   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L);
1928   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L);
1929   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L);
1930 #endif
1931 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1932   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L);
1933   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L);
1934   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L);
1935   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L);
1936   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L);
1937   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L);
1938   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L);
1939   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L);
1940   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1941   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1942   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1943   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1944   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L);
1945   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1946   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L);
1947   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1948   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1949   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1950   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L);
1951   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L);
1952   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L);
1953   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L);
1954   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L);
1955   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L);
1956 #endif
1958   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1959   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1960   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1961   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1962   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1963   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1964   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1965   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1966   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1967   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1968   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1969   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1970   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1971   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1972   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1973   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1974   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1975   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1976   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1977   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1978   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1979   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1980   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1981   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1982   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1983   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1984   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1985   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1986   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1987   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1988   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1989   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1990   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1991   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1992   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1993   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1994   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1995   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1996   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1997   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1998   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1999   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
2000   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
2001   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
2002   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
2003   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
2004   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
2005   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
2006   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2007   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2008   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2009   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2010   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
2011   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
2012   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
2013   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
2014   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
2015   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
2016   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
2017   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
2018   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2019   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2020   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2021   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2022 #ifndef TEST_FLOAT
2023   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
2024   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
2025   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
2026   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
2027   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
2028   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
2029   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
2030   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
2031   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2032   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2033   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2034   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2035   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2036   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2037   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2038   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2039   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2040   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2041   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
2042   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
2043   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
2044   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
2045   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
2046   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
2047 #endif
2048   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
2049   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
2050   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
2051   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
2052   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
2053   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
2054   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
2055   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
2056 #ifndef TEST_FLOAT
2057   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2058   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2059   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2060   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2061   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2062   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2063   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2064   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2065 #endif
2066   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
2067   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
2068   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
2069   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
2070 #ifndef TEST_FLOAT
2071   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2072   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2073   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2074   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2075   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2076   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2077   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2078   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2079 #endif
2080   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2081   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2082   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
2083   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
2084   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
2085   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
2086   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
2087   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
2088 #ifndef TEST_FLOAT
2089   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2090   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2091   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2092   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2093 #endif
2094 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2095   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
2096   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
2097   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
2098   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
2099   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
2100   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
2101   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
2102   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
2103 # if LDBL_MIN_EXP <= -16381
2104   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2105   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2106   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2107   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2108   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
2109   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
2110   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
2111   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
2112 # endif
2113   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2114   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2115   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
2116   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
2117   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
2118   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
2119   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
2120   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
2121 #endif
2122   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
2123   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
2124   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
2125   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
2126   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
2127   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
2128   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
2129   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
2130 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2131   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2132   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2133   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
2134   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
2135   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2136   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2137   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2138   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2139 #endif
2140   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
2141   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
2142   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
2143   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
2144 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2145   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2146   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2147   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2148   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2149   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2150   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2151   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2152   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2153 #endif
2154   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2155   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2156   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
2157   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
2158   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
2159   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
2160   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
2161   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
2162 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2163   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2164   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2165   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2166   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2167 #endif
2168 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2169   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
2170   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
2171   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
2172   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
2173   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
2174   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
2175   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
2176   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
2177   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2178   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2179   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2180   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2181   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2182   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2183   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2184   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2185   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2186   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2187   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
2188   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
2189   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
2190   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
2191   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
2192   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
2193 #endif
2194   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
2195   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
2196   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
2197   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2198   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2199   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2200   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2201   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2202   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2203   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2204   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2205   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2206 #ifndef TEST_FLOAT
2207   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2208   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2209   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2210   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2211   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2212   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2213   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2214   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2215 #endif
2216   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2217   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2218   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2219   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2220   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2221   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2222   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2223   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2224 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2225   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2226   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2227   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2228   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2229   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2230   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2231   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2232   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2233   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2234   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2235   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2236   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2237   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2238   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2239   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2240   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2241   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2242   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2243   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2244   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2245   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2246   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2247   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2248   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2249 #endif
2250   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2251   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2252   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2253   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2254   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2255   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2256   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2257   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2258   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2259   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2260   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2261   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2262 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2263   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2264   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2265   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2266   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2267   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2268   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2269   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2270   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2271 #endif
2272   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2273   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2274   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2275   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2276   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2277   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2278   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2279   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2281   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2282   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2284   END (cacos, complex);
2287 static void
2288 cacosh_test (void)
2290   errno = 0;
2291   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2292   if (errno == ENOSYS)
2293     /* Function not implemented.  */
2294     return;
2296   START (cacosh);
2299   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2300   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2301   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2302   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2303   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2304   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2306   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2307   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2309   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2310   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2311   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2312   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2313   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2314   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2316   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2317   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2318   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2319   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2321   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2322   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2323   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2324   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2326   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2327   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2329   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2330   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2332   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2333   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2335   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2336   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2338   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2339   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2341   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2343   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2344   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2345   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2346   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2347   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2348   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2349   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2350   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2351   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2352   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2353   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2354   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2356   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2357   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2358   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2359   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2360   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2361   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2362   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2363   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2364   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2365   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2366   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2367   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2369   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2370   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2371   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2372   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2373   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2374   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2375   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2376   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2377 #ifndef TEST_FLOAT
2378   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2379   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2380   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2381   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2382   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2383   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2384   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2385   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2386 #endif
2387 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2388   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2389   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2390   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2391   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2392   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2393   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2394   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2395   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2396 #endif
2397   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2398 #ifndef TEST_FLOAT
2399   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2400 #endif
2401 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2402   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2403 #endif
2404   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2405   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2406   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2407   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2408   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2409   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2410   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2411   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2412 #ifndef TEST_FLOAT
2413   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2414   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2415   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2416   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2417   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2418   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2419   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2420   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2421 #endif
2422 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2423   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2424   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2425   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2426   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2427   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2428   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2429   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2430   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2431 #endif
2432   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2433   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2434   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2435   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2436   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2437   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2438   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2439   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2440   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2441   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2442   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2443   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2444   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2445   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2446   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2447   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2448   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2449   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2450   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2451   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2452   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2453   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2454   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2455   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2456   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2457   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2458   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2459   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2460   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2461   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2462   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2463   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2464   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2465   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2466   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2467   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2468   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2469   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2470   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2471   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2472   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2473   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2474   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2475   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2476   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2477   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2478   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2479   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2480 #ifndef TEST_FLOAT
2481   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2482   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2483   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2484   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2485   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2486   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2487   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2488   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2489   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2490   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2491   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2492   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2493   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2494   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2495   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2496   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2497 #endif
2498 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2499   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2500   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2501   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2502   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2503   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2504   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2505   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2506   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2507   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2508   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2509   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2510   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2511   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2512   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2513   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2514   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2515 #endif
2516   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2517   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2518   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2519   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2520   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2521   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2522   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2523   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2524   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2525   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2526   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2527   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2528   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2529   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2530   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2531   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2532   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2533   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2534   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2535   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2536   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2537   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2538   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2539   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2540 #ifndef TEST_FLOAT
2541   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2542   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2543   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2544   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2545   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2546   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2547   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2548   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2549   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2550   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2551   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2552   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2553   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2554   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2555   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2556   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2557   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2558   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2559   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2560   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2561   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2562   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2563   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2564   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2565 #endif
2566 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2567   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2568   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2569   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2570   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2571   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2572   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2573   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2574   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2575 # if LDBL_MIN_EXP <= -16381
2576   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2577   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2578   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2579   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2580   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2581   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2582   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2583   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2584 # endif
2585   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2586   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2587   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2588   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2589   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2590   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2591   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2592   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2593 #endif
2594 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2595   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2596   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2597   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2598   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2599   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2600   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2601   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2602   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2603   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2605   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2606   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2607   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2608   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2609   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2610   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2611   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2612   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2613   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2614   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2615   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2616   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2617   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2618   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2619 #endif
2620 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2621   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2622   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2623   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2624   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2625   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2626   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2627   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2628   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2629   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2630   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2631   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2632   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2633   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2634   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2635   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2636   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2637   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2638   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2639   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2640   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2641   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2642   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2643   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2644   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2645 #endif
2646   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2647   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2648   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2649   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2650   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2651   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2652   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2653   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2654   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2655   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2656   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2657   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2658   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2659   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2660   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2661   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2662   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2663   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2664   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2665   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2666   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2667   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2668   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2669   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2670   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2671   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2672   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2673   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2674   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2675   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2676   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2677   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2678   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2679   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2680   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2681   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2682   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2683   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2684   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2685   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2686   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2687   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2688   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2689   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2690   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2691   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2692   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2693   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2694   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2695   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2696   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2697   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2698   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2699   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2700   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2701   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2702   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2703   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2704   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2705   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2706   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2707   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2708   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2709   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2710 #ifndef TEST_FLOAT
2711   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2712   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2713   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2714   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2715   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2716   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2717   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2718   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2719   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2720   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2721   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2722   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2723   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2724   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2725   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2726   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2727   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2728   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2729   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2730   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2731   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2732   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2733   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2734   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2735 #endif
2736   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2737   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2738   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2739   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2740   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2741   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2742   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2743   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2744 #ifndef TEST_FLOAT
2745   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2746   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2747   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2748   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2749   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2750   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2751   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2752   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2753 #endif
2754   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2755   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2756   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2757   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2758 #ifndef TEST_FLOAT
2759   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2760   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2761   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2762   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2763   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2764   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2765   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2766   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2767 #endif
2768   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2769   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2770   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2771   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2772   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2773   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2774   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2775   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2776 #ifndef TEST_FLOAT
2777   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2778   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2779   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2780   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2781 #endif
2782 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2783   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2784   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2785   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2786   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2787   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2788   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2789   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2790   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2791 # if LDBL_MIN_EXP <= -16381
2792   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2793   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2794   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2795   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2796   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2797   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2798   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2799   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2800 # endif
2801   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2802   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2803   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2804   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2805   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2806   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2807   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2808   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2809 #endif
2810   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2811   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2812   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2813   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2814   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2815   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2816   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2817   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2818 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2819   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2820   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2821   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2822   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2823   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2824   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2825   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2826   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2827 #endif
2828   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2829   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2830   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2831   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2832 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2833   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2834   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2835   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2836   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2837   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2838   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2839   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2840   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2841 #endif
2842   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2843   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2844   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2845   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2846   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2847   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2848   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2849   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2850 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2851   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2852   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2853   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2854   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2855 #endif
2856 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2857   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2858   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2859   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2860   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2861   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2862   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2863   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2864   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2865   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2866   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2867   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2868   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2869   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2870   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2871   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2872   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2873   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2874   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2875   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2876   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2877   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2878   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2879   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2880   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2881 #endif
2882   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2883   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2884   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2885   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2886   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2887   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2888   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2889   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2890   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2891   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2892   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2893   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2894 #ifndef TEST_FLOAT
2895   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2896   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2897   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2898   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2899   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2900   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2901   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2902   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2903 #endif
2904   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2905   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2906   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2907   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2908   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2909   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2910   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2911   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2912 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2913   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2914   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2915   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2916   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2917   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2918   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2919   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2920   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2921   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2922   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2923   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2924   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2925   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2926   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2927   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2928   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2929   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2930   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2931   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2932   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2933   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2934   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2935   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2936   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2937 #endif
2938   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2939   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2940   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2941   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2942   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2943   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2944   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2945   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2946   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2947   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2948   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2949   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2950 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2951   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2952   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2953   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2954   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2955   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2956   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2957   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2958   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2959 #endif
2960   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2961   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2962   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2963   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2964   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2965   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2966   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2967   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2969   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2970   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2972   END (cacosh, complex);
2976 static void
2977 carg_test (void)
2979   START (carg);
2981   /* carg (x + iy) is specified as atan2 (y, x) */
2983   /* carg (x + i 0) == 0 for x > 0.  */
2984   TEST_c_f (carg, 2.0, 0, 0);
2985   /* carg (x - i 0) == -0 for x > 0.  */
2986   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2988   TEST_c_f (carg, 0, 0, 0);
2989   TEST_c_f (carg, 0, minus_zero, minus_zero);
2991   /* carg (x + i 0) == +pi for x < 0.  */
2992   TEST_c_f (carg, -2.0, 0, M_PIl);
2994   /* carg (x - i 0) == -pi for x < 0.  */
2995   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2997   TEST_c_f (carg, minus_zero, 0, M_PIl);
2998   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
3000   /* carg (+0 + i y) == pi/2 for y > 0.  */
3001   TEST_c_f (carg, 0, 2.0, M_PI_2l);
3003   /* carg (-0 + i y) == pi/2 for y > 0.  */
3004   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
3006   /* carg (+0 + i y) == -pi/2 for y < 0.  */
3007   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
3009   /* carg (-0 + i y) == -pi/2 for y < 0.  */
3010   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
3012   /* carg (inf + i y) == +0 for finite y > 0.  */
3013   TEST_c_f (carg, plus_infty, 2.0, 0);
3015   /* carg (inf + i y) == -0 for finite y < 0.  */
3016   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
3018   /* carg(x + i inf) == pi/2 for finite x.  */
3019   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
3021   /* carg(x - i inf) == -pi/2 for finite x.  */
3022   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
3024   /* carg (-inf + i y) == +pi for finite y > 0.  */
3025   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
3027   /* carg (-inf + i y) == -pi for finite y < 0.  */
3028   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
3030   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
3032   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
3034   TEST_c_f (carg, minus_infty, plus_infty, M_PI_34l);
3036   TEST_c_f (carg, minus_infty, minus_infty, -M_PI_34l);
3038   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
3040   END (carg);
3043 static void
3044 casin_test (void)
3046   errno = 0;
3047   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
3048   if (errno == ENOSYS)
3049     /* Function not implemented.  */
3050     return;
3052   START (casin);
3054   TEST_c_c (casin, 0, 0, 0.0, 0.0);
3055   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
3056   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
3057   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
3059   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
3060   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
3061   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
3062   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
3064   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
3065   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
3066   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
3067   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
3068   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
3069   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
3070   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
3071   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
3073   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
3074   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
3075   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
3076   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
3078   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
3079   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
3080   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
3081   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
3083   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
3084   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
3086   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
3087   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
3089   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3090   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
3092   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3093   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3095   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3096   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3098   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
3100   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
3101   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
3102   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
3103   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
3104   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
3105   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
3106   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
3107   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
3108   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
3109   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
3110   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
3111   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
3113   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
3114   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
3115   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
3116   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
3117   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
3118   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
3119   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
3120   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
3121   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
3122   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
3123   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
3124   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
3126   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3127   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3128   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
3129   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
3130   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3131   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
3132   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3133   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
3134 #ifndef TEST_FLOAT
3135   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3136   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3137   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
3138   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
3139   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3140   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
3141   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3142   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
3143 #endif
3144 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3145   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3146   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3147   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
3148   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
3149   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3150   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
3151   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3152   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
3153 #endif
3155   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
3156 #ifndef TEST_FLOAT
3157   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
3158 #endif
3159 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3160   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
3161 #endif
3163   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3164   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3165   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3166   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
3167   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3168   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
3169   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3170   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
3171 #ifndef TEST_FLOAT
3172   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3173   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3174   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3175   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
3176   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3177   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3178   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3179   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3180 #endif
3181 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3182   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3183   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3184   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3185   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
3186   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3187   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
3188   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3189   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
3190 #endif
3192   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3193   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3194   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
3195   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
3196   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3197   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3198   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3199   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3200   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3201   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3202   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3203   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3204   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3205   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3206   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3207   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3208   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3209   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3210   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3211   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3212   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3213   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3214   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3215   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3216   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3217   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3218   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3219   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3220   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3221   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3222   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3223   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3224   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3225   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3226   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3227   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3228   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3229   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3230   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3231   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3232   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3233   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3234   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3235   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3236   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3237   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3238   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3239   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3240 #ifndef TEST_FLOAT
3241   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3242   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3243   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3244   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3245   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3246   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3247   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3248   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3249   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3250   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3251   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3252   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3253   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3254   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3255   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3256   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3257 #endif
3258 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3259   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3260   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3261   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3262   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3263   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3264   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3265   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3266   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3267   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3268   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3269   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3270   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3271   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3272   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3273   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3274   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3275 #endif
3277   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3278   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3279   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L);
3280   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L);
3281   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3282   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L);
3283   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3284   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L);
3285   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3286   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3287   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3288   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3289   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3290   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L);
3291   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3292   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L);
3293   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L);
3294   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L);
3295   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L);
3296   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L);
3297   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3298   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L);
3299   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3300   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L);
3301 #ifndef TEST_FLOAT
3302   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3303   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3304   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L);
3305   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L);
3306   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3307   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L);
3308   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3309   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L);
3310   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3311   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3312   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3313   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3314   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3315   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3316   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3317   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3318   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L);
3319   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L);
3320   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L);
3321   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L);
3322   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3323   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L);
3324   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3325   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L);
3326 #endif
3327 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3328   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3329   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3330   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L);
3331   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L);
3332   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3333   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L);
3334   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3335   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L);
3336 # if LDBL_MIN_EXP <= -16381
3337   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3338   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3339   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3340   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION);
3341   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3342   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3343   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3344   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3345 # endif
3346   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L);
3347   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L);
3348   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L);
3349   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L);
3350   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3351   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L);
3352   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3353   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L);
3354 #endif
3355 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3356   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3357   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3358   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L);
3359   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L);
3360   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3361   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L);
3362   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3363   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L);
3364   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3365   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3366   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3367   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3368   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3369   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3370   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3371   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3372   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L);
3373   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L);
3374   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L);
3375   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L);
3376   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3377   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L);
3378   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3379   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L);
3380 #endif
3381 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3382   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3383   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3384   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L);
3385   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L);
3386   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3387   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L);
3388   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3389   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L);
3390   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3391   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3392   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3393   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION);
3394   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3395   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3396   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3397   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3398   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L);
3399   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L);
3400   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L);
3401   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L);
3402   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3403   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L);
3404   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3405   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L);
3406 #endif
3408   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3409   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3410   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3411   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3412   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3413   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3414   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3415   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3416   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3417   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3418   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3419   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3420   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3421   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3422   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3423   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3424   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3425   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3426   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3427   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3428   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3429   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3430   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3431   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3432   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3433   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3434   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3435   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3436   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3437   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3438   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3439   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3440   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3441   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3442   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3443   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3444   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3445   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3446   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3447   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3448   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3449   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3450   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3451   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3452   /* Bug 15319: underflow exception may be missing.  */
3453   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3454   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3455   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3456   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3457   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3458   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3459   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3460   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3461   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3462   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3463   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3464   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3465   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3466   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3467   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3468   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3469   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3470   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3471   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3472   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3473 #ifndef TEST_FLOAT
3474   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3475   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3476   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3477   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3478   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3479   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3480   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3481   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3482   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3483   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3484   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3485   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3486   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3487   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3488   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3489   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3490   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3491   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3492   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3493   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3494   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3495   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3496   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3497   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3498 #endif
3499   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3500   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3501   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3502   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3503   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3504   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3505   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3506   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3507 #ifndef TEST_FLOAT
3508   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3509   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3510   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3511   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3512   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3513   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3514   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3515   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3516 #endif
3517   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3518   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3519   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3520   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3521 #ifndef TEST_FLOAT
3522   /* Bug 15319: underflow exception may be missing.  */
3523   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3524   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3525   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3526   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3527   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3528   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3529   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3530   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3531 #endif
3532   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3533   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3534   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3535   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3536   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3537   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3538   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3539   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3540 #ifndef TEST_FLOAT
3541   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3542   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3543   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3544   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3545 #endif
3546 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3547   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3548   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3549   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3550   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3551   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3552   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3553   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3554   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3555 # if LDBL_MIN_EXP <= -16381
3556   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3557   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3558   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3559   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3560   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3561   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3562   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3563   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3564 # endif
3565   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3566   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3567   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3568   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3569   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3570   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3571   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3572   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3573 #endif
3574   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3575   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3576   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3577   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3578   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3579   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3580   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3581   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3582 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3583   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3584   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3585   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3586   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3587   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3588   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3589   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3590   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3591 #endif
3592   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3593   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3594   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3595   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3596 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3597   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3598   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3599   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3600   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3601   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3602   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3603   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3604   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3605 #endif
3606   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3607   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3608   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3609   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3610   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3611   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3612   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3613   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3614 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3615   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3616   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3617   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3618   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3619 #endif
3620 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3621   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3622   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3623   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3624   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3625   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3626   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3627   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3628   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3629   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3630   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3631   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3632   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3633   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3634   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3635   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3636   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3637   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3638   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3639   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3640   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3641   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3642   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3643   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3644   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3645 #endif
3646   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3647   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3648   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3649   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3650   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3651   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3652   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3653   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3654   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3655   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3656   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3657   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3658 #ifndef TEST_FLOAT
3659   /* Bug 15319: underflow exception may be missing.  */
3660   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3661   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3662   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3663   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3664   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3665   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3666   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3667   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3668 #endif
3669   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3670   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3671   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3672   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3673   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3674   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3675   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3676   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3677 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3678   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3679   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3680   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3681   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3682   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3683   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3684   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3685   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3686   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3687   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3688   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3689   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3690   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3691   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3692   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3693   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3694   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3695   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3696   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3697   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3698   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3699   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3700   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3701   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3702 #endif
3703   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3704   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3705   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3706   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3707   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3708   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3709   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3710   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3711   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3712   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3713   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3714   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3715 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3716   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3717   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3718   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3719   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3720   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3721   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3722   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3723   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3724 #endif
3725   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3726   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3727   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3728   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3729   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3730   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3731   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3732   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3734   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3735   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3737   END (casin, complex);
3741 static void
3742 casinh_test (void)
3744   errno = 0;
3745   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3746   if (errno == ENOSYS)
3747     /* Function not implemented.  */
3748     return;
3750   START (casinh);
3752   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3753   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3754   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3755   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3757   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3758   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3759   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3760   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3762   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3763   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3764   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3765   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3766   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3767   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3768   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3769   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3771   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3772   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3773   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3774   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3776   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3777   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3778   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3779   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3781   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3782   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3784   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3785   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3787   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3788   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3790   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3791   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3793   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3794   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3796   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3798   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3799   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3800   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3801   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3802   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3803   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3804   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3805   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3806   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3807   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3808   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3809   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3811   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3812   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3813   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3814   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3815   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3816   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3817   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3818   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3819   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3820   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3821   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3822   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3824   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3825   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3826   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3827   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3828   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3829   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3830   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3831   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3832 #ifndef TEST_FLOAT
3833   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3834   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3835   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3836   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3837   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3838   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3839   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3840   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3841 #endif
3842 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3843   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3844   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3845   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3846   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3847   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3848   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3849   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3850   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3851 #endif
3853   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3854 #ifndef TEST_FLOAT
3855   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3856 #endif
3857 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3858   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3859 #endif
3861   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3862   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3863   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3864   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3865   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3866   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3867   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3868   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3869 #ifndef TEST_FLOAT
3870   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3871   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3872   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3873   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3874   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3875   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3876   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3877   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3878 #endif
3879 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3880   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3881   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3882   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3883   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3884   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3885   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3886   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3887   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3888 #endif
3890   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3891   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3892   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3893   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3894   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3895   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3896   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3897   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3898   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3899   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3900   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3901   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3902   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3903   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3904   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3905   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3906   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3907   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3908   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3909   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3910   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3911   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3912   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3913   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3914   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3915   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3916   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3917   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3918   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3919   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3920   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3921   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3922   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3923   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3924   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3925   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3926   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3927   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3928   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3929   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3930   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3931   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3932   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3933   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3934   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3935   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3936   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3937   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3938 #ifndef TEST_FLOAT
3939   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3940   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3941   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3942   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3943   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3944   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3945   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3946   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3947   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3948   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3949   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3950   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3951   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3952   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3953   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3954   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3955 #endif
3956 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3957   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3958   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3959   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3960   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3961   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3962   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3963   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3964   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3965   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3966   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3967   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3968   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3969   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3970   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3971   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3972   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3973 #endif
3975   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3976   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3977   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L);
3978   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L);
3979   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3980   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L);
3981   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3982   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L);
3983   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3984   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3985   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L);
3986   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L);
3987   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3988   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3989   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3990   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3991   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3992   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3993   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L);
3994   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L);
3995   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L);
3996   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L);
3997   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L);
3998   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L);
3999 #ifndef TEST_FLOAT
4000   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
4001   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
4002   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L);
4003   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L);
4004   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
4005   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L);
4006   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
4007   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L);
4008   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4009   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4010   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4011   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4012   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4013   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4014   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4015   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4016   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4017   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4018   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L);
4019   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L);
4020   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L);
4021   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L);
4022   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L);
4023   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L);
4024 #endif
4025 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4026   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
4027   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
4028   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L);
4029   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L);
4030   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
4031   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L);
4032   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
4033   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L);
4034 # if LDBL_MIN_EXP <= -16381
4035   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4036   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4037   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4038   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4039   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4040   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4041   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4042   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION);
4043 # endif
4044   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4045   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4046   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L);
4047   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L);
4048   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L);
4049   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L);
4050   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L);
4051   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L);
4052 #endif
4053 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4054   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
4055   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
4056   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L);
4057   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L);
4058   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
4059   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L);
4060   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
4061   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L);
4062   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4063   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4064   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4065   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4066   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4067   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4068   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4069   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4070   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4071   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4072   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L);
4073   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L);
4074   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L);
4075   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L);
4076   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L);
4077   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L);
4078 #endif
4079 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4080   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
4081   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
4082   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L);
4083   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L);
4084   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
4085   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L);
4086   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
4087   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L);
4088   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4089   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4090   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4091   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4092   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4093   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4094   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4095   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION);
4096   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4097   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4098   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L);
4099   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L);
4100   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L);
4101   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L);
4102   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L);
4103   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L);
4104 #endif
4106   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
4107   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
4108   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
4109   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
4110   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
4111   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
4112   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
4113   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
4114   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
4115   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
4116   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
4117   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
4118   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4119   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4120   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4121   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4122   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
4123   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
4124   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
4125   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
4126   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
4127   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
4128   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
4129   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
4130   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4131   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4132   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
4133   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
4134   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4135   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
4136   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4137   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
4138   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4139   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4140   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4141   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4142   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4143   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4144   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4145   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4146   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4147   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4148   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
4149   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
4150   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4151   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4152   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4153   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
4154   /* Bug 15319: underflow exception may be missing.  */
4155   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4156   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4157   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4158   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
4159   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
4160   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
4161   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
4162   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
4163   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
4164   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
4165   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
4166   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
4167   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4168   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4169   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4170   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4171 #ifndef TEST_FLOAT
4172   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4173   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4174   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
4175   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
4176   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4177   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
4178   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4179   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
4180   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4181   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4182   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4183   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4184   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4185   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4186   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4187   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4188   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
4189   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
4190   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
4191   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
4192   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
4193   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
4194   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
4195   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
4196 #endif
4197   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4198   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4199   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4200   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4201   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4202   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4203   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4204   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4205 #ifndef TEST_FLOAT
4206   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4207   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4208   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4209   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4210   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4211   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4212   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4213   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4214 #endif
4215   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4216   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4217   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4218   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4219 #ifndef TEST_FLOAT
4220   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4221   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4222   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4223   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4224   /* Bug 15319: underflow exception may be missing.  */
4225   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4226   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4227   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4228   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4229 #endif
4230   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4231   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4232   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4233   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4234   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4235   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4236   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4237   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4238 #ifndef TEST_FLOAT
4239   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4240   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4241   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4242   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4243 #endif
4244 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4245   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4246   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4247   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4248   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4249   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4250   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4251   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4252   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4253 # if LDBL_MIN_EXP <= -16381
4254   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4255   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4256   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4257   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4258   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4259   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4260   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4261   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4262 # endif
4263   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4264   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4265   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4266   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4267   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4268   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4269   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4270   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4271 #endif
4272   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4273   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4274   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4275   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4276   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4277   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4278   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4279   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4280 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4281   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4282   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4283   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4284   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4285   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4286   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4287   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4288   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4289 #endif
4290   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4291   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4292   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4293   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4294 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4295   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4296   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4297   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4298   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4299   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4300   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4301   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4302   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4303 #endif
4304   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4305   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4306   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4307   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4308   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4309   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4310   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4311   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4312 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4313   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4314   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4315   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4316   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4317 #endif
4318 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4319   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4320   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4321   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4322   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4323   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4324   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4325   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4326   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4327   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4328   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4329   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4330   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4331   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4332   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4333   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4334   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4335   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4336   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4337   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4338   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4339   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4340   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4341   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4342   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4343 #endif
4344   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4345   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4346   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4347   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4348   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4349   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4350   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4351   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4352   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4353   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4354   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4355   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4356 #ifndef TEST_FLOAT
4357   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4358   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4359   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4360   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4361   /* Bug 15319: underflow exception may be missing.  */
4362   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4363   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4364   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4365   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4366 #endif
4367   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4368   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4369   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4370   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4371   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4372   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4373   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4374   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4375 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4376   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4377   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4378   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4379   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4380   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4381   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4382   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4383   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4384   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4385   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4386   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4387   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4388   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4389   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4390   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4391   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4392   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4393   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4394   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4395   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4396   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4397   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4398   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4399   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4400 #endif
4401   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4402   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4403   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4404   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4405   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4406   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4407   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4408   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4409   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4410   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4411   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4412   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4413 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4414   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4415   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4416   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4417   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4418   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4419   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4420   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4421   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4422 #endif
4423   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4424   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4425   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4426   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4427   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4428   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4429   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4430   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4432   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4433   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4435   END (casinh, complex);
4439 static void
4440 catan_test (void)
4442   errno = 0;
4443   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4444   if (errno == ENOSYS)
4445     /* Function not implemented.  */
4446     return;
4448   START (catan);
4450   TEST_c_c (catan, 0, 0, 0, 0);
4451   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4452   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4453   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4455   TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero);
4456   TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero);
4457   TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero);
4458   TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero);
4459   TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4460   TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4461   TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4462   TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4464   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4465   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4466   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4467   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4470   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4471   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4472   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4473   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4474   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4475   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4476   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4477   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4479   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4480   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4481   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4482   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4484   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4485   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4486   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4487   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4489   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4490   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4492   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4493   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4495   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4496   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4498   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4499   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4501   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4502   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4504   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4505   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4507   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4509   TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L);
4510   TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L);
4511   TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L);
4512   TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L);
4513   TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4514   TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4515   TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4516   TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4517 #ifndef TEST_FLOAT
4518   TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4519   TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4520   TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4521   TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4522   TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4523   TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4524   TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4525   TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4526 #endif
4527 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4528   TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4529   TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4530   TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4531   TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4532   TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4533   TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4534   TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4535   TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4536 #endif
4537   TEST_c_c (catan, 0x1p63L, 0.5L, 1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4538   TEST_c_c (catan, 0x1p63L, -0.5L, 1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4539   TEST_c_c (catan, -0x1p63L, 0.5L, -1.570796326794896619122901474391200998698L, 5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4540   TEST_c_c (catan, -0x1p63L, -0.5L, -1.570796326794896619122901474391200998698L, -5.877471754111437539843682686111228389007e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4541   TEST_c_c (catan, 0.5L, 0x1p63L, 1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4542   TEST_c_c (catan, -0.5L, 0x1p63L, -1.570796326794896619231321691639751442093L, 1.084202172485504434007452800869941711427e-19L);
4543   TEST_c_c (catan, 0.5L, -0x1p63L, 1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4544   TEST_c_c (catan, -0.5L, -0x1p63L, -1.570796326794896619231321691639751442093L, -1.084202172485504434007452800869941711427e-19L);
4545 #ifndef TEST_FLOAT
4546   TEST_c_c (catan, 0x1p511L, 0.5L, 1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4547   TEST_c_c (catan, 0x1p511L, -0.5L, 1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4548   TEST_c_c (catan, -0x1p511L, 0.5L, -1.570796326794896619231321691639751442099L, 1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4549   TEST_c_c (catan, -0x1p511L, -0.5L, -1.570796326794896619231321691639751442099L, -1.112536929253600691545116358666202032110e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4550   TEST_c_c (catan, 0.5L, 0x1p511L, 1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4551   TEST_c_c (catan, -0.5L, 0x1p511L, -1.570796326794896619231321691639751442099L, 1.491668146240041348658193063092586767475e-154L);
4552   TEST_c_c (catan, 0.5L, -0x1p511L, 1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4553   TEST_c_c (catan, -0.5L, -0x1p511L, -1.570796326794896619231321691639751442099L, -1.491668146240041348658193063092586767475e-154L);
4554 #endif
4555 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4556   TEST_c_c (catan, 0x1p8191L, 0.5L, 1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4557   TEST_c_c (catan, 0x1p8191L, -0.5L, 1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4558   TEST_c_c (catan, -0x1p8191L, 0.5L, -1.570796326794896619231321691639751442099L, 1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4559   TEST_c_c (catan, -0x1p8191L, -0.5L, -1.570796326794896619231321691639751442099L, -1.681051571556046753131338908660876301299e-4932L, UNDERFLOW_EXCEPTION);
4560   TEST_c_c (catan, 0.5L, 0x1p8191L, 1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4561   TEST_c_c (catan, -0.5L, 0x1p8191L, -1.570796326794896619231321691639751442099L, 1.833603867554847165621412392048483165956e-2466L);
4562   TEST_c_c (catan, 0.5L, -0x1p8191L, 1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4563   TEST_c_c (catan, -0.5L, -0x1p8191L, -1.570796326794896619231321691639751442099L, -1.833603867554847165621412392048483165956e-2466L);
4564 #endif
4565   TEST_c_c (catan, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L, 0.0L);
4566   TEST_c_c (catan, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L, -0.0L);
4567   TEST_c_c (catan, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L, 0.0L);
4568   TEST_c_c (catan, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L, -0.0L);
4569   TEST_c_c (catan, 0.0L, 0x1p100L, 1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4570   TEST_c_c (catan, -0.0L, 0x1p100L, -1.570796326794896619231321691639751442099L, 7.888609052210118054117285652827862296732e-31L);
4571   TEST_c_c (catan, 0.0L, -0x1p100L, 1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4572   TEST_c_c (catan, -0.0L, -0x1p100L, -1.570796326794896619231321691639751442099L, -7.888609052210118054117285652827862296732e-31L);
4573   TEST_c_c (catan, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L, 0.0L);
4574   TEST_c_c (catan, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L, -0.0L);
4575   TEST_c_c (catan, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L, 0.0L);
4576   TEST_c_c (catan, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L, -0.0L);
4577   TEST_c_c (catan, 0.0L, 0x1.fp127L, 1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4578   TEST_c_c (catan, -0.0L, 0x1.fp127L, -1.570796326794896619231321691639751442099L, 3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4579   TEST_c_c (catan, 0.0L, -0x1.fp127L, 1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4580   TEST_c_c (catan, -0.0L, -0x1.fp127L, -1.570796326794896619231321691639751442099L, -3.033533808573645181854803967025150136306e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4581   TEST_c_c (catan, 0x1.fp127L, 0x1.fp127L, 1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4582   TEST_c_c (catan, 0x1.fp127L, -0x1.fp127L, 1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4583   TEST_c_c (catan, -0x1.fp127L, 0x1.fp127L, -1.570796326794896619231321691639751442097L, 1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4584   TEST_c_c (catan, -0x1.fp127L, -0x1.fp127L, -1.570796326794896619231321691639751442097L, -1.516766904286822590927401983512575068153e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4585 #ifndef TEST_FLOAT
4586   TEST_c_c (catan, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4587   TEST_c_c (catan, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4588   TEST_c_c (catan, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4589   TEST_c_c (catan, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4590   TEST_c_c (catan, 0.0L, 0x1p900L, 1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4591   TEST_c_c (catan, -0.0L, 0x1p900L, -1.570796326794896619231321691639751442099L, 1.183052186166774710972751597518026531652e-271L);
4592   TEST_c_c (catan, 0.0L, -0x1p900L, 1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4593   TEST_c_c (catan, -0.0L, -0x1p900L, -1.570796326794896619231321691639751442099L, -1.183052186166774710972751597518026531652e-271L);
4594   TEST_c_c (catan, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4595   TEST_c_c (catan, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4596   TEST_c_c (catan, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4597   TEST_c_c (catan, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4598   TEST_c_c (catan, 0.0L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4599   TEST_c_c (catan, -0.0L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4600   TEST_c_c (catan, 0.0L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4601   TEST_c_c (catan, -0.0L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -5.742126086470197117652213464083623391533e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4602   TEST_c_c (catan, 0x1.fp1023L, 0x1.fp1023L, 1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4603   TEST_c_c (catan, 0x1.fp1023L, -0x1.fp1023L, 1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4604   TEST_c_c (catan, -0x1.fp1023L, 0x1.fp1023L, -1.570796326794896619231321691639751442099L, 2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4605   TEST_c_c (catan, -0x1.fp1023L, -0x1.fp1023L, -1.570796326794896619231321691639751442099L, -2.871063043235098558826106732041811695767e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4606 #endif
4607 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4608   TEST_c_c (catan, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4609   TEST_c_c (catan, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4610   TEST_c_c (catan, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4611   TEST_c_c (catan, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4612   TEST_c_c (catan, 0.0L, 0x1p10000L, 1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4613   TEST_c_c (catan, -0.0L, 0x1p10000L, -1.570796326794896619231321691639751442099L, 5.012372749206452009297555933742977749322e-3011L);
4614   TEST_c_c (catan, 0.0L, -0x1p10000L, 1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4615   TEST_c_c (catan, -0.0L, -0x1p10000L, -1.570796326794896619231321691639751442099L, -5.012372749206452009297555933742977749322e-3011L);
4616   TEST_c_c (catan, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4617   TEST_c_c (catan, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4618   TEST_c_c (catan, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4619   TEST_c_c (catan, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4620   TEST_c_c (catan, 0.0L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4621   TEST_c_c (catan, -0.0L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4622   TEST_c_c (catan, 0.0L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4623   TEST_c_c (catan, -0.0L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -8.676395208031209048419813722120651877672e-4933L, UNDERFLOW_EXCEPTION);
4624   TEST_c_c (catan, 0x1.fp16383L, 0x1.fp16383L, 1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4625   TEST_c_c (catan, 0x1.fp16383L, -0x1.fp16383L, 1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4626   TEST_c_c (catan, -0x1.fp16383L, 0x1.fp16383L, -1.570796326794896619231321691639751442099L, 4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4627   TEST_c_c (catan, -0x1.fp16383L, -0x1.fp16383L, -1.570796326794896619231321691639751442099L, -4.338197604015604524209906861060325938836e-4933L, UNDERFLOW_EXCEPTION);
4628 #endif
4629   TEST_c_c (catan, 0x1p-13L, 1.0L, 7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4630   TEST_c_c (catan, 0x1p-13L, -1.0L, 7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4631   TEST_c_c (catan, -0x1p-13L, 1.0L, -7.854286809755354140031716771044626356262e-1L, 4.852030264850939738801379894163661227127L);
4632   TEST_c_c (catan, -0x1p-13L, -1.0L, -7.854286809755354140031716771044626356262e-1L, -4.852030264850939738801379894163661227127L);
4633   TEST_c_c (catan, 1.0L, 0x1p-13L, 7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4634   TEST_c_c (catan, -1.0L, 0x1p-13L, -7.853981671227386080775748393881580082970e-1L, 6.103515609841754902688560615027452023669e-5L);
4635   TEST_c_c (catan, 1.0L, -0x1p-13L, 7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4636   TEST_c_c (catan, -1.0L, -0x1p-13L, -7.853981671227386080775748393881580082970e-1L, -6.103515609841754902688560615027452023669e-5L);
4637   TEST_c_c (catan, 0x1p-27L, 1.0L, 7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4638   TEST_c_c (catan, 0x1p-27L, -1.0L, 7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4639   TEST_c_c (catan, -0x1p-27L, 1.0L, -7.853981652600934588466178684534110069553e-1L, 9.704060527839234335310696652368086117807L);
4640   TEST_c_c (catan, -0x1p-27L, -1.0L, -7.853981652600934588466178684534110069553e-1L, -9.704060527839234335310696652368086117807L);
4641   TEST_c_c (catan, 1.0L, 0x1p-27L, 7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4642   TEST_c_c (catan, -1.0L, 0x1p-27L, -7.853981633974483234934486536343324763447e-1L, 3.725290298461914028034141143623846306386e-9L);
4643   TEST_c_c (catan, 1.0L, -0x1p-27L, 7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4644   TEST_c_c (catan, -1.0L, -0x1p-27L, -7.853981633974483234934486536343324763447e-1L, -3.725290298461914028034141143623846306386e-9L);
4645   TEST_c_c (catan, 0x1p-33L, 1.0L, 7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4646   TEST_c_c (catan, 0x1p-33L, -1.0L, 7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4647   TEST_c_c (catan, -0x1p-33L, 1.0L, -7.853981634265521400723945494331241018449e-1L, 1.178350206951907026009379309773625595762e1L);
4648   TEST_c_c (catan, -0x1p-33L, -1.0L, -7.853981634265521400723945494331241018449e-1L, -1.178350206951907026009379309773625595762e1L);
4649   TEST_c_c (catan, 1.0L, 0x1p-33L, 7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4650   TEST_c_c (catan, -1.0L, 0x1p-33L, -7.853981633974483096190489776088929224056e-1L, 5.820766091346740722643102318246316469910e-11L);
4651   TEST_c_c (catan, 1.0L, -0x1p-33L, 7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4652   TEST_c_c (catan, -1.0L, -0x1p-33L, -7.853981633974483096190489776088929224056e-1L, -5.820766091346740722643102318246316469910e-11L);
4653   TEST_c_c (catan, 0x1p-54L, 1.0L, 7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4654   TEST_c_c (catan, 0x1p-54L, -1.0L, 7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4655   TEST_c_c (catan, -0x1p-54L, 1.0L, -7.853981633974483234934486536343324763447e-1L, 1.906154746539849600897388334009985581467e1L);
4656   TEST_c_c (catan, -0x1p-54L, -1.0L, -7.853981633974483234934486536343324763447e-1L, -1.906154746539849600897388334009985581467e1L);
4657   TEST_c_c (catan, 1.0L, 0x1p-54L, 7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4658   TEST_c_c (catan, -1.0L, 0x1p-54L, -7.853981633974483096156608458198764914213e-1L, 2.775557561562891351059079170227049355775e-17L);
4659   TEST_c_c (catan, 1.0L, -0x1p-54L, 7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4660   TEST_c_c (catan, -1.0L, -0x1p-54L, -7.853981633974483096156608458198764914213e-1L, -2.775557561562891351059079170227049355775e-17L);
4661   TEST_c_c (catan, 0x1p-57L, 1.0L, 7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4662   TEST_c_c (catan, 0x1p-57L, -1.0L, 7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4663   TEST_c_c (catan, -0x1p-57L, 1.0L, -7.853981633974483113503843217966828154612e-1L, 2.010126823623841397309973152228712047720e1L);
4664   TEST_c_c (catan, -0x1p-57L, -1.0L, -7.853981633974483113503843217966828154612e-1L, -2.010126823623841397309973152228712047720e1L);
4665   TEST_c_c (catan, 1.0L, 0x1p-57L, 7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4666   TEST_c_c (catan, -1.0L, 0x1p-57L, -7.853981633974483096156608458198757330864e-1L, 3.469446951953614188823848962783813448721e-18L);
4667   TEST_c_c (catan, 1.0L, -0x1p-57L, 7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4668   TEST_c_c (catan, -1.0L, -0x1p-57L, -7.853981633974483096156608458198757330864e-1L, -3.469446951953614188823848962783813448721e-18L);
4669   TEST_c_c (catan, 0x1p-13L, 0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4670   TEST_c_c (catan, 0x1p-13L, -0x1.000002p0L, 7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4671   TEST_c_c (catan, -0x1p-13L, 0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, 4.852030056234795712498957387213592193975L);
4672   TEST_c_c (catan, -0x1p-13L, -0x1.000002p0L, -7.859169620684960844300240092596908675974e-1L, -4.852030056234795712498957387213592193975L);
4673   TEST_c_c (catan, 0x1.000002p0L, 0x1p-13L, 7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4674   TEST_c_c (catan, -0x1.000002p0L, 0x1p-13L, -7.853982267273793866654490522673596014524e-1L, 6.103514882246036852433556327261700380577e-5L);
4675   TEST_c_c (catan, 0x1.000002p0L, -0x1p-13L, 7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4676   TEST_c_c (catan, -0x1.000002p0L, -0x1p-13L, -7.853982267273793866654490522673596014524e-1L, -6.103514882246036852433556327261700380577e-5L);
4677   TEST_c_c (catan, 0x1p-13L, 0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4678   TEST_c_c (catan, 0x1p-13L, -0x0.ffffffp0L, 7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4679   TEST_c_c (catan, -0x1p-13L, 0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, 4.852030190345140708455871037447717761868L);
4680   TEST_c_c (catan, -0x1p-13L, -0x0.ffffffp0L, -7.851845403708474595909269086711426246675e-1L, -4.852030190345140708455871037447717761868L);
4681   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-13L, 7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4682   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-13L, -7.853981373204155542484315721351697277336e-1L, 6.103515973639646453881721999956617260502e-5L);
4683   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-13L, 7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4684   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-13L, -7.853981373204155542484315721351697277336e-1L, -6.103515973639646453881721999956617260502e-5L);
4685 #ifndef TEST_FLOAT
4686   TEST_c_c (catan, 0x1p-27L, 0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4687   TEST_c_c (catan, 0x1p-27L, -0x1.0000000000001p0L, 7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4688   TEST_c_c (catan, -0x1p-27L, 0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, 9.704060527839234168777242958594699810015L);
4689   TEST_c_c (catan, -0x1p-27L, -0x1.0000000000001p0L, -7.853981801612546526942695000283242525531e-1L, -9.704060527839234168777242958594699810015L);
4690   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-27L, 7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4691   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-27L, -7.853981633974484345157511161499711112683e-1L, 3.725290298461913200853528590596263270474e-9L);
4692   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-27L, 7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4693   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-27L, -7.853981633974484345157511161499711112683e-1L, -3.725290298461913200853528590596263270474e-9L);
4694   TEST_c_c (catan, 0x1p-27L, 0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4695   TEST_c_c (catan, 0x1p-27L, -0x0.fffffffffffff8p0L, 7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4696   TEST_c_c (catan, -0x1p-27L, 0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, 9.704060527839234252043969805481351363824L);
4697   TEST_c_c (catan, -0x1p-27L, -0x0.fffffffffffff8p0L, -7.853981578095128619227903983047292781021e-1L, -9.704060527839234252043969805481351363824L);
4698   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-27L, 7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4699   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-27L, -7.853981633974482679822974223765039144191e-1L, 3.725290298461914441624447420137706700965e-9L);
4700   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-27L, 7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4701   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-27L, -7.853981633974482679822974223765039144191e-1L, -3.725290298461914441624447420137706700965e-9L);
4702 #endif
4703 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4704   TEST_c_c (catan, 0x1p-33L, 0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4705   TEST_c_c (catan, 0x1p-33L, -0x1.0000000000000002p0L, 7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4706   TEST_c_c (catan, -0x1p-33L, 0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, 1.178350206951907025990405771755129268176e1L);
4707   TEST_c_c (catan, -0x1p-33L, -0x1.0000000000000002p0L, -7.853981638922134273801338071094141188767e-1L, -1.178350206951907025990405771755129268176e1L);
4708   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-33L, 7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4709   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-33L, -7.853981633974483096732590862331681441026e-1L, 5.820766091346740722012013594069507025615e-11L);
4710   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-33L, 7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4711   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-33L, -7.853981633974483096732590862331681441026e-1L, -5.820766091346740722012013594069507025615e-11L);
4712   TEST_c_c (catan, 0x1p-33L, 0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4713   TEST_c_c (catan, 0x1p-33L, -0x0.ffffffffffffffffp0L, 7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4714   TEST_c_c (catan, -0x1p-33L, 0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, 1.178350206951907026002603046195591193050e1L);
4715   TEST_c_c (catan, -0x1p-33L, -0x0.ffffffffffffffffp0L, -7.853981631937214964185249205444919953948e-1L, -1.178350206951907026002603046195591193050e1L);
4716   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-33L, 7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4717   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-33L, -7.853981633974483095919439232967553115548e-1L, 5.820766091346740722958646680334721192083e-11L);
4718   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-33L, 7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4719   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-33L, -7.853981633974483095919439232967553115548e-1L, -5.820766091346740722958646680334721192083e-11L);
4720 #endif
4721 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4722   TEST_c_c (catan, 0x1p-54L, 0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4723   TEST_c_c (catan, 0x1p-54L, -0x1.000000000000000000000000008p0L, 7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4724   TEST_c_c (catan, -0x1p-54L, 0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, 1.906154746539849600897388334009981267384e1L);
4725   TEST_c_c (catan, -0x1p-54L, -0x1.000000000000000000000000008p0L, -7.853981633974485455380535786656405610710e-1L, -1.906154746539849600897388334009981267384e1L);
4726   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-54L, 7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4727   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-54L, -7.853981633974483096156608458198888173729e-1L, 2.775557561562891351059079170226980932999e-17L);
4728   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-54L, 7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4729   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-54L, -7.853981633974483096156608458198888173729e-1L, -2.775557561562891351059079170226980932999e-17L);
4730   TEST_c_c (catan, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4731   TEST_c_c (catan, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4732   TEST_c_c (catan, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, 1.906154746539849600897388334009984040723e1L);
4733   TEST_c_c (catan, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -7.853981633974482124711461911186784339815e-1L, -1.906154746539849600897388334009984040723e1L);
4734   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4735   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -7.853981633974483096156608458198703284454e-1L, 2.775557561562891351059079170227083567164e-17L);
4736   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4737   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -7.853981633974483096156608458198703284454e-1L, -2.775557561562891351059079170227083567164e-17L);
4738 #endif
4739 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4740   TEST_c_c (catan, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4741   TEST_c_c (catan, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4742   TEST_c_c (catan, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, 2.010126823623841397309973152228712033275e1L);
4743   TEST_c_c (catan, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -7.853981633974483252281721296111395707566e-1L, -2.010126823623841397309973152228712033275e1L);
4744   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4745   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -7.853981633974483096156608458198758293829e-1L, 3.469446951953614188823848962783812780530e-18L);
4746   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4747   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -7.853981633974483096156608458198758293829e-1L, -3.469446951953614188823848962783812780530e-18L);
4748   TEST_c_c (catan, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4749   TEST_c_c (catan, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4750   TEST_c_c (catan, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, 2.010126823623841397309973152228712040498e1L);
4751   TEST_c_c (catan, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -7.853981633974483044114904178894544378135e-1L, -2.010126823623841397309973152228712040498e1L);
4752   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4753   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -7.853981633974483096156608458198756849381e-1L, 3.469446951953614188823848962783813782817e-18L);
4754   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4755   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -7.853981633974483096156608458198756849381e-1L, -3.469446951953614188823848962783813782817e-18L);
4756 #endif
4757   TEST_c_c (catan, 1.0L, 0x1p-64L, 7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4758   TEST_c_c (catan, 1.0L, -0x1p-64L, 7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4759   TEST_c_c (catan, -1.0L, 0x1p-64L, -7.853981633974483096156608458198757210500e-1L, 2.710505431213761085018632002174854278563e-20L);
4760   TEST_c_c (catan, -1.0L, -0x1p-64L, -7.853981633974483096156608458198757210500e-1L, -2.710505431213761085018632002174854278563e-20L);
4761   TEST_c_c (catan, 0x1p-64L, 1.0L, 7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4762   TEST_c_c (catan, -0x1p-64L, 1.0L, -7.853981633974483096292133729759445264744e-1L, 2.252728336819822255606004394739073846245e1L);
4763   TEST_c_c (catan, 0x1p-64L, -1.0L, 7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4764   TEST_c_c (catan, -0x1p-64L, -1.0L, -7.853981633974483096292133729759445264744e-1L, -2.252728336819822255606004394739073846245e1L);
4765   TEST_c_c (catan, 1.0L, 0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4766   TEST_c_c (catan, 1.0L, -0x1.3p-73L, 7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4767   TEST_c_c (catan, -1.0L, 0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, 6.286572655403010329022706059731717687100e-23L);
4768   TEST_c_c (catan, -1.0L, -0x1.3p-73L, -7.853981633974483096156608458198757210493e-1L, -6.286572655403010329022706059731717687100e-23L);
4769   TEST_c_c (catan, 0x1.3p-73L, 1.0L, 7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4770   TEST_c_c (catan, -0x1.3p-73L, 1.0L, -7.853981633974483096156922786831527361009e-1L, 2.556052055225464683726753902092495938633e1L);
4771   TEST_c_c (catan, 0x1.3p-73L, -1.0L, 7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4772   TEST_c_c (catan, -0x1.3p-73L, -1.0L, -7.853981633974483096156922786831527361009e-1L, -2.556052055225464683726753902092495938633e1L);
4773   TEST_c_c (catan, 1.0L, 0x1p-124L, 7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4774   TEST_c_c (catan, 1.0L, -0x1p-124L, 7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4775   TEST_c_c (catan, -1.0L, 0x1p-124L, -7.853981633974483096156608458198757210493e-1L, 2.350988701644575015937473074444491355637e-38L);
4776   TEST_c_c (catan, -1.0L, -0x1p-124L, -7.853981633974483096156608458198757210493e-1L, -2.350988701644575015937473074444491355637e-38L);
4777   TEST_c_c (catan, 0x1p-124L, 1.0L, 7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4778   TEST_c_c (catan, -0x1p-124L, 1.0L, -7.853981633974483096156608458198757210610e-1L, 4.332169878499658183857700759113603550472e1L);
4779   TEST_c_c (catan, 0x1p-124L, -1.0L, 7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4780   TEST_c_c (catan, -0x1p-124L, -1.0L, -7.853981633974483096156608458198757210610e-1L, -4.332169878499658183857700759113603550472e1L);
4781   TEST_c_c (catan, 0x1.000002p0L, 0x1p-126L, 7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4782   TEST_c_c (catan, 0x1.000002p0L, -0x1p-126L, 7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4783   TEST_c_c (catan, -0x1.000002p0L, 0x1p-126L, -7.853982230020895322927482174768220815493e-1L, 5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4784   TEST_c_c (catan, -0x1.000002p0L, -0x1p-126L, -7.853982230020895322927482174768220815493e-1L, -5.877471053462247139383742414506671233336e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4785   TEST_c_c (catan, 0x1p-126L, 0x1.000002p0L, 1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4786   TEST_c_c (catan, -0x1p-126L, 0x1.000002p0L, -1.570796326794896619231321691639702138295L, 8.317766196521665212523713550410777685446L);
4787   TEST_c_c (catan, 0x1p-126L, -0x1.000002p0L, 1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4788   TEST_c_c (catan, -0x1p-126L, -0x1.000002p0L, -1.570796326794896619231321691639702138295L, -8.317766196521665212523713550410777685446L);
4789   TEST_c_c (catan, 0x0.ffffffp0L, 0x1p-126L, 7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4790   TEST_c_c (catan, 0x0.ffffffp0L, -0x1p-126L, 7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4791   TEST_c_c (catan, -0x0.ffffffp0L, 0x1p-126L, -7.853981335951250337419109991749089175724e-1L, 5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4792   TEST_c_c (catan, -0x0.ffffffp0L, -0x1p-126L, -7.853981335951250337419109991749089175724e-1L, -5.877472104436064061535099214664320916184e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4793   TEST_c_c (catan, 0x1p-126L, 0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4794   TEST_c_c (catan, -0x1p-126L, 0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, 8.664339742098154951823135931565866792454L);
4795   TEST_c_c (catan, 0x1p-126L, -0x0.ffffffp0L, 9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4796   TEST_c_c (catan, -0x1p-126L, -0x0.ffffffp0L, -9.860761609136244031334147100512154160097e-32L, -8.664339742098154951823135931565866792454L);
4797 #ifndef TEST_FLOAT
4798   TEST_c_c (catan, 1.0L, 0x1p-512L, 7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4799   TEST_c_c (catan, 1.0L, -0x1p-512L, 7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4800   TEST_c_c (catan, -1.0L, 0x1p-512L, -7.853981633974483096156608458198757210493e-1L, 3.729170365600103371645482657731466918688e-155L);
4801   TEST_c_c (catan, -1.0L, -0x1p-512L, -7.853981633974483096156608458198757210493e-1L, -3.729170365600103371645482657731466918688e-155L);
4802   TEST_c_c (catan, 0x1p-512L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4803   TEST_c_c (catan, -0x1p-512L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.777922518136259718655200391540222897114e2L);
4804   TEST_c_c (catan, 0x1p-512L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4805   TEST_c_c (catan, -0x1p-512L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.777922518136259718655200391540222897114e2L);
4806   TEST_c_c (catan, 1.0L, 0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4807   TEST_c_c (catan, 1.0L, -0x1.3p-536L, 7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4808   TEST_c_c (catan, -1.0L, 0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, 2.639526015013529511588222179446290115084e-162L);
4809   TEST_c_c (catan, -1.0L, -0x1.3p-536L, -7.853981633974483096156608458198757210493e-1L, -2.639526015013529511588222179446290115084e-162L);
4810   TEST_c_c (catan, 0x1.3p-536L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4811   TEST_c_c (catan, -0x1.3p-536L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 1.860240928518819859673567751384928348958e2L);
4812   TEST_c_c (catan, 0x1.3p-536L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4813   TEST_c_c (catan, -0x1.3p-536L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -1.860240928518819859673567751384928348958e2L);
4814   TEST_c_c (catan, 1.0L, 0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4815   TEST_c_c (catan, 1.0L, -0x1p-1020L, 7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4816   TEST_c_c (catan, -1.0L, 0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, 4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4817   TEST_c_c (catan, -1.0L, -0x1p-1020L, -7.853981633974483096156608458198757210493e-1L, -4.450147717014402766180465434664808128438e-308L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4818   TEST_c_c (catan, 0x1p-1020L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4819   TEST_c_c (catan, -0x1p-1020L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 3.538516356758520804574969980043991380025e2L);
4820   TEST_c_c (catan, 0x1p-1020L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4821   TEST_c_c (catan, -0x1p-1020L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -3.538516356758520804574969980043991380025e2L);
4822   TEST_c_c (catan, 0x1.0000000000001p0L, 0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4823   TEST_c_c (catan, 0x1.0000000000001p0L, -0x1p-1022L, 7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4824   TEST_c_c (catan, -0x1.0000000000001p0L, 0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, 1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4825   TEST_c_c (catan, -0x1.0000000000001p0L, -0x1p-1022L, -7.853981633974484206379633083355174374608e-1L, -1.112536929253600444512293438042957369978e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4826   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4827   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, 1.836840028483855075506780244989950299369e1L);
4828   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4829   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000001p0L, -1.570796326794896619231321691639751442099L, -1.836840028483855075506780244989950299369e1L);
4830   TEST_c_c (catan, 0x0.fffffffffffff8p0L, 0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4831   TEST_c_c (catan, 0x0.fffffffffffff8p0L, -0x1p-1022L, 7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4832   TEST_c_c (catan, -0x0.fffffffffffff8p0L, 0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, 1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4833   TEST_c_c (catan, -0x0.fffffffffffff8p0L, -0x1p-1022L, -7.853981633974482541045096145620456183798e-1L, -1.112536929253600815061527818977844932790e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4834   TEST_c_c (catan, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4835   TEST_c_c (catan, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, 1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4836   TEST_c_c (catan, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4837   TEST_c_c (catan, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.002084180004486444624900488355118689113e-292L, -1.871497387511852332650969166374185305708e1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4838 #endif
4839 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4840   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4841   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-1022L, 7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4842   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, 1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4843   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-1022L, -7.853981633974483096698709544441509427467e-1L, -1.112536929253600691424494863099491450042e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4844   TEST_c_c (catan, 0x1p-1022L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4845   TEST_c_c (catan, -0x1p-1022L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4846   TEST_c_c (catan, 0x1p-1022L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4847   TEST_c_c (catan, -0x1p-1022L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4848   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4849   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4850   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, 1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4851   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -7.853981633974483095885557915077381101984e-1L, -1.112536929253600691605427106449557323148e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4852   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4853   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, 2.252728336819822255604649142023466965703e1L);
4854   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4855   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -2.052268400649188124723641491045245971623e-289L, -2.252728336819822255604649142023466965703e1L);
4856 #endif
4857 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4858   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4859   TEST_c_c (catan, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4860   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, 1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4861   TEST_c_c (catan, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -7.853981633974483096156608458198880470009e-1L, -1.112536929253600691545116358666174605957e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4862   TEST_c_c (catan, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4863   TEST_c_c (catan, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, 3.673680056967710139911330243728336427098e1L);
4864   TEST_c_c (catan, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4865   TEST_c_c (catan, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.570796326794896619231321691639751442099L, -3.673680056967710139911330243728336427098e1L);
4866   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4867   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4868   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, 1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4869   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -7.853981633974483096156608458198695580735e-1L, -1.112536929253600691545116358666215745186e-308L, UNDERFLOW_EXCEPTION_DOUBLE);
4870   TEST_c_c (catan, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4871   TEST_c_c (catan, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, 3.708337415995707405382191849801244331055e1L);
4872   TEST_c_c (catan, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4873   TEST_c_c (catan, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -9.025971879324147880346310405868788320726e-277L, -3.708337415995707405382191849801244331055e1L);
4874 #endif
4875 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4876   TEST_c_c (catan, 1.0L, 0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4877   TEST_c_c (catan, 1.0L, -0x1p-8192L, 7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4878   TEST_c_c (catan, -1.0L, 0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, 4.584009668887117914053530980121207914891e-2467L);
4879   TEST_c_c (catan, -1.0L, -0x1p-8192L, -7.853981633974483096156608458198757210493e-1L, -4.584009668887117914053530980121207914891e-2467L);
4880   TEST_c_c (catan, 0x1p-8192L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4881   TEST_c_c (catan, -0x1p-8192L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.839477425163815960027691385553420311121e3L);
4882   TEST_c_c (catan, 0x1p-8192L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4883   TEST_c_c (catan, -0x1p-8192L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.839477425163815960027691385553420311121e3L);
4884   TEST_c_c (catan, 1.0L, 0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4885   TEST_c_c (catan, 1.0L, -0x1.3p-8221L, 7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4886   TEST_c_c (catan, -1.0L, 0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, 1.013933025636421986471594877335044443409e-2475L);
4887   TEST_c_c (catan, -1.0L, -0x1.3p-8221L, -7.853981633974483096156608458198757210493e-1L, -1.013933025636421986471594877335044443409e-2475L);
4888   TEST_c_c (catan, 0x1.3p-8221L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4889   TEST_c_c (catan, -0x1.3p-8221L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.849442134153471837403071201841536297726e3L);
4890   TEST_c_c (catan, 0x1.3p-8221L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4891   TEST_c_c (catan, -0x1.3p-8221L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.849442134153471837403071201841536297726e3L);
4892   TEST_c_c (catan, 1.0L, 0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4893   TEST_c_c (catan, 1.0L, -0x1.3p-8246L, 7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4894   TEST_c_c (catan, -1.0L, 0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, 3.021755890954798419688924781486524472858e-2483L);
4895   TEST_c_c (catan, -1.0L, -0x1.3p-8246L, -7.853981633974483096156608458198757210493e-1L, -3.021755890954798419688924781486524472858e-2483L);
4896   TEST_c_c (catan, 0x1.3p-8246L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4897   TEST_c_c (catan, -0x1.3p-8246L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 2.858106473910471153770786603359763504827e3L);
4898   TEST_c_c (catan, 0x1.3p-8246L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4899   TEST_c_c (catan, -0x1.3p-8246L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -2.858106473910471153770786603359763504827e3L);
4900   TEST_c_c (catan, 1.0L, 0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4901   TEST_c_c (catan, 1.0L, -0x1p-16380L, 7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4902   TEST_c_c (catan, -1.0L, 0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, 6.724206286224187012525355634643505205196e-4932L);
4903   TEST_c_c (catan, -1.0L, -0x1p-16380L, -7.853981633974483096156608458198757210493e-1L, -6.724206286224187012525355634643505205196e-4932L);
4904   TEST_c_c (catan, 0x1p-16380L, 1.0L, 7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4905   TEST_c_c (catan, -0x1p-16380L, 1.0L, -7.853981633974483096156608458198757210493e-1L, 5.677221982376232056781839690803195180822e3L);
4906   TEST_c_c (catan, 0x1p-16380L, -1.0L, 7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4907   TEST_c_c (catan, -0x1p-16380L, -1.0L, -7.853981633974483096156608458198757210493e-1L, -5.677221982376232056781839690803195180822e3L);
4908   TEST_c_c (catan, 0x1.0000000000000002p0L, 0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4909   TEST_c_c (catan, 0x1.0000000000000002p0L, -0x1p-16382L, 7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4910   TEST_c_c (catan, -0x1.0000000000000002p0L, 0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, 1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4911   TEST_c_c (catan, -0x1.0000000000000002p0L, -0x1p-16382L, -7.853981633974483096698709544441509427467e-1L, -1.681051571556046752949078932066752571182e-4932L, UNDERFLOW_EXCEPTION);
4912   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4913   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, 2.218070977791824990137853294097378778927e1L);
4914   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4915   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000002p0L, -1.570796326794896619231321691639751442099L, -2.218070977791824990137853294097378778927e1L);
4916   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4917   TEST_c_c (catan, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4918   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, 1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4919   TEST_c_c (catan, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -7.853981633974483095885557915077381101984e-1L, -1.681051571556046753222468896957938166365e-4932L, UNDERFLOW_EXCEPTION);
4920   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4921   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, 2.252728336819822255604649142023466965703e1L);
4922   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4923   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -3.100992811520163369065387859792822623745e-4913L, -2.252728336819822255604649142023466965703e1L);
4924 # if LDBL_MANT_DIG >= 113
4925   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4926   TEST_c_c (catan, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4927   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, 1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4928   TEST_c_c (catan, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -7.853981633974483096156608458198758173458e-1L, -1.681051571556046753131338908660875977540e-4932L, UNDERFLOW_EXCEPTION);
4929   TEST_c_c (catan, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4930   TEST_c_c (catan, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, 3.916281570163690998207361486238697614441e1L);
4931   TEST_c_c (catan, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4932   TEST_c_c (catan, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.570796326794896619231321691639751442099L, -3.916281570163690998207361486238697614441e1L);
4933   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4934   TEST_c_c (catan, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4935   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, 1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4936   TEST_c_c (catan, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -7.853981633974483096156608458198756729010e-1L, -1.681051571556046753131338908660876463178e-4932L, UNDERFLOW_EXCEPTION);
4937   TEST_c_c (catan, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4938   TEST_c_c (catan, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, 3.950938929191688263678223092311606435623e1L);
4939   TEST_c_c (catan, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4940   TEST_c_c (catan, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.745703758805099310527547423749501866998e-4898L, -3.950938929191688263678223092311606435623e1L);
4941 # endif
4942 #endif
4944   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4945   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4947   END (catan, complex);
4950 static void
4951 catanh_test (void)
4953   errno = 0;
4954   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4955   if (errno == ENOSYS)
4956     /* Function not implemented.  */
4957     return;
4959   START (catanh);
4961   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4962   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4963   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4964   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4966   TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4967   TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4968   TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4969   TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4970   TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l);
4971   TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l);
4972   TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l);
4973   TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l);
4975   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4976   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4977   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4978   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4980   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4981   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4982   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4983   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4984   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4985   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4986   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4987   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4989   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4990   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4991   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4992   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4994   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4995   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4996   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4997   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4999   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
5000   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
5002   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
5003   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
5005   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
5006   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
5008   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
5009   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
5011   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5012   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5014   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5015   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5017   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
5019   TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
5020   TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
5021   TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
5022   TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
5023   TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L);
5024   TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L);
5025   TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L);
5026   TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L);
5027 #ifndef TEST_FLOAT
5028   TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
5029   TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
5030   TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
5031   TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
5032   TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L);
5033   TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L);
5034   TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L);
5035   TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L);
5036 #endif
5037 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5038   TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
5039   TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
5040   TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
5041   TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
5042   TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L);
5043   TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L);
5044   TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L);
5045   TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L);
5046 #endif
5047   TEST_c_c (catanh, 0x1p63L, 0.5L, 1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
5048   TEST_c_c (catanh, 0x1p63L, -0.5L, 1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
5049   TEST_c_c (catanh, -0x1p63L, 0.5L, -1.084202172485504434007452800869941711427e-19L, 1.570796326794896619231321691639751442093L);
5050   TEST_c_c (catanh, -0x1p63L, -0.5L, -1.084202172485504434007452800869941711427e-19L, -1.570796326794896619231321691639751442093L);
5051   TEST_c_c (catanh, 0.5L, 0x1p63L, 5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5052   TEST_c_c (catanh, -0.5L, 0x1p63L, -5.877471754111437539843682686111228389007e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5053   TEST_c_c (catanh, 0.5L, -0x1p63L, 5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5054   TEST_c_c (catanh, -0.5L, -0x1p63L, -5.877471754111437539843682686111228389007e-39L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5055 #ifndef TEST_FLOAT
5056   TEST_c_c (catanh, 0x1p511L, 0.5L, 1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
5057   TEST_c_c (catanh, 0x1p511L, -0.5L, 1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
5058   TEST_c_c (catanh, -0x1p511L, 0.5L, -1.491668146240041348658193063092586767475e-154L, 1.570796326794896619231321691639751442099L);
5059   TEST_c_c (catanh, -0x1p511L, -0.5L, -1.491668146240041348658193063092586767475e-154L, -1.570796326794896619231321691639751442099L);
5060   TEST_c_c (catanh, 0.5L, 0x1p511L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5061   TEST_c_c (catanh, -0.5L, 0x1p511L, -1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5062   TEST_c_c (catanh, 0.5L, -0x1p511L, 1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5063   TEST_c_c (catanh, -0.5L, -0x1p511L, -1.112536929253600691545116358666202032110e-308L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5064 #endif
5065 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5066   TEST_c_c (catanh, 0x1p8191L, 0.5L, 1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
5067   TEST_c_c (catanh, 0x1p8191L, -0.5L, 1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
5068   TEST_c_c (catanh, -0x1p8191L, 0.5L, -1.833603867554847165621412392048483165956e-2466L, 1.570796326794896619231321691639751442099L);
5069   TEST_c_c (catanh, -0x1p8191L, -0.5L, -1.833603867554847165621412392048483165956e-2466L, -1.570796326794896619231321691639751442099L);
5070   TEST_c_c (catanh, 0.5L, 0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5071   TEST_c_c (catanh, -0.5L, 0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5072   TEST_c_c (catanh, 0.5L, -0x1p8191L, 1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5073   TEST_c_c (catanh, -0.5L, -0x1p8191L, -1.681051571556046753131338908660876301299e-4932L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5074 #endif
5075   TEST_c_c (catanh, 0x1p100L, 0.0L, 7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
5076   TEST_c_c (catanh, 0x1p100L, -0.0L, 7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
5077   TEST_c_c (catanh, -0x1p100L, 0.0L, -7.888609052210118054117285652827862296732e-31L, 1.570796326794896619231321691639751442099L);
5078   TEST_c_c (catanh, -0x1p100L, -0.0L, -7.888609052210118054117285652827862296732e-31L, -1.570796326794896619231321691639751442099L);
5079   TEST_c_c (catanh, 0.0L, 0x1p100L, 0.0L, 1.570796326794896619231321691638962581193L);
5080   TEST_c_c (catanh, -0.0L, 0x1p100L, -0.0L, 1.570796326794896619231321691638962581193L);
5081   TEST_c_c (catanh, 0.0L, -0x1p100L, 0.0L, -1.570796326794896619231321691638962581193L);
5082   TEST_c_c (catanh, -0.0L, -0x1p100L, -0.0L, -1.570796326794896619231321691638962581193L);
5083   TEST_c_c (catanh, 0x1.fp127L, 0.0L, 3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5084   TEST_c_c (catanh, 0x1.fp127L, -0.0L, 3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5085   TEST_c_c (catanh, -0x1.fp127L, 0.0L, -3.033533808573645181854803967025150136306e-39L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5086   TEST_c_c (catanh, -0x1.fp127L, -0.0L, -3.033533808573645181854803967025150136306e-39L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_FLOAT);
5087   TEST_c_c (catanh, 0.0L, 0x1.fp127L, 0.0L, 1.570796326794896619231321691639751442096L);
5088   TEST_c_c (catanh, -0.0L, 0x1.fp127L, -0.0L, 1.570796326794896619231321691639751442096L);
5089   TEST_c_c (catanh, 0.0L, -0x1.fp127L, 0.0L, -1.570796326794896619231321691639751442096L);
5090   TEST_c_c (catanh, -0.0L, -0x1.fp127L, -0.0L, -1.570796326794896619231321691639751442096L);
5091   TEST_c_c (catanh, 0x1.fp127L, 0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5092   TEST_c_c (catanh, 0x1.fp127L, -0x1.fp127L, 1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5093   TEST_c_c (catanh, -0x1.fp127L, 0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, 1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5094   TEST_c_c (catanh, -0x1.fp127L, -0x1.fp127L, -1.516766904286822590927401983512575068153e-39L, -1.570796326794896619231321691639751442097L, UNDERFLOW_EXCEPTION_FLOAT);
5095 #ifndef TEST_FLOAT
5096   TEST_c_c (catanh, 0x1p900L, 0.0L, 1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
5097   TEST_c_c (catanh, 0x1p900L, -0.0L, 1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
5098   TEST_c_c (catanh, -0x1p900L, 0.0L, -1.183052186166774710972751597518026531652e-271L, 1.570796326794896619231321691639751442099L);
5099   TEST_c_c (catanh, -0x1p900L, -0.0L, -1.183052186166774710972751597518026531652e-271L, -1.570796326794896619231321691639751442099L);
5100   TEST_c_c (catanh, 0.0L, 0x1p900L, 0.0L, 1.570796326794896619231321691639751442099L);
5101   TEST_c_c (catanh, -0.0L, 0x1p900L, -0.0L, 1.570796326794896619231321691639751442099L);
5102   TEST_c_c (catanh, 0.0L, -0x1p900L, 0.0L, -1.570796326794896619231321691639751442099L);
5103   TEST_c_c (catanh, -0.0L, -0x1p900L, -0.0L, -1.570796326794896619231321691639751442099L);
5104   TEST_c_c (catanh, 0x1.fp1023L, 0.0L, 5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5105   TEST_c_c (catanh, 0x1.fp1023L, -0.0L, 5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5106   TEST_c_c (catanh, -0x1.fp1023L, 0.0L, -5.742126086470197117652213464083623391533e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5107   TEST_c_c (catanh, -0x1.fp1023L, -0.0L, -5.742126086470197117652213464083623391533e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5108   TEST_c_c (catanh, 0.0L, 0x1.fp1023L, 0.0L, 1.570796326794896619231321691639751442099L);
5109   TEST_c_c (catanh, -0.0L, 0x1.fp1023L, -0.0L, 1.570796326794896619231321691639751442099L);
5110   TEST_c_c (catanh, 0.0L, -0x1.fp1023L, 0.0L, -1.570796326794896619231321691639751442099L);
5111   TEST_c_c (catanh, -0.0L, -0x1.fp1023L, -0.0L, -1.570796326794896619231321691639751442099L);
5112   TEST_c_c (catanh, 0x1.fp1023L, 0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5113   TEST_c_c (catanh, 0x1.fp1023L, -0x1.fp1023L, 2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5114   TEST_c_c (catanh, -0x1.fp1023L, 0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5115   TEST_c_c (catanh, -0x1.fp1023L, -0x1.fp1023L, -2.871063043235098558826106732041811695767e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5116 #endif
5117 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5118   TEST_c_c (catanh, 0x1p10000L, 0.0L, 5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
5119   TEST_c_c (catanh, 0x1p10000L, -0.0L, 5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
5120   TEST_c_c (catanh, -0x1p10000L, 0.0L, -5.012372749206452009297555933742977749322e-3011L, 1.570796326794896619231321691639751442099L);
5121   TEST_c_c (catanh, -0x1p10000L, -0.0L, -5.012372749206452009297555933742977749322e-3011L, -1.570796326794896619231321691639751442099L);
5122   TEST_c_c (catanh, 0.0L, 0x1p10000L, 0.0L, 1.570796326794896619231321691639751442099L);
5123   TEST_c_c (catanh, -0.0L, 0x1p10000L, -0.0L, 1.570796326794896619231321691639751442099L);
5124   TEST_c_c (catanh, 0.0L, -0x1p10000L, 0.0L, -1.570796326794896619231321691639751442099L);
5125   TEST_c_c (catanh, -0.0L, -0x1p10000L, -0.0L, -1.570796326794896619231321691639751442099L);
5126   TEST_c_c (catanh, 0x1.fp16383L, 0.0L, 8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5127   TEST_c_c (catanh, 0x1.fp16383L, -0.0L, 8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5128   TEST_c_c (catanh, -0x1.fp16383L, 0.0L, -8.676395208031209048419813722120651877672e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5129   TEST_c_c (catanh, -0x1.fp16383L, -0.0L, -8.676395208031209048419813722120651877672e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5130   TEST_c_c (catanh, 0.0L, 0x1.fp16383L, 0.0L, 1.570796326794896619231321691639751442099L);
5131   TEST_c_c (catanh, -0.0L, 0x1.fp16383L, -0.0L, 1.570796326794896619231321691639751442099L);
5132   TEST_c_c (catanh, 0.0L, -0x1.fp16383L, 0.0L, -1.570796326794896619231321691639751442099L);
5133   TEST_c_c (catanh, -0.0L, -0x1.fp16383L, -0.0L, -1.570796326794896619231321691639751442099L);
5134   TEST_c_c (catanh, 0x1.fp16383L, 0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5135   TEST_c_c (catanh, 0x1.fp16383L, -0x1.fp16383L, 4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5136   TEST_c_c (catanh, -0x1.fp16383L, 0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5137   TEST_c_c (catanh, -0x1.fp16383L, -0x1.fp16383L, -4.338197604015604524209906861060325938836e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5138 #endif
5139   TEST_c_c (catanh, 0x1p-13L, 1.0L, 6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5140   TEST_c_c (catanh, 0x1p-13L, -1.0L, 6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5141   TEST_c_c (catanh, -0x1p-13L, 1.0L, -6.103515609841754902688560615027452023669e-5L, 7.853981671227386080775748393881580082970e-1L);
5142   TEST_c_c (catanh, -0x1p-13L, -1.0L, -6.103515609841754902688560615027452023669e-5L, -7.853981671227386080775748393881580082970e-1L);
5143   TEST_c_c (catanh, 1.0L, 0x1p-13L, 4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5144   TEST_c_c (catanh, -1.0L, 0x1p-13L, -4.852030264850939738801379894163661227127L, 7.854286809755354140031716771044626356262e-1L);
5145   TEST_c_c (catanh, 1.0L, -0x1p-13L, 4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5146   TEST_c_c (catanh, -1.0L, -0x1p-13L, -4.852030264850939738801379894163661227127L, -7.854286809755354140031716771044626356262e-1L);
5147   TEST_c_c (catanh, 0x1p-27L, 1.0L, 3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5148   TEST_c_c (catanh, 0x1p-27L, -1.0L, 3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5149   TEST_c_c (catanh, -0x1p-27L, 1.0L, -3.725290298461914028034141143623846306386e-9L, 7.853981633974483234934486536343324763447e-1L);
5150   TEST_c_c (catanh, -0x1p-27L, -1.0L, -3.725290298461914028034141143623846306386e-9L, -7.853981633974483234934486536343324763447e-1L);
5151   TEST_c_c (catanh, 1.0L, 0x1p-27L, 9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5152   TEST_c_c (catanh, -1.0L, 0x1p-27L, -9.704060527839234335310696652368086117807L, 7.853981652600934588466178684534110069553e-1L);
5153   TEST_c_c (catanh, 1.0L, -0x1p-27L, 9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5154   TEST_c_c (catanh, -1.0L, -0x1p-27L, -9.704060527839234335310696652368086117807L, -7.853981652600934588466178684534110069553e-1L);
5155   TEST_c_c (catanh, 0x1p-33L, 1.0L, 5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5156   TEST_c_c (catanh, 0x1p-33L, -1.0L, 5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5157   TEST_c_c (catanh, -0x1p-33L, 1.0L, -5.820766091346740722643102318246316469910e-11L, 7.853981633974483096190489776088929224056e-1L);
5158   TEST_c_c (catanh, -0x1p-33L, -1.0L, -5.820766091346740722643102318246316469910e-11L, -7.853981633974483096190489776088929224056e-1L);
5159   TEST_c_c (catanh, 1.0L, 0x1p-33L, 1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5160   TEST_c_c (catanh, -1.0L, 0x1p-33L, -1.178350206951907026009379309773625595762e1L, 7.853981634265521400723945494331241018449e-1L);
5161   TEST_c_c (catanh, 1.0L, -0x1p-33L, 1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5162   TEST_c_c (catanh, -1.0L, -0x1p-33L, -1.178350206951907026009379309773625595762e1L, -7.853981634265521400723945494331241018449e-1L);
5163   TEST_c_c (catanh, 0x1p-54L, 1.0L, 2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5164   TEST_c_c (catanh, 0x1p-54L, -1.0L, 2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5165   TEST_c_c (catanh, -0x1p-54L, 1.0L, -2.775557561562891351059079170227049355775e-17L, 7.853981633974483096156608458198764914213e-1L);
5166   TEST_c_c (catanh, -0x1p-54L, -1.0L, -2.775557561562891351059079170227049355775e-17L, -7.853981633974483096156608458198764914213e-1L);
5167   TEST_c_c (catanh, 1.0L, 0x1p-54L, 1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5168   TEST_c_c (catanh, -1.0L, 0x1p-54L, -1.906154746539849600897388334009985581467e1L, 7.853981633974483234934486536343324763447e-1L);
5169   TEST_c_c (catanh, 1.0L, -0x1p-54L, 1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5170   TEST_c_c (catanh, -1.0L, -0x1p-54L, -1.906154746539849600897388334009985581467e1L, -7.853981633974483234934486536343324763447e-1L);
5171   TEST_c_c (catanh, 0x1p-57L, 1.0L, 3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5172   TEST_c_c (catanh, 0x1p-57L, -1.0L, 3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5173   TEST_c_c (catanh, -0x1p-57L, 1.0L, -3.469446951953614188823848962783813448721e-18L, 7.853981633974483096156608458198757330864e-1L);
5174   TEST_c_c (catanh, -0x1p-57L, -1.0L, -3.469446951953614188823848962783813448721e-18L, -7.853981633974483096156608458198757330864e-1L);
5175   TEST_c_c (catanh, 1.0L, 0x1p-57L, 2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5176   TEST_c_c (catanh, -1.0L, 0x1p-57L, -2.010126823623841397309973152228712047720e1L, 7.853981633974483113503843217966828154612e-1L);
5177   TEST_c_c (catanh, 1.0L, -0x1p-57L, 2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5178   TEST_c_c (catanh, -1.0L, -0x1p-57L, -2.010126823623841397309973152228712047720e1L, -7.853981633974483113503843217966828154612e-1L);
5179   TEST_c_c (catanh, 0x1p-13L, 0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5180   TEST_c_c (catanh, 0x1p-13L, -0x1.000002p0L, 6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5181   TEST_c_c (catanh, -0x1p-13L, 0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, 7.853982267273793866654490522673596014524e-1L);
5182   TEST_c_c (catanh, -0x1p-13L, -0x1.000002p0L, -6.103514882246036852433556327261700380577e-5L, -7.853982267273793866654490522673596014524e-1L);
5183   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-13L, 4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5184   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-13L, -4.852030056234795712498957387213592193975L, 7.859169620684960844300240092596908675974e-1L);
5185   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-13L, 4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5186   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-13L, -4.852030056234795712498957387213592193975L, -7.859169620684960844300240092596908675974e-1L);
5187   TEST_c_c (catanh, 0x1p-13L, 0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5188   TEST_c_c (catanh, 0x1p-13L, -0x0.ffffffp0L, 6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5189   TEST_c_c (catanh, -0x1p-13L, 0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, 7.853981373204155542484315721351697277336e-1L);
5190   TEST_c_c (catanh, -0x1p-13L, -0x0.ffffffp0L, -6.103515973639646453881721999956617260502e-5L, -7.853981373204155542484315721351697277336e-1L);
5191   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-13L, 4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5192   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-13L, -4.852030190345140708455871037447717761868L, 7.851845403708474595909269086711426246675e-1L);
5193   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-13L, 4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5194   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-13L, -4.852030190345140708455871037447717761868L, -7.851845403708474595909269086711426246675e-1L);
5195 #ifndef TEST_FLOAT
5196   TEST_c_c (catanh, 0x1p-27L, 0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5197   TEST_c_c (catanh, 0x1p-27L, -0x1.0000000000001p0L, 3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5198   TEST_c_c (catanh, -0x1p-27L, 0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, 7.853981633974484345157511161499711112683e-1L);
5199   TEST_c_c (catanh, -0x1p-27L, -0x1.0000000000001p0L, -3.725290298461913200853528590596263270474e-9L, -7.853981633974484345157511161499711112683e-1L);
5200   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-27L, 9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5201   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-27L, -9.704060527839234168777242958594699810015L, 7.853981801612546526942695000283242525531e-1L);
5202   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-27L, 9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5203   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-27L, -9.704060527839234168777242958594699810015L, -7.853981801612546526942695000283242525531e-1L);
5204   TEST_c_c (catanh, 0x1p-27L, 0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5205   TEST_c_c (catanh, 0x1p-27L, -0x0.fffffffffffff8p0L, 3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5206   TEST_c_c (catanh, -0x1p-27L, 0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, 7.853981633974482679822974223765039144191e-1L);
5207   TEST_c_c (catanh, -0x1p-27L, -0x0.fffffffffffff8p0L, -3.725290298461914441624447420137706700965e-9L, -7.853981633974482679822974223765039144191e-1L);
5208   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-27L, 9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5209   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-27L, -9.704060527839234252043969805481351363824L, 7.853981578095128619227903983047292781021e-1L);
5210   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-27L, 9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5211   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-27L, -9.704060527839234252043969805481351363824L, -7.853981578095128619227903983047292781021e-1L);
5212 #endif
5213 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5214   TEST_c_c (catanh, 0x1p-33L, 0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5215   TEST_c_c (catanh, 0x1p-33L, -0x1.0000000000000002p0L, 5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5216   TEST_c_c (catanh, -0x1p-33L, 0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, 7.853981633974483096732590862331681441026e-1L);
5217   TEST_c_c (catanh, -0x1p-33L, -0x1.0000000000000002p0L, -5.820766091346740722012013594069507025615e-11L, -7.853981633974483096732590862331681441026e-1L);
5218   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-33L, 1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5219   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-33L, -1.178350206951907025990405771755129268176e1L, 7.853981638922134273801338071094141188767e-1L);
5220   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-33L, 1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5221   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-33L, -1.178350206951907025990405771755129268176e1L, -7.853981638922134273801338071094141188767e-1L);
5222   TEST_c_c (catanh, 0x1p-33L, 0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5223   TEST_c_c (catanh, 0x1p-33L, -0x0.ffffffffffffffffp0L, 5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5224   TEST_c_c (catanh, -0x1p-33L, 0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, 7.853981633974483095919439232967553115548e-1L);
5225   TEST_c_c (catanh, -0x1p-33L, -0x0.ffffffffffffffffp0L, -5.820766091346740722958646680334721192083e-11L, -7.853981633974483095919439232967553115548e-1L);
5226   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-33L, 1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5227   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-33L, -1.178350206951907026002603046195591193050e1L, 7.853981631937214964185249205444919953948e-1L);
5228   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-33L, 1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5229   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-33L, -1.178350206951907026002603046195591193050e1L, -7.853981631937214964185249205444919953948e-1L);
5230 #endif
5231 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5232   TEST_c_c (catanh, 0x1p-54L, 0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5233   TEST_c_c (catanh, 0x1p-54L, -0x1.000000000000000000000000008p0L, 2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5234   TEST_c_c (catanh, -0x1p-54L, 0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, 7.853981633974483096156608458198888173729e-1L);
5235   TEST_c_c (catanh, -0x1p-54L, -0x1.000000000000000000000000008p0L, -2.775557561562891351059079170226980932999e-17L, -7.853981633974483096156608458198888173729e-1L);
5236   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-54L, 1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5237   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-54L, -1.906154746539849600897388334009981267384e1L, 7.853981633974485455380535786656405610710e-1L);
5238   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-54L, 1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5239   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-54L, -1.906154746539849600897388334009981267384e1L, -7.853981633974485455380535786656405610710e-1L);
5240   TEST_c_c (catanh, 0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5241   TEST_c_c (catanh, 0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, 2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5242   TEST_c_c (catanh, -0x1p-54L, 0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, 7.853981633974483096156608458198703284454e-1L);
5243   TEST_c_c (catanh, -0x1p-54L, -0x0.ffffffffffffffffffffffffffcp0L, -2.775557561562891351059079170227083567164e-17L, -7.853981633974483096156608458198703284454e-1L);
5244   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, 1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5245   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-54L, -1.906154746539849600897388334009984040723e1L, 7.853981633974482124711461911186784339815e-1L);
5246   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, 1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5247   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-54L, -1.906154746539849600897388334009984040723e1L, -7.853981633974482124711461911186784339815e-1L);
5248 #endif
5249 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5250   TEST_c_c (catanh, 0x1p-57L, 0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5251   TEST_c_c (catanh, 0x1p-57L, -0x1.0000000000000000000000000001p0L, 3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5252   TEST_c_c (catanh, -0x1p-57L, 0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, 7.853981633974483096156608458198758293829e-1L);
5253   TEST_c_c (catanh, -0x1p-57L, -0x1.0000000000000000000000000001p0L, -3.469446951953614188823848962783812780530e-18L, -7.853981633974483096156608458198758293829e-1L);
5254   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-57L, 2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5255   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-57L, -2.010126823623841397309973152228712033275e1L, 7.853981633974483252281721296111395707566e-1L);
5256   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-57L, 2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5257   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-57L, -2.010126823623841397309973152228712033275e1L, -7.853981633974483252281721296111395707566e-1L);
5258   TEST_c_c (catanh, 0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5259   TEST_c_c (catanh, 0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, 3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5260   TEST_c_c (catanh, -0x1p-57L, 0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, 7.853981633974483096156608458198756849381e-1L);
5261   TEST_c_c (catanh, -0x1p-57L, -0x0.ffffffffffffffffffffffffffff8p0L, -3.469446951953614188823848962783813782817e-18L, -7.853981633974483096156608458198756849381e-1L);
5262   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, 2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5263   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-57L, -2.010126823623841397309973152228712040498e1L, 7.853981633974483044114904178894544378135e-1L);
5264   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, 2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5265   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-57L, -2.010126823623841397309973152228712040498e1L, -7.853981633974483044114904178894544378135e-1L);
5266 #endif
5267   TEST_c_c (catanh, 1.0L, 0x1p-64L, 2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5268   TEST_c_c (catanh, 1.0L, -0x1p-64L, 2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5269   TEST_c_c (catanh, -1.0L, 0x1p-64L, -2.252728336819822255606004394739073846245e1L, 7.853981633974483096292133729759445264744e-1L);
5270   TEST_c_c (catanh, -1.0L, -0x1p-64L, -2.252728336819822255606004394739073846245e1L, -7.853981633974483096292133729759445264744e-1L);
5271   TEST_c_c (catanh, 0x1p-64L, 1.0L, 2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5272   TEST_c_c (catanh, -0x1p-64L, 1.0L, -2.710505431213761085018632002174854278563e-20L, 7.853981633974483096156608458198757210500e-1L);
5273   TEST_c_c (catanh, 0x1p-64L, -1.0L, 2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5274   TEST_c_c (catanh, -0x1p-64L, -1.0L, -2.710505431213761085018632002174854278563e-20L, -7.853981633974483096156608458198757210500e-1L);
5275   TEST_c_c (catanh, 1.0L, 0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5276   TEST_c_c (catanh, 1.0L, -0x1.3p-73L, 2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5277   TEST_c_c (catanh, -1.0L, 0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, 7.853981633974483096156922786831527361009e-1L);
5278   TEST_c_c (catanh, -1.0L, -0x1.3p-73L, -2.556052055225464683726753902092495938633e1L, -7.853981633974483096156922786831527361009e-1L);
5279   TEST_c_c (catanh, 0x1.3p-73L, 1.0L, 6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5280   TEST_c_c (catanh, -0x1.3p-73L, 1.0L, -6.286572655403010329022706059731717687100e-23L, 7.853981633974483096156608458198757210493e-1L);
5281   TEST_c_c (catanh, 0x1.3p-73L, -1.0L, 6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5282   TEST_c_c (catanh, -0x1.3p-73L, -1.0L, -6.286572655403010329022706059731717687100e-23L, -7.853981633974483096156608458198757210493e-1L);
5283   TEST_c_c (catanh, 1.0L, 0x1p-124L, 4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5284   TEST_c_c (catanh, 1.0L, -0x1p-124L, 4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5285   TEST_c_c (catanh, -1.0L, 0x1p-124L, -4.332169878499658183857700759113603550472e1L, 7.853981633974483096156608458198757210610e-1L);
5286   TEST_c_c (catanh, -1.0L, -0x1p-124L, -4.332169878499658183857700759113603550472e1L, -7.853981633974483096156608458198757210610e-1L);
5287   TEST_c_c (catanh, 0x1p-124L, 1.0L, 2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5288   TEST_c_c (catanh, -0x1p-124L, 1.0L, -2.350988701644575015937473074444491355637e-38L, 7.853981633974483096156608458198757210493e-1L);
5289   TEST_c_c (catanh, 0x1p-124L, -1.0L, 2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5290   TEST_c_c (catanh, -0x1p-124L, -1.0L, -2.350988701644575015937473074444491355637e-38L, -7.853981633974483096156608458198757210493e-1L);
5291   TEST_c_c (catanh, 0x1.000002p0L, 0x1p-126L, 8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5292   TEST_c_c (catanh, 0x1.000002p0L, -0x1p-126L, 8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5293   TEST_c_c (catanh, -0x1.000002p0L, 0x1p-126L, -8.317766196521665212523713550410777685446L, 1.570796326794896619231321691639702138295L);
5294   TEST_c_c (catanh, -0x1.000002p0L, -0x1p-126L, -8.317766196521665212523713550410777685446L, -1.570796326794896619231321691639702138295L);
5295   TEST_c_c (catanh, 0x1p-126L, 0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5296   TEST_c_c (catanh, -0x1p-126L, 0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, 7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5297   TEST_c_c (catanh, 0x1p-126L, -0x1.000002p0L, 5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5298   TEST_c_c (catanh, -0x1p-126L, -0x1.000002p0L, -5.877471053462247139383742414506671233336e-39L, -7.853982230020895322927482174768220815493e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5299   TEST_c_c (catanh, 0x0.ffffffp0L, 0x1p-126L, 8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5300   TEST_c_c (catanh, 0x0.ffffffp0L, -0x1p-126L, 8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5301   TEST_c_c (catanh, -0x0.ffffffp0L, 0x1p-126L, -8.664339742098154951823135931565866792454L, 9.860761609136244031334147100512154160097e-32L);
5302   TEST_c_c (catanh, -0x0.ffffffp0L, -0x1p-126L, -8.664339742098154951823135931565866792454L, -9.860761609136244031334147100512154160097e-32L);
5303   TEST_c_c (catanh, 0x1p-126L, 0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5304   TEST_c_c (catanh, -0x1p-126L, 0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, 7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5305   TEST_c_c (catanh, 0x1p-126L, -0x0.ffffffp0L, 5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5306   TEST_c_c (catanh, -0x1p-126L, -0x0.ffffffp0L, -5.877472104436064061535099214664320916184e-39L, -7.853981335951250337419109991749089175724e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5307 #ifndef TEST_FLOAT
5308   TEST_c_c (catanh, 1.0L, 0x1p-512L, 1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5309   TEST_c_c (catanh, 1.0L, -0x1p-512L, 1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5310   TEST_c_c (catanh, -1.0L, 0x1p-512L, -1.777922518136259718655200391540222897114e2L, 7.853981633974483096156608458198757210493e-1L);
5311   TEST_c_c (catanh, -1.0L, -0x1p-512L, -1.777922518136259718655200391540222897114e2L, -7.853981633974483096156608458198757210493e-1L);
5312   TEST_c_c (catanh, 0x1p-512L, 1.0L, 3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5313   TEST_c_c (catanh, -0x1p-512L, 1.0L, -3.729170365600103371645482657731466918688e-155L, 7.853981633974483096156608458198757210493e-1L);
5314   TEST_c_c (catanh, 0x1p-512L, -1.0L, 3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5315   TEST_c_c (catanh, -0x1p-512L, -1.0L, -3.729170365600103371645482657731466918688e-155L, -7.853981633974483096156608458198757210493e-1L);
5316   TEST_c_c (catanh, 1.0L, 0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5317   TEST_c_c (catanh, 1.0L, -0x1.3p-536L, 1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5318   TEST_c_c (catanh, -1.0L, 0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, 7.853981633974483096156608458198757210493e-1L);
5319   TEST_c_c (catanh, -1.0L, -0x1.3p-536L, -1.860240928518819859673567751384928348958e2L, -7.853981633974483096156608458198757210493e-1L);
5320   TEST_c_c (catanh, 0x1.3p-536L, 1.0L, 2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5321   TEST_c_c (catanh, -0x1.3p-536L, 1.0L, -2.639526015013529511588222179446290115084e-162L, 7.853981633974483096156608458198757210493e-1L);
5322   TEST_c_c (catanh, 0x1.3p-536L, -1.0L, 2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5323   TEST_c_c (catanh, -0x1.3p-536L, -1.0L, -2.639526015013529511588222179446290115084e-162L, -7.853981633974483096156608458198757210493e-1L);
5324   TEST_c_c (catanh, 1.0L, 0x1p-1020L, 3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5325   TEST_c_c (catanh, 1.0L, -0x1p-1020L, 3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5326   TEST_c_c (catanh, -1.0L, 0x1p-1020L, -3.538516356758520804574969980043991380025e2L, 7.853981633974483096156608458198757210493e-1L);
5327   TEST_c_c (catanh, -1.0L, -0x1p-1020L, -3.538516356758520804574969980043991380025e2L, -7.853981633974483096156608458198757210493e-1L);
5328   TEST_c_c (catanh, 0x1p-1020L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5329   TEST_c_c (catanh, -0x1p-1020L, 1.0L, -4.450147717014402766180465434664808128438e-308L, 7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5330   TEST_c_c (catanh, 0x1p-1020L, -1.0L, 4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5331   TEST_c_c (catanh, -0x1p-1020L, -1.0L, -4.450147717014402766180465434664808128438e-308L, -7.853981633974483096156608458198757210493e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5332   TEST_c_c (catanh, 0x1.0000000000001p0L, 0x1p-1022L, 1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5333   TEST_c_c (catanh, 0x1.0000000000001p0L, -0x1p-1022L, 1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5334   TEST_c_c (catanh, -0x1.0000000000001p0L, 0x1p-1022L, -1.836840028483855075506780244989950299369e1L, 1.570796326794896619231321691639751442099L);
5335   TEST_c_c (catanh, -0x1.0000000000001p0L, -0x1p-1022L, -1.836840028483855075506780244989950299369e1L, -1.570796326794896619231321691639751442099L);
5336   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5337   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, 7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5338   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000001p0L, 1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5339   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000001p0L, -1.112536929253600444512293438042957369978e-308L, -7.853981633974484206379633083355174374608e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5340   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, 0x1p-1022L, 1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5341   TEST_c_c (catanh, 0x0.fffffffffffff8p0L, -0x1p-1022L, 1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5342   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, 0x1p-1022L, -1.871497387511852332650969166374185305708e1L, 1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5343   TEST_c_c (catanh, -0x0.fffffffffffff8p0L, -0x1p-1022L, -1.871497387511852332650969166374185305708e1L, -1.002084180004486444624900488355118689113e-292L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5344   TEST_c_c (catanh, 0x1p-1022L, 0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5345   TEST_c_c (catanh, -0x1p-1022L, 0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, 7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5346   TEST_c_c (catanh, 0x1p-1022L, -0x0.fffffffffffff8p0L, 1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5347   TEST_c_c (catanh, -0x1p-1022L, -0x0.fffffffffffff8p0L, -1.112536929253600815061527818977844932790e-308L, -7.853981633974482541045096145620456183798e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5348 #endif
5349 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5350   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-1022L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5351   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-1022L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5352   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-1022L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5353   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-1022L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5354   TEST_c_c (catanh, 0x1p-1022L, 0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5355   TEST_c_c (catanh, -0x1p-1022L, 0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5356   TEST_c_c (catanh, 0x1p-1022L, -0x1.0000000000000002p0L, 1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5357   TEST_c_c (catanh, -0x1p-1022L, -0x1.0000000000000002p0L, -1.112536929253600691424494863099491450042e-308L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5358   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-1022L, 2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5359   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-1022L, 2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5360   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-1022L, -2.252728336819822255604649142023466965703e1L, 2.052268400649188124723641491045245971623e-289L);
5361   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-1022L, -2.252728336819822255604649142023466965703e1L, -2.052268400649188124723641491045245971623e-289L);
5362   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5363   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5364   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffp0L, 1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5365   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffp0L, -1.112536929253600691605427106449557323148e-308L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5366 #endif
5367 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5368   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, 0x1p-1022L, 3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5369   TEST_c_c (catanh, 0x1.000000000000000000000000008p0L, -0x1p-1022L, 3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5370   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, 0x1p-1022L, -3.673680056967710139911330243728336427098e1L, 1.570796326794896619231321691639751442099L);
5371   TEST_c_c (catanh, -0x1.000000000000000000000000008p0L, -0x1p-1022L, -3.673680056967710139911330243728336427098e1L, -1.570796326794896619231321691639751442099L);
5372   TEST_c_c (catanh, 0x1p-1022L, 0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5373   TEST_c_c (catanh, -0x1p-1022L, 0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, 7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5374   TEST_c_c (catanh, 0x1p-1022L, -0x1.000000000000000000000000008p0L, 1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5375   TEST_c_c (catanh, -0x1p-1022L, -0x1.000000000000000000000000008p0L, -1.112536929253600691545116358666174605957e-308L, -7.853981633974483096156608458198880470009e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5376   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, 3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5377   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, 3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5378   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-1022L, -3.708337415995707405382191849801244331055e1L, 9.025971879324147880346310405868788320726e-277L);
5379   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-1022L, -3.708337415995707405382191849801244331055e1L, -9.025971879324147880346310405868788320726e-277L);
5380   TEST_c_c (catanh, 0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5381   TEST_c_c (catanh, -0x1p-1022L, 0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, 7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5382   TEST_c_c (catanh, 0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, 1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5383   TEST_c_c (catanh, -0x1p-1022L, -0x0.ffffffffffffffffffffffffffcp0L, -1.112536929253600691545116358666215745186e-308L, -7.853981633974483096156608458198695580735e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5384 #endif
5385 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5386   TEST_c_c (catanh, 1.0L, 0x1p-8192L, 2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5387   TEST_c_c (catanh, 1.0L, -0x1p-8192L, 2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5388   TEST_c_c (catanh, -1.0L, 0x1p-8192L, -2.839477425163815960027691385553420311121e3L, 7.853981633974483096156608458198757210493e-1L);
5389   TEST_c_c (catanh, -1.0L, -0x1p-8192L, -2.839477425163815960027691385553420311121e3L, -7.853981633974483096156608458198757210493e-1L);
5390   TEST_c_c (catanh, 0x1p-8192L, 1.0L, 4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5391   TEST_c_c (catanh, -0x1p-8192L, 1.0L, -4.584009668887117914053530980121207914891e-2467L, 7.853981633974483096156608458198757210493e-1L);
5392   TEST_c_c (catanh, 0x1p-8192L, -1.0L, 4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5393   TEST_c_c (catanh, -0x1p-8192L, -1.0L, -4.584009668887117914053530980121207914891e-2467L, -7.853981633974483096156608458198757210493e-1L);
5394   TEST_c_c (catanh, 1.0L, 0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5395   TEST_c_c (catanh, 1.0L, -0x1.3p-8221L, 2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5396   TEST_c_c (catanh, -1.0L, 0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, 7.853981633974483096156608458198757210493e-1L);
5397   TEST_c_c (catanh, -1.0L, -0x1.3p-8221L, -2.849442134153471837403071201841536297726e3L, -7.853981633974483096156608458198757210493e-1L);
5398   TEST_c_c (catanh, 0x1.3p-8221L, 1.0L, 1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5399   TEST_c_c (catanh, -0x1.3p-8221L, 1.0L, -1.013933025636421986471594877335044443409e-2475L, 7.853981633974483096156608458198757210493e-1L);
5400   TEST_c_c (catanh, 0x1.3p-8221L, -1.0L, 1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5401   TEST_c_c (catanh, -0x1.3p-8221L, -1.0L, -1.013933025636421986471594877335044443409e-2475L, -7.853981633974483096156608458198757210493e-1L);
5402   TEST_c_c (catanh, 1.0L, 0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5403   TEST_c_c (catanh, 1.0L, -0x1.3p-8246L, 2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5404   TEST_c_c (catanh, -1.0L, 0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, 7.853981633974483096156608458198757210493e-1L);
5405   TEST_c_c (catanh, -1.0L, -0x1.3p-8246L, -2.858106473910471153770786603359763504827e3L, -7.853981633974483096156608458198757210493e-1L);
5406   TEST_c_c (catanh, 0x1.3p-8246L, 1.0L, 3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5407   TEST_c_c (catanh, -0x1.3p-8246L, 1.0L, -3.021755890954798419688924781486524472858e-2483L, 7.853981633974483096156608458198757210493e-1L);
5408   TEST_c_c (catanh, 0x1.3p-8246L, -1.0L, 3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5409   TEST_c_c (catanh, -0x1.3p-8246L, -1.0L, -3.021755890954798419688924781486524472858e-2483L, -7.853981633974483096156608458198757210493e-1L);
5410   TEST_c_c (catanh, 1.0L, 0x1p-16380L, 5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5411   TEST_c_c (catanh, 1.0L, -0x1p-16380L, 5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5412   TEST_c_c (catanh, -1.0L, 0x1p-16380L, -5.677221982376232056781839690803195180822e3L, 7.853981633974483096156608458198757210493e-1L);
5413   TEST_c_c (catanh, -1.0L, -0x1p-16380L, -5.677221982376232056781839690803195180822e3L, -7.853981633974483096156608458198757210493e-1L);
5414   TEST_c_c (catanh, 0x1p-16380L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5415   TEST_c_c (catanh, -0x1p-16380L, 1.0L, -6.724206286224187012525355634643505205196e-4932L, 7.853981633974483096156608458198757210493e-1L);
5416   TEST_c_c (catanh, 0x1p-16380L, -1.0L, 6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5417   TEST_c_c (catanh, -0x1p-16380L, -1.0L, -6.724206286224187012525355634643505205196e-4932L, -7.853981633974483096156608458198757210493e-1L);
5418   TEST_c_c (catanh, 0x1.0000000000000002p0L, 0x1p-16382L, 2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5419   TEST_c_c (catanh, 0x1.0000000000000002p0L, -0x1p-16382L, 2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5420   TEST_c_c (catanh, -0x1.0000000000000002p0L, 0x1p-16382L, -2.218070977791824990137853294097378778927e1L, 1.570796326794896619231321691639751442099L);
5421   TEST_c_c (catanh, -0x1.0000000000000002p0L, -0x1p-16382L, -2.218070977791824990137853294097378778927e1L, -1.570796326794896619231321691639751442099L);
5422   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5423   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, 7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5424   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000002p0L, 1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5425   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000002p0L, -1.681051571556046752949078932066752571182e-4932L, -7.853981633974483096698709544441509427467e-1L, UNDERFLOW_EXCEPTION);
5426   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, 0x1p-16382L, 2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5427   TEST_c_c (catanh, 0x0.ffffffffffffffffp0L, -0x1p-16382L, 2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5428   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, 0x1p-16382L, -2.252728336819822255604649142023466965703e1L, 3.100992811520163369065387859792822623745e-4913L);
5429   TEST_c_c (catanh, -0x0.ffffffffffffffffp0L, -0x1p-16382L, -2.252728336819822255604649142023466965703e1L, -3.100992811520163369065387859792822623745e-4913L);
5430   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5431   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, 7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5432   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffp0L, 1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5433   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffp0L, -1.681051571556046753222468896957938166365e-4932L, -7.853981633974483095885557915077381101984e-1L, UNDERFLOW_EXCEPTION);
5434 # if LDBL_MANT_DIG >= 113
5435   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, 0x1p-16382L, 3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5436   TEST_c_c (catanh, 0x1.0000000000000000000000000001p0L, -0x1p-16382L, 3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5437   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, 0x1p-16382L, -3.916281570163690998207361486238697614441e1L, 1.570796326794896619231321691639751442099L);
5438   TEST_c_c (catanh, -0x1.0000000000000000000000000001p0L, -0x1p-16382L, -3.916281570163690998207361486238697614441e1L, -1.570796326794896619231321691639751442099L);
5439   TEST_c_c (catanh, 0x1p-16382L, 0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5440   TEST_c_c (catanh, -0x1p-16382L, 0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, 7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5441   TEST_c_c (catanh, 0x1p-16382L, -0x1.0000000000000000000000000001p0L, 1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5442   TEST_c_c (catanh, -0x1p-16382L, -0x1.0000000000000000000000000001p0L, -1.681051571556046753131338908660875977540e-4932L, -7.853981633974483096156608458198758173458e-1L, UNDERFLOW_EXCEPTION);
5443   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, 3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5444   TEST_c_c (catanh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, 3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5445   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-16382L, -3.950938929191688263678223092311606435623e1L, 1.745703758805099310527547423749501866998e-4898L);
5446   TEST_c_c (catanh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-16382L, -3.950938929191688263678223092311606435623e1L, -1.745703758805099310527547423749501866998e-4898L);
5447   TEST_c_c (catanh, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5448   TEST_c_c (catanh, -0x1p-16382L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, 7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5449   TEST_c_c (catanh, 0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5450   TEST_c_c (catanh, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.681051571556046753131338908660876463178e-4932L, -7.853981633974483096156608458198756729010e-1L, UNDERFLOW_EXCEPTION);
5451 # endif
5452 #endif
5454   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
5455   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
5457   END (catanh, complex);
5460 static void
5461 cbrt_test (void)
5463   errno = 0;
5464   FUNC(cbrt) (8);
5465   if (errno == ENOSYS)
5466     /* Function not implemented.  */
5467     return;
5469   START (cbrt);
5471   TEST_f_f (cbrt, 0.0, 0.0);
5472   TEST_f_f (cbrt, minus_zero, minus_zero);
5474   TEST_f_f (cbrt, plus_infty, plus_infty);
5475   TEST_f_f (cbrt, minus_infty, minus_infty);
5476   TEST_f_f (cbrt, qnan_value, qnan_value);
5478   TEST_f_f (cbrt, -0.001L, -0.1L);
5479   TEST_f_f (cbrt, 8, 2);
5480   TEST_f_f (cbrt, -27.0, -3.0);
5481   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
5482   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
5484   END (cbrt);
5488 static void
5489 ccos_test (void)
5491   errno = 0;
5492   FUNC(ccos) (BUILD_COMPLEX (0, 0));
5493   if (errno == ENOSYS)
5494     /* Function not implemented.  */
5495     return;
5497   START (ccos);
5499   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
5500   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
5501   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
5502   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
5504   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5505   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5506   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5507   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5509   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
5510   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
5511   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
5512   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
5514   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5515   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5516   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5517   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5519   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
5520   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
5521   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
5522   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
5524   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5525   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5526   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5527   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5529   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5530   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5532   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
5533   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
5535   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5536   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5538   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5539   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5541   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5542   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5544   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5545   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5547   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
5549   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
5550   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
5552   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5553   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5554   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5555   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5557 #ifndef TEST_FLOAT
5558   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5559   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5560   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5561   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5562 #endif
5564 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5565   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5566   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5567   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5568   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5569 #endif
5571 #ifdef TEST_FLOAT
5572   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5573 #endif
5575 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5576   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5577 #endif
5579 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5580   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5581 #endif
5583   TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5584   TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5586   END (ccos, complex);
5590 static void
5591 ccosh_test (void)
5593   errno = 0;
5594   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
5595   if (errno == ENOSYS)
5596     /* Function not implemented.  */
5597     return;
5599   START (ccosh);
5601   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
5602   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
5603   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
5604   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
5606   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5607   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5608   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5609   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5611   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
5612   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
5613   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
5614   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
5616   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5617   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5618   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5619   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
5621   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
5622   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
5623   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
5624   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
5626   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5627   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5628   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5629   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5631   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5632   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5634   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
5635   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
5637   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5638   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5640   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5641   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5643   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5644   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5646   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5647   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5649   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
5651   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
5653   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
5655   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5656   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5657   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5658   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5660 #ifndef TEST_FLOAT
5661   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5662   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5663   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5664   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5665 #endif
5667 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5668   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5669   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5670   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5671   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5672 #endif
5674 #ifdef TEST_FLOAT
5675   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5676 #endif
5678 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5679   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5680 #endif
5682 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5683   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5684 #endif
5686   TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5687   TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5689   END (ccosh, complex);
5693 static void
5694 ceil_test (void)
5696   START (ceil);
5698   TEST_f_f (ceil, 0.0, 0.0);
5699   TEST_f_f (ceil, minus_zero, minus_zero);
5700   TEST_f_f (ceil, plus_infty, plus_infty);
5701   TEST_f_f (ceil, minus_infty, minus_infty);
5702   TEST_f_f (ceil, qnan_value, qnan_value);
5704   TEST_f_f (ceil, M_PIl, 4.0);
5705   TEST_f_f (ceil, -M_PIl, -3.0);
5706   TEST_f_f (ceil, 0.1, 1.0);
5707   TEST_f_f (ceil, 0.25, 1.0);
5708   TEST_f_f (ceil, 0.625, 1.0);
5709   TEST_f_f (ceil, -0.1, minus_zero);
5710   TEST_f_f (ceil, -0.25, minus_zero);
5711   TEST_f_f (ceil, -0.625, minus_zero);
5713 #ifdef TEST_LDOUBLE
5714   /* The result can only be represented in long double.  */
5715   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
5716   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
5717   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
5718   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
5719   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
5721   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
5722   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
5723   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
5724   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
5725   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
5727 # if LDBL_MANT_DIG > 100
5728   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
5729   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
5730   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
5731   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
5732   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
5733   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
5734 # endif
5736   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
5737   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
5738   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
5739   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
5740   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
5742   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
5743   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
5744   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
5745   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
5746   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
5748 # if LDBL_MANT_DIG > 100
5749   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
5750   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
5751   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
5752   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
5753   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
5754   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
5756   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
5757   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
5758   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
5759   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
5760   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
5761   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
5762 # endif
5764   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
5765   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
5766   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
5767   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
5768   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
5770   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
5771   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
5772   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
5773   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
5774   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
5776   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5777   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
5778   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
5779   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5780   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5781 #endif
5783   END (ceil);
5787 static void
5788 cexp_test (void)
5790   errno = 0;
5791   FUNC(cexp) (BUILD_COMPLEX (0, 0));
5792   if (errno == ENOSYS)
5793     /* Function not implemented.  */
5794     return;
5796   START (cexp);
5798   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
5799   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
5800   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
5801   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
5803   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
5804   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
5806   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
5807   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
5809   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5810   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5812   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5813   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5815   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5816   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5818   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5819   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5821   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
5822   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
5823   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
5824   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
5826   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5827   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5829   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
5830   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
5832   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
5834   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
5836   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5837   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5839   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5840   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5841   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5842   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
5844   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
5845   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
5847   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
5848   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
5849   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
5851 #ifndef TEST_FLOAT
5852   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
5853   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
5854   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
5855 #endif
5857 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5858   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
5859   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
5860 #endif
5862   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
5863   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
5865 #ifndef TEST_FLOAT
5866   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
5867   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
5868 #endif
5870 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5871   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
5872   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
5873 #endif
5875 #ifdef TEST_FLOAT
5876   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
5877 #endif
5879 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5880   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
5881 #endif
5883 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5884   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
5885 #endif
5887   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
5888   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
5889   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
5891   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
5892   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
5894   END (cexp, complex);
5898 static void
5899 cimag_test (void)
5901   START (cimag);
5902   TEST_c_f (cimag, 1.0, 0.0, 0.0);
5903   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
5904   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
5905   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
5906   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
5907   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
5908   TEST_c_f (cimag, 2.0, 3.0, 3.0);
5910   END (cimag);
5913 static void
5914 clog_test (void)
5916   errno = 0;
5917   FUNC(clog) (BUILD_COMPLEX (-2, -3));
5918   if (errno == ENOSYS)
5919     /* Function not implemented.  */
5920     return;
5922   START (clog);
5924   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5925   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5927   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5928   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5930   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
5931   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
5933   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
5934   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
5936   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
5937   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
5938   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
5939   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
5940   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
5941   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
5942   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
5943   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
5945   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
5946   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
5947   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
5948   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
5950   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
5951   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
5952   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
5953   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
5955   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
5956   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
5958   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
5959   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
5961   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5962   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5963   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5964   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5966   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5967   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5968   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5969   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5971   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
5973   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
5974   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
5976   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
5977   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5978   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
5979   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
5981 #ifndef TEST_FLOAT
5982   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
5983   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
5984   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
5985   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
5986 #endif
5988 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5989   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
5990   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
5991   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
5992 #endif
5994   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5995   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
5996   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5997   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
5998   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
5999   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
6000 #ifdef TEST_FLOAT
6001   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
6002   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
6003 #endif
6005 #ifndef TEST_FLOAT
6006   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
6007   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
6008   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
6009   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
6010   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
6011   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
6012 #endif
6013 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6014   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
6015   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
6016 #endif
6018 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6019   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6020   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6021   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6022   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6023   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
6024   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
6025   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
6026   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
6027 # if LDBL_MANT_DIG >= 113
6028   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6029   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
6030   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6031   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
6032   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
6033   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
6034   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
6035   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
6036 # endif
6037 #endif
6039   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
6040   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
6041   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
6042   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
6043   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
6044   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
6045   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
6046   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
6047   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
6048 #ifndef TEST_FLOAT
6049   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6050   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
6051   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
6052 #endif
6053 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6054   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
6055   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
6056   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
6057 #endif
6059   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
6060   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
6061 #ifndef TEST_FLOAT
6062   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
6063   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
6064 #endif
6065 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6066   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
6067   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6068 #endif
6070   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
6071 #ifndef TEST_FLOAT
6072   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6073 #endif
6074 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6075   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
6076 #endif
6078   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
6079   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
6080   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
6081   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
6082   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
6083   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
6084   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
6085   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
6086   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
6087   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
6088 #ifndef TEST_FLOAT
6089   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
6090   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
6091   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
6092   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
6093   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
6094   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
6095   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
6096   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
6097   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
6098   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
6099   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
6100   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
6101 #endif
6102 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6103   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
6104   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
6105   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
6106   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
6107   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
6108 #endif
6109 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6110   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
6111   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
6112   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
6113   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
6114   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
6115   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
6116   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
6117   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
6118   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
6119   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
6120 #endif
6121 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6122   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
6123   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
6124   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
6125   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
6126   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
6127   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
6128 #endif
6130   END (clog, complex);
6134 static void
6135 clog10_test (void)
6137   errno = 0;
6138   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
6139   if (errno == ENOSYS)
6140     /* Function not implemented.  */
6141     return;
6143   START (clog10);
6145   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6146   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
6148   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
6149   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
6151   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
6153   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
6154   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
6156   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
6157   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
6158   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
6159   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
6160   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
6161   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
6162   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
6163   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
6165   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
6166   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
6167   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
6168   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
6170   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
6171   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
6172   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
6173   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
6175   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
6176   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
6178   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
6179   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
6181   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6182   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6183   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6184   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6186   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6187   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6188   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6189   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6191   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
6193   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
6194   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
6196   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
6197   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6198   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
6199   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
6201 #ifndef TEST_FLOAT
6202   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
6203   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
6204   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
6205   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
6206 #endif
6208 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6209   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
6210   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
6211   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
6212 #endif
6214   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6215   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
6216   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6217   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
6218   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
6219   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
6220 #ifdef TEST_FLOAT
6221   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
6222   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
6223 #endif
6225 #ifndef TEST_FLOAT
6226   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6227   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
6228   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6229   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
6230   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
6231   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
6232 #endif
6233 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6234   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
6235   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
6236 #endif
6238 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6239   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6240   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6241   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6242   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6243   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6244   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6245   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6246   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6247 # if LDBL_MANT_DIG >= 113
6248   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6249   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
6250   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6251   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
6252   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
6253   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
6254   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
6255   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
6256 # endif
6257 #endif
6259   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
6260   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
6261   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
6262   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
6263   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
6264   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
6265   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
6266   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6267   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
6268 #ifndef TEST_FLOAT
6269   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6270   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6271   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
6272 #endif
6273 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6274   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
6275   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6276   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
6277 #endif
6279   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
6280   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
6281 #ifndef TEST_FLOAT
6282   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
6283   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
6284 #endif
6285 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6286   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
6287   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6288 #endif
6290   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
6291 #ifndef TEST_FLOAT
6292   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6293 #endif
6294 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6295   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
6296 #endif
6298   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
6299   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
6300   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
6301   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
6302   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
6303   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
6304   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
6305   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
6306   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
6307   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
6308 #ifndef TEST_FLOAT
6309   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
6310   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
6311   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
6312   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
6313   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
6314   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
6315   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
6316   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
6317   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
6318   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
6319   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
6320   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
6321 #endif
6322 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
6323   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
6324   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
6325   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
6326   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
6327   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
6328 #endif
6329 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
6330   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
6331   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
6332   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
6333   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
6334   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
6335   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
6336   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
6337   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
6338   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
6339   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
6340 #endif
6341 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
6342   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
6343   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
6344   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
6345   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
6346   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
6347   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
6348 #endif
6350   END (clog10, complex);
6354 static void
6355 conj_test (void)
6357   START (conj);
6358   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
6359   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
6360   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
6361   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
6362   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
6363   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
6364   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
6366   END (conj, complex);
6370 static void
6371 copysign_test (void)
6373   START (copysign);
6375   TEST_ff_f (copysign, 0, 4, 0);
6376   TEST_ff_f (copysign, 0, -4, minus_zero);
6377   TEST_ff_f (copysign, minus_zero, 4, 0);
6378   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
6380   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
6381   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
6382   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
6383   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
6385   TEST_ff_f (copysign, 0, plus_infty, 0);
6386   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
6387   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
6388   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
6390   /* XXX More correctly we would have to check the sign of the NaN.  */
6391   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
6392   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
6393   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
6394   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
6396   END (copysign);
6400 static void
6401 cos_test (void)
6403   errno = 0;
6404   FUNC(cos) (0);
6405   if (errno == ENOSYS)
6406     /* Function not implemented.  */
6407     return;
6409   START (cos);
6411   TEST_f_f (cos, 0, 1);
6412   TEST_f_f (cos, minus_zero, 1);
6413   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6414   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
6415   TEST_f_f (cos, qnan_value, qnan_value, ERRNO_UNCHANGED);
6417   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
6418   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
6420   /* The value of M_PI_2l is never exactly PI/2, and therefore the
6421      answer is never exactly zero. The answer is equal to the error
6422      in rounding PI/2 for the type used.  Thus the answer is unique
6423      to each type.  */
6424 #ifdef TEST_FLOAT
6425   /* 32-bit float.  */
6426   TEST_f_f (cos, M_PI_2l, -0x1.777a5cp-25L);
6427 #endif
6428 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
6429   /* 64-bit double or 64-bit long double.  */
6430   TEST_f_f (cos, M_PI_2l, 0x1.1a62633145c07p-54L);
6431 #endif
6432 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
6433   /* 96-bit long double.  */
6434   TEST_f_f (cos, M_PI_2l, -0xe.ce675d1fc8f8cbbp-69L);
6435 #endif
6436 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
6437   /* 128-bit IBM long double.  */
6438   TEST_f_f (cos, M_PI_2l, 0x1.c1cd129024e088a67cc74020bcp-107L);
6439 #endif
6440 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
6441   /* 128-bit long double.  */
6442   TEST_f_f (cos, M_PI_2l, 0x1.cd129024e088a67cc74020bbea64p-115L);
6443 #endif
6445   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
6447   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
6448   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
6450 #ifdef TEST_DOUBLE
6451   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
6452 #endif
6454   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
6456 #ifndef TEST_FLOAT
6457   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
6458   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
6459 #endif
6461 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6462   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
6463 #endif
6465   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
6466   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
6467   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
6468   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
6469   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
6470   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
6472   END (cos);
6476 static void
6477 cos_test_tonearest (void)
6479   int save_round_mode;
6480   errno = 0;
6481   FUNC(cos) (0);
6482   if (errno == ENOSYS)
6483     /* Function not implemented.  */
6484     return;
6486   START (cos_tonearest);
6488   save_round_mode = fegetround ();
6490   if (!fesetround (FE_TONEAREST))
6491     {
6492       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6493       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6494       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6495       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6496       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6497       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6498       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6499       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6500       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6501       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6502     }
6504   fesetround (save_round_mode);
6506   END (cos_tonearest);
6510 static void
6511 cos_test_towardzero (void)
6513   int save_round_mode;
6514   errno = 0;
6515   FUNC(cos) (0);
6516   if (errno == ENOSYS)
6517     /* Function not implemented.  */
6518     return;
6520   START (cos_towardzero);
6522   save_round_mode = fegetround ();
6524   if (!fesetround (FE_TOWARDZERO))
6525     {
6526       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6527       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6528       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6529       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6530       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6531       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6532       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6533       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6534       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6535       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6536     }
6538   fesetround (save_round_mode);
6540   END (cos_towardzero);
6544 static void
6545 cos_test_downward (void)
6547   int save_round_mode;
6548   errno = 0;
6549   FUNC(cos) (0);
6550   if (errno == ENOSYS)
6551     /* Function not implemented.  */
6552     return;
6554   START (cos_downward);
6556   save_round_mode = fegetround ();
6558   if (!fesetround (FE_DOWNWARD))
6559     {
6560       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6561       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6562       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6563       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6564       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6565       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6566       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6567       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6568       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6569       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6570     }
6572   fesetround (save_round_mode);
6574   END (cos_downward);
6578 static void
6579 cos_test_upward (void)
6581   int save_round_mode;
6582   errno = 0;
6583   FUNC(cos) (0);
6584   if (errno == ENOSYS)
6585     /* Function not implemented.  */
6586     return;
6588   START (cos_upward);
6590   save_round_mode = fegetround ();
6592   if (!fesetround (FE_UPWARD))
6593     {
6594       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
6595       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
6596       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
6597       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
6598       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
6599       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
6600       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
6601       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
6602       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
6603       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
6604     }
6606   fesetround (save_round_mode);
6608   END (cos_upward);
6612 static void
6613 cosh_test (void)
6615   errno = 0;
6616   FUNC(cosh) (0.7L);
6617   if (errno == ENOSYS)
6618     /* Function not implemented.  */
6619     return;
6621   START (cosh);
6622   TEST_f_f (cosh, 0, 1);
6623   TEST_f_f (cosh, minus_zero, 1);
6625 #ifndef TEST_INLINE
6626   TEST_f_f (cosh, plus_infty, plus_infty);
6627   TEST_f_f (cosh, minus_infty, plus_infty);
6628 #endif
6629   TEST_f_f (cosh, qnan_value, qnan_value);
6631   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
6633 #ifndef TEST_FLOAT
6634   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6635   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
6636 #endif
6638   END (cosh);
6642 static void
6643 cosh_test_tonearest (void)
6645   int save_round_mode;
6646   errno = 0;
6647   FUNC(cosh) (0);
6648   if (errno == ENOSYS)
6649     /* Function not implemented.  */
6650     return;
6652   START (cosh_tonearest);
6654   save_round_mode = fegetround ();
6656   if (!fesetround (FE_TONEAREST))
6657     {
6658       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6659       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6660       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6661     }
6663   fesetround (save_round_mode);
6665   END (cosh_tonearest);
6669 static void
6670 cosh_test_towardzero (void)
6672   int save_round_mode;
6673   errno = 0;
6674   FUNC(cosh) (0);
6675   if (errno == ENOSYS)
6676     /* Function not implemented.  */
6677     return;
6679   START (cosh_towardzero);
6681   save_round_mode = fegetround ();
6683   if (!fesetround (FE_TOWARDZERO))
6684     {
6685       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6686       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6687       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6688     }
6690   fesetround (save_round_mode);
6692   END (cosh_towardzero);
6696 static void
6697 cosh_test_downward (void)
6699   int save_round_mode;
6700   errno = 0;
6701   FUNC(cosh) (0);
6702   if (errno == ENOSYS)
6703     /* Function not implemented.  */
6704     return;
6706   START (cosh_downward);
6708   save_round_mode = fegetround ();
6710   if (!fesetround (FE_DOWNWARD))
6711     {
6712       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6713       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6714       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6715     }
6717   fesetround (save_round_mode);
6719   END (cosh_downward);
6723 static void
6724 cosh_test_upward (void)
6726   int save_round_mode;
6727   errno = 0;
6728   FUNC(cosh) (0);
6729   if (errno == ENOSYS)
6730     /* Function not implemented.  */
6731     return;
6733   START (cosh_upward);
6735   save_round_mode = fegetround ();
6737   if (!fesetround (FE_UPWARD))
6738     {
6739       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
6740       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
6741       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
6742     }
6744   fesetround (save_round_mode);
6746   END (cosh_upward);
6750 static void
6751 cpow_test (void)
6753   errno = 0;
6754   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
6755   if (errno == ENOSYS)
6756     /* Function not implemented.  */
6757     return;
6759   START (cpow);
6761   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
6762   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
6764   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
6765   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
6767   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
6769   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
6770   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
6771   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
6772   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
6774   END (cpow, complex);
6778 static void
6779 cproj_test (void)
6781   START (cproj);
6782   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
6783   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
6784   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
6785   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
6787   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
6789   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
6790   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
6791   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
6792   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
6794   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
6795   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
6797   END (cproj, complex);
6801 static void
6802 creal_test (void)
6804   START (creal);
6805   TEST_c_f (creal, 0.0, 1.0, 0.0);
6806   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
6807   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
6808   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
6809   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
6810   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
6811   TEST_c_f (creal, 2.0, 3.0, 2.0);
6813   END (creal);
6816 static void
6817 csin_test (void)
6819   errno = 0;
6820   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
6821   if (errno == ENOSYS)
6822     /* Function not implemented.  */
6823     return;
6825   START (csin);
6827   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
6828   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
6829   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
6830   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
6832   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
6833   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
6834   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
6835   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
6837   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6838   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6839   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6840   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6842   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6843   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6844   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6845   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6847   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6848   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6849   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
6850   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
6852   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
6853   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
6854   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
6855   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
6857   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6858   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
6860   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6861   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6863   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6864   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6866   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
6867   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
6869   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6870   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6872   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6873   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6875   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
6877   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
6878   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
6880   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6881   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6882   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
6883   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
6885 #ifndef TEST_FLOAT
6886   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6887   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6888   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
6889   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
6890 #endif
6892 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6893   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6894   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6895   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
6896   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
6897 #endif
6899 #ifdef TEST_FLOAT
6900   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
6901 #endif
6903 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6904   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
6905 #endif
6907 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6908   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
6909 #endif
6911   TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6912   TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6914   END (csin, complex);
6918 static void
6919 csinh_test (void)
6921   errno = 0;
6922   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
6923   if (errno == ENOSYS)
6924     /* Function not implemented.  */
6925     return;
6927   START (csinh);
6929   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
6930   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
6931   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
6932   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
6934   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6935   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6936   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6937   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6939   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
6940   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
6941   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
6942   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
6944   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6945   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6946   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6947   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
6949   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
6950   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
6951   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
6952   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
6954   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6955   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6956   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6957   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6959   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6960   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
6962   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6963   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
6965   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6966   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6968   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
6969   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
6971   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6972   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6974   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6975   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6977   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
6979   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
6980   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
6982   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6983   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
6984   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6985   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
6987 #ifndef TEST_FLOAT
6988   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6989   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
6990   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6991   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
6992 #endif
6994 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6995   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6996   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
6997   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6998   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
6999 #endif
7001 #ifdef TEST_FLOAT
7002   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
7003 #endif
7005 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
7006   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
7007 #endif
7009 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7010   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
7011 #endif
7013   TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
7014   TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
7016   END (csinh, complex);
7020 static void
7021 csqrt_test (void)
7023   errno = 0;
7024   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
7025   if (errno == ENOSYS)
7026     /* Function not implemented.  */
7027     return;
7029   START (csqrt);
7031   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
7032   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
7033   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
7034   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
7036   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
7037   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
7038   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
7039   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
7041   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
7042   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
7043   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
7044   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
7046   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
7047   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
7048   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
7049   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
7050   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
7051   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
7052   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
7053   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
7054   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
7055   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
7056   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
7057   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
7059   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
7061   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
7063   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7064   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7065   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7066   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7068   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7069   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7070   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7071   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7073   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
7075   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
7076   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
7077   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
7078   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
7079   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
7080   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
7081   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
7082   /* Principal square root should be returned (i.e., non-negative real
7083      part).  */
7084   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
7086   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
7087   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
7088   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
7089   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
7091   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
7092   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
7093 #ifdef TEST_FLOAT
7094   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
7095 #endif
7096   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
7097   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
7098   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
7100 #ifndef TEST_FLOAT
7101   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
7102   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
7103   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
7104   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
7106   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
7107   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
7108 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
7109   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
7110 #endif
7111   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
7112   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
7113   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
7114 #endif
7116 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7117   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
7118   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
7119   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
7121   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
7122   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
7123   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
7124   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
7125   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
7126   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
7128 # if LDBL_MANT_DIG >= 113
7129   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
7130   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
7131   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
7132   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
7133   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
7134   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
7135 # endif
7136 #endif
7138   END (csqrt, complex);
7141 static void
7142 ctan_test (void)
7144   errno = 0;
7145   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7146   if (errno == ENOSYS)
7147     /* Function not implemented.  */
7148     return;
7150   START (ctan);
7152   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
7153   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
7154   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
7155   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
7157   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
7158   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
7159   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
7160   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
7162   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
7163   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
7164   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
7165   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
7167   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7168   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7169   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
7170   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
7171   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7172   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7173   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
7174   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
7176   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
7177   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
7179   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
7180   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
7182   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7183   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7185   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7186   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7187   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7188   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7190   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
7192   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
7193   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
7195   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
7196   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
7198 #ifndef TEST_FLOAT
7199   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7200   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
7201 #endif
7203 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7204   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
7205   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
7206 #endif
7208   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
7210   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
7212 #ifndef TEST_FLOAT
7213   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
7214 #endif
7216 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7217   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
7218 #endif
7220   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
7221   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
7222   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
7223   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
7225   END (ctan, complex);
7229 static void
7230 ctan_test_tonearest (void)
7232   int save_round_mode;
7233   errno = 0;
7234   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7235   if (errno == ENOSYS)
7236     /* Function not implemented.  */
7237     return;
7239   START (ctan_tonearest);
7241   save_round_mode = fegetround ();
7243   if (!fesetround (FE_TONEAREST))
7244     {
7245       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7247 #ifndef TEST_FLOAT
7248       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7249 #endif
7251 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7252       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7253 #endif
7254     }
7256   fesetround (save_round_mode);
7258   END (ctan_tonearest, complex);
7262 static void
7263 ctan_test_towardzero (void)
7265   int save_round_mode;
7266   errno = 0;
7267   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7268   if (errno == ENOSYS)
7269     /* Function not implemented.  */
7270     return;
7272   START (ctan_towardzero);
7274   save_round_mode = fegetround ();
7276   if (!fesetround (FE_TOWARDZERO))
7277     {
7278       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7280 #ifndef TEST_FLOAT
7281       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7282 #endif
7284 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7285       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7286 #endif
7287     }
7289   fesetround (save_round_mode);
7291   END (ctan_towardzero, complex);
7295 static void
7296 ctan_test_downward (void)
7298   int save_round_mode;
7299   errno = 0;
7300   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7301   if (errno == ENOSYS)
7302     /* Function not implemented.  */
7303     return;
7305   START (ctan_downward);
7307   save_round_mode = fegetround ();
7309   if (!fesetround (FE_DOWNWARD))
7310     {
7311       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7313 #ifndef TEST_FLOAT
7314       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7315 #endif
7317 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7318       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7319 #endif
7320     }
7322   fesetround (save_round_mode);
7324   END (ctan_downward, complex);
7328 static void
7329 ctan_test_upward (void)
7331   int save_round_mode;
7332   errno = 0;
7333   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
7334   if (errno == ENOSYS)
7335     /* Function not implemented.  */
7336     return;
7338   START (ctan_upward);
7340   save_round_mode = fegetround ();
7342   if (!fesetround (FE_UPWARD))
7343     {
7344       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
7346 #ifndef TEST_FLOAT
7347       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
7348 #endif
7350 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7351       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
7352 #endif
7353     }
7355   fesetround (save_round_mode);
7357   END (ctan_upward, complex);
7361 static void
7362 ctanh_test (void)
7364   errno = 0;
7365   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
7366   if (errno == ENOSYS)
7367     /* Function not implemented.  */
7368     return;
7370   START (ctanh);
7372   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
7373   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
7374   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
7375   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
7377   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
7378   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
7379   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
7380   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
7381   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
7382   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
7383   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
7384   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
7386   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7387   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7388   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7389   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7390   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7391   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7392   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7393   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
7395   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7396   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
7398   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
7399   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
7401   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7402   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7404   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7405   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7406   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7407   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7409   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
7411   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
7413   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
7414   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
7416   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
7417   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
7419 #ifndef TEST_FLOAT
7420   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
7421   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
7422 #endif
7424 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7425   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
7426   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
7427 #endif
7429   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
7431   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
7433 #ifndef TEST_FLOAT
7434   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
7435 #endif
7437 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7438   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
7439 #endif
7441   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
7442   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
7443   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
7444   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
7446   END (ctanh, complex);
7450 static void
7451 ctanh_test_tonearest (void)
7453   int save_round_mode;
7454   errno = 0;
7455   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7456   if (errno == ENOSYS)
7457     /* Function not implemented.  */
7458     return;
7460   START (ctanh_tonearest);
7462   save_round_mode = fegetround ();
7464   if (!fesetround (FE_TONEAREST))
7465     {
7466       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7468 #ifndef TEST_FLOAT
7469       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7470 #endif
7472 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7473       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7474 #endif
7475     }
7477   fesetround (save_round_mode);
7479   END (ctanh_tonearest, complex);
7483 static void
7484 ctanh_test_towardzero (void)
7486   int save_round_mode;
7487   errno = 0;
7488   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7489   if (errno == ENOSYS)
7490     /* Function not implemented.  */
7491     return;
7493   START (ctanh_towardzero);
7495   save_round_mode = fegetround ();
7497   if (!fesetround (FE_TOWARDZERO))
7498     {
7499       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7501 #ifndef TEST_FLOAT
7502       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7503 #endif
7505 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7506       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7507 #endif
7508     }
7510   fesetround (save_round_mode);
7512   END (ctanh_towardzero, complex);
7516 static void
7517 ctanh_test_downward (void)
7519   int save_round_mode;
7520   errno = 0;
7521   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7522   if (errno == ENOSYS)
7523     /* Function not implemented.  */
7524     return;
7526   START (ctanh_downward);
7528   save_round_mode = fegetround ();
7530   if (!fesetround (FE_DOWNWARD))
7531     {
7532       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7534 #ifndef TEST_FLOAT
7535       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7536 #endif
7538 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7539       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7540 #endif
7541     }
7543   fesetround (save_round_mode);
7545   END (ctanh_downward, complex);
7549 static void
7550 ctanh_test_upward (void)
7552   int save_round_mode;
7553   errno = 0;
7554   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
7555   if (errno == ENOSYS)
7556     /* Function not implemented.  */
7557     return;
7559   START (ctanh_upward);
7561   save_round_mode = fegetround ();
7563   if (!fesetround (FE_UPWARD))
7564     {
7565       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
7567 #ifndef TEST_FLOAT
7568       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
7569 #endif
7571 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7572       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
7573 #endif
7574     }
7576   fesetround (save_round_mode);
7578   END (ctanh_upward, complex);
7582 static void
7583 erf_test (void)
7585   errno = 0;
7586   FUNC(erf) (0);
7587   if (errno == ENOSYS)
7588     /* Function not implemented.  */
7589     return;
7591   START (erf);
7593   TEST_f_f (erf, 0, 0);
7594   TEST_f_f (erf, minus_zero, minus_zero);
7595   TEST_f_f (erf, plus_infty, 1);
7596   TEST_f_f (erf, minus_infty, -1);
7597   TEST_f_f (erf, qnan_value, qnan_value);
7599   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
7600   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
7601   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
7602   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
7603   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
7604   TEST_f_f (erf, 27.0L, 1.0L);
7606   END (erf);
7610 static void
7611 erfc_test (void)
7613   errno = 0;
7614   FUNC(erfc) (0);
7615   if (errno == ENOSYS)
7616     /* Function not implemented.  */
7617     return;
7619   START (erfc);
7621   TEST_f_f (erfc, plus_infty, 0.0);
7622   TEST_f_f (erfc, minus_infty, 2.0);
7623   TEST_f_f (erfc, 0.0, 1.0);
7624   TEST_f_f (erfc, minus_zero, 1.0);
7625   TEST_f_f (erfc, qnan_value, qnan_value);
7627   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
7628   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
7629   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
7630   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
7631   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
7632   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
7633   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
7634   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
7635 #ifdef TEST_LDOUBLE
7636   /* The result can only be represented in long double.  */
7637 # if LDBL_MIN_10_EXP < -319
7638   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
7639 # endif
7640 # if LDBL_MANT_DIG >= 106
7641   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
7642 # endif
7643 #endif
7645   END (erfc);
7649 static void
7650 exp_test (void)
7652   errno = 0;
7653   FUNC(exp) (0);
7654   if (errno == ENOSYS)
7655     /* Function not implemented.  */
7656     return;
7658   START (exp);
7660   TEST_f_f (exp, 0, 1);
7661   TEST_f_f (exp, minus_zero, 1);
7663 #ifndef TEST_INLINE
7664   TEST_f_f (exp, plus_infty, plus_infty);
7665   TEST_f_f (exp, minus_infty, 0);
7666 #endif
7667   TEST_f_f (exp, qnan_value, qnan_value);
7668   TEST_f_f (exp, 1, M_El);
7670   TEST_f_f (exp, 2, M_E2l);
7671   TEST_f_f (exp, 3, M_E3l);
7672   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
7673   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
7674   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
7675 #ifndef TEST_FLOAT
7676   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
7677 #endif
7678 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
7679   /* The result can only be represented in sane long double.  */
7680   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
7681 #endif
7683 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
7684   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
7685   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
7686 #endif
7687   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
7688   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
7689   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
7691   END (exp);
7695 static void
7696 exp_test_tonearest (void)
7698   int save_round_mode;
7699   errno = 0;
7700   FUNC(exp) (0);
7701   if (errno == ENOSYS)
7702     /* Function not implemented.  */
7703     return;
7705   START (exp_tonearest);
7707   save_round_mode = fegetround ();
7709   if (!fesetround (FE_TONEAREST))
7710     {
7711       TEST_f_f (exp, 1, M_El);
7712       TEST_f_f (exp, 2, M_E2l);
7713       TEST_f_f (exp, 3, M_E3l);
7714     }
7716   fesetround (save_round_mode);
7718   END (exp_tonearest);
7722 static void
7723 exp_test_towardzero (void)
7725   int save_round_mode;
7726   errno = 0;
7727   FUNC(exp) (0);
7728   if (errno == ENOSYS)
7729     /* Function not implemented.  */
7730     return;
7732   START (exp_towardzero);
7734   save_round_mode = fegetround ();
7736   if (!fesetround (FE_TOWARDZERO))
7737     {
7738       TEST_f_f (exp, 1, M_El);
7739       TEST_f_f (exp, 2, M_E2l);
7740       TEST_f_f (exp, 3, M_E3l);
7741     }
7743   fesetround (save_round_mode);
7745   END (exp_towardzero);
7749 static void
7750 exp_test_downward (void)
7752   int save_round_mode;
7753   errno = 0;
7754   FUNC(exp) (0);
7755   if (errno == ENOSYS)
7756     /* Function not implemented.  */
7757     return;
7759   START (exp_downward);
7761   save_round_mode = fegetround ();
7763   if (!fesetround (FE_DOWNWARD))
7764     {
7765       TEST_f_f (exp, 1, M_El);
7766       TEST_f_f (exp, 2, M_E2l);
7767       TEST_f_f (exp, 3, M_E3l);
7768     }
7770   fesetround (save_round_mode);
7772   END (exp_downward);
7776 static void
7777 exp_test_upward (void)
7779   int save_round_mode;
7780   errno = 0;
7781   FUNC(exp) (0);
7782   if (errno == ENOSYS)
7783     /* Function not implemented.  */
7784     return;
7786   START (exp_upward);
7788   save_round_mode = fegetround ();
7790   if (!fesetround (FE_UPWARD))
7791     {
7792       TEST_f_f (exp, 1, M_El);
7793       TEST_f_f (exp, 2, M_E2l);
7794       TEST_f_f (exp, 3, M_E3l);
7795     }
7797   fesetround (save_round_mode);
7799   END (exp_upward);
7803 static void
7804 exp10_test (void)
7806   errno = 0;
7807   FUNC(exp10) (0);
7808   if (errno == ENOSYS)
7809     /* Function not implemented.  */
7810     return;
7812   START (exp10);
7814   TEST_f_f (exp10, 0, 1);
7815   TEST_f_f (exp10, minus_zero, 1);
7817   TEST_f_f (exp10, plus_infty, plus_infty);
7818   TEST_f_f (exp10, minus_infty, 0);
7819   TEST_f_f (exp10, qnan_value, qnan_value);
7820   TEST_f_f (exp10, 3, 1000);
7821   TEST_f_f (exp10, -1, 0.1L);
7822   TEST_f_f (exp10, 36, 1.0e36L);
7823   TEST_f_f (exp10, -36, 1.0e-36L);
7824 #ifndef TEST_FLOAT
7825   TEST_f_f (exp10, 305, 1.0e305L);
7826   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
7827 #endif
7828 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
7829   TEST_f_f (exp10, 4932, 1.0e4932L);
7830   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
7831 #endif
7832   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7833   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
7834   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
7835   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
7836   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
7838   END (exp10);
7842 static void
7843 exp2_test (void)
7845   errno = 0;
7846   FUNC(exp2) (0);
7847   if (errno == ENOSYS)
7848     /* Function not implemented.  */
7849     return;
7851   START (exp2);
7853   TEST_f_f (exp2, 0, 1);
7854   TEST_f_f (exp2, minus_zero, 1);
7855   TEST_f_f (exp2, plus_infty, plus_infty);
7856   TEST_f_f (exp2, minus_infty, 0);
7857   TEST_f_f (exp2, qnan_value, qnan_value);
7859   TEST_f_f (exp2, 10, 1024);
7860   TEST_f_f (exp2, -1, 0.5);
7861   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
7862   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
7863   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
7864   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
7865   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
7867   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
7868   TEST_f_f (exp2, 127, 0x1p127);
7869   TEST_f_f (exp2, -149, 0x1p-149);
7871 #ifndef TEST_FLOAT
7872   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
7873   TEST_f_f (exp2, 1023, 0x1p1023);
7874   TEST_f_f (exp2, -1074, 0x1p-1074);
7875 #endif
7877 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7878   TEST_f_f (exp2, 16383, 0x1p16383L);
7879   TEST_f_f (exp2, -16400, 0x1p-16400L);
7880 #endif
7882   END (exp2);
7886 static void
7887 expm1_test (void)
7889   errno = 0;
7890   FUNC(expm1) (0);
7891   if (errno == ENOSYS)
7892     /* Function not implemented.  */
7893     return;
7895   START (expm1);
7897   TEST_f_f (expm1, 0, 0);
7898   TEST_f_f (expm1, minus_zero, minus_zero);
7900 #ifndef TEST_INLINE
7901   TEST_f_f (expm1, plus_infty, plus_infty);
7902   TEST_f_f (expm1, minus_infty, -1);
7903 #endif
7904   TEST_f_f (expm1, qnan_value, qnan_value);
7906   TEST_f_f (expm1, 1, M_El - 1.0);
7907   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
7909   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
7911 #ifndef TEST_FLOAT
7912   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
7913   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
7914 #endif
7916 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7917   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
7918 #endif
7920   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
7921   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
7922   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
7923   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
7924   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
7925   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
7926   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
7927   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
7928   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
7929   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
7930   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
7931   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
7932   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
7933   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
7934   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
7935   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
7936   TEST_f_f (expm1, -100.0, -1.0);
7937   TEST_f_f (expm1, -1000.0, -1.0);
7938   TEST_f_f (expm1, -10000.0, -1.0);
7939   TEST_f_f (expm1, -100000.0, -1.0);
7941   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
7942   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
7943   TEST_f_f (expm1, -max_value, -1);
7945   END (expm1);
7949 static void
7950 fabs_test (void)
7952   START (fabs);
7954   TEST_f_f (fabs, 0, 0);
7955   TEST_f_f (fabs, minus_zero, 0);
7957   TEST_f_f (fabs, plus_infty, plus_infty);
7958   TEST_f_f (fabs, minus_infty, plus_infty);
7959   TEST_f_f (fabs, qnan_value, qnan_value);
7961   TEST_f_f (fabs, 38.0, 38.0);
7962   TEST_f_f (fabs, -M_El, M_El);
7964   END (fabs);
7968 static void
7969 fdim_test (void)
7971   START (fdim);
7973   TEST_ff_f (fdim, 0, 0, 0);
7974   TEST_ff_f (fdim, 9, 0, 9);
7975   TEST_ff_f (fdim, 0, 9, 0);
7976   TEST_ff_f (fdim, -9, 0, 0);
7977   TEST_ff_f (fdim, 0, -9, 9);
7979   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
7980   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
7981   TEST_ff_f (fdim, minus_infty, 9, 0);
7982   TEST_ff_f (fdim, minus_infty, -9, 0);
7983   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
7984   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
7985   TEST_ff_f (fdim, 9, plus_infty, 0);
7986   TEST_ff_f (fdim, -9, plus_infty, 0);
7988   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
7989   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
7990   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
7991   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
7992   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
7993   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
7994   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
7995   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
7996   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
7997   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
7999   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
8001   END (fdim);
8005 static void
8006 finite_test (void)
8008   START (finite);
8010   TEST_f_b (finite, 0, 1);
8011   TEST_f_b (finite, minus_zero, 1);
8012   TEST_f_b (finite, 10, 1);
8013   TEST_f_b (finite, min_subnorm_value, 1);
8014   TEST_f_b (finite, plus_infty, 0);
8015   TEST_f_b (finite, minus_infty, 0);
8016   TEST_f_b (finite, qnan_value, 0);
8018   END (finite);
8022 static void
8023 floor_test (void)
8025   START (floor);
8027   TEST_f_f (floor, 0.0, 0.0);
8028   TEST_f_f (floor, minus_zero, minus_zero);
8029   TEST_f_f (floor, plus_infty, plus_infty);
8030   TEST_f_f (floor, minus_infty, minus_infty);
8031   TEST_f_f (floor, qnan_value, qnan_value);
8033   TEST_f_f (floor, M_PIl, 3.0);
8034   TEST_f_f (floor, -M_PIl, -4.0);
8036   TEST_f_f (floor, 0.1, 0.0);
8037   TEST_f_f (floor, 0.25, 0.0);
8038   TEST_f_f (floor, 0.625, 0.0);
8039   TEST_f_f (floor, -0.1, -1.0);
8040   TEST_f_f (floor, -0.25, -1.0);
8041   TEST_f_f (floor, -0.625, -1.0);
8043 #ifdef TEST_LDOUBLE
8044   /* The result can only be represented in long double.  */
8045   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
8046   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
8047   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
8048   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
8049   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
8050 # if LDBL_MANT_DIG > 100
8051   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
8052   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
8053   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
8054 # endif
8056   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
8057   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
8058   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
8059   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
8060   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
8061 # if LDBL_MANT_DIG > 100
8062   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
8063   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
8064   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
8065 # endif
8067   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
8068   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
8069   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
8070   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
8071   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
8073 # if LDBL_MANT_DIG > 100
8074   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
8075   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
8076   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
8077   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
8078   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
8079   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
8080 # endif
8082   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
8083   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
8084   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
8085   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
8086   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
8088 # if LDBL_MANT_DIG > 100
8089   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
8090   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
8091   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
8092   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
8093   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
8094   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
8095 # endif
8097   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
8098   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
8099   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
8100   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
8101   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
8103   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
8104   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
8105   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
8106   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
8107   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
8109   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
8110   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
8111   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
8112   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
8113   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
8115   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
8116   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
8117 #endif
8119   END (floor);
8123 static void
8124 fma_test (void)
8126   START (fma);
8128   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
8129   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
8130   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
8131   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8132   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8133   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8134   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8135   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
8136   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8137   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
8138   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8139   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
8141   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8142   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8143   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8144   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
8145   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8146   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
8147   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
8148   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
8150   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
8152   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
8153                          LDBL_MAX, DBL_MAX, FLT_MAX);
8154   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
8155   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
8156   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
8157   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
8158   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
8159   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
8160   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
8161   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
8163   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8164   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8165   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8166   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8167   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8168   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8169   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8170   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8171   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8172   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8173   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8174   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8175   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8176   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8177   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8178   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8179   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8180   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8181   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8182   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8183   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8184   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8185   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8186   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8188   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8189   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8190   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8191   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8193   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8194   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8195   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8196   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8197   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8198   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8199   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8200   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8202   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8203   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8204   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8205   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8206   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8207   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8208   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8209   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8211 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8212   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
8213   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
8214   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
8215   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
8216   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
8217   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
8218   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
8219   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8220   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8221   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8222   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8223   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8224   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8225   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8226   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8227   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8228   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8229   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8230   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8231   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8232   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8233   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8234   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8235   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8236   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8237   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8238   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8239   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8240   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8241   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8242   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8243   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8244   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8245   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8246   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8247   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8248   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8249   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8250   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8251   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8252   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8253   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8254   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8255 #endif
8256 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8257   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
8258   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
8259   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
8260   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
8261   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
8262   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
8263   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
8264   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
8265   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
8266   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
8267   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
8268   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
8269   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
8270   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
8271   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
8272   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
8273   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
8274   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
8275   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
8276   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
8277   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8278   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8279   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8280   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8281   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8282   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8283   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8284   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8285   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8286   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8287   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8288   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8289   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8290   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8291   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8292   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8293   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8294   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8295   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8296   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8297   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8298   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8299   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8300   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8301   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8302   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8303   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8304   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8305   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8306   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8307   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8308   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8309   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8310   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8311   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8312   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8313 #endif
8314 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8315   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
8316   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
8317   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
8318   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
8319   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
8320   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
8321   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8322   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8323   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8324   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8325   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8326   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8327   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8328   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8329   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8330   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
8331   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8332   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8333   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8334   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8335   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8336   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8337   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8338   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8339   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8340   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8341   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8342   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8343   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8344   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8345   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8346   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8347   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8348   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8349   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8350   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8351   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8352   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8353   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8354   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8355   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8356   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8357 #endif
8358 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8359   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
8360   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
8361   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
8362   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
8363   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
8364   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
8365   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
8366   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
8367   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
8368   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
8369   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
8370   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
8371   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
8372   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8373   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8374   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8375   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8376   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8377   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8378   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8379   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8380   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8381   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8382   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8383   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8384   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8385   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8386   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8387   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8388   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8389   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8390   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8391   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8392   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8393   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8394   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8395   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8396   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8397   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8398   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8399   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8400   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8401   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8402   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8403   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8404   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8405   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8406   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8407   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8408 #endif
8410   END (fma);
8414 static void
8415 fma_test_towardzero (void)
8417   int save_round_mode;
8418   START (fma_towardzero);
8420   save_round_mode = fegetround ();
8422   if (!fesetround (FE_TOWARDZERO))
8423     {
8424       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8425       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8426       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8427       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8428       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8429       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8430       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8431       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8432       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8433       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8434       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8435       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8436       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8437       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8438       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8439       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8440       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8441       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8442       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8443       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8444       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8445       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8446       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8447       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8449       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8450       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8451       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8452       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8454       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8455       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8456       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8457       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8458       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8459       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8460       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8461       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8463 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8464       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8465       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8466       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8467       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8468       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8469       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8470       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8471       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8472 #endif
8474 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8475       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8476       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8477       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8478       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8479       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8480       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8481       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8482       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8483       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8484       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8485       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8486       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8487       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8488       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8489       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8490       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8491       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8492       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8493       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8494       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8495       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8496       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8497       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8498       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8499       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8500       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8501       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8502       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8503       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8504       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8505       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8506       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8507       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8508       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8509       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8510       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8511 #endif
8512 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8513       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8514       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8515       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8516       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8517       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8518       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8519       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8520       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8521       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8522       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8523       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8524       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8525       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8526       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8527       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8528       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8529       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8530       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8531       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8532       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8533       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8534       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8535       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8536       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8537       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8538       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8539       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8540       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8541       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8542       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8543       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8544       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8545       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8546       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8547       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8548       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8549 #endif
8550 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8551       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8552       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8553       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8554       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8555       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8556       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8557       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8558       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8559       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8560       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8561       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8562       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8563       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8564       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8565       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8566       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8567       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8568       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8569       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8570       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8571       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8572       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8573       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8574       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8575       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8576       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8577       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8578       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8579       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8580       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8581       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8582       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8583       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8584       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8585       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8586       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8587 #endif
8588 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8589       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8590       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8591       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8592       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8593       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8594       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8595       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8596       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8597       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8598       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8599       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8600       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8601       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8602       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8603       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8604       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8605       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8606       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8607       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8608       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8609       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8610       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8611       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8612       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8613       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8614       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8615       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8616       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8617       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8618       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8619       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8620       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8621       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8622       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8623       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8624       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8625 #endif
8626     }
8628   fesetround (save_round_mode);
8630   END (fma_towardzero);
8634 static void
8635 fma_test_downward (void)
8637   int save_round_mode;
8638   START (fma_downward);
8640   save_round_mode = fegetround ();
8642   if (!fesetround (FE_DOWNWARD))
8643     {
8644       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8645       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
8646       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
8647       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8648       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
8649       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8650       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8651       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
8652       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8653       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
8654       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
8655       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8656       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
8657       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8658       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8659       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
8660       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8661       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
8662       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
8663       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8664       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
8665       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8666       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8667       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
8669       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
8670       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
8671       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
8672       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
8674       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8675       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8676       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8677       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8678       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8679       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
8680       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8681       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
8683 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8684       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8685       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8686       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8687       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8688       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
8689       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
8690       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
8691       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
8692 #endif
8694 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8695       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8696       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8697       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8698       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8699       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8700       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8701       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8702       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8703       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
8704       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
8705       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
8706       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
8707       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
8708       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8709       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8710       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
8711       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8712       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8713       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8714       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
8715       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8716       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
8717       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8718       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
8719       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8720       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8721       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8722       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8723       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
8724       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
8725       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
8726       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
8727       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
8728       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
8729       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
8730       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
8731 #endif
8732 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8733       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8734       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8735       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8736       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8737       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8738       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8739       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8740       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8741       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
8742       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
8743       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
8744       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
8745       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
8746       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8747       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8748       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
8749       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8750       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8751       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8752       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
8753       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8754       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
8755       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8756       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
8757       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8758       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8759       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8760       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8761       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8762       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
8763       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8764       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
8765       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
8766       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
8767       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
8768       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
8769 #endif
8770 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8771       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8772       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8773       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8774       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8775       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8776       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8777       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8778       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8779       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
8780       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8781       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
8782       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
8783       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
8784       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8785       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8786       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
8787       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8788       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8789       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8790       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8791       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8792       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
8793       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8794       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
8795       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8796       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8797       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8798       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8799       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8800       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
8801       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8802       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
8803       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8804       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
8805       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8806       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
8807 #endif
8808 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8809       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8810       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8811       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8812       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8813       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8814       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8815       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8816       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8817       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
8818       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8819       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
8820       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8821       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
8822       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8823       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8824       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
8825       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8826       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8827       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8828       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
8829       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8830       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
8831       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8832       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
8833       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8834       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8835       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8836       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8837       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8838       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
8839       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8840       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
8841       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8842       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
8843       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8844       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
8845 #endif
8846     }
8848   fesetround (save_round_mode);
8850   END (fma_downward);
8854 static void
8855 fma_test_upward (void)
8857   int save_round_mode;
8858   START (fma_upward);
8860   save_round_mode = fegetround ();
8862   if (!fesetround (FE_UPWARD))
8863     {
8864       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
8865       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
8866       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
8867       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
8868       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
8869       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
8870       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
8871       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
8872       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
8873       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
8874       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
8875       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
8876       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
8877       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
8878       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
8879       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
8880       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
8881       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
8882       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
8883       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
8884       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
8885       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
8886       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
8887       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
8889       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
8890       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
8891       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
8892       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
8894       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8895       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8896       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8897       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8898       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8899       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
8900       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8901       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
8903 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
8904       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8905       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8906       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8907       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8908       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
8909       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
8910       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
8911       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
8912 #endif
8914 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
8915       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
8916       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
8917       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8918       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8919       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8920       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8921       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8922       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8923       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
8924       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
8925       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
8926       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
8927       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
8928       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8929       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8930       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
8931       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
8932       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8933       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
8934       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
8935       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
8936       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
8937       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
8938       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
8939       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
8940       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
8941       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
8942       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
8943       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
8944       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
8945       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
8946       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
8947       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
8948       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
8949       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
8950       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
8951 #endif
8952 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
8953       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
8954       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
8955       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8956       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8957       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8958       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8959       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8960       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8961       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
8962       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
8963       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
8964       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
8965       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
8966       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8967       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8968       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
8969       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
8970       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8971       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
8972       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
8973       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
8974       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
8975       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
8976       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
8977       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8978       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8979       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
8980       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
8981       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
8982       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
8983       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
8984       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
8985       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
8986       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
8987       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
8988       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
8989 #endif
8990 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
8991       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
8992       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8993       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8994       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8995       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8996       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8997       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8998       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8999       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
9000       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
9001       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
9002       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
9003       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
9004       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9005       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9006       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
9007       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9008       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9009       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
9010       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9011       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
9012       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
9013       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
9014       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
9015       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
9016       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
9017       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
9018       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
9019       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
9020       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
9021       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
9022       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
9023       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
9024       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
9025       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
9026       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
9027 #endif
9028 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
9029       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
9030       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
9031       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9032       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9033       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9034       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9035       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9036       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9037       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
9038       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
9039       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
9040       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
9041       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
9042       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
9043       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9044       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
9045       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
9046       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9047       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
9048       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
9049       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
9050       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
9051       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
9052       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
9053       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
9054       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
9055       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
9056       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
9057       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
9058       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
9059       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
9060       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
9061       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
9062       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
9063       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
9064       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
9065 #endif
9066     }
9068   fesetround (save_round_mode);
9070   END (fma_upward);
9074 static void
9075 fmax_test (void)
9077   START (fmax);
9079   TEST_ff_f (fmax, 0, 0, 0);
9080   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
9081   TEST_ff_f (fmax, 9, 0, 9);
9082   TEST_ff_f (fmax, 0, 9, 9);
9083   TEST_ff_f (fmax, -9, 0, 0);
9084   TEST_ff_f (fmax, 0, -9, 0);
9086   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
9087   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
9088   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
9089   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
9091   TEST_ff_f (fmax, minus_infty, 9, 9);
9092   TEST_ff_f (fmax, minus_infty, -9, -9);
9093   TEST_ff_f (fmax, 9, minus_infty, 9);
9094   TEST_ff_f (fmax, -9, minus_infty, -9);
9096   TEST_ff_f (fmax, 0, qnan_value, 0);
9097   TEST_ff_f (fmax, 9, qnan_value, 9);
9098   TEST_ff_f (fmax, -9, qnan_value, -9);
9099   TEST_ff_f (fmax, qnan_value, 0, 0);
9100   TEST_ff_f (fmax, qnan_value, 9, 9);
9101   TEST_ff_f (fmax, qnan_value, -9, -9);
9102   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
9103   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
9104   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
9105   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
9106   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
9108   END (fmax);
9112 static void
9113 fmin_test (void)
9115   START (fmin);
9117   TEST_ff_f (fmin, 0, 0, 0);
9118   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
9119   TEST_ff_f (fmin, 9, 0, 0);
9120   TEST_ff_f (fmin, 0, 9, 0);
9121   TEST_ff_f (fmin, -9, 0, -9);
9122   TEST_ff_f (fmin, 0, -9, -9);
9124   TEST_ff_f (fmin, plus_infty, 9, 9);
9125   TEST_ff_f (fmin, 9, plus_infty, 9);
9126   TEST_ff_f (fmin, plus_infty, -9, -9);
9127   TEST_ff_f (fmin, -9, plus_infty, -9);
9128   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
9129   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
9130   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
9131   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
9133   TEST_ff_f (fmin, 0, qnan_value, 0);
9134   TEST_ff_f (fmin, 9, qnan_value, 9);
9135   TEST_ff_f (fmin, -9, qnan_value, -9);
9136   TEST_ff_f (fmin, qnan_value, 0, 0);
9137   TEST_ff_f (fmin, qnan_value, 9, 9);
9138   TEST_ff_f (fmin, qnan_value, -9, -9);
9139   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
9140   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
9141   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
9142   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
9143   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
9145   END (fmin);
9149 static void
9150 fmod_test (void)
9152   errno = 0;
9153   FUNC(fmod) (6.5, 2.3L);
9154   if (errno == ENOSYS)
9155     /* Function not implemented.  */
9156     return;
9158   START (fmod);
9160   /* fmod (+0, y) == +0 for y != 0.  */
9161   TEST_ff_f (fmod, 0, 3, 0);
9163   /* fmod (-0, y) == -0 for y != 0.  */
9164   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
9166   /* fmod (+inf, y) == qNaN plus invalid exception.  */
9167   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9168   /* fmod (-inf, y) == qNaN plus invalid exception.  */
9169   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9170   /* fmod (x, +0) == qNaN plus invalid exception.  */
9171   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
9172   /* fmod (x, -0) == qNaN plus invalid exception.  */
9173   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
9175   /* fmod (x, +inf) == x for x not infinite.  */
9176   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
9177   /* fmod (x, -inf) == x for x not infinite.  */
9178   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
9180   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
9182   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
9183   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
9184   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
9185   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
9187   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
9188 #ifndef TEST_FLOAT
9189   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
9190 #endif
9191 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
9192   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
9193 #endif
9195   END (fmod);
9199 static void
9200 fpclassify_test (void)
9202   START (fpclassify);
9204   TEST_f_i (fpclassify, qnan_value, FP_NAN);
9205   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
9206   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
9207   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
9208   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
9209   TEST_f_i (fpclassify, 1000, FP_NORMAL);
9210   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
9212   END (fpclassify);
9216 static void
9217 frexp_test (void)
9219   int x;
9221   START (frexp);
9223   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
9224   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
9225   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
9227   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
9228   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
9230   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
9231   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
9233   END (frexp);
9237 static void
9238 gamma_test (void)
9240   errno = 0;
9241   FUNC(gamma) (1);
9243   if (errno == ENOSYS)
9244     /* Function not implemented.  */
9245     return;
9247   START (gamma);
9249   TEST_f_f1 (gamma, plus_infty, plus_infty, 1);
9250   TEST_f_f1 (gamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9251   TEST_f_f1 (gamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9252   TEST_f_f1 (gamma, minus_infty, plus_infty, IGNORE);
9253   TEST_f_f1 (gamma, qnan_value, qnan_value, IGNORE);
9255   TEST_f_f1 (gamma, 1, 0, 1);
9256   TEST_f_f1 (gamma, 3, M_LN2l, 1);
9258   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
9259   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9261   END (gamma);
9264 static void
9265 hypot_test (void)
9267   errno = 0;
9268   FUNC(hypot) (0.7L, 12.4L);
9269   if (errno == ENOSYS)
9270     /* Function not implemented.  */
9271     return;
9273   START (hypot);
9275   TEST_ff_f (hypot, plus_infty, 1, plus_infty);
9276   TEST_ff_f (hypot, minus_infty, 1, plus_infty);
9278 #ifndef TEST_INLINE
9279   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
9280   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
9281   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
9282   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
9283 #endif
9285   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
9287   /* hypot (x,y) == hypot (+-x, +-y)  */
9288   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
9289   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
9290   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
9291   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
9292   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
9293   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
9294   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
9295   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
9297   /*  hypot (x,0) == fabs (x)  */
9298   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
9299   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
9300   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
9302   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
9304   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
9305   TEST_ff_f (hypot, 0x1p+0L, 0x1.fp-129L, 0x1p+0L);
9306 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
9307   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
9308 #endif
9310 #if !(defined TEST_FLOAT && defined TEST_INLINE)
9311   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
9312   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
9313 #endif
9315 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
9316   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
9317   TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L);
9318 #endif
9320 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
9321   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
9322 #endif
9324   END (hypot);
9328 static void
9329 ilogb_test (void)
9331   START (ilogb);
9333   TEST_f_i (ilogb, 1, 0);
9334   TEST_f_i (ilogb, M_El, 1);
9335   TEST_f_i (ilogb, 1024, 10);
9336   TEST_f_i (ilogb, -2000, 10);
9338   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
9339   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION|ERRNO_EDOM);
9340   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
9341   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION|ERRNO_EDOM);
9342   /* ilogb (inf) == INT_MAX plus invalid exception  */
9343   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9344   /* ilogb (-inf) == INT_MAX plus invalid exception  */
9345   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION|ERRNO_EDOM);
9347   END (ilogb);
9350 static void
9351 isfinite_test (void)
9353   START (isfinite);
9355   TEST_f_b (isfinite, 0, 1);
9356   TEST_f_b (isfinite, minus_zero, 1);
9357   TEST_f_b (isfinite, 10, 1);
9358   TEST_f_b (isfinite, min_subnorm_value, 1);
9359   TEST_f_b (isfinite, plus_infty, 0);
9360   TEST_f_b (isfinite, minus_infty, 0);
9361   TEST_f_b (isfinite, qnan_value, 0);
9363   END (isfinite);
9366 static void
9367 isgreater_test (void)
9369   START (isgreater);
9371   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
9372   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
9373   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
9374   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
9375   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
9376   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
9377   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
9378   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
9379   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
9380   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
9381   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
9382   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
9383   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
9384   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
9385   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
9386   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
9388   END (isgreater);
9391 static void
9392 isgreaterequal_test (void)
9394   START (isgreaterequal);
9396   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
9397   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
9398   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
9399   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
9400   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
9401   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
9402   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
9403   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
9404   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
9405   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
9406   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
9407   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
9408   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
9409   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
9410   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
9411   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
9413   END (isgreaterequal);
9416 static void
9417 isinf_test (void)
9419   START (isinf);
9421   TEST_f_b (isinf, 0, 0);
9422   TEST_f_b (isinf, minus_zero, 0);
9423   TEST_f_b (isinf, 10, 0);
9424   TEST_f_b (isinf, min_subnorm_value, 0);
9425   TEST_f_b (isinf, plus_infty, 1);
9426   TEST_f_b (isinf, minus_infty, 1);
9427   TEST_f_b (isinf, qnan_value, 0);
9429   END (isinf);
9432 static void
9433 isless_test (void)
9435   START (isless);
9437   TEST_ff_i (isless, minus_zero, minus_zero, 0);
9438   TEST_ff_i (isless, minus_zero, plus_zero, 0);
9439   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
9440   TEST_ff_i (isless, minus_zero, qnan_value, 0);
9441   TEST_ff_i (isless, plus_zero, minus_zero, 0);
9442   TEST_ff_i (isless, plus_zero, plus_zero, 0);
9443   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
9444   TEST_ff_i (isless, plus_zero, qnan_value, 0);
9445   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
9446   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
9447   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
9448   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
9449   TEST_ff_i (isless, qnan_value, minus_zero, 0);
9450   TEST_ff_i (isless, qnan_value, plus_zero, 0);
9451   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
9452   TEST_ff_i (isless, qnan_value, qnan_value, 0);
9454   END (isless);
9457 static void
9458 islessequal_test (void)
9460   START (islessequal);
9462   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
9463   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
9464   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
9465   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
9466   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
9467   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
9468   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
9469   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
9470   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
9471   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
9472   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
9473   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
9474   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
9475   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
9476   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
9477   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
9479   END (islessequal);
9482 static void
9483 islessgreater_test (void)
9485   START (islessgreater);
9487   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
9488   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
9489   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
9490   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
9491   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
9492   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
9493   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
9494   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
9495   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
9496   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
9497   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
9498   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
9499   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
9500   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
9501   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
9502   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
9504   END (islessgreater);
9507 static void
9508 isnan_test (void)
9510   START (isnan);
9512   TEST_f_b (isnan, 0, 0);
9513   TEST_f_b (isnan, minus_zero, 0);
9514   TEST_f_b (isnan, 10, 0);
9515   TEST_f_b (isnan, min_subnorm_value, 0);
9516   TEST_f_b (isnan, plus_infty, 0);
9517   TEST_f_b (isnan, minus_infty, 0);
9518   TEST_f_b (isnan, qnan_value, 1);
9520   END (isnan);
9523 static void
9524 isnormal_test (void)
9526   START (isnormal);
9528   TEST_f_b (isnormal, 0, 0);
9529   TEST_f_b (isnormal, minus_zero, 0);
9530   TEST_f_b (isnormal, 10, 1);
9531   TEST_f_b (isnormal, min_subnorm_value, 0);
9532   TEST_f_b (isnormal, plus_infty, 0);
9533   TEST_f_b (isnormal, minus_infty, 0);
9534   TEST_f_b (isnormal, qnan_value, 0);
9536   END (isnormal);
9539 static void
9540 issignaling_test (void)
9542   START (issignaling);
9544   TEST_f_b (issignaling, 0, 0);
9545   TEST_f_b (issignaling, minus_zero, 0);
9546   TEST_f_b (issignaling, 10, 0);
9547   TEST_f_b (issignaling, min_subnorm_value, 0);
9548   TEST_f_b (issignaling, plus_infty, 0);
9549   TEST_f_b (issignaling, minus_infty, 0);
9550   TEST_f_b (issignaling, qnan_value, 0);
9552   END (issignaling);
9555 static void
9556 isunordered_test (void)
9558   START (isunordered);
9560   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
9561   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
9562   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
9563   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
9564   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
9565   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
9566   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
9567   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
9568   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
9569   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
9570   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
9571   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
9572   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
9573   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
9574   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
9575   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
9577   END (isunordered);
9580 static void
9581 j0_test (void)
9583   FLOAT s, c;
9584   errno = 0;
9585   FUNC (sincos) (0, &s, &c);
9586   if (errno == ENOSYS)
9587     /* Required function not implemented.  */
9588     return;
9589   FUNC(j0) (0);
9590   if (errno == ENOSYS)
9591     /* Function not implemented.  */
9592     return;
9594   START (j0);
9596   /* j0 is the Bessel function of the first kind of order 0 */
9597   TEST_f_f (j0, qnan_value, qnan_value);
9598   TEST_f_f (j0, plus_infty, 0);
9599   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
9600   TEST_f_f (j0, 0.0, 1.0);
9601   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
9602   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
9603   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
9604   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
9605   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
9606   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
9607   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
9608   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9609   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9611   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
9613 #ifndef TEST_FLOAT
9614   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
9615   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
9616 #endif
9618 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9619   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
9620   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
9621 #endif
9623   END (j0);
9627 static void
9628 j1_test (void)
9630   FLOAT s, c;
9631   errno = 0;
9632   FUNC (sincos) (0, &s, &c);
9633   if (errno == ENOSYS)
9634     /* Required function not implemented.  */
9635     return;
9636   FUNC(j1) (0);
9637   if (errno == ENOSYS)
9638     /* Function not implemented.  */
9639     return;
9641   /* j1 is the Bessel function of the first kind of order 1 */
9643   START (j1);
9645   TEST_f_f (j1, qnan_value, qnan_value);
9646   TEST_f_f (j1, plus_infty, 0);
9648   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
9649   TEST_f_f (j1, 0.0, 0.0);
9650   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
9651   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
9652   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
9653   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
9654   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
9655   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
9656   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
9658   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
9660 #ifndef TEST_FLOAT
9661   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
9662   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
9663 #endif
9665 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
9666   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
9667   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
9668 #endif
9670   END (j1);
9673 static void
9674 jn_test (void)
9676   FLOAT s, c;
9677   errno = 0;
9678   FUNC (sincos) (0, &s, &c);
9679   if (errno == ENOSYS)
9680     /* Required function not implemented.  */
9681     return;
9682   FUNC(jn) (1, 1);
9683   if (errno == ENOSYS)
9684     /* Function not implemented.  */
9685     return;
9687   /* jn is the Bessel function of the first kind of order n.  */
9688   START (jn);
9690   /* jn (0, x) == j0 (x)  */
9691   TEST_if_f (jn, 0, qnan_value, qnan_value);
9692   TEST_if_f (jn, 0, plus_infty, 0);
9693   TEST_if_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
9694   TEST_if_f (jn, 0, 0.0, 1.0);
9695   TEST_if_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
9696   TEST_if_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
9697   TEST_if_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
9698   TEST_if_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
9699   TEST_if_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
9700   TEST_if_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
9701   TEST_if_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
9702   TEST_if_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
9703   TEST_if_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
9705   /* jn (1, x) == j1 (x)  */
9706   TEST_if_f (jn, 1, qnan_value, qnan_value);
9707   TEST_if_f (jn, 1, plus_infty, 0);
9708   TEST_if_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
9709   TEST_if_f (jn, 1, 0.0, 0.0);
9710   TEST_if_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
9711   TEST_if_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
9712   TEST_if_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
9713   TEST_if_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
9714   TEST_if_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
9715   TEST_if_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
9716   TEST_if_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
9718   /* jn (3, x)  */
9719   TEST_if_f (jn, 3, qnan_value, qnan_value);
9720   TEST_if_f (jn, 3, plus_infty, 0);
9722   TEST_if_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
9723   TEST_if_f (jn, 3, 0.0, 0.0);
9724   TEST_if_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
9725   TEST_if_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
9726   TEST_if_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
9727   TEST_if_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
9728   TEST_if_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
9730   /*  jn (10, x)  */
9731   TEST_if_f (jn, 10, qnan_value, qnan_value);
9732   TEST_if_f (jn, 10, plus_infty, 0);
9734   TEST_if_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
9735   TEST_if_f (jn, 10, 0.0, 0.0);
9736   TEST_if_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
9737   TEST_if_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
9738   TEST_if_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
9739   TEST_if_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
9740   TEST_if_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
9742   /* BZ #11589 .*/
9743   TEST_if_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
9744   TEST_if_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
9745   TEST_if_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
9746   TEST_if_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
9747   TEST_if_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
9748   TEST_if_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
9749   TEST_if_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
9750   TEST_if_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
9752   /* Bug 14155: spurious exception may occur.  */
9753   TEST_if_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
9755   END (jn);
9759 static void
9760 ldexp_test (void)
9762   START (ldexp);
9764   TEST_fi_f (ldexp, 0, 0, 0);
9765   TEST_fi_f (ldexp, minus_zero, 0, minus_zero);
9767   TEST_fi_f (ldexp, plus_infty, 1, plus_infty);
9768   TEST_fi_f (ldexp, minus_infty, 1, minus_infty);
9769   TEST_fi_f (ldexp, qnan_value, 1, qnan_value);
9771   TEST_fi_f (ldexp, 0.8L, 4, 12.8L);
9772   TEST_fi_f (ldexp, -0.854375L, 5, -27.34L);
9774   /* ldexp (x, 0) == x.  */
9775   TEST_fi_f (ldexp, 1.0L, 0L, 1.0L);
9777   END (ldexp);
9781 static void
9782 lgamma_test (void)
9784   errno = 0;
9785   FUNC(lgamma) (0);
9786   if (errno == ENOSYS)
9787     /* Function not implemented.  */
9788     return;
9790   START (lgamma);
9792   TEST_f_f1 (lgamma, plus_infty, plus_infty, 1);
9793   TEST_f_f1 (lgamma, 0, plus_infty, 1, DIVIDE_BY_ZERO_EXCEPTION);
9794   TEST_f_f1 (lgamma, minus_zero, plus_infty, -1, DIVIDE_BY_ZERO_EXCEPTION);
9795   TEST_f_f1 (lgamma, qnan_value, qnan_value, IGNORE);
9797   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
9798   TEST_f_f1 (lgamma, -3, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
9799   TEST_f_f1 (lgamma, minus_infty, plus_infty, IGNORE);
9800   TEST_f_f1 (lgamma, -max_value, plus_infty, IGNORE, DIVIDE_BY_ZERO_EXCEPTION);
9801   TEST_f_f1 (lgamma, max_value, plus_infty, 1, OVERFLOW_EXCEPTION);
9803   TEST_f_f1 (lgamma, 1, 0, 1);
9805   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
9807   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
9808   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
9809   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
9810   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
9812   END (lgamma);
9816 static void
9817 lrint_test (void)
9819   /* XXX this test is incomplete.  We need to have a way to specifiy
9820      the rounding method and test the critical cases.  So far, only
9821      unproblematic numbers are tested.  */
9822   /* TODO: missing +/-Inf as well as qNaN tests.  */
9824   START (lrint);
9826   TEST_f_l (lrint, 0.0, 0);
9827   TEST_f_l (lrint, minus_zero, 0);
9828   TEST_f_l (lrint, 0.2L, 0);
9829   TEST_f_l (lrint, -0.2L, 0);
9831   TEST_f_l (lrint, 1.4L, 1);
9832   TEST_f_l (lrint, -1.4L, -1);
9834   TEST_f_l (lrint, 8388600.3L, 8388600);
9835   TEST_f_l (lrint, -8388600.3L, -8388600);
9837   TEST_f_l (lrint, 1071930.0008, 1071930);
9838 #ifndef TEST_FLOAT
9839   TEST_f_l (lrint, 1073741824.01, 1073741824);
9840 # if LONG_MAX > 281474976710656
9841   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9842 # endif
9843 #endif
9845   END (lrint);
9849 static void
9850 lrint_test_tonearest (void)
9852   int save_round_mode;
9853   START (lrint_tonearest);
9855   save_round_mode = fegetround ();
9857   if (!fesetround (FE_TONEAREST))
9858     {
9859       TEST_f_l (lrint, 0.0, 0);
9860       TEST_f_l (lrint, minus_zero, 0);
9861       TEST_f_l (lrint, 0.2L, 0);
9862       TEST_f_l (lrint, -0.2L, 0);
9863       TEST_f_l (lrint, 0.5L, 0);
9864       TEST_f_l (lrint, -0.5L, 0);
9865       TEST_f_l (lrint, 0.8L, 1);
9866       TEST_f_l (lrint, -0.8L, -1);
9868       TEST_f_l (lrint, 1.4L, 1);
9869       TEST_f_l (lrint, -1.4L, -1);
9871       TEST_f_l (lrint, 8388600.3L, 8388600);
9872       TEST_f_l (lrint, -8388600.3L, -8388600);
9874       TEST_f_l (lrint, 1071930.0008, 1071930);
9875 #ifndef TEST_FLOAT
9876       TEST_f_l (lrint, 1073741824.01, 1073741824);
9877 # if LONG_MAX > 281474976710656
9878       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9879 # endif
9880 #endif
9881     }
9883   fesetround (save_round_mode);
9885   END (lrint_tonearest);
9889 static void
9890 lrint_test_towardzero (void)
9892   int save_round_mode;
9893   START (lrint_towardzero);
9895   save_round_mode = fegetround ();
9897   if (!fesetround (FE_TOWARDZERO))
9898     {
9899       TEST_f_l (lrint, 0.0, 0);
9900       TEST_f_l (lrint, minus_zero, 0);
9901       TEST_f_l (lrint, 0.2L, 0);
9902       TEST_f_l (lrint, -0.2L, 0);
9903       TEST_f_l (lrint, 0.5L, 0);
9904       TEST_f_l (lrint, -0.5L, 0);
9905       TEST_f_l (lrint, 0.8L, 0);
9906       TEST_f_l (lrint, -0.8L, 0);
9908       TEST_f_l (lrint, 1.4L, 1);
9909       TEST_f_l (lrint, -1.4L, -1);
9911       TEST_f_l (lrint, 8388600.3L, 8388600);
9912       TEST_f_l (lrint, -8388600.3L, -8388600);
9914       TEST_f_l (lrint, 1071930.0008, 1071930);
9915 #ifndef TEST_FLOAT
9916       TEST_f_l (lrint, 1073741824.01, 1073741824);
9917 # if LONG_MAX > 281474976710656
9918       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9919 # endif
9920 #endif
9921     }
9923   fesetround (save_round_mode);
9925   END (lrint_towardzero);
9929 static void
9930 lrint_test_downward (void)
9932   int save_round_mode;
9933   START (lrint_downward);
9935   save_round_mode = fegetround ();
9937   if (!fesetround (FE_DOWNWARD))
9938     {
9939       TEST_f_l (lrint, 0.0, 0);
9940       TEST_f_l (lrint, minus_zero, 0);
9941       TEST_f_l (lrint, 0.2L, 0);
9942       TEST_f_l (lrint, -0.2L, -1);
9943       TEST_f_l (lrint, 0.5L, 0);
9944       TEST_f_l (lrint, -0.5L, -1);
9945       TEST_f_l (lrint, 0.8L, 0);
9946       TEST_f_l (lrint, -0.8L, -1);
9948       TEST_f_l (lrint, 1.4L, 1);
9949       TEST_f_l (lrint, -1.4L, -2);
9951       TEST_f_l (lrint, 8388600.3L, 8388600);
9952       TEST_f_l (lrint, -8388600.3L, -8388601);
9954       TEST_f_l (lrint, 1071930.0008, 1071930);
9955 #ifndef TEST_FLOAT
9956       TEST_f_l (lrint, 1073741824.01, 1073741824);
9957 # if LONG_MAX > 281474976710656
9958       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9959 # endif
9960 #endif
9961     }
9963   fesetround (save_round_mode);
9965   END (lrint_downward);
9969 static void
9970 lrint_test_upward (void)
9972   int save_round_mode;
9973   START (lrint_upward);
9975   save_round_mode = fegetround ();
9977   if (!fesetround (FE_UPWARD))
9978     {
9979       TEST_f_l (lrint, 0.0, 0);
9980       TEST_f_l (lrint, minus_zero, 0);
9981       TEST_f_l (lrint, 0.2L, 1);
9982       TEST_f_l (lrint, -0.2L, 0);
9983       TEST_f_l (lrint, 0.5L, 1);
9984       TEST_f_l (lrint, -0.5L, 0);
9985       TEST_f_l (lrint, 0.8L, 1);
9986       TEST_f_l (lrint, -0.8L, 0);
9988       TEST_f_l (lrint, 1.4L, 2);
9989       TEST_f_l (lrint, -1.4L, -1);
9991       TEST_f_l (lrint, 8388600.3L, 8388601);
9992       TEST_f_l (lrint, -8388600.3L, -8388600);
9994 #ifndef TEST_FLOAT
9995       TEST_f_l (lrint, 1071930.0008, 1071931);
9996       TEST_f_l (lrint, 1073741824.01, 1073741825);
9997 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
9998       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9999 # endif
10000 #endif
10001     }
10003   fesetround (save_round_mode);
10005   END (lrint_upward);
10009 static void
10010 llrint_test (void)
10012   /* XXX this test is incomplete.  We need to have a way to specifiy
10013      the rounding method and test the critical cases.  So far, only
10014      unproblematic numbers are tested.  */
10015   /* TODO: missing +/-Inf as well as qNaN tests.  */
10017   START (llrint);
10019   TEST_f_L (llrint, 0.0, 0);
10020   TEST_f_L (llrint, minus_zero, 0);
10021   TEST_f_L (llrint, 0.2L, 0);
10022   TEST_f_L (llrint, -0.2L, 0);
10024   TEST_f_L (llrint, 1.4L, 1);
10025   TEST_f_L (llrint, -1.4L, -1);
10027   TEST_f_L (llrint, 8388600.3L, 8388600);
10028   TEST_f_L (llrint, -8388600.3L, -8388600);
10030   TEST_f_l (llrint, 1071930.0008, 1071930);
10032   /* Test boundary conditions.  */
10033   /* 0x1FFFFF */
10034   TEST_f_L (llrint, 2097151.0,2097151LL);
10035   /* 0x800000 */
10036   TEST_f_L (llrint, 8388608.0, 8388608LL);
10037   /* 0x1000000 */
10038   TEST_f_L (llrint, 16777216.0, 16777216LL);
10039   /* 0x20000000000 */
10040   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10041   /* 0x40000000000 */
10042   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10043   /* 0x1000000000000 */
10044   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10045   /* 0x10000000000000 */
10046   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10047   /* 0x10000080000000 */
10048   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10049   /* 0x20000000000000 */
10050   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10051   /* 0x80000000000000 */
10052   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10053   /* 0x100000000000000 */
10054   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10055 #ifdef TEST_LDOUBLE
10056   /* The input can only be represented in long double.  */
10057   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10058   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10059   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10060   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10061   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
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);
10069 # if LDBL_MANT_DIG > 100
10070   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10071   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10072   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10073   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10074   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10075   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10077   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10078   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10079   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10080   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10081   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10082   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10083 #endif
10085   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10086   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10087   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10088   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10089   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
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);
10097 # if LDBL_MANT_DIG > 100
10098   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10099   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10100   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10101   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10102   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10103   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10105   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10106   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10107   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10108   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10109   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10110   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10111 #endif
10113   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10114   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10115   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10116   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10117   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
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);
10125 # if LDBL_MANT_DIG > 100
10126   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10127   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10128   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10129   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10130   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10131   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10132   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10133   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10134   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10135   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10136   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10137   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10138 # endif
10139 #endif
10141   END (llrint);
10144 static void
10145 llrint_test_tonearest (void)
10147   int save_round_mode;
10148   START (llrint_tonearest);
10150   save_round_mode = fegetround ();
10152   if (!fesetround (FE_TONEAREST))
10153     {
10154       TEST_f_L (llrint, 0.0, 0);
10155       TEST_f_L (llrint, minus_zero, 0);
10156       TEST_f_L (llrint, 0.2L, 0);
10157       TEST_f_L (llrint, -0.2L, 0);
10159       TEST_f_L (llrint, 1.4L, 1);
10160       TEST_f_L (llrint, -1.4L, -1);
10162       TEST_f_L (llrint, 8388600.3L, 8388600);
10163       TEST_f_L (llrint, -8388600.3L, -8388600);
10165       TEST_f_l (llrint, 1071930.0008, 1071930);
10167       /* Test boundary conditions.  */
10168       /* 0x1FFFFF */
10169       TEST_f_L (llrint, 2097151.0,2097151LL);
10170       /* 0x800000 */
10171       TEST_f_L (llrint, 8388608.0, 8388608LL);
10172       /* 0x1000000 */
10173       TEST_f_L (llrint, 16777216.0, 16777216LL);
10174       /* 0x20000000000 */
10175       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10176       /* 0x40000000000 */
10177       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10178       /* 0x1000000000000 */
10179       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10180       /* 0x10000000000000 */
10181       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10182       /* 0x10000080000000 */
10183       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10184       /* 0x20000000000000 */
10185       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10186       /* 0x80000000000000 */
10187       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10188       /* 0x100000000000000 */
10189       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10190 #ifdef TEST_LDOUBLE
10191       /* The input can only be represented in long double.  */
10192       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10193       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10194       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10195       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10196       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10198       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10199       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10200       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10201       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10202       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10204 # if LDBL_MANT_DIG > 100
10205       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10206       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10207       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10208       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10209       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10210       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10212       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10213       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10214       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10215       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10216       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10217       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10218 #endif
10220       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10221       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10222       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10223       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10224       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10226       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10227       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10228       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10229       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10230       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10232 # if LDBL_MANT_DIG > 100
10233       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10234       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10235       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10236       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10237       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10238       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10240       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10241       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10242       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10243       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10244       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10245       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10246 #endif
10248       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10249       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10250       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10251       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10252       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10254       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10255       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10256       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10257       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10258       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10260 # if LDBL_MANT_DIG > 100
10261       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10262       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10263       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10264       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10265       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10266       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10267       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10268       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10269       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10270       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10271       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10272       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10273 # endif
10274 #endif
10275     }
10277   fesetround (save_round_mode);
10279   END (llrint_tonearest);
10282 static void
10283 llrint_test_towardzero (void)
10285   int save_round_mode;
10286   START (llrint_towardzero);
10288   save_round_mode = fegetround ();
10290   if (!fesetround (FE_TOWARDZERO))
10291     {
10292       TEST_f_L (llrint, 0.0, 0);
10293       TEST_f_L (llrint, minus_zero, 0);
10294       TEST_f_L (llrint, 0.2L, 0);
10295       TEST_f_L (llrint, -0.2L, 0);
10297       TEST_f_L (llrint, 1.4L, 1);
10298       TEST_f_L (llrint, -1.4L, -1);
10300       TEST_f_L (llrint, 8388600.3L, 8388600);
10301       TEST_f_L (llrint, -8388600.3L, -8388600);
10303       TEST_f_l (llrint, 1071930.0008, 1071930);
10305       /* Test boundary conditions.  */
10306       /* 0x1FFFFF */
10307       TEST_f_L (llrint, 2097151.0,2097151LL);
10308       /* 0x800000 */
10309       TEST_f_L (llrint, 8388608.0, 8388608LL);
10310       /* 0x1000000 */
10311       TEST_f_L (llrint, 16777216.0, 16777216LL);
10312       /* 0x20000000000 */
10313       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10314       /* 0x40000000000 */
10315       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10316       /* 0x1000000000000 */
10317       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10318       /* 0x10000000000000 */
10319       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10320       /* 0x10000080000000 */
10321       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10322       /* 0x20000000000000 */
10323       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10324       /* 0x80000000000000 */
10325       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10326       /* 0x100000000000000 */
10327       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10328 #ifdef TEST_LDOUBLE
10329       /* The input can only be represented in long double.  */
10330       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10331       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10332       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10333       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10334       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10336       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10337       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10338       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10339       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10340       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10342 # if LDBL_MANT_DIG > 100
10343       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10344       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10345       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10346       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10347       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10348       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10350       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10351       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10352       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10353       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10354       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10355       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10356 #endif
10358       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10359       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10360       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10361       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10362       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10364       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10365       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10366       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10367       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10368       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10370 # if LDBL_MANT_DIG > 100
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);
10378       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10379       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10380       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10381       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10382       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10383       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10384 #endif
10386       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10387       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10388       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10389       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10390       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10392       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10393       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10394       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10395       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10396       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10398 # if LDBL_MANT_DIG > 100
10399       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10400       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10401       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10402       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10403       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10404       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10405       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10406       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10407       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10408       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10409       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10410       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10411 # endif
10412 #endif
10413     }
10415   fesetround (save_round_mode);
10417   END (llrint_towardzero);
10420 static void
10421 llrint_test_downward (void)
10423   int save_round_mode;
10424   START (llrint_downward);
10426   save_round_mode = fegetround ();
10428   if (!fesetround (FE_DOWNWARD))
10429     {
10430       TEST_f_L (llrint, 0.0, 0);
10431       TEST_f_L (llrint, minus_zero, 0);
10432       TEST_f_L (llrint, 0.2L, 0);
10433       TEST_f_L (llrint, -0.2L, -1);
10435       TEST_f_L (llrint, 1.4L, 1);
10436       TEST_f_L (llrint, -1.4L, -2);
10438       TEST_f_L (llrint, 8388600.3L, 8388600);
10439       TEST_f_L (llrint, -8388600.3L, -8388601);
10441       TEST_f_l (llrint, 1071930.0008, 1071930);
10443       /* Test boundary conditions.  */
10444       /* 0x1FFFFF */
10445       TEST_f_L (llrint, 2097151.0,2097151LL);
10446       /* 0x800000 */
10447       TEST_f_L (llrint, 8388608.0, 8388608LL);
10448       /* 0x1000000 */
10449       TEST_f_L (llrint, 16777216.0, 16777216LL);
10450       /* 0x20000000000 */
10451       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10452       /* 0x40000000000 */
10453       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10454       /* 0x1000000000000 */
10455       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10456       /* 0x10000000000000 */
10457       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10458       /* 0x10000080000000 */
10459       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10460       /* 0x20000000000000 */
10461       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10462       /* 0x80000000000000 */
10463       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10464       /* 0x100000000000000 */
10465       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10466 #ifdef TEST_LDOUBLE
10467       /* The input can only be represented in long double.  */
10468       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
10469       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
10470       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
10471       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
10472       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
10474       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
10475       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
10476       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
10477       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
10478       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
10479       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
10481       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
10482       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
10483       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
10484       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
10485       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
10487       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
10488       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
10489       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
10490       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
10491       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
10492       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
10494       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
10495       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
10496       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
10497       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
10498       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
10500       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
10501       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
10502       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
10503       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
10504       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
10505       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
10507       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
10508       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
10509       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
10510       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
10511       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
10513       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
10514       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
10515       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
10516       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
10517       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
10518       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
10520       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
10521       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
10522       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
10523       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
10524       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
10526       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
10527       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
10528       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
10529       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
10530       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
10532 # if LDBL_MANT_DIG > 100
10533       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
10534       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
10535       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10536       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10537       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
10538       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
10539       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
10540       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
10541       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
10542       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
10543       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10544       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10545 # endif
10546 #endif
10547     }
10549   fesetround (save_round_mode);
10551   END (llrint_downward);
10554 static void
10555 llrint_test_upward (void)
10557   int save_round_mode;
10558   START (llrint_upward);
10560   save_round_mode = fegetround ();
10562   if (!fesetround (FE_UPWARD))
10563     {
10564       TEST_f_L (llrint, 0.0, 0);
10565       TEST_f_L (llrint, minus_zero, 0);
10566       TEST_f_L (llrint, 0.2L, 1);
10567       TEST_f_L (llrint, -0.2L, 0);
10569       TEST_f_L (llrint, 1.4L, 2);
10570       TEST_f_L (llrint, -1.4L, -1);
10572       TEST_f_L (llrint, 8388600.3L, 8388601);
10573       TEST_f_L (llrint, -8388600.3L, -8388600);
10574 #ifndef TEST_FLOAT
10575       TEST_f_l (llrint, 1071930.0008, 1071931);
10576 #endif
10577       /* Test boundary conditions.  */
10578       /* 0x1FFFFF */
10579       TEST_f_L (llrint, 2097151.0,2097151LL);
10580       /* 0x800000 */
10581       TEST_f_L (llrint, 8388608.0, 8388608LL);
10582       /* 0x1000000 */
10583       TEST_f_L (llrint, 16777216.0, 16777216LL);
10584       /* 0x20000000000 */
10585       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
10586       /* 0x40000000000 */
10587       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
10588       /* 0x1000000000000 */
10589       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
10590       /* 0x10000000000000 */
10591       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
10592       /* 0x10000080000000 */
10593       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
10594       /* 0x20000000000000 */
10595       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
10596       /* 0x80000000000000 */
10597       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
10598       /* 0x100000000000000 */
10599       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
10600 #ifdef TEST_LDOUBLE
10601       /* The input can only be represented in long double.  */
10602       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
10603       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
10604       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
10605       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
10606       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
10608       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
10609       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
10610       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
10611       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
10612       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
10613       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
10615       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
10616       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
10617       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
10618       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
10619       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
10621       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
10622       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
10623       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
10624       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
10625       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
10626       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
10628       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
10629       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
10630       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
10631       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
10632       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
10634       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
10635       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
10636       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
10637       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
10638       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
10639       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
10641       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
10642       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
10643       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
10644       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
10645       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
10647       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
10648       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
10649       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
10650       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
10651       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
10652       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
10654       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
10655       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
10656       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
10657       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
10658       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
10660       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
10661       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
10662       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
10663       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
10664       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
10666 # if LDBL_MANT_DIG > 100
10667       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
10668       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
10669       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
10670       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
10671       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
10672       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
10673       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
10674       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
10675       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
10676       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
10677       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
10678       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
10679 # endif
10680 #endif
10681     }
10683   fesetround (save_round_mode);
10685   END (llrint_upward);
10689 static void
10690 log_test (void)
10692   errno = 0;
10693   FUNC(log) (1);
10694   if (errno == ENOSYS)
10695     /* Function not implemented.  */
10696     return;
10697   START (log);
10699   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10700   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10702   TEST_f_f (log, 1, 0);
10704   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
10705   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
10706   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
10707   TEST_f_f (log, plus_infty, plus_infty);
10708   TEST_f_f (log, qnan_value, qnan_value);
10710   TEST_f_f (log, M_El, 1);
10711   TEST_f_f (log, 1.0 / M_El, -1);
10712   TEST_f_f (log, 2, M_LN2l);
10713   TEST_f_f (log, 10, M_LN10l);
10714   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
10716   END (log);
10720 static void
10721 log10_test (void)
10723   errno = 0;
10724   FUNC(log10) (1);
10725   if (errno == ENOSYS)
10726     /* Function not implemented.  */
10727     return;
10729   START (log10);
10731   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10732   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10734   TEST_f_f (log10, 1, 0);
10736   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
10737   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
10738   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
10739   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
10741   TEST_f_f (log10, plus_infty, plus_infty);
10742   TEST_f_f (log10, qnan_value, qnan_value);
10744   TEST_f_f (log10, 0.1L, -1);
10745   TEST_f_f (log10, 10.0, 1);
10746   TEST_f_f (log10, 100.0, 2);
10747   TEST_f_f (log10, 10000.0, 4);
10748   TEST_f_f (log10, M_El, M_LOG10El);
10749   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
10751   END (log10);
10755 static void
10756 log1p_test (void)
10758   errno = 0;
10759   FUNC(log1p) (0);
10760   if (errno == ENOSYS)
10761     /* Function not implemented.  */
10762     return;
10764   START (log1p);
10766   TEST_f_f (log1p, 0, 0);
10767   TEST_f_f (log1p, minus_zero, minus_zero);
10769   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10770   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
10771   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
10772   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
10774   TEST_f_f (log1p, plus_infty, plus_infty);
10775   TEST_f_f (log1p, qnan_value, qnan_value);
10777   TEST_f_f (log1p, M_El - 1.0, 1);
10779   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
10780   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
10782   END (log1p);
10786 static void
10787 log2_test (void)
10789   errno = 0;
10790   FUNC(log2) (1);
10791   if (errno == ENOSYS)
10792     /* Function not implemented.  */
10793     return;
10795   START (log2);
10797   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10798   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10800   TEST_f_f (log2, 1, 0);
10802   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
10803   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
10804   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
10806   TEST_f_f (log2, plus_infty, plus_infty);
10807   TEST_f_f (log2, qnan_value, qnan_value);
10809   TEST_f_f (log2, M_El, M_LOG2El);
10810   TEST_f_f (log2, 2.0, 1);
10811   TEST_f_f (log2, 16.0, 4);
10812   TEST_f_f (log2, 256.0, 8);
10813   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
10815   END (log2);
10819 static void
10820 logb_test (void)
10822   START (logb);
10824   TEST_f_f (logb, plus_infty, plus_infty);
10825   TEST_f_f (logb, minus_infty, plus_infty);
10827   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10829   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10830   TEST_f_f (logb, qnan_value, qnan_value);
10832   TEST_f_f (logb, 1, 0);
10833   TEST_f_f (logb, M_El, 1);
10834   TEST_f_f (logb, 1024, 10);
10835   TEST_f_f (logb, -2000, 10);
10837   TEST_f_f (logb, 0x0.1p-127, -131);
10838   TEST_f_f (logb, 0x0.01p-127, -135);
10839   TEST_f_f (logb, 0x0.011p-127, -135);
10840 #ifndef TEST_FLOAT
10841   TEST_f_f (logb, 0x0.8p-1022, -1023);
10842   TEST_f_f (logb, 0x0.1p-1022, -1026);
10843   TEST_f_f (logb, 0x0.00111p-1022, -1034);
10844   TEST_f_f (logb, 0x0.00001p-1022, -1042);
10845   TEST_f_f (logb, 0x0.000011p-1022, -1042);
10846   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
10847 #endif
10848 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
10849   TEST_f_f (logb, 0x1p-16400L, -16400);
10850   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
10851 #endif
10853   END (logb);
10856 static void
10857 logb_test_downward (void)
10859   int save_round_mode;
10860   errno = 0;
10862   FUNC(logb) (0);
10863   if (errno == ENOSYS)
10864     /* Function not implemented.  */
10865     return;
10867   START (logb_downward);
10869   save_round_mode = fegetround ();
10871   if (!fesetround (FE_DOWNWARD))
10872     {
10874       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
10875          should not return -0 from logb in any rounding mode.  PowerPC32 has
10876          failed with this test for power4 logb (and logbl on all PowerPC
10877          platforms) in the past due to instruction selection.  GCC PR 52775
10878          provides the availability of the fcfid insn in 32-bit mode which
10879          eliminates the use of fsub in this instance and prevents the negative
10880          signed 0.0.  */
10882       /* BZ #887  */
10883       TEST_f_f (logb, 1.000e+0, plus_zero);
10884     }
10886   fesetround (save_round_mode);
10888   END (logb_downward);
10891 static void
10892 lround_test (void)
10894   /* TODO: missing +/-Inf as well as qNaN tests.  */
10896   START (lround);
10898   TEST_f_l (lround, 0, 0);
10899   TEST_f_l (lround, minus_zero, 0);
10900   TEST_f_l (lround, 0.2L, 0.0);
10901   TEST_f_l (lround, -0.2L, 0);
10902   TEST_f_l (lround, 0.5, 1);
10903   TEST_f_l (lround, -0.5, -1);
10904   TEST_f_l (lround, 0.8L, 1);
10905   TEST_f_l (lround, -0.8L, -1);
10906   TEST_f_l (lround, 1.5, 2);
10907   TEST_f_l (lround, -1.5, -2);
10908   TEST_f_l (lround, 22514.5, 22515);
10909   TEST_f_l (lround, -22514.5, -22515);
10910   TEST_f_l (lround, 1071930.0008, 1071930);
10911 #ifndef TEST_FLOAT
10912   TEST_f_l (lround, 1073741824.01, 1073741824);
10913 # if LONG_MAX > 281474976710656
10914   TEST_f_l (lround, 281474976710656.025, 281474976710656);
10915   TEST_f_l (lround, 18014398509481974, 18014398509481974);
10916 # endif
10917   TEST_f_l (lround, 2097152.5, 2097153);
10918   TEST_f_l (lround, -2097152.5, -2097153);
10919   /* nextafter(0.5,-1)  */
10920   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
10921   /* nextafter(-0.5,1)  */
10922   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
10923 #else
10924   /* nextafter(0.5,-1)  */
10925   TEST_f_l (lround, 0x1.fffffp-2, 0);
10926   /* nextafter(-0.5,1)  */
10927   TEST_f_l (lround, -0x1.fffffp-2, 0);
10928   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
10929   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
10930 #endif
10931   END (lround);
10935 static void
10936 llround_test (void)
10938   /* TODO: missing +/-Inf as well as qNaN tests.  */
10940   START (llround);
10942   TEST_f_L (llround, 0, 0);
10943   TEST_f_L (llround, minus_zero, 0);
10944   TEST_f_L (llround, 0.2L, 0.0);
10945   TEST_f_L (llround, -0.2L, 0);
10946   TEST_f_L (llround, 0.5, 1);
10947   TEST_f_L (llround, -0.5, -1);
10948   TEST_f_L (llround, 0.8L, 1);
10949   TEST_f_L (llround, -0.8L, -1);
10950   TEST_f_L (llround, 1.5, 2);
10951   TEST_f_L (llround, -1.5, -2);
10952   TEST_f_L (llround, 22514.5, 22515);
10953   TEST_f_L (llround, -22514.5, -22515);
10954   TEST_f_l (llround, 1071930.0008, 1071930);
10955 #ifndef TEST_FLOAT
10956   TEST_f_L (llround, 2097152.5, 2097153);
10957   TEST_f_L (llround, -2097152.5, -2097153);
10958   TEST_f_L (llround, 34359738368.5, 34359738369ll);
10959   TEST_f_L (llround, -34359738368.5, -34359738369ll);
10960   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
10961 #endif
10963   /* Test boundary conditions.  */
10964   /* 0x1FFFFF */
10965   TEST_f_L (llround, 2097151.0, 2097151LL);
10966   /* 0x800000 */
10967   TEST_f_L (llround, 8388608.0, 8388608LL);
10968   /* 0x1000000 */
10969   TEST_f_L (llround, 16777216.0, 16777216LL);
10970   /* 0x20000000000 */
10971   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
10972   /* 0x40000000000 */
10973   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
10974   /* 0x1000000000000 */
10975   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
10976   /* 0x10000000000000 */
10977   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
10978   /* 0x10000080000000 */
10979   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
10980   /* 0x20000000000000 */
10981   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
10982   /* 0x80000000000000 */
10983   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
10984   /* 0x100000000000000 */
10985   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
10987 #ifndef TEST_FLOAT
10988   /* 0x100000000 */
10989   TEST_f_L (llround, 4294967295.5, 4294967296LL);
10990   /* 0x200000000 */
10991   TEST_f_L (llround, 8589934591.5, 8589934592LL);
10993   /* nextafter(0.5,-1)  */
10994   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
10995   /* nextafter(-0.5,1)  */
10996   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
10997   /* On PowerPC an exponent of '52' is the largest incrementally
10998    * representable sequence of whole-numbers in the 'double' range.  We test
10999    * lround to make sure that a guard bit set during the lround operation
11000    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
11001    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
11002    * rightmost bit set.  */
11003   /* +-(2^52+1)  */
11004   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
11005   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
11006   /* +-(2^53-1): Input is the last (positive and negative) incrementally
11007    * representable whole-number in the 'double' range that might round
11008    * erroneously.  */
11009   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
11010   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
11011 #else
11012   /* nextafter(0.5,-1)  */
11013   TEST_f_L (llround, 0x1.fffffep-2, 0);
11014   /* nextafter(-0.5,1)  */
11015   TEST_f_L (llround, -0x1.fffffep-2, 0);
11016   /* As above, on PowerPC an exponent of '23' is the largest incrementally
11017    * representable sequence of whole-numbers in the 'float' range.
11018    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
11019   TEST_f_L (llround, 0x1.000002p+23,8388609);
11020   TEST_f_L (llround, -0x1.000002p+23,-8388609);
11021   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
11022   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
11023 #endif
11026 #ifdef TEST_LDOUBLE
11027   /* The input can only be represented in long double.  */
11028   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
11029   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
11030   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
11031   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
11032   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
11034 # if LDBL_MANT_DIG > 100
11035   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
11036   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
11037   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
11038   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
11039   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
11040   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
11042   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
11043   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
11044   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
11045   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
11046   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
11047   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
11048 # endif
11050   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
11051   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
11052   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
11053   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
11054   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
11056   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
11057   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
11058   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
11059   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
11060   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
11062 # if LDBL_MANT_DIG > 100
11063   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
11064   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
11065   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
11066   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
11067   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
11068   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
11070   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
11071   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
11072   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
11073   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
11074   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
11075   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
11076 # endif
11078   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
11079   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
11080   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
11081   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
11082   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
11084   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
11085   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
11086   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
11087   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
11088   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
11090   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
11091   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
11092   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
11093   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
11094   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
11096   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
11097   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
11098   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
11099   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
11100   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
11101   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
11102 #endif
11104   END (llround);
11107 static void
11108 modf_test (void)
11110   FLOAT x;
11112   START (modf);
11114   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
11115   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
11116   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
11117   TEST_fF_f1 (modf, 0, 0, 0);
11118   TEST_fF_f1 (modf, 1.5, 0.5, 1);
11119   TEST_fF_f1 (modf, 2.5, 0.5, 2);
11120   TEST_fF_f1 (modf, -2.5, -0.5, -2);
11121   TEST_fF_f1 (modf, 20, 0, 20);
11122   TEST_fF_f1 (modf, 21, 0, 21);
11123   TEST_fF_f1 (modf, 89.5, 0.5, 89);
11125   END (modf);
11129 static void
11130 nearbyint_test (void)
11132   START (nearbyint);
11134   TEST_f_f (nearbyint, 0.0, 0.0);
11135   TEST_f_f (nearbyint, minus_zero, minus_zero);
11136   TEST_f_f (nearbyint, plus_infty, plus_infty);
11137   TEST_f_f (nearbyint, minus_infty, minus_infty);
11138   TEST_f_f (nearbyint, qnan_value, qnan_value);
11140   /* Subnormal values */
11141   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
11142   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
11144   /* Default rounding mode is round to nearest.  */
11145   TEST_f_f (nearbyint, 0.5, 0.0);
11146   TEST_f_f (nearbyint, 1.5, 2.0);
11147   TEST_f_f (nearbyint, -0.5, minus_zero);
11148   TEST_f_f (nearbyint, -1.5, -2.0);
11150   TEST_f_f (nearbyint, 262144.75, 262145.0);
11151   TEST_f_f (nearbyint, 262142.75, 262143.0);
11152   TEST_f_f (nearbyint, 524286.75, 524287.0);
11153   TEST_f_f (nearbyint, 524288.75, 524289.0);
11155   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
11156   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
11157   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
11158   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
11159   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
11160   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
11161   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
11162   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
11163   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
11164   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
11165 #ifndef TEST_FLOAT
11166   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
11167   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
11168   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
11169   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
11170   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
11171   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
11172   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
11173   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
11174   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
11175   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
11176 #endif
11178   END (nearbyint);
11181 static void
11182 nextafter_test (void)
11185   START (nextafter);
11187   TEST_ff_f (nextafter, 0, 0, 0);
11188   TEST_ff_f (nextafter, minus_zero, 0, 0);
11189   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
11190   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
11192   TEST_ff_f (nextafter, 9, 9, 9);
11193   TEST_ff_f (nextafter, -9, -9, -9);
11194   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
11195   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
11197   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
11198   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
11199   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
11201   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
11202                          LDBL_MAX, DBL_MAX, FLT_MAX);
11203   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
11204   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
11206 #ifdef TEST_LDOUBLE
11207   // XXX Enable once gcc is fixed.
11208   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
11209 #endif
11211   /* XXX We need the hexadecimal FP number representation here for further
11212      tests.  */
11214   END (nextafter);
11218 static void
11219 nexttoward_test (void)
11221   START (nexttoward);
11222   TEST_ff_f (nexttoward, 0, 0, 0);
11223   TEST_ff_f (nexttoward, minus_zero, 0, 0);
11224   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
11225   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
11227   TEST_ff_f (nexttoward, 9, 9, 9);
11228   TEST_ff_f (nexttoward, -9, -9, -9);
11229   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
11230   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
11232   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
11233   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
11234   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
11236 #ifdef TEST_FLOAT
11237   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
11238   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
11239   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
11240   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
11241   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
11242   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
11243   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
11244   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
11245   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
11246   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
11247   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
11248   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
11249   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
11250 # if LDBL_MANT_DIG >= 64
11251   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
11252   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
11253   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
11254   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
11255 # endif
11256 # if LDBL_MANT_DIG >= 106
11257   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
11258   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
11259   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
11260   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
11261 # endif
11262 # if LDBL_MANT_DIG >= 113
11263   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
11264   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
11265   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
11266   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
11267 # endif
11268 #endif
11269 #ifdef TEST_DOUBLE
11270   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
11271   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
11272   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
11273   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
11274   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
11275   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
11276   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
11277   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
11278   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
11279   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
11280   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
11281   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
11282   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
11283   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
11284 # if LDBL_MANT_DIG >= 64
11285   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
11286   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
11287   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
11288   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
11289 # endif
11290 # if LDBL_MANT_DIG >= 106
11291   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
11292   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
11293   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
11294   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
11295 # endif
11296 # if LDBL_MANT_DIG >= 113
11297   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
11298   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
11299   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
11300   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
11301 # endif
11302 #endif
11304   END (nexttoward);
11308 static void
11309 pow_test (void)
11312   errno = 0;
11313   FUNC(pow) (0, 0);
11314   if (errno == ENOSYS)
11315     /* Function not implemented.  */
11316     return;
11318   START (pow);
11320   TEST_ff_f (pow, 0, 0, 1);
11321   TEST_ff_f (pow, 0, minus_zero, 1);
11322   TEST_ff_f (pow, minus_zero, 0, 1);
11323   TEST_ff_f (pow, minus_zero, minus_zero, 1);
11325   TEST_ff_f (pow, 10, 0, 1);
11326   TEST_ff_f (pow, 10, minus_zero, 1);
11327   TEST_ff_f (pow, -10, 0, 1);
11328   TEST_ff_f (pow, -10, minus_zero, 1);
11330   TEST_ff_f (pow, qnan_value, 0, 1);
11331   TEST_ff_f (pow, qnan_value, minus_zero, 1);
11334 #ifndef TEST_INLINE
11335   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
11336   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
11337   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
11338   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
11340   TEST_ff_f (pow, 0.9L, plus_infty, 0);
11341   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
11342   TEST_ff_f (pow, -0.9L, plus_infty, 0);
11343   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
11345   TEST_ff_f (pow, 1.1L, minus_infty, 0);
11346   TEST_ff_f (pow, plus_infty, minus_infty, 0);
11347   TEST_ff_f (pow, -1.1L, minus_infty, 0);
11348   TEST_ff_f (pow, minus_infty, minus_infty, 0);
11350   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
11351   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
11352   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
11353   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
11355   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
11356   TEST_ff_f (pow, plus_infty, 1, plus_infty);
11357   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
11358   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
11360   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
11361   TEST_ff_f (pow, plus_infty, -1, 0);
11362   TEST_ff_f (pow, plus_infty, -1e7L, 0);
11363   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
11365   TEST_ff_f (pow, minus_infty, 1, minus_infty);
11366   TEST_ff_f (pow, minus_infty, 11, minus_infty);
11367   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
11369   TEST_ff_f (pow, minus_infty, 2, plus_infty);
11370   TEST_ff_f (pow, minus_infty, 12, plus_infty);
11371   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
11372   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
11373   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
11374   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
11375   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
11376   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
11378   TEST_ff_f (pow, minus_infty, -1, minus_zero);
11379   TEST_ff_f (pow, minus_infty, -11, minus_zero);
11380   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
11382   TEST_ff_f (pow, minus_infty, -2, 0);
11383   TEST_ff_f (pow, minus_infty, -12, 0);
11384   TEST_ff_f (pow, minus_infty, -1002, 0);
11385   TEST_ff_f (pow, minus_infty, -0.1L, 0);
11386   TEST_ff_f (pow, minus_infty, -1.1L, 0);
11387   TEST_ff_f (pow, minus_infty, -11.1L, 0);
11388   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
11389   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
11390 #endif
11392   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
11393   TEST_ff_f (pow, 0, qnan_value, qnan_value);
11394   TEST_ff_f (pow, 1, qnan_value, 1);
11395   TEST_ff_f (pow, -1, qnan_value, qnan_value);
11396   TEST_ff_f (pow, qnan_value, 1, qnan_value);
11397   TEST_ff_f (pow, qnan_value, -1, qnan_value);
11399   /* pow (x, qNaN) == qNaN.  */
11400   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
11401   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
11402   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
11403   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
11404   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
11406   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
11407   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
11408   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
11409   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
11410   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
11411   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
11412   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
11413   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
11415   TEST_ff_f (pow, 1, plus_infty, 1);
11416   TEST_ff_f (pow, -1, plus_infty, 1);
11417   TEST_ff_f (pow, 1, minus_infty, 1);
11418   TEST_ff_f (pow, -1, minus_infty, 1);
11419   TEST_ff_f (pow, 1, 1, 1);
11420   TEST_ff_f (pow, 1, -1, 1);
11421   TEST_ff_f (pow, 1, 1.25, 1);
11422   TEST_ff_f (pow, 1, -1.25, 1);
11423   TEST_ff_f (pow, 1, 0x1p62L, 1);
11424   TEST_ff_f (pow, 1, 0x1p63L, 1);
11425   TEST_ff_f (pow, 1, 0x1p64L, 1);
11426   TEST_ff_f (pow, 1, 0x1p72L, 1);
11427   TEST_ff_f (pow, 1, min_subnorm_value, 1);
11428   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
11430   /* pow (x, +-0) == 1.  */
11431   TEST_ff_f (pow, plus_infty, 0, 1);
11432   TEST_ff_f (pow, plus_infty, minus_zero, 1);
11433   TEST_ff_f (pow, minus_infty, 0, 1);
11434   TEST_ff_f (pow, minus_infty, minus_zero, 1);
11435   TEST_ff_f (pow, 32.75L, 0, 1);
11436   TEST_ff_f (pow, 32.75L, minus_zero, 1);
11437   TEST_ff_f (pow, -32.75L, 0, 1);
11438   TEST_ff_f (pow, -32.75L, minus_zero, 1);
11439   TEST_ff_f (pow, 0x1p72L, 0, 1);
11440   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
11441   TEST_ff_f (pow, 0x1p-72L, 0, 1);
11442   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
11444   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11445   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11446   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
11447   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
11448   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11449   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11450   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11451   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
11453   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11454   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11455   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11456 #ifndef TEST_FLOAT
11457   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11458 #endif
11459 #ifdef TEST_LDOUBLE
11460 # if LDBL_MANT_DIG >= 64
11461   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11462 # endif
11463 # if LDBL_MANT_DIG >= 106
11464   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11465 # endif
11466 # if LDBL_MANT_DIG >= 113
11467   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11468 # endif
11469 #endif
11470   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11471   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11472   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11473   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11474 #ifndef TEST_FLOAT
11475   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11476   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11477 #endif
11478 #ifdef TEST_LDOUBLE
11479 # if LDBL_MANT_DIG >= 64
11480   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11481   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11482 # endif
11483 # if LDBL_MANT_DIG >= 106
11484   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11485   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11486 # endif
11487 # if LDBL_MANT_DIG >= 113
11488   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11489   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11490 # endif
11491 #endif
11493   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11494   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11495   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11496   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11497   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11498   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11499   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11500   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11501   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11502   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11503   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11504   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE);
11506   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
11507   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
11508   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11509   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
11511   TEST_ff_f (pow, 0, 1, 0);
11512   TEST_ff_f (pow, 0, 11, 0);
11514   TEST_ff_f (pow, minus_zero, 1, minus_zero);
11515   TEST_ff_f (pow, minus_zero, 11, minus_zero);
11517   TEST_ff_f (pow, 0, 2, 0);
11518   TEST_ff_f (pow, 0, 11.1L, 0);
11520   TEST_ff_f (pow, minus_zero, 2, 0);
11521   TEST_ff_f (pow, minus_zero, 11.1L, 0);
11522   TEST_ff_f (pow, 0, plus_infty, 0);
11523   TEST_ff_f (pow, minus_zero, plus_infty, 0);
11524   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11525   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
11527 #ifndef TEST_INLINE
11528   /* pow (x, +inf) == +inf for |x| > 1.  */
11529   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
11531   /* pow (x, +inf) == +0 for |x| < 1.  */
11532   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
11534   /* pow (x, -inf) == +0 for |x| > 1.  */
11535   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
11537   /* pow (x, -inf) == +inf for |x| < 1.  */
11538   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
11539 #endif
11541   /* pow (+inf, y) == +inf for y > 0.  */
11542   TEST_ff_f (pow, plus_infty, 2, plus_infty);
11543   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
11544 #ifndef TEST_FLOAT
11545   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
11546 #endif
11547 #ifdef TEST_LDOUBLE
11548 # if LDBL_MANT_DIG >= 64
11549   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
11550 # endif
11551 # if LDBL_MANT_DIG >= 106
11552   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
11553 # endif
11554 # if LDBL_MANT_DIG >= 113
11555   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
11556 # endif
11557 #endif
11558   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
11559   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
11560   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
11562   /* pow (+inf, y) == +0 for y < 0.  */
11563   TEST_ff_f (pow, plus_infty, -1, 0.0);
11564   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
11565 #ifndef TEST_FLOAT
11566   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
11567 #endif
11568 #ifdef TEST_LDOUBLE
11569 # if LDBL_MANT_DIG >= 64
11570   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
11571 # endif
11572 # if LDBL_MANT_DIG >= 106
11573   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11574 # endif
11575 # if LDBL_MANT_DIG >= 113
11576   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11577 # endif
11578 #endif
11579   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
11580   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
11581   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
11583   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
11584   TEST_ff_f (pow, minus_infty, 27, minus_infty);
11585   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
11586   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
11587 #ifndef TEST_FLOAT
11588   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
11589   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
11590 #endif
11591 #ifdef TEST_LDOUBLE
11592 # if LDBL_MANT_DIG >= 64
11593   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
11594   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
11595 # endif
11596 # if LDBL_MANT_DIG >= 106
11597   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
11598   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
11599 # endif
11600 # if LDBL_MANT_DIG >= 113
11601   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
11602   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
11603 # endif
11604 #endif
11606   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
11607   TEST_ff_f (pow, minus_infty, 28, plus_infty);
11608   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
11609   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
11610   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
11612   /* pow (-inf, y) == -0 for y an odd integer < 0. */
11613   TEST_ff_f (pow, minus_infty, -3, minus_zero);
11614   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
11615   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
11616 #ifndef TEST_FLOAT
11617   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
11618   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
11619 #endif
11620 #ifdef TEST_LDOUBLE
11621 # if LDBL_MANT_DIG >= 64
11622   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
11623   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
11624 # endif
11625 # if LDBL_MANT_DIG >= 106
11626   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11627   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11628 # endif
11629 # if LDBL_MANT_DIG >= 113
11630   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11631   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11632 # endif
11633 #endif
11634   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
11635   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
11636   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
11637   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
11638   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
11640   /* pow (+0, y) == +0 for y an odd integer > 0.  */
11641   TEST_ff_f (pow, 0.0, 27, 0.0);
11642   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
11643 #ifndef TEST_FLOAT
11644   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
11645 #endif
11646 #ifdef TEST_LDOUBLE
11647 # if LDBL_MANT_DIG >= 64
11648   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
11649 # endif
11650 # if LDBL_MANT_DIG >= 106
11651   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
11652 # endif
11653 # if LDBL_MANT_DIG >= 113
11654   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
11655 # endif
11656 #endif
11658   /* pow (-0, y) == -0 for y an odd integer > 0.  */
11659   TEST_ff_f (pow, minus_zero, 27, minus_zero);
11660   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
11661   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
11662 #ifndef TEST_FLOAT
11663   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
11664   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
11665 #endif
11666 #ifdef TEST_LDOUBLE
11667 # if LDBL_MANT_DIG >= 64
11668   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
11669   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
11670 # endif
11671 # if LDBL_MANT_DIG >= 106
11672   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
11673   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
11674 # endif
11675 # if LDBL_MANT_DIG >= 113
11676   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
11677   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
11678 # endif
11679 #endif
11681   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
11682   TEST_ff_f (pow, 0.0, 4, 0.0);
11683   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
11684   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
11685   TEST_ff_f (pow, 0.0, max_value, 0.0);
11686   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
11688   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
11689   TEST_ff_f (pow, minus_zero, 4, 0.0);
11690   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
11691   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
11692   TEST_ff_f (pow, minus_zero, max_value, 0.0);
11693   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
11695   TEST_ff_f (pow, 16, 0.25L, 2);
11696   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
11697   TEST_ff_f (pow, 2, 4, 16);
11698   TEST_ff_f (pow, 256, 8, 0x1p64L);
11700   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
11702 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
11703   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
11704 #endif
11706   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
11707   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
11708 #ifndef TEST_FLOAT
11709   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
11710   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
11711 #endif
11712 #ifdef TEST_LDOUBLE
11713 # if LDBL_MANT_DIG >= 64
11714   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
11715   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
11716 # endif
11717 # if LDBL_MANT_DIG >= 106
11718   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11719   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11720 # endif
11721 # if LDBL_MANT_DIG >= 113
11722   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11723   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11724 # endif
11725 #endif
11726   TEST_ff_f (pow, -1.0, -max_value, 1.0);
11728   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
11729   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
11730 #ifndef TEST_FLOAT
11731   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
11732   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
11733 #endif
11734 #ifdef TEST_LDOUBLE
11735 # if LDBL_MANT_DIG >= 64
11736   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
11737   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
11738 # endif
11739 # if LDBL_MANT_DIG >= 106
11740   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
11741   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
11742 # endif
11743 # if LDBL_MANT_DIG >= 113
11744   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
11745   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
11746 # endif
11747 #endif
11748   TEST_ff_f (pow, -1.0, max_value, 1.0);
11750   TEST_ff_f (pow, -2.0, 126, 0x1p126);
11751   TEST_ff_f (pow, -2.0, 127, -0x1p127);
11752   /* Allow inexact results for float to be considered to underflow.  */
11753   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
11754   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
11756   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11757   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11758 #ifndef TEST_FLOAT
11759   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11760   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11761 #endif
11762 #ifdef TEST_LDOUBLE
11763 # if LDBL_MANT_DIG >= 64
11764   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11765   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11766 # endif
11767 # if LDBL_MANT_DIG >= 106
11768   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11769   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11770 # endif
11771 # if LDBL_MANT_DIG >= 113
11772   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11773   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11774 # endif
11775 #endif
11776   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11778   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11779   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11780 #ifndef TEST_FLOAT
11781   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11782   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11783 #endif
11784 #ifdef TEST_LDOUBLE
11785 # if LDBL_MANT_DIG >= 64
11786   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11787   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11788 # endif
11789 # if LDBL_MANT_DIG >= 106
11790   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11791   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11792 # endif
11793 # if LDBL_MANT_DIG >= 113
11794   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11795   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11796 # endif
11797 #endif
11798   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
11800   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
11801   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
11802   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11803   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
11804   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
11805   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
11806   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
11808   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11809   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11810 #ifndef TEST_FLOAT
11811   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11812   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11813 #endif
11814 #ifdef TEST_LDOUBLE
11815 # if LDBL_MANT_DIG >= 64
11816   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11817   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11818 # endif
11819 # if LDBL_MANT_DIG >= 106
11820   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11821   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11822 # endif
11823 # if LDBL_MANT_DIG >= 113
11824   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11825   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11826 # endif
11827 #endif
11828   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
11830   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11831   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11832 #ifndef TEST_FLOAT
11833   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11834   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11835 #endif
11836 #ifdef TEST_LDOUBLE
11837 # if LDBL_MANT_DIG >= 64
11838   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11839   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11840 # endif
11841 # if LDBL_MANT_DIG >= 106
11842   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11843   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11844 # endif
11845 # if LDBL_MANT_DIG >= 113
11846   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11847   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11848 # endif
11849 #endif
11850   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
11852   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
11853   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
11854   TEST_ff_f (pow, -0.5, -126, 0x1p126);
11855   TEST_ff_f (pow, -0.5, -127, -0x1p127);
11857   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11858   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11859 #ifndef TEST_FLOAT
11860   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11861   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11862 #endif
11863 #ifdef TEST_LDOUBLE
11864 # if LDBL_MANT_DIG >= 64
11865   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11866   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11867 # endif
11868 # if LDBL_MANT_DIG >= 106
11869   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11870   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11871 # endif
11872 # if LDBL_MANT_DIG >= 113
11873   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11874   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11875 # endif
11876 #endif
11877   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11879   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11880   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11881 #ifndef TEST_FLOAT
11882   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11883   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11884 #endif
11885 #ifdef TEST_LDOUBLE
11886 # if LDBL_MANT_DIG >= 64
11887   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11888   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11889 # endif
11890 # if LDBL_MANT_DIG >= 106
11891   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11892   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11893 # endif
11894 # if LDBL_MANT_DIG >= 113
11895   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11896   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11897 # endif
11898 #endif
11899   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11901   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
11902   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
11903   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
11904   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
11905   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
11906   /* Allow inexact results to be considered to underflow.  */
11907   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
11908   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
11909   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
11911   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
11912   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
11913 #ifndef TEST_FLOAT
11914   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
11915   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
11916 #endif
11917 #ifdef TEST_LDOUBLE
11918 # if LDBL_MANT_DIG >= 64
11919   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
11920   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
11921 # endif
11922 # if LDBL_MANT_DIG >= 106
11923   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
11924   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11925 # endif
11926 # if LDBL_MANT_DIG >= 113
11927   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11928   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11929 # endif
11930 #endif
11931   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11933   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11934   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11935 #ifndef TEST_FLOAT
11936   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11937   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11938 #endif
11939 #ifdef TEST_LDOUBLE
11940 # if LDBL_MANT_DIG >= 64
11941   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11942   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11943 # endif
11944 # if LDBL_MANT_DIG >= 106
11945   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11946   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11947 # endif
11948 # if LDBL_MANT_DIG >= 113
11949   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11950   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11951 # endif
11952 #endif
11953   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11955   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
11956   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
11957   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
11958   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
11959   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
11960   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
11961   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
11962   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
11963   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
11964   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
11965   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
11966   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
11967   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
11968   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
11969   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
11971 #if !defined TEST_FLOAT
11972   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
11973   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
11974   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
11975   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
11976 #endif
11978 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
11979   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
11980   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
11981   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
11982   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
11983 #endif
11985 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
11986   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
11987   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
11988   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
11989   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
11990 #endif
11992 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11993   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
11994   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
11995   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
11996   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
11997   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
11998   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
11999   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
12000   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
12001   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
12002   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
12003   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
12004   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
12005   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
12006 #endif
12008   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
12009   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
12010   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
12011   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
12012   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
12013   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
12014   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
12015   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
12017   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
12019   END (pow);
12023 static void
12024 pow_test_tonearest (void)
12026   int save_round_mode;
12027   errno = 0;
12028   FUNC(pow) (0, 0);
12029   if (errno == ENOSYS)
12030     /* Function not implemented.  */
12031     return;
12033   START (pow_tonearest);
12035   save_round_mode = fegetround ();
12037   if (!fesetround (FE_TONEAREST))
12038     {
12039       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12040       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12041     }
12043   fesetround (save_round_mode);
12045   END (pow_tonearest);
12049 static void
12050 pow_test_towardzero (void)
12052   int save_round_mode;
12053   errno = 0;
12054   FUNC(pow) (0, 0);
12055   if (errno == ENOSYS)
12056     /* Function not implemented.  */
12057     return;
12059   START (pow_towardzero);
12061   save_round_mode = fegetround ();
12063   if (!fesetround (FE_TOWARDZERO))
12064     {
12065       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12066       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12067     }
12069   fesetround (save_round_mode);
12071   END (pow_towardzero);
12075 static void
12076 pow_test_downward (void)
12078   int save_round_mode;
12079   errno = 0;
12080   FUNC(pow) (0, 0);
12081   if (errno == ENOSYS)
12082     /* Function not implemented.  */
12083     return;
12085   START (pow_downward);
12087   save_round_mode = fegetround ();
12089   if (!fesetround (FE_DOWNWARD))
12090     {
12091       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12092       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12093     }
12095   fesetround (save_round_mode);
12097   END (pow_downward);
12101 static void
12102 pow_test_upward (void)
12104   int save_round_mode;
12105   errno = 0;
12106   FUNC(pow) (0, 0);
12107   if (errno == ENOSYS)
12108     /* Function not implemented.  */
12109     return;
12111   START (pow_upward);
12113   save_round_mode = fegetround ();
12115   if (!fesetround (FE_UPWARD))
12116     {
12117       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
12118       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
12119     }
12121   fesetround (save_round_mode);
12123   END (pow_upward);
12127 static void
12128 remainder_test (void)
12130   errno = 0;
12131   FUNC(remainder) (1.625, 1.0);
12132   if (errno == ENOSYS)
12133     /* Function not implemented.  */
12134     return;
12136   START (remainder);
12138   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12139   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12140   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12141   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12142   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12143   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12144   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12145   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12146   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12147   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12148   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, ERRNO_UNCHANGED);
12149   TEST_ff_f (remainder, 0, qnan_value, qnan_value, ERRNO_UNCHANGED);
12150   TEST_ff_f (remainder, qnan_value, 0, qnan_value, ERRNO_UNCHANGED);
12152   TEST_ff_f (remainder, 7.0, plus_infty, 7.0, ERRNO_UNCHANGED);
12153   TEST_ff_f (remainder, 7.0, minus_infty, 7.0, ERRNO_UNCHANGED);
12155   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
12156   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
12157   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
12158   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
12159   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
12160   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
12162   END (remainder);
12165 static void
12166 remquo_test (void)
12168   /* x is needed.  */
12169   int x;
12171   errno = 0;
12172   FUNC(remquo) (1.625, 1.0, &x);
12173   if (errno == ENOSYS)
12174     /* Function not implemented.  */
12175     return;
12177   START (remquo);
12179   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
12180   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
12181   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12182   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
12183   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
12185   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
12186   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
12187   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
12188   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
12190   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
12191   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
12193   END (remquo);
12196 static void
12197 rint_test (void)
12199   /* TODO: missing qNaN tests.  */
12201   START (rint);
12203   TEST_f_f (rint, 0.0, 0.0);
12204   TEST_f_f (rint, minus_zero, minus_zero);
12205   TEST_f_f (rint, plus_infty, plus_infty);
12206   TEST_f_f (rint, minus_infty, minus_infty);
12208   /* Default rounding mode is round to even.  */
12209   TEST_f_f (rint, 0.5, 0.0);
12210   TEST_f_f (rint, 1.5, 2.0);
12211   TEST_f_f (rint, 2.5, 2.0);
12212   TEST_f_f (rint, 3.5, 4.0);
12213   TEST_f_f (rint, 4.5, 4.0);
12214   TEST_f_f (rint, -0.5, -0.0);
12215   TEST_f_f (rint, -1.5, -2.0);
12216   TEST_f_f (rint, -2.5, -2.0);
12217   TEST_f_f (rint, -3.5, -4.0);
12218   TEST_f_f (rint, -4.5, -4.0);
12219   TEST_f_f (rint, 0.1, 0.0);
12220   TEST_f_f (rint, 0.25, 0.0);
12221   TEST_f_f (rint, 0.625, 1.0);
12222   TEST_f_f (rint, -0.1, -0.0);
12223   TEST_f_f (rint, -0.25, -0.0);
12224   TEST_f_f (rint, -0.625, -1.0);
12225   TEST_f_f (rint, 262144.75, 262145.0);
12226   TEST_f_f (rint, 262142.75, 262143.0);
12227   TEST_f_f (rint, 524286.75, 524287.0);
12228   TEST_f_f (rint, 524288.75, 524289.0);
12229   TEST_f_f (rint, 1048576.75, 1048577.0);
12230   TEST_f_f (rint, 2097152.75, 2097153.0);
12231   TEST_f_f (rint, -1048576.75, -1048577.0);
12232   TEST_f_f (rint, -2097152.75, -2097153.0);
12233 #ifndef TEST_FLOAT
12234   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12235   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12236   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12237   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12238   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12239   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12240   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12241   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12242   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12243   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12244 #endif
12245 #ifdef TEST_LDOUBLE
12246   /* The result can only be represented in long double.  */
12247   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12248   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12249   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12250   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12251   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12253 # if LDBL_MANT_DIG > 100
12254   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12255   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12256   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12257 # endif
12259   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12260   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12261   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12262   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12263   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12265 # if LDBL_MANT_DIG > 100
12266   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12267   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12268   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12270   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12271   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12272   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12273   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12274   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12275   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12277   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12278   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12279   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12280   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12281   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12282   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12283 # endif
12285   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
12286   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
12287   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
12288   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
12289   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
12291   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
12292   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
12293   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
12294   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
12295   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
12297   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
12298   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
12299   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
12300   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
12301   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
12303   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
12304   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
12305   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
12306   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
12307   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
12309   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12310   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12311   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12312   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12313   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12314 #endif
12316   END (rint);
12319 static void
12320 rint_test_tonearest (void)
12322   int save_round_mode;
12323   START (rint_tonearest);
12325   save_round_mode = fegetround ();
12327   if (!fesetround (FE_TONEAREST))
12328     {
12329       TEST_f_f (rint, 2.0, 2.0);
12330       TEST_f_f (rint, 1.5, 2.0);
12331       TEST_f_f (rint, 1.0, 1.0);
12332       TEST_f_f (rint, 0.5, 0.0);
12333       TEST_f_f (rint, 0.0, 0.0);
12334       TEST_f_f (rint, minus_zero, minus_zero);
12335       TEST_f_f (rint, -0.5, -0.0);
12336       TEST_f_f (rint, -1.0, -1.0);
12337       TEST_f_f (rint, -1.5, -2.0);
12338       TEST_f_f (rint, -2.0, -2.0);
12339       TEST_f_f (rint, 0.1, 0.0);
12340       TEST_f_f (rint, 0.25, 0.0);
12341       TEST_f_f (rint, 0.625, 1.0);
12342       TEST_f_f (rint, -0.1, -0.0);
12343       TEST_f_f (rint, -0.25, -0.0);
12344       TEST_f_f (rint, -0.625, -1.0);
12345       TEST_f_f (rint, 1048576.75, 1048577.0);
12346       TEST_f_f (rint, 2097152.75, 2097153.0);
12347       TEST_f_f (rint, -1048576.75, -1048577.0);
12348       TEST_f_f (rint, -2097152.75, -2097153.0);
12349 #ifndef TEST_FLOAT
12350       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12351       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12352       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12353       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12354       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12355       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12356       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12357       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12358       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12359       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12360 #endif
12361 #ifdef TEST_LDOUBLE
12362       /* The result can only be represented in long double.  */
12363       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12364       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12365       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12366       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12367       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12368 # if LDBL_MANT_DIG > 100
12369       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12370       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12371       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12372 # endif
12373       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12374       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12375       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12376       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12377       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12378 # if LDBL_MANT_DIG > 100
12379       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12380       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12381       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12383       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12384       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12385       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12386       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12387       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12388       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12390       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12391       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12392       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12393       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12394       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12395       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12396 # endif
12397 #endif
12398     }
12400   fesetround (save_round_mode);
12402   END (rint_tonearest);
12405 static void
12406 rint_test_towardzero (void)
12408   int save_round_mode;
12409   START (rint_towardzero);
12411   save_round_mode = fegetround ();
12413   if (!fesetround (FE_TOWARDZERO))
12414     {
12415       TEST_f_f (rint, 2.0, 2.0);
12416       TEST_f_f (rint, 1.5, 1.0);
12417       TEST_f_f (rint, 1.0, 1.0);
12418       TEST_f_f (rint, 0.5, 0.0);
12419       TEST_f_f (rint, 0.0, 0.0);
12420       TEST_f_f (rint, minus_zero, minus_zero);
12421       TEST_f_f (rint, -0.5, -0.0);
12422       TEST_f_f (rint, -1.0, -1.0);
12423       TEST_f_f (rint, -1.5, -1.0);
12424       TEST_f_f (rint, -2.0, -2.0);
12425       TEST_f_f (rint, 0.1, 0.0);
12426       TEST_f_f (rint, 0.25, 0.0);
12427       TEST_f_f (rint, 0.625, 0.0);
12428       TEST_f_f (rint, -0.1, -0.0);
12429       TEST_f_f (rint, -0.25, -0.0);
12430       TEST_f_f (rint, -0.625, -0.0);
12431       TEST_f_f (rint, 1048576.75, 1048576.0);
12432       TEST_f_f (rint, 2097152.75, 2097152.0);
12433       TEST_f_f (rint, -1048576.75, -1048576.0);
12434       TEST_f_f (rint, -2097152.75, -2097152.0);
12435 #ifndef TEST_FLOAT
12436       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12437       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12438       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12439       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12440       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12441       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12442       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12443       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12444       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12445       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12446 #endif
12447 #ifdef TEST_LDOUBLE
12448       /* The result can only be represented in long double.  */
12449       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12450       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12451       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12452       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12453       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12454 # if LDBL_MANT_DIG > 100
12455       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12456       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12457       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12458 # endif
12459       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12460       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12461       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12462       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12463       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12464 # if LDBL_MANT_DIG > 100
12465       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12466       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12467       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12469       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12470       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12471       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12472       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12473       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12474       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12476       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12477       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12478       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12479       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12480       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12481       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12482 # endif
12483 #endif
12484     }
12486   fesetround (save_round_mode);
12488   END (rint_towardzero);
12491 static void
12492 rint_test_downward (void)
12494   int save_round_mode;
12495   START (rint_downward);
12497   save_round_mode = fegetround ();
12499   if (!fesetround (FE_DOWNWARD))
12500     {
12501       TEST_f_f (rint, 2.0, 2.0);
12502       TEST_f_f (rint, 1.5, 1.0);
12503       TEST_f_f (rint, 1.0, 1.0);
12504       TEST_f_f (rint, 0.5, 0.0);
12505       TEST_f_f (rint, 0.0, 0.0);
12506       TEST_f_f (rint, minus_zero, minus_zero);
12507       TEST_f_f (rint, -0.5, -1.0);
12508       TEST_f_f (rint, -1.0, -1.0);
12509       TEST_f_f (rint, -1.5, -2.0);
12510       TEST_f_f (rint, -2.0, -2.0);
12511       TEST_f_f (rint, 0.1, 0.0);
12512       TEST_f_f (rint, 0.25, 0.0);
12513       TEST_f_f (rint, 0.625, 0.0);
12514       TEST_f_f (rint, -0.1, -1.0);
12515       TEST_f_f (rint, -0.25, -1.0);
12516       TEST_f_f (rint, -0.625, -1.0);
12517       TEST_f_f (rint, 1048576.75, 1048576.0);
12518       TEST_f_f (rint, 2097152.75, 2097152.0);
12519       TEST_f_f (rint, -1048576.75, -1048577.0);
12520       TEST_f_f (rint, -2097152.75, -2097153.0);
12521 #ifndef TEST_FLOAT
12522       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
12523       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
12524       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
12525       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
12526       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
12527       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
12528       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
12529       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
12530       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
12531       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
12532 #endif
12533 #ifdef TEST_LDOUBLE
12534       /* The result can only be represented in long double.  */
12535       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
12536       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
12537       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
12538       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
12539       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
12540 # if LDBL_MANT_DIG > 100
12541       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
12542       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
12543       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
12544 # endif
12545       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
12546       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
12547       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
12548       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
12549       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
12550 # if LDBL_MANT_DIG > 100
12551       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
12552       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
12553       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
12555       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
12556       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
12557       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
12558       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
12559       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
12560       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
12562       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
12563       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
12564       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
12565       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
12566       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
12567       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
12568 # endif
12569 #endif
12570     }
12572   fesetround (save_round_mode);
12574   END (rint_downward);
12577 static void
12578 rint_test_upward (void)
12580   int save_round_mode;
12581   START (rint_upward);
12583   save_round_mode = fegetround ();
12585   if (!fesetround (FE_UPWARD))
12586     {
12587       TEST_f_f (rint, 2.0, 2.0);
12588       TEST_f_f (rint, 1.5, 2.0);
12589       TEST_f_f (rint, 1.0, 1.0);
12590       TEST_f_f (rint, 0.5, 1.0);
12591       TEST_f_f (rint, 0.0, 0.0);
12592       TEST_f_f (rint, minus_zero, minus_zero);
12593       TEST_f_f (rint, -0.5, -0.0);
12594       TEST_f_f (rint, -1.0, -1.0);
12595       TEST_f_f (rint, -1.5, -1.0);
12596       TEST_f_f (rint, -2.0, -2.0);
12597       TEST_f_f (rint, 0.1, 1.0);
12598       TEST_f_f (rint, 0.25, 1.0);
12599       TEST_f_f (rint, 0.625, 1.0);
12600       TEST_f_f (rint, -0.1, -0.0);
12601       TEST_f_f (rint, -0.25, -0.0);
12602       TEST_f_f (rint, -0.625, -0.0);
12603       TEST_f_f (rint, 1048576.75, 1048577.0);
12604       TEST_f_f (rint, 2097152.75, 2097153.0);
12605       TEST_f_f (rint, -1048576.75, -1048576.0);
12606       TEST_f_f (rint, -2097152.75, -2097152.0);
12607 #ifndef TEST_FLOAT
12608       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
12609       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
12610       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
12611       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
12612       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
12613       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
12614       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
12615       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
12616       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
12617       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
12618 #endif
12619 #ifdef TEST_LDOUBLE
12620       /* The result can only be represented in long double.  */
12621       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
12622       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
12623       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
12624       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
12625       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
12626 # if LDBL_MANT_DIG > 100
12627       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
12628       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
12629       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
12630 # endif
12631       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
12632       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
12633       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
12634       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
12635       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
12636 # if LDBL_MANT_DIG > 100
12637       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
12638       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
12639       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
12641       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
12642       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
12643       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
12644       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
12645       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
12646       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
12648       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
12649       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
12650       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
12651       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
12652       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
12653       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
12654 # endif
12655 #endif
12656     }
12658   fesetround (save_round_mode);
12660   END (rint_upward);
12663 static void
12664 round_test (void)
12666   /* TODO: missing +/-Inf as well as qNaN tests.  */
12668   START (round);
12670   TEST_f_f (round, 0, 0);
12671   TEST_f_f (round, minus_zero, minus_zero);
12672   TEST_f_f (round, 0.2L, 0.0);
12673   TEST_f_f (round, -0.2L, minus_zero);
12674   TEST_f_f (round, 0.5, 1.0);
12675   TEST_f_f (round, -0.5, -1.0);
12676   TEST_f_f (round, 0.8L, 1.0);
12677   TEST_f_f (round, -0.8L, -1.0);
12678   TEST_f_f (round, 1.5, 2.0);
12679   TEST_f_f (round, -1.5, -2.0);
12680   TEST_f_f (round, 0.1, 0.0);
12681   TEST_f_f (round, 0.25, 0.0);
12682   TEST_f_f (round, 0.625, 1.0);
12683   TEST_f_f (round, -0.1, -0.0);
12684   TEST_f_f (round, -0.25, -0.0);
12685   TEST_f_f (round, -0.625, -1.0);
12686   TEST_f_f (round, 2097152.5, 2097153);
12687   TEST_f_f (round, -2097152.5, -2097153);
12689 #ifdef TEST_LDOUBLE
12690   /* The result can only be represented in long double.  */
12691   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
12692   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
12693   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
12694   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
12695   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
12696 # if LDBL_MANT_DIG > 100
12697   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
12698   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
12699   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
12700 # endif
12702   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
12703   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
12704   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
12705   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
12706   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
12707 # if LDBL_MANT_DIG > 100
12708   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
12709   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
12710   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
12711 # endif
12713   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
12714   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
12715   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
12716   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
12717   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
12719   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
12720   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
12721   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
12722   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
12723   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
12725 # if LDBL_MANT_DIG > 100
12726   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
12727   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
12728   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
12729   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
12730   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
12731   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
12733   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
12734   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
12735   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
12736   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
12737   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
12738   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
12739 # endif
12741   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
12742   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
12743   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
12744   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
12745   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
12747   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
12748   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
12749   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
12750   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
12751   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
12753   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
12754   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12755   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
12756   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
12757   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
12758 #endif
12760   END (round);
12764 static void
12765 scalb_test (void)
12768   START (scalb);
12770   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
12771   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
12773   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12774   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12776   TEST_ff_f (scalb, 1, 0, 1);
12777   TEST_ff_f (scalb, -1, 0, -1);
12779   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
12780   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
12782   TEST_ff_f (scalb, 0, 2, 0);
12783   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
12784   TEST_ff_f (scalb, 0, 0, 0);
12785   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
12786   TEST_ff_f (scalb, 0, -1, 0);
12787   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
12788   TEST_ff_f (scalb, 0, minus_infty, 0);
12789   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
12791   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
12792   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
12793   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
12794   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
12795   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
12796   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
12798   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
12799   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
12801   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
12802   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
12803   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
12804   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
12806   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12807   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
12809   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
12810   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
12811   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
12812   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
12813   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
12814   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
12815   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
12817   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
12818   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
12820   END (scalb);
12824 static void
12825 scalbn_test (void)
12828   START (scalbn);
12830   TEST_fi_f (scalbn, 0, 0, 0);
12831   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
12833   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
12834   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
12835   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
12837   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
12838   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
12840   TEST_fi_f (scalbn, 1, 0L, 1);
12842   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12843   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12844   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12845   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12846   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12847   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12848   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12849   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12851   END (scalbn);
12855 static void
12856 scalbln_test (void)
12859   START (scalbln);
12861   TEST_fl_f (scalbln, 0, 0, 0);
12862   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
12864   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
12865   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
12866   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
12868   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
12869   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
12871   TEST_fl_f (scalbln, 1, 0L, 1);
12873   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12874   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12875   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12876   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12877   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12878   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12879   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
12880   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12882   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12883   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12884   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12885   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12886   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12887   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12888   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
12889   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
12891 #if LONG_MAX >= 0x100000000
12892   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12893   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12894   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12895   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12896   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12897   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12898   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12899   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12900 #endif
12902   END (scalbn);
12906 static void
12907 signbit_test (void)
12909   /* TODO: missing qNaN tests.  */
12911   START (signbit);
12913   TEST_f_b (signbit, 0, 0);
12914   TEST_f_b (signbit, minus_zero, 1);
12915   TEST_f_b (signbit, plus_infty, 0);
12916   TEST_f_b (signbit, minus_infty, 1);
12918   /* signbit (x) != 0 for x < 0.  */
12919   TEST_f_b (signbit, -1, 1);
12920   /* signbit (x) == 0 for x >= 0.  */
12921   TEST_f_b (signbit, 1, 0);
12923   END (signbit);
12927 static void
12928 sin_test (void)
12930   errno = 0;
12931   FUNC(sin) (0);
12932   if (errno == ENOSYS)
12933     /* Function not implemented.  */
12934     return;
12936   START (sin);
12938   TEST_f_f (sin, 0, 0);
12939   TEST_f_f (sin, minus_zero, minus_zero);
12940   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12941   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
12942   TEST_f_f (sin, qnan_value, qnan_value, ERRNO_UNCHANGED);
12944   TEST_f_f (sin, M_PI_6l, 0.5);
12945   TEST_f_f (sin, -M_PI_6l, -0.5);
12946   TEST_f_f (sin, M_PI_2l, 1);
12947   TEST_f_f (sin, -M_PI_2l, -1);
12948   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
12950   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
12951   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
12953   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
12955 #ifdef TEST_DOUBLE
12956   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
12957   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
12958 #endif
12960 #ifndef TEST_FLOAT
12961   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
12962   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
12963 #endif
12965 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12966   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
12967 #endif
12969   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
12970   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
12971   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
12972   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
12973   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
12974   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
12976   END (sin);
12981 static void
12982 sin_test_tonearest (void)
12984   int save_round_mode;
12985   errno = 0;
12986   FUNC(sin) (0);
12987   if (errno == ENOSYS)
12988     /* Function not implemented.  */
12989     return;
12991   START (sin_tonearest);
12993   save_round_mode = fegetround ();
12995   if (!fesetround (FE_TONEAREST))
12996     {
12997       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12998       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12999       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13000       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13001       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13002       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13003       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13004       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13005       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13006       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13007     }
13009   fesetround (save_round_mode);
13011   END (sin_tonearest);
13015 static void
13016 sin_test_towardzero (void)
13018   int save_round_mode;
13019   errno = 0;
13020   FUNC(sin) (0);
13021   if (errno == ENOSYS)
13022     /* Function not implemented.  */
13023     return;
13025   START (sin_towardzero);
13027   save_round_mode = fegetround ();
13029   if (!fesetround (FE_TOWARDZERO))
13030     {
13031       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13032       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13033       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13034       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13035       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13036       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13037       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13038       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13039       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13040       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13041     }
13043   fesetround (save_round_mode);
13045   END (sin_towardzero);
13049 static void
13050 sin_test_downward (void)
13052   int save_round_mode;
13053   errno = 0;
13054   FUNC(sin) (0);
13055   if (errno == ENOSYS)
13056     /* Function not implemented.  */
13057     return;
13059   START (sin_downward);
13061   save_round_mode = fegetround ();
13063   if (!fesetround (FE_DOWNWARD))
13064     {
13065       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13066       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13067       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13068       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13069       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13070       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13071       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13072       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13073       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13074       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13075     }
13077   fesetround (save_round_mode);
13079   END (sin_downward);
13083 static void
13084 sin_test_upward (void)
13086   int save_round_mode;
13087   errno = 0;
13088   FUNC(sin) (0);
13089   if (errno == ENOSYS)
13090     /* Function not implemented.  */
13091     return;
13093   START (sin_upward);
13095   save_round_mode = fegetround ();
13097   if (!fesetround (FE_UPWARD))
13098     {
13099       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
13100       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
13101       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
13102       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
13103       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
13104       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
13105       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
13106       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
13107       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
13108       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
13109     }
13111   fesetround (save_round_mode);
13113   END (sin_upward);
13117 static void
13118 sincos_test (void)
13120   FLOAT sin_res, cos_res;
13122   errno = 0;
13123   FUNC(sincos) (0, &sin_res, &cos_res);
13124   if (errno == ENOSYS)
13125     /* Function not implemented.  */
13126     return;
13128   START (sincos);
13130   /* sincos is treated differently because it returns void.  */
13131   TEST_extra (sincos, 0, 0, 1);
13133   TEST_extra (sincos, minus_zero, minus_zero, 1);
13134   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13135   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
13136   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
13138   /* The value of M_PI_2l is never exactly PI/2, and therefore the
13139      answer is never exactly zero. The answer is equal to the error
13140      in rounding PI/2 for the type used.  Thus the answer is unique
13141      to each type.  */
13142 #ifdef TEST_FLOAT
13143   /* 32-bit float.  */
13144   TEST_extra (sincos, M_PI_2l, 1, -0x1.777a5cp-25L);
13145 #endif
13146 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
13147   /* 64-bit double or 64-bit long double.  */
13148   TEST_extra (sincos, M_PI_2l, 1, 0x1.1a62633145c07p-54L);
13149 #endif
13150 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
13151   /* 96-bit long double.  */
13152   TEST_extra (sincos, M_PI_2l, 1, -0xe.ce675d1fc8f8cbbp-69L);
13153 #endif
13154 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
13155   /* 128-bit IBM long double.  */
13156   TEST_extra (sincos, M_PI_2l, 1, 0x1.c1cd129024e088a67cc74020bcp-107L);
13157 #endif
13158 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
13159   /* 128-bit long double.  */
13160   TEST_extra (sincos, M_PI_2l, 1, 0x1.cd129024e088a67cc74020bbea64p-115L);
13161 #endif
13163   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
13164   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
13165   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
13167   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13168   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
13170 #ifdef TEST_DOUBLE
13171   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
13172 #endif
13174 #ifndef TEST_FLOAT
13175   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
13176   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
13177 #endif
13179 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13180   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
13181 #endif
13183   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
13184   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
13185   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
13186   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
13187   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
13188   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
13190   END (sincos);
13193 static void
13194 sinh_test (void)
13196   errno = 0;
13197   FUNC(sinh) (0.7L);
13198   if (errno == ENOSYS)
13199     /* Function not implemented.  */
13200     return;
13202   START (sinh);
13203   TEST_f_f (sinh, 0, 0);
13204   TEST_f_f (sinh, minus_zero, minus_zero);
13206 #ifndef TEST_INLINE
13207   TEST_f_f (sinh, plus_infty, plus_infty);
13208   TEST_f_f (sinh, minus_infty, minus_infty);
13209 #endif
13210   TEST_f_f (sinh, qnan_value, qnan_value);
13212   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
13213   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
13215   END (sinh);
13219 static void
13220 sinh_test_tonearest (void)
13222   int save_round_mode;
13223   errno = 0;
13224   FUNC(sinh) (0);
13225   if (errno == ENOSYS)
13226     /* Function not implemented.  */
13227     return;
13229   START (sinh_tonearest);
13231   save_round_mode = fegetround ();
13233   if (!fesetround (FE_TONEAREST))
13234     {
13235       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13236       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13237       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13238     }
13240   fesetround (save_round_mode);
13242   END (sinh_tonearest);
13246 static void
13247 sinh_test_towardzero (void)
13249   int save_round_mode;
13250   errno = 0;
13251   FUNC(sinh) (0);
13252   if (errno == ENOSYS)
13253     /* Function not implemented.  */
13254     return;
13256   START (sinh_towardzero);
13258   save_round_mode = fegetround ();
13260   if (!fesetround (FE_TOWARDZERO))
13261     {
13262       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13263       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13264       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13265     }
13267   fesetround (save_round_mode);
13269   END (sinh_towardzero);
13273 static void
13274 sinh_test_downward (void)
13276   int save_round_mode;
13277   errno = 0;
13278   FUNC(sinh) (0);
13279   if (errno == ENOSYS)
13280     /* Function not implemented.  */
13281     return;
13283   START (sinh_downward);
13285   save_round_mode = fegetround ();
13287   if (!fesetround (FE_DOWNWARD))
13288     {
13289       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13290       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13291       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13292     }
13294   fesetround (save_round_mode);
13296   END (sinh_downward);
13300 static void
13301 sinh_test_upward (void)
13303   int save_round_mode;
13304   errno = 0;
13305   FUNC(sinh) (0);
13306   if (errno == ENOSYS)
13307     /* Function not implemented.  */
13308     return;
13310   START (sinh_upward);
13312   save_round_mode = fegetround ();
13314   if (!fesetround (FE_UPWARD))
13315     {
13316       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
13317       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
13318       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
13319     }
13321   fesetround (save_round_mode);
13323   END (sinh_upward);
13327 static void
13328 sqrt_test (void)
13330   errno = 0;
13331   FUNC(sqrt) (1);
13332   if (errno == ENOSYS)
13333     /* Function not implemented.  */
13334     return;
13336   START (sqrt);
13338   TEST_f_f (sqrt, 0, 0);
13339   TEST_f_f (sqrt, qnan_value, qnan_value);
13340   TEST_f_f (sqrt, plus_infty, plus_infty);
13342   TEST_f_f (sqrt, minus_zero, minus_zero);
13344   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
13345   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
13346   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
13347   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
13349   TEST_f_f (sqrt, 2209, 47);
13350   TEST_f_f (sqrt, 4, 2);
13351   TEST_f_f (sqrt, 2, M_SQRT2l);
13352   TEST_f_f (sqrt, 0.25, 0.5);
13353   TEST_f_f (sqrt, 6642.25, 81.5);
13354   TEST_f_f (sqrt, 15190.5625L, 123.25L);
13355   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
13357   END (sqrt);
13361 static void
13362 tan_test (void)
13364   errno = 0;
13365   FUNC(tan) (0);
13366   if (errno == ENOSYS)
13367     /* Function not implemented.  */
13368     return;
13370   START (tan);
13372   TEST_f_f (tan, 0, 0);
13373   TEST_f_f (tan, minus_zero, minus_zero);
13374   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13375   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM);
13376   TEST_f_f (tan, qnan_value, qnan_value, ERRNO_UNCHANGED);
13378   TEST_f_f (tan, M_PI_4l, 1);
13379   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
13381   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
13382   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
13384   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
13385   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
13386   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
13387   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
13388   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
13389   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
13390   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
13391   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
13392   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
13393   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
13394   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
13395   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
13396   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
13397   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
13398   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
13399   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
13400   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
13401   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
13403   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
13404   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
13405   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
13406   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
13407   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
13408   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
13409   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
13410   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
13411   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
13412   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
13413   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
13414   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
13415   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
13416   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
13417   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
13418   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
13419   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
13420   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
13422 #ifndef TEST_FLOAT
13423   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
13424   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
13425 #endif
13427 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13428   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
13429 #endif
13431   END (tan);
13435 static void
13436 tan_test_tonearest (void)
13438   int save_round_mode;
13439   errno = 0;
13440   FUNC(tan) (0);
13441   if (errno == ENOSYS)
13442     /* Function not implemented.  */
13443     return;
13445   START (tan_tonearest);
13447   save_round_mode = fegetround ();
13449   if (!fesetround (FE_TONEAREST))
13450     {
13451       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13452       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13453       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13454       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13455       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13456       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13457       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13458       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13459       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13460       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13461     }
13463   fesetround (save_round_mode);
13465   END (tan_tonearest);
13469 static void
13470 tan_test_towardzero (void)
13472   int save_round_mode;
13473   errno = 0;
13474   FUNC(tan) (0);
13475   if (errno == ENOSYS)
13476     /* Function not implemented.  */
13477     return;
13479   START (tan_towardzero);
13481   save_round_mode = fegetround ();
13483   if (!fesetround (FE_TOWARDZERO))
13484     {
13485       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13486       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13487       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13488       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13489       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13490       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13491       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13492       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13493       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13494       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13495     }
13497   fesetround (save_round_mode);
13499   END (tan_towardzero);
13503 static void
13504 tan_test_downward (void)
13506   int save_round_mode;
13507   errno = 0;
13508   FUNC(tan) (0);
13509   if (errno == ENOSYS)
13510     /* Function not implemented.  */
13511     return;
13513   START (tan_downward);
13515   save_round_mode = fegetround ();
13517   if (!fesetround (FE_DOWNWARD))
13518     {
13519       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13520       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13521       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13522       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13523       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13524       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13525       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13526       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13527       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13528       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13529     }
13531   fesetround (save_round_mode);
13533   END (tan_downward);
13537 static void
13538 tan_test_upward (void)
13540   int save_round_mode;
13541   errno = 0;
13542   FUNC(tan) (0);
13543   if (errno == ENOSYS)
13544     /* Function not implemented.  */
13545     return;
13547   START (tan_upward);
13549   save_round_mode = fegetround ();
13551   if (!fesetround (FE_UPWARD))
13552     {
13553       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
13554       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
13555       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
13556       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
13557       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
13558       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
13559       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
13560       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
13561       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
13562       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
13563     }
13565   fesetround (save_round_mode);
13567   END (tan_upward);
13571 static void
13572 tanh_test (void)
13574   errno = 0;
13575   FUNC(tanh) (0.7L);
13576   if (errno == ENOSYS)
13577     /* Function not implemented.  */
13578     return;
13580   START (tanh);
13582   TEST_f_f (tanh, 0, 0);
13583   TEST_f_f (tanh, minus_zero, minus_zero);
13585 #ifndef TEST_INLINE
13586   TEST_f_f (tanh, plus_infty, 1);
13587   TEST_f_f (tanh, minus_infty, -1);
13588 #endif
13589   TEST_f_f (tanh, qnan_value, qnan_value);
13591   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
13592   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
13594   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
13595   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
13597   /* 2^-57  */
13598   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
13600   END (tanh);
13603 static void
13604 tgamma_test (void)
13606   errno = 0;
13607   FUNC(tgamma) (1);
13608   if (errno == ENOSYS)
13609     /* Function not implemented.  */
13610     return;
13612   START (tgamma);
13614   TEST_f_f (tgamma, plus_infty, plus_infty);
13615   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
13616   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13617   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
13618   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
13619   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
13620   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
13621   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
13622   TEST_f_f (tgamma, qnan_value, qnan_value);
13624   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
13625   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
13627   TEST_f_f (tgamma, 1, 1);
13628   TEST_f_f (tgamma, 2, 1);
13629   TEST_f_f (tgamma, 3, 2);
13630   TEST_f_f (tgamma, 4, 6);
13631   TEST_f_f (tgamma, 5, 24);
13632   TEST_f_f (tgamma, 6, 120);
13633   TEST_f_f (tgamma, 7, 720);
13634   TEST_f_f (tgamma, 8, 5040);
13635   TEST_f_f (tgamma, 9,  40320);
13636   TEST_f_f (tgamma, 10, 362880);
13638   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
13639   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
13641   TEST_f_f (tgamma, 1.5L, 8.8622692545275801364908374167057259139877e-01L);
13642   TEST_f_f (tgamma, 2.5L, 1.3293403881791370204736256125058588870982e+00L);
13643   TEST_f_f (tgamma, 3.5L, 3.3233509704478425511840640312646472177454e+00L);
13644   TEST_f_f (tgamma, 4.5L, 1.1631728396567448929144224109426265262109e+01L);
13645   TEST_f_f (tgamma, 5.5L, 5.2342777784553520181149008492418193679490e+01L);
13646   TEST_f_f (tgamma, 6.5L, 2.8788527781504436099631954670830006523720e+02L);
13647   TEST_f_f (tgamma, 7.5L, 1.8712543057977883464760770536039504240418e+03L);
13648   TEST_f_f (tgamma, 8.5L, 1.4034407293483412598570577902029628180313e+04L);
13649   TEST_f_f (tgamma, 9.5L, 1.1929246199460900708784991216725183953266e+05L);
13650   TEST_f_f (tgamma, -1.5L, 2.3632718012073547030642233111215269103967e+00L);
13651   TEST_f_f (tgamma, -2.5L, -9.4530872048294188122568932444861076415869e-01L);
13652   TEST_f_f (tgamma, -3.5L, 2.7008820585226910892162552127103164690248e-01L);
13653   TEST_f_f (tgamma, -4.5L, -6.0019601300504246427027893615784810422774e-02L);
13654   TEST_f_f (tgamma, -5.5L, 1.0912654781909862986732344293779056440504e-02L);
13655   TEST_f_f (tgamma, -6.5L, -1.6788699664476712287280529682737009908468e-03L);
13656   TEST_f_f (tgamma, -7.5L, 2.2384932885968949716374039576982679877958e-04L);
13657   TEST_f_f (tgamma, -8.5L, -2.6335215159963470254557693619979623385833e-05L);
13658   TEST_f_f (tgamma, -9.5L, 2.7721279115751021320587045915768024616666e-06L);
13659   TEST_f_f (tgamma, 0x1p-24L, 1.6777215422784394050795179874582764575261e+07L);
13660   TEST_f_f (tgamma, -0x1p-24L, -1.6777216577215723853867349114260580375249e+07L);
13661   TEST_f_f (tgamma, 0x1p-53L, 9.0071992547409914227843350984672492007618e+15L);
13662   TEST_f_f (tgamma, -0x1p-53L, -9.0071992547409925772156649015329704137860e+15L);
13663   TEST_f_f (tgamma, 0x1p-64L, 1.8446744073709551615422784335098467139447e+19L);
13664   TEST_f_f (tgamma, -0x1p-64L, -1.8446744073709551616577215664901532860660e+19L);
13665   TEST_f_f (tgamma, 0x1p-106L, 8.1129638414606681695789005144063422784335e+31L);
13666   TEST_f_f (tgamma, -0x1p-106L, -8.1129638414606681695789005144064577215665e+31L);
13667   TEST_f_f (tgamma, 0x1p-113L, 1.0384593717069655257060992658440191422784e+34L);
13668   TEST_f_f (tgamma, -0x1p-113L, -1.0384593717069655257060992658440192577216e+34L);
13669   TEST_f_f (tgamma, 0x1p-127L, 1.7014118346046923173168730371588410572742e+38L);
13670   TEST_f_f (tgamma, -0x1p-127L, -1.7014118346046923173168730371588410572858e+38L);
13671 #ifdef TEST_FLOAT
13672   TEST_f_f (tgamma, 0x1p-128L, plus_infty, OVERFLOW_EXCEPTION);
13673   TEST_f_f (tgamma, -0x1p-128L, minus_infty, OVERFLOW_EXCEPTION);
13674   TEST_f_f (tgamma, 0x1p-149L, plus_infty, OVERFLOW_EXCEPTION);
13675   TEST_f_f (tgamma, -0x1p-149L, minus_infty, OVERFLOW_EXCEPTION);
13676 #else
13677   TEST_f_f (tgamma, 0x1p-128L, 3.4028236692093846346337460743176821145542e+38L);
13678   TEST_f_f (tgamma, -0x1p-128L, -3.4028236692093846346337460743176821145658e+38L);
13679   TEST_f_f (tgamma, 0x1p-149L, 7.1362384635297994052914298472474756819137e+44L);
13680   TEST_f_f (tgamma, -0x1p-149L, -7.1362384635297994052914298472474756819137e+44L);
13681 #endif
13682 #ifndef TEST_FLOAT
13683   TEST_f_f (tgamma, 0x1p-1023L, 8.9884656743115795386465259539451236680899e+307L);
13684   TEST_f_f (tgamma, -0x1p-1023L, -8.9884656743115795386465259539451236680899e+307L);
13685 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
13686   TEST_f_f (tgamma, 0x1p-1024L, plus_infty, OVERFLOW_EXCEPTION);
13687   TEST_f_f (tgamma, -0x1p-1024L, minus_infty, OVERFLOW_EXCEPTION);
13688   TEST_f_f (tgamma, 0x1p-1074L, plus_infty, OVERFLOW_EXCEPTION);
13689   TEST_f_f (tgamma, -0x1p-1074L, minus_infty, OVERFLOW_EXCEPTION);
13690 # else
13691   TEST_f_f (tgamma, 0x1p-1024L, 1.7976931348623159077293051907890247336180e+308L);
13692   TEST_f_f (tgamma, -0x1p-1024L, -1.7976931348623159077293051907890247336180e+308L);
13693   TEST_f_f (tgamma, 0x1p-1074L, 2.0240225330731061835249534671891730704956e+323L);
13694   TEST_f_f (tgamma, -0x1p-1074L, -2.0240225330731061835249534671891730704956e+323L);
13695 # endif
13696 #endif
13697 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
13698   TEST_f_f (tgamma, 0x1p-16383L, 5.9486574767861588254287966331400356538172e+4931L);
13699   TEST_f_f (tgamma, -0x1p-16383L, -5.9486574767861588254287966331400356538172e+4931L);
13700   TEST_f_f (tgamma, 0x1p-16384L, plus_infty, OVERFLOW_EXCEPTION);
13701   TEST_f_f (tgamma, -0x1p-16384L, minus_infty, OVERFLOW_EXCEPTION);
13702   TEST_f_f (tgamma, 0x1p-16445L, plus_infty, OVERFLOW_EXCEPTION);
13703   TEST_f_f (tgamma, -0x1p-16445L, minus_infty, OVERFLOW_EXCEPTION);
13704 # if LDBL_MANT_DIG >= 113
13705   TEST_f_f (tgamma, 0x1p-16494L, plus_infty, OVERFLOW_EXCEPTION);
13706   TEST_f_f (tgamma, -0x1p-16494L, minus_infty, OVERFLOW_EXCEPTION);
13707 # endif
13708 #endif
13709   TEST_f_f (tgamma, 0x8.00001p0L, 5.0400096882277802019946778420223050233915e+03L);
13710   TEST_f_f (tgamma, 0x7.fffff8p0L, 5.0399951558933225045148935487583089307135e+03L);
13711   TEST_f_f (tgamma, 0x7.000008p0L, 7.2000064296977505705636258629805621178587e+02L);
13712   TEST_f_f (tgamma, 0x6.fffff8p0L, 7.1999935703082425988147448928288557689866e+02L);
13713   TEST_f_f (tgamma, 0x6.000008p0L, 1.2000009762487825358530770343720418162783e+02L);
13714   TEST_f_f (tgamma, 0x5.fffff8p0L, 1.1999990237520611552119807476573441975106e+02L);
13715   TEST_f_f (tgamma, 0x5.000008p0L, 2.4000017236155647574166073485628713443799e+01L);
13716   TEST_f_f (tgamma, 0x4.fffff8p0L, 2.3999982763857938712639837029547357501709e+01L);
13717   TEST_f_f (tgamma, 0x4.000008p0L, 6.0000035937827461765660468073471093546129e+00L);
13718   TEST_f_f (tgamma, 0x3.fffffcp0L, 5.9999982031095793171233994481968816873643e+00L);
13719   TEST_f_f (tgamma, 0x3.000004p0L, 2.0000004400179308360529417942462250547999e+00L);
13720   TEST_f_f (tgamma, 0x2.fffffcp0L, 1.9999995599822108706107786027549565954046e+00L);
13721   TEST_f_f (tgamma, 0x2.000004p0L, 1.0000001007996638509889062631687945799175e+00L);
13722   TEST_f_f (tgamma, 0x1.fffffep0L, 9.9999994960018563231526611134590489120697e-01L);
13723   TEST_f_f (tgamma, 0x1.000002p0L, 9.9999993119054472483596471908942669644327e-01L);
13724   TEST_f_f (tgamma, 0x0.ffffffp0L, 1.0000000344047381790797322460568297132998e+00L);
13725   TEST_f_f (tgamma, -0x0.ffffffp0L, -1.6777216422784419250710305882992376932423e+07L);
13726   TEST_f_f (tgamma, -0x1.000002p0L, 8.3886075772158332060084424806449513922858e+06L);
13727   TEST_f_f (tgamma, -0x1.fffffep0L, 4.1943044613922792026014320172298377770578e+06L);
13728   TEST_f_f (tgamma, -0x2.000004p0L, -2.0971515386080557574407223895988378776747e+06L);
13729   TEST_f_f (tgamma, -0x2.fffffcp0L, -6.9905087601970247876992248591045142913324e+05L);
13730   TEST_f_f (tgamma, -0x3.000004p0L, 6.9905045731381300146131914617735687322025e+05L);
13731   TEST_f_f (tgamma, -0x3.fffffcp0L, 1.7476272942159602684441970627092458855771e+05L);
13732   TEST_f_f (tgamma, -0x4.000008p0L, -8.7381270578483499672965708923121931082305e+04L);
13733   TEST_f_f (tgamma, -0x4.fffff8p0L, -1.7476280884325863043793087474680780379554e+04L);
13734   TEST_f_f (tgamma, -0x5.000008p0L, 1.7476252449031389167286893378510439443844e+04L);
13735   TEST_f_f (tgamma, -0x5.fffff8p0L, 2.9127137122026653716311560165769071985443e+03L);
13736   TEST_f_f (tgamma, -0x6.000008p0L, -2.9127085100239567622341538102130981196910e+03L);
13737   TEST_f_f (tgamma, -0x6.fffff8p0L, -4.1610198723079349791939054365613377035519e+02L);
13738   TEST_f_f (tgamma, -0x7.000008p0L, 4.1610118737306415004517215226199741948733e+02L);
13739   TEST_f_f (tgamma, -0x7.fffff8p0L, 5.2012751504050764429534086402871289946986e+01L);
13740   TEST_f_f (tgamma, -0x8.00001p0L, -2.6006296115134418896533598545925084576702e+01L);
13741   TEST_f_f (tgamma, -0x9.fffffp0L, 2.8896008370721717567612135720915723136310e-01L);
13742   TEST_f_f (tgamma, -0xa.00001p0L, -2.8895878754728051776830454190076999107021e-01L);
13743   TEST_f_f (tgamma, -0x13.ffffep0L, 2.1550026214525536756224040483579183652119e-13L);
13744   TEST_f_f (tgamma, -0x14.00002p0L, -2.1549777908265594916405421768142757507179e-13L);
13745   TEST_f_f (tgamma, -0x1d.ffffep0L, 1.9765721589464867957912772592816027583176e-27L);
13746   TEST_f_f (tgamma, -0x1e.00002p0L, -1.9765463890341964384070157599286498212650e-27L);
13747   TEST_f_f (tgamma, -0x27.ffffcp0L, 3.2129279441390812141195076945616975790225e-43L, UNDERFLOW_EXCEPTION_FLOAT);
13748   TEST_f_f (tgamma, -0x28.00004p0L, -3.2128372159115252365699015758097981155793e-43L, UNDERFLOW_EXCEPTION_FLOAT);
13749   TEST_f_f (tgamma, -0x28.ffffcp0L, -7.8364103489619817539676737414096652170685e-45L, UNDERFLOW_EXCEPTION_FLOAT);
13750   TEST_f_f (tgamma, -0x29.00004p0L, 7.8361876024016854597745353972619195760515e-45L, UNDERFLOW_EXCEPTION_FLOAT);
13751 #ifdef TEST_FLOAT
13752   TEST_f_f (tgamma, -0x29.ffffcp0L, plus_zero, UNDERFLOW_EXCEPTION_FLOAT);
13753   TEST_f_f (tgamma, -0x2a.00004p0L, minus_zero, UNDERFLOW_EXCEPTION_FLOAT);
13754 #else
13755   TEST_f_f (tgamma, -0x29.ffffcp0L, 1.8658121573125798145204120066590953505132e-46L);
13756   TEST_f_f (tgamma, -0x2a.00004p0L, -1.8657587834931410688246126853566488626385e-46L);
13757 #endif
13758 #ifndef TEST_FLOAT
13759   TEST_f_f (tgamma, 0x8.0000000000008p0L, 5.0400000000000180457125667322294144477136e+03L);
13760   TEST_f_f (tgamma, 0x7.ffffffffffffcp0L, 5.0399999999999909771437166339103165198442e+03L);
13761   TEST_f_f (tgamma, 0x7.0000000000004p0L, 7.2000000000000119762397445457359071259652e+02L);
13762   TEST_f_f (tgamma, 0x6.ffffffffffffcp0L, 7.1999999999999880237602554542848858572672e+02L);
13763   TEST_f_f (tgamma, 0x6.0000000000004p0L, 1.2000000000000018184042734842640022086408e+02L);
13764   TEST_f_f (tgamma, 0x5.ffffffffffffcp0L, 1.1999999999999981815957265157389249327533e+02L);
13765   TEST_f_f (tgamma, 0x5.0000000000004p0L, 2.4000000000000032104829055124673225982803e+01L);
13766   TEST_f_f (tgamma, 0x4.ffffffffffffcp0L, 2.3999999999999967895170944875373910918544e+01L);
13767   TEST_f_f (tgamma, 0x4.0000000000004p0L, 6.0000000000000066939396342309789716341613e+00L);
13768   TEST_f_f (tgamma, 0x3.ffffffffffffep0L, 5.9999999999999966530301828845138185025345e+00L);
13769   TEST_f_f (tgamma, 0x3.0000000000002p0L, 2.0000000000000008195971324717875960213536e+00L);
13770   TEST_f_f (tgamma, 0x2.ffffffffffffep0L, 1.9999999999999991804028675282128956223990e+00L);
13771   TEST_f_f (tgamma, 0x2.0000000000002p0L, 1.0000000000000001877539613108624482361963e+00L);
13772   TEST_f_f (tgamma, 0x1.fffffffffffffp0L, 9.9999999999999990612301934456883679778984e-01L);
13773   TEST_f_f (tgamma, 0x1.0000000000001p0L, 9.9999999999999987183237573039992418700531e-01L);
13774   TEST_f_f (tgamma, 0x0.fffffffffffff8p0L, 1.0000000000000000640838121348000744796665e+00L);
13775   TEST_f_f (tgamma, -0x0.fffffffffffff8p0L, -9.0071992547409924227843350984672961392521e+15L);
13776   TEST_f_f (tgamma, -0x1.0000000000001p0L, 4.5035996273704955772156649015331740980405e+15L);
13777   TEST_f_f (tgamma, -0x1.fffffffffffffp0L, 2.2517998136852484613921675492337776673289e+15L);
13778   TEST_f_f (tgamma, -0x2.0000000000002p0L, -1.1258999068426235386078324507668462444260e+15L);
13779   TEST_f_f (tgamma, -0x2.ffffffffffffep0L, -3.7529996894754154268627807196691509198813e+14L);
13780   TEST_f_f (tgamma, -0x3.0000000000002p0L, 3.7529996894754112398038859470009084971438e+14L);
13781   TEST_f_f (tgamma, -0x3.ffffffffffffep0L, 9.3824992236885396088236184658402406857503e+13L);
13782   TEST_f_f (tgamma, -0x4.0000000000004p0L, -4.6912496118442603911763815341745722862351e+13L);
13783   TEST_f_f (tgamma, -0x4.ffffffffffffcp0L, -9.3824992236885475509805702650262155809819e+12L);
13784   TEST_f_f (tgamma, -0x5.0000000000004p0L, 9.3824992236885191156860964016850034672946e+12L);
13785   TEST_f_f (tgamma, -0x5.ffffffffffffcp0L, 1.5637498706147581566449098589862357835505e+12L);
13786   TEST_f_f (tgamma, -0x6.0000000000004p0L, -1.5637498706147529544662012521330708016396e+12L);
13787   TEST_f_f (tgamma, -0x6.ffffffffffffcp0L, -2.2339283865925119357965832452642909859289e+11L);
13788   TEST_f_f (tgamma, -0x7.0000000000004p0L, 2.2339283865925039372192897706214475877342e+11L);
13789   TEST_f_f (tgamma, -0x7.ffffffffffffcp0L, 2.7924104832406402297655703264222230055898e+10L);
13790   TEST_f_f (tgamma, -0x8.0000000000008p0L, -1.3962052416203121511868106259843527348026e+10L);
13791   TEST_f_f (tgamma, -0x9.ffffffffffff8p0L, 1.5513391573559147700413058496716749249803e+08L);
13792   TEST_f_f (tgamma, -0xa.0000000000008p0L, -1.5513391573559018084419393002828541166901e+08L);
13793   TEST_f_f (tgamma, -0x13.ffffffffffffp0L, 1.1569515572952029402736625857313236848570e-04L);
13794   TEST_f_f (tgamma, -0x14.000000000001p0L, -1.1569515572951781096476686854873801225397e-04L);
13795   TEST_f_f (tgamma, -0x1d.ffffffffffffp0L, 1.0611571800204311628217068863959963842891e-18L);
13796   TEST_f_f (tgamma, -0x1e.000000000001p0L, -1.0611571800204053929094168642022073530425e-18L);
13797   TEST_f_f (tgamma, -0x27.fffffffffffep0L, 1.7249032006742266376460389310340465554361e-34L);
13798   TEST_f_f (tgamma, -0x28.000000000002p0L, -1.7249032006741359094184881234822934593822e-34L);
13799   TEST_f_f (tgamma, -0x28.fffffffffffep0L, -4.2070809772542120404320040128839297118648e-36L);
13800   TEST_f_f (tgamma, -0x29.000000000002p0L, 4.2070809772539892938717205103652583609422e-36L);
13801   TEST_f_f (tgamma, -0x29.fffffffffffep0L, 1.0016859469652887505173040814397197718981e-37L);
13802   TEST_f_f (tgamma, -0x2a.000000000002p0L, -1.0016859469652353766978684241048308120274e-37L);
13803   TEST_f_f (tgamma, -0x31.fffffffffffep0L, 4.6273774273632946947805289899230181990085e-51L);
13804   TEST_f_f (tgamma, -0x32.000000000002p0L, -4.6273774273630367887073532197576655720178e-51L);
13805   TEST_f_f (tgamma, -0x63.fffffffffffcp0L, 7.5400833348840965463348754984345825364294e-145L);
13806   TEST_f_f (tgamma, -0x64.000000000004p0L, -7.5400833348831085791638490135462230991587e-145L);
13807   TEST_f_f (tgamma, -0x95.fffffffffff8p0L, 6.1582369322723207086020016423767264008839e-250L);
13808   TEST_f_f (tgamma, -0x96.000000000008p0L, -6.1582369322705655439003240743176243138734e-250L);
13809   TEST_f_f (tgamma, -0xb4.fffffffffff8p0L, -9.6760879059917574597728750098636253931457e-319L, UNDERFLOW_EXCEPTION_DOUBLE);
13810   TEST_f_f (tgamma, -0xb5.000000000008p0L, 9.6760879059888966544677044221698800670218e-319L, UNDERFLOW_EXCEPTION_DOUBLE);
13811   TEST_f_f (tgamma, -0xb5.fffffffffff8p0L, 5.3165318164789884455066481673086605454904e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13812   TEST_f_f (tgamma, -0xb6.000000000008p0L, -5.3165318164774149139661976747137185876909e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13813   TEST_f_f (tgamma, -0xb6.fffffffffff8p0L, -2.9052086428846935908287469917922960610289e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13814   TEST_f_f (tgamma, -0xb7.000000000008p0L, 2.9052086428838328351126988236541632950925e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13815 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
13816   TEST_f_f (tgamma, -0xb7.fffffffffff8p0L, plus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13817   TEST_f_f (tgamma, -0xb8.000000000008p0L, minus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13818 # else
13819   TEST_f_f (tgamma, -0xb7.fffffffffff8p0L, 1.5789177406982032823826953250736039527543e-325L);
13820   TEST_f_f (tgamma, -0xb8.000000000008p0L, -1.5789177406977349925854817486109369828857e-325L);
13821 # endif
13822 #endif
13823 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
13824   TEST_f_f (tgamma, 0x8.00000000000000000000000004p0L, 5.0400000000000000000000000000020034765587e+03L);
13825   TEST_f_f (tgamma, 0x7.fffffffffffffffffffffffffep0L, 5.0399999999999999999999999999989982617206e+03L);
13826   TEST_f_f (tgamma, 0x7.00000000000000000000000002p0L, 7.2000000000000000000000000000013296297113e+02L);
13827   TEST_f_f (tgamma, 0x6.fffffffffffffffffffffffffep0L, 7.1999999999999999999999999999986703702887e+02L);
13828   TEST_f_f (tgamma, 0x6.00000000000000000000000002p0L, 1.2000000000000000000000000000002018834292e+02L);
13829   TEST_f_f (tgamma, 0x5.fffffffffffffffffffffffffep0L, 1.1999999999999999999999999999997981165708e+02L);
13830   TEST_f_f (tgamma, 0x5.00000000000000000000000002p0L, 2.4000000000000000000000000000003564352042e+01L);
13831   TEST_f_f (tgamma, 0x4.fffffffffffffffffffffffffep0L, 2.3999999999999999999999999999996435647958e+01L);
13832   TEST_f_f (tgamma, 0x4.00000000000000000000000002p0L, 6.0000000000000000000000000000007431765907e+00L);
13833   TEST_f_f (tgamma, 0x3.ffffffffffffffffffffffffffp0L, 5.9999999999999999999999999999996284117046e+00L);
13834   TEST_f_f (tgamma, 0x3.00000000000000000000000001p0L, 2.0000000000000000000000000000000909935607e+00L);
13835   TEST_f_f (tgamma, 0x2.ffffffffffffffffffffffffffp0L, 1.9999999999999999999999999999999090064393e+00L);
13836   TEST_f_f (tgamma, 0x2.00000000000000000000000001p0L, 1.0000000000000000000000000000000208448771e+00L);
13837   TEST_f_f (tgamma, 0x1.ffffffffffffffffffffffffff8p0L, 9.9999999999999999999999999999998957756146e-01L);
13838   TEST_f_f (tgamma, 0x1.000000000000000000000000008p0L, 9.9999999999999999999999999999998577053525e-01L);
13839   TEST_f_f (tgamma, 0x0.ffffffffffffffffffffffffffcp0L, 1.0000000000000000000000000000000071147324e+00L);
13840   TEST_f_f (tgamma, -0x0.ffffffffffffffffffffffffffcp0L, -8.1129638414606681695789005144064422784335e+31L);
13841   TEST_f_f (tgamma, -0x1.000000000000000000000000008p0L, 4.0564819207303340847894502572031577215665e+31L);
13842   TEST_f_f (tgamma, -0x1.ffffffffffffffffffffffffff8p0L, 2.0282409603651670423947251286016461392168e+31L);
13843   TEST_f_f (tgamma, -0x2.00000000000000000000000001p0L, -1.0141204801825835211973625643007538607832e+31L);
13844   TEST_f_f (tgamma, -0x2.ffffffffffffffffffffffffffp0L, -3.3804016006086117373245418810028760196114e+30L);
13845   TEST_f_f (tgamma, -0x3.00000000000000000000000001p0L, 3.3804016006086117373245418810024573137219e+30L);
13846   TEST_f_f (tgamma, -0x3.ffffffffffffffffffffffffffp0L, 8.4510040015215293433113547025072942156952e+29L);
13847   TEST_f_f (tgamma, -0x4.00000000000000000000000002p0L, -4.2255020007607646716556773512527057843048e+29L);
13848   TEST_f_f (tgamma, -0x4.fffffffffffffffffffffffffep0L, -8.4510040015215293433113547025080884313904e+28L);
13849   TEST_f_f (tgamma, -0x5.00000000000000000000000002p0L, 8.4510040015215293433113547025052449019430e+28L);
13850   TEST_f_f (tgamma, -0x5.fffffffffffffffffffffffffep0L, 1.4085006669202548905518924504180378867132e+28L);
13851   TEST_f_f (tgamma, -0x6.00000000000000000000000002p0L, -1.4085006669202548905518924504175176688423e+28L);
13852   TEST_f_f (tgamma, -0x6.fffffffffffffffffffffffffep0L, -2.0121438098860784150741320720257967542615e+27L);
13853   TEST_f_f (tgamma, -0x7.00000000000000000000000002p0L, 2.0121438098860784150741320720249968965322e+27L);
13854   TEST_f_f (tgamma, -0x7.fffffffffffffffffffffffffep0L, 2.5151797623575980188426650900322769448110e+26L);
13855   TEST_f_f (tgamma, -0x8.00000000000000000000000004p0L, -1.2575898811787990094213325450153421028080e+26L);
13856   TEST_f_f (tgamma, -0x9.fffffffffffffffffffffffffcp0L, 1.3973220901986655660237028277960625420495e+24L);
13857   TEST_f_f (tgamma, -0xa.00000000000000000000000004p0L, -1.3973220901986655660237028277947663821128e+24L);
13858   TEST_f_f (tgamma, -0x13.fffffffffffffffffffffffff8p0L, 1.0420893204640670202556853709074896123293e+12L);
13859   TEST_f_f (tgamma, -0x14.00000000000000000000000008p0L, -1.0420893204640670202556853709050065497299e+12L);
13860   TEST_f_f (tgamma, -0x1d.fffffffffffffffffffffffff8p0L, 9.5580541610429641982963434151488827190079e-03L);
13861   TEST_f_f (tgamma, -0x1e.00000000000000000000000008p0L, -9.5580541610429641982963434151231128067179e-03L);
13862   TEST_f_f (tgamma, -0x27.fffffffffffffffffffffffffp0L, 1.5536546823612837336494536911280147806523e-18L);
13863   TEST_f_f (tgamma, -0x28.0000000000000000000000001p0L, -1.5536546823612837336494536911189419578973e-18L);
13864   TEST_f_f (tgamma, -0x28.fffffffffffffffffffffffffp0L, -3.7894016642958139845108626612879138384405e-20L);
13865   TEST_f_f (tgamma, -0x29.0000000000000000000000001p0L, 3.7894016642958139845108626612656391824122e-20L);
13866   TEST_f_f (tgamma, -0x29.fffffffffffffffffffffffffp0L, 9.0223849149900332964544349078285357440663e-22L);
13867   TEST_f_f (tgamma, -0x2a.0000000000000000000000001p0L, -9.0223849149900332964544349077751619246306e-22L);
13868   TEST_f_f (tgamma, -0x31.fffffffffffffffffffffffffp0L, 4.1679710515150795310771069868348482819424e-35L);
13869   TEST_f_f (tgamma, -0x32.0000000000000000000000001p0L, -4.1679710515150795310771069868090576746248e-35L);
13870   TEST_f_f (tgamma, -0x63.ffffffffffffffffffffffffep0L, 6.7915032994648558610510614163560656864280e-129L);
13871   TEST_f_f (tgamma, -0x64.0000000000000000000000002p0L, -6.7915032994648558610510614162572689693253e-129L);
13872   TEST_f_f (tgamma, -0x95.ffffffffffffffffffffffffcp0L, 5.5468467106873795353190582463444660395353e-234L);
13873   TEST_f_f (tgamma, -0x96.0000000000000000000000004p0L, -5.5468467106873795353190582461689495693675e-234L);
13874   TEST_f_f (tgamma, -0xb4.ffffffffffffffffffffffffcp0L, -8.7154451775644399729745472278589884205029e-303L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13875   TEST_f_f (tgamma, -0xb5.0000000000000000000000004p0L, 8.7154451775644399729745472275729078899858e-303L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13876   TEST_f_f (tgamma, -0xb5.ffffffffffffffffffffffffcp0L, 4.7887061415189230620739270482742524864974e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13877   TEST_f_f (tgamma, -0xb6.0000000000000000000000004p0L, -4.7887061415189230620739270481168993324524e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13878   TEST_f_f (tgamma, -0xb6.ffffffffffffffffffffffffcp0L, -2.6167793123054224382917634143575601407067e-307L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13879   TEST_f_f (tgamma, -0xb7.0000000000000000000000004p0L, 2.6167793123054224382917634142714845691019e-307L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
13880   TEST_f_f (tgamma, -0xb7.ffffffffffffffffffffffffcp0L, 1.4221626697312078468976975078030462044826e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
13881   TEST_f_f (tgamma, -0xb8.0000000000000000000000004p0L, -1.4221626697312078468976975077562172247612e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
13882   TEST_f_f (tgamma, -0xbb.ffffffffffffffffffffffffcp0L, 1.1756150745511026776007338998283058108448e-318L, UNDERFLOW_EXCEPTION_DOUBLE);
13883   TEST_f_f (tgamma, -0xbc.0000000000000000000000004p0L, -1.1756150745511026776007338997894360215107e-318L, UNDERFLOW_EXCEPTION_DOUBLE);
13884   TEST_f_f (tgamma, -0xbc.ffffffffffffffffffffffffcp0L, -6.2201855796354639026493857133773832713743e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13885   TEST_f_f (tgamma, -0xbd.0000000000000000000000004p0L, 6.2201855796354639026493857131715153125175e-321L, UNDERFLOW_EXCEPTION_DOUBLE);
13886   TEST_f_f (tgamma, -0xbd.ffffffffffffffffffffffffcp0L, 3.2737818840186652119207293228302560914295e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13887   TEST_f_f (tgamma, -0xbe.0000000000000000000000004p0L, -3.2737818840186652119207293227217957948294e-323L, UNDERFLOW_EXCEPTION_DOUBLE);
13888 # if LDBL_MAX_EXP <= 1024
13889   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffcp0L, minus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13890   TEST_f_f (tgamma, -0xbf.0000000000000000000000004p0L, plus_zero, UNDERFLOW_EXCEPTION_DOUBLE);
13891 # else
13892   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffcp0L, -1.7140219288055838805867692789687487834686e-325L);
13893   TEST_f_f (tgamma, -0xbf.0000000000000000000000004p0L, 1.7140219288055838805867692789119066543632e-325L);
13894 # endif
13895 #endif
13896 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
13897   TEST_f_f (tgamma, 0x8.000000000000001p0L, 5.0400000000000000088113830892247051102283e+03L);
13898   TEST_f_f (tgamma, 0x7.fffffffffffffff8p0L, 5.0399999999999999955943084553876474508520e+03L);
13899   TEST_f_f (tgamma, 0x7.0000000000000008p0L, 7.2000000000000000058477733127664675369681e+02L);
13900   TEST_f_f (tgamma, 0x6.fffffffffffffff8p0L, 7.1999999999999999941522266872335324679893e+02L);
13901   TEST_f_f (tgamma, 0x6.0000000000000008p0L, 1.2000000000000000008878927116622375680433e+02L);
13902   TEST_f_f (tgamma, 0x5.fffffffffffffff8p0L, 1.1999999999999999991121072883377624326546e+02L);
13903   TEST_f_f (tgamma, 0x5.0000000000000008p0L, 2.4000000000000000015676186062072582846211e+01L);
13904   TEST_f_f (tgamma, 0x4.fffffffffffffff8p0L, 2.3999999999999999984323813937927417165027e+01L);
13905   TEST_f_f (tgamma, 0x4.0000000000000008p0L, 6.0000000000000000032685252120268430507939e+00L);
13906   TEST_f_f (tgamma, 0x3.fffffffffffffffcp0L, 5.9999999999999999983657373939865784753909e+00L);
13907   TEST_f_f (tgamma, 0x3.0000000000000004p0L, 2.0000000000000000004001939123397399171482e+00L);
13908   TEST_f_f (tgamma, 0x2.fffffffffffffffcp0L, 1.9999999999999999995998060876602600829690e+00L);
13909   TEST_f_f (tgamma, 0x2.0000000000000004p0L, 1.0000000000000000000916767389213195151634e+00L);
13910   TEST_f_f (tgamma, 0x1.fffffffffffffffep0L, 9.9999999999999999995416163053934024243282e-01L);
13911   TEST_f_f (tgamma, 0x1.0000000000000002p0L, 9.9999999999999999993741815221210931418291e-01L);
13912   TEST_f_f (tgamma, 0x0.ffffffffffffffffp0L, 1.0000000000000000000312909238939453429173e+00L);
13913   TEST_f_f (tgamma, -0x0.ffffffffffffffffp0L, -1.8446744073709551616422784335098467139470e+19L);
13914   TEST_f_f (tgamma, -0x1.0000000000000002p0L, 9.2233720368547758075772156649015328607596e+18L);
13915   TEST_f_f (tgamma, -0x1.fffffffffffffffep0L, 4.6116860184273879044613921675492335697983e+18L);
13916   TEST_f_f (tgamma, -0x2.0000000000000004p0L, -2.3058430092136939515386078324507664305064e+18L);
13917   TEST_f_f (tgamma, -0x2.fffffffffffffffcp0L, -7.6861433640456465087601961140530007887063e+17L);
13918   TEST_f_f (tgamma, -0x3.0000000000000004p0L, 7.6861433640456465045731372192803325462836e+17L);
13919   TEST_f_f (tgamma, -0x3.fffffffffffffffcp0L, 1.9215358410114116272942156951799168638773e+17L);
13920   TEST_f_f (tgamma, -0x4.0000000000000008p0L, -9.6076792050570581270578430482008313684602e+16L);
13921   TEST_f_f (tgamma, -0x4.fffffffffffffff8p0L, -1.9215358410114116280884313903598337283601e+16L);
13922   TEST_f_f (tgamma, -0x5.0000000000000008p0L, 1.9215358410114116252449019429734996071487e+16L);
13923   TEST_f_f (tgamma, -0x5.fffffffffffffff8p0L, 3.2025597350190193803788671320812043622696e+15L);
13924   TEST_f_f (tgamma, -0x6.0000000000000008p0L, -3.2025597350190193751766884234743511972877e+15L);
13925   TEST_f_f (tgamma, -0x6.fffffffffffffff8p0L, -4.5750853357414562579675426149912896787735e+14L);
13926   TEST_f_f (tgamma, -0x7.0000000000000008p0L, 4.5750853357414562499689653215166468353753e+14L);
13927   TEST_f_f (tgamma, -0x7.fffffffffffffff8p0L, 5.7188566696768203227694481100089533685959e+13L);
13928   TEST_f_f (tgamma, -0x8.000000000000001p0L, -2.8594283348384101534210280804672371201060e+13L);
13929   TEST_f_f (tgamma, -0x9.fffffffffffffffp0L, 3.1771425942649001828476427167843945971988e+11L);
13930   TEST_f_f (tgamma, -0xa.000000000000001p0L, -3.1771425942649001698860433502350057763905e+11L);
13931   TEST_f_f (tgamma, -0x13.ffffffffffffffep0L, 2.3694367893405502075347562184931828448654e-01L);
13932   TEST_f_f (tgamma, -0x14.000000000000002p0L, -2.3694367893405501827041302245929389013031e-01L);
13933   TEST_f_f (tgamma, -0x1d.ffffffffffffffep0L, 2.1732499046818166459536268654187775086902e-15L);
13934   TEST_f_f (tgamma, -0x1e.000000000000002p0L, -2.1732499046818166201837145753965837196590e-15L);
13935   TEST_f_f (tgamma, -0x27.ffffffffffffffcp0L, 3.5326017549807232935581894777156474496719e-31L);
13936   TEST_f_f (tgamma, -0x28.000000000000004p0L, -3.5326017549807232028299619269080956965758e-31L);
13937   TEST_f_f (tgamma, -0x28.ffffffffffffffcp0L, -8.6161018414163982777002940498289948893044e-33L);
13938   TEST_f_f (tgamma, -0x29.000000000000004p0L, 8.6161018414163980549537337663264762179535e-33L);
13939   TEST_f_f (tgamma, -0x29.ffffffffffffffcp0L, 2.0514528193848567329552463626090806737389e-34L);
13940   TEST_f_f (tgamma, -0x2a.000000000000004p0L, -2.0514528193848566795814269269517457847791e-34L);
13941   TEST_f_f (tgamma, -0x31.ffffffffffffffcp0L, 9.4768689712397635680446279661359728835046e-48L);
13942   TEST_f_f (tgamma, -0x32.000000000000004p0L, -9.4768689712397633101385547903658075308777e-48L);
13943   TEST_f_f (tgamma, -0x63.ffffffffffffff8p0L, 1.5442090669841618542494279375256856430049e-141L);
13944   TEST_f_f (tgamma, -0x64.000000000000008p0L, -1.5442090669841617554527108348771968070612e-141L);
13945   TEST_f_f (tgamma, -0x95.ffffffffffffffp0L, 1.2612069237291916400144732227892704713839e-246L);
13946   TEST_f_f (tgamma, -0x96.00000000000001p0L, -1.2612069237291914644980030550324645611752e-246L);
13947   TEST_f_f (tgamma, -0xb4.ffffffffffffffp0L, -1.9816628031468191243385005680879281767694e-315L);
13948   TEST_f_f (tgamma, -0xb5.00000000000001p0L, 1.9816628031468188382579700510291588022368e-315L);
13949   TEST_f_f (tgamma, -0xb5.ffffffffffffffp0L, 1.0888257160147357826865964233809723297472e-317L);
13950   TEST_f_f (tgamma, -0xb6.00000000000001p0L, -1.0888257160147356253334423783317128355514e-317L);
13951   TEST_f_f (tgamma, -0xb6.ffffffffffffffp0L, -5.9498673006269714905418984659220067091260e-320L);
13952   TEST_f_f (tgamma, -0xb7.00000000000001p0L, 5.9498673006269706297861824177538685763601e-320L);
13953   TEST_f_f (tgamma, -0xb7.ffffffffffffffp0L, 3.2336235329494410277123118903958061569834e-322L);
13954   TEST_f_f (tgamma, -0xb8.00000000000001p0L, -3.2336235329494405594225146768193434900135e-322L);
13955   TEST_f_f (tgamma, -0xbb.ffffffffffffffp0L, 2.6730392040715350119087465463119939092815e-331L);
13956   TEST_f_f (tgamma, -0xbc.00000000000001p0L, -2.6730392040715346232108532050343031951651e-331L);
13957   TEST_f_f (tgamma, -0xbc.ffffffffffffffp0L, -1.4143064571807063556111222197839950086445e-333L);
13958   TEST_f_f (tgamma, -0xbd.00000000000001p0L, 1.4143064571807061497431633629389135273431e-333L);
13959   TEST_f_f (tgamma, -0xbd.ffffffffffffffp0L, 7.4437181956879281879706555863416819210399e-336L);
13960   TEST_f_f (tgamma, -0xbe.00000000000001p0L, -7.4437181956879271033676895858841525581153e-336L);
13961   TEST_f_f (tgamma, -0xbe.ffffffffffffffp0L, -3.8972346574282346536709453101948570578636e-338L);
13962   TEST_f_f (tgamma, -0xbf.00000000000001p0L, 3.8972346574282340852496542564155275274974e-338L);
13963   TEST_f_f (tgamma, -0xf9.ffffffffffffffp0L, 2.2289142548411573883553287678043297937797e-476L);
13964   TEST_f_f (tgamma, -0xfa.00000000000001p0L, -2.2289142548411570466476165308364665814265e-476L);
13965   TEST_f_f (tgamma, -0x1f3.fffffffffffffep0L, 2.9528489142763141594943668922610562530068e-1118L);
13966   TEST_f_f (tgamma, -0x1f4.00000000000002p0L, -2.9528489142763131406565394149878256133744e-1118L);
13967   TEST_f_f (tgamma, -0x2ed.fffffffffffffcp0L, 6.9801511765871818502006905472380418430269e-1817L);
13968   TEST_f_f (tgamma, -0x2ee.00000000000004p0L, -6.9801511765871767194421856376592926002995e-1817L);
13969   TEST_f_f (tgamma, -0x3e7.fffffffffffffcp0L, 4.4768809295877296071892611539415773519036e-2552L);
13970   TEST_f_f (tgamma, -0x3e8.00000000000004p0L, -4.4768809295877261735541135972060089530309e-2552L);
13971   TEST_f_f (tgamma, -0x4e1.fffffffffffff8p0L, 5.4651488569236507565341414077911790252381e-3315L);
13972   TEST_f_f (tgamma, -0x4e2.00000000000008p0L, -5.4651488569236421026544487194247355967789e-3315L);
13973   TEST_f_f (tgamma, -0x5db.fffffffffffff8p0L, 1.8718211510339187689122114747834510481993e-4099L);
13974   TEST_f_f (tgamma, -0x5dc.00000000000008p0L, -1.8718211510339157291960718369454861898499e-4099L);
13975   TEST_f_f (tgamma, -0x6d5.fffffffffffff8p0L, 4.2925786447266492555651378780094011518063e-4902L);
13976   TEST_f_f (tgamma, -0x6d6.00000000000008p0L, -4.2925786447266421378134368786479937285900e-4902L);
13977   TEST_f_f (tgamma, -0x6e2.fffffffffffff8p0L, -2.8229173528168668283609231628661510187536e-4944L, UNDERFLOW_EXCEPTION);
13978   TEST_f_f (tgamma, -0x6e3.00000000000008p0L, 2.8229173528168621428945467532322397890424e-4944L, UNDERFLOW_EXCEPTION);
13979   TEST_f_f (tgamma, -0x6e3.fffffffffffff8p0L, 1.6002932839097884515524894602387278842659e-4947L, UNDERFLOW_EXCEPTION);
13980   TEST_f_f (tgamma, -0x6e4.00000000000008p0L, -1.6002932839097857951909742110188634438017e-4947L, UNDERFLOW_EXCEPTION);
13981   TEST_f_f (tgamma, -0x6e4.fffffffffffff8p0L, -9.0668174725767051085164382743343408095146e-4951L, UNDERFLOW_EXCEPTION);
13982   TEST_f_f (tgamma, -0x6e5.00000000000008p0L, 9.0668174725766900571689083050287838090189e-4951L, UNDERFLOW_EXCEPTION);
13983 # if LDBL_MANT_DIG <= 64
13984   TEST_f_f (tgamma, -0x6e5.fffffffffffff8p0L, plus_zero, UNDERFLOW_EXCEPTION);
13985   TEST_f_f (tgamma, -0x6e6.00000000000008p0L, minus_zero, UNDERFLOW_EXCEPTION);
13986 # else
13987   TEST_f_f (tgamma, -0x6e5.fffffffffffff8p0L, 5.1340982290921319983501912122292601780326e-4954L, UNDERFLOW_EXCEPTION);
13988   TEST_f_f (tgamma, -0x6e6.00000000000008p0L, -5.1340982290921234748578193083614111497314e-4954L, UNDERFLOW_EXCEPTION);
13989 # endif
13990 # if LDBL_MANT_DIG >= 113
13991   TEST_f_f (tgamma, 0x8.0000000000000000000000000008p0L, 5.0400000000000000000000000000000156521606e+03L);
13992   TEST_f_f (tgamma, 0x7.fffffffffffffffffffffffffffcp0L, 5.0399999999999999999999999999999921739197e+03L);
13993   TEST_f_f (tgamma, 0x7.0000000000000000000000000004p0L, 7.2000000000000000000000000000000103877321e+02L);
13994   TEST_f_f (tgamma, 0x6.fffffffffffffffffffffffffffcp0L, 7.1999999999999999999999999999999896122679e+02L);
13995   TEST_f_f (tgamma, 0x6.0000000000000000000000000004p0L, 1.2000000000000000000000000000000015772143e+02L);
13996   TEST_f_f (tgamma, 0x5.fffffffffffffffffffffffffffcp0L, 1.1999999999999999999999999999999984227857e+02L);
13997   TEST_f_f (tgamma, 0x5.0000000000000000000000000004p0L, 2.4000000000000000000000000000000027846500e+01L);
13998   TEST_f_f (tgamma, 0x4.fffffffffffffffffffffffffffcp0L, 2.3999999999999999999999999999999972153500e+01L);
13999   TEST_f_f (tgamma, 0x4.0000000000000000000000000004p0L, 6.0000000000000000000000000000000058060671e+00L);
14000   TEST_f_f (tgamma, 0x3.fffffffffffffffffffffffffffep0L, 5.9999999999999999999999999999999970969664e+00L);
14001   TEST_f_f (tgamma, 0x3.0000000000000000000000000002p0L, 2.0000000000000000000000000000000007108872e+00L);
14002   TEST_f_f (tgamma, 0x2.fffffffffffffffffffffffffffep0L, 1.9999999999999999999999999999999992891128e+00L);
14003   TEST_f_f (tgamma, 0x2.0000000000000000000000000002p0L, 1.0000000000000000000000000000000001628506e+00L);
14004   TEST_f_f (tgamma, 0x1.ffffffffffffffffffffffffffffp0L, 9.9999999999999999999999999999999991857470e-01L);
14005   TEST_f_f (tgamma, 0x1.0000000000000000000000000001p0L, 9.9999999999999999999999999999999988883231e-01L);
14006   TEST_f_f (tgamma, 0x0.ffffffffffffffffffffffffffff8p0L, 1.0000000000000000000000000000000000555838e+00L);
14007   TEST_f_f (tgamma, -0x0.ffffffffffffffffffffffffffff8p0L, -1.0384593717069655257060992658440192422784e+34L);
14008   TEST_f_f (tgamma, -0x1.0000000000000000000000000001p0L, 5.1922968585348276285304963292200955772157e+33L);
14009   TEST_f_f (tgamma, -0x1.ffffffffffffffffffffffffffffp0L, 2.5961484292674138142652481646100484613922e+33L);
14010   TEST_f_f (tgamma, -0x2.0000000000000000000000000002p0L, -1.2980742146337069071326240823050235386078e+33L);
14011   TEST_f_f (tgamma, -0x2.fffffffffffffffffffffffffffep0L, -4.3269140487790230237754136076834154268628e+32L);
14012   TEST_f_f (tgamma, -0x3.0000000000000000000000000002p0L, 4.3269140487790230237754136076834112398039e+32L);
14013   TEST_f_f (tgamma, -0x3.fffffffffffffffffffffffffffep0L, 1.0817285121947557559438534019208539608824e+32L);
14014   TEST_f_f (tgamma, -0x4.0000000000000000000000000004p0L, -5.4086425609737787797192670096042603911764e+31L);
14015   TEST_f_f (tgamma, -0x4.fffffffffffffffffffffffffffcp0L, -1.0817285121947557559438534019208547550981e+31L);
14016   TEST_f_f (tgamma, -0x5.0000000000000000000000000004p0L, 1.0817285121947557559438534019208519115686e+31L);
14017   TEST_f_f (tgamma, -0x5.fffffffffffffffffffffffffffcp0L, 1.8028808536579262599064223365347581566449e+30L);
14018   TEST_f_f (tgamma, -0x6.0000000000000000000000000004p0L, -1.8028808536579262599064223365347529544662e+30L);
14019   TEST_f_f (tgamma, -0x6.fffffffffffffffffffffffffffcp0L, -2.5755440766541803712948890521925119357966e+29L);
14020   TEST_f_f (tgamma, -0x7.0000000000000000000000000004p0L, 2.5755440766541803712948890521925039372193e+29L);
14021   TEST_f_f (tgamma, -0x7.fffffffffffffffffffffffffffcp0L, 3.2194300958177254641186113152406402297656e+28L);
14022   TEST_f_f (tgamma, -0x8.0000000000000000000000000008p0L, -1.6097150479088627320593056576203121511868e+28L);
14023   TEST_f_f (tgamma, -0x9.fffffffffffffffffffffffffff8p0L, 1.7885722754542919245103396195781369922635e+26L);
14024   TEST_f_f (tgamma, -0xa.0000000000000000000000000008p0L, -1.7885722754542919245103396195781240306642e+26L);
14025   TEST_f_f (tgamma, -0x13.fffffffffffffffffffffffffffp0L, 1.3338743301940057859272772747600099590309e+14L);
14026   TEST_f_f (tgamma, -0x14.000000000000000000000000001p0L, -1.3338743301940057859272772747599851284049e+14L);
14027   TEST_f_f (tgamma, -0x1d.fffffffffffffffffffffffffffp0L, 1.2234309326134994173819319571374205986026e+00L);
14028   TEST_f_f (tgamma, -0x1e.000000000000000000000000001p0L, -1.2234309326134994173819319571373948286903e+00L);
14029   TEST_f_f (tgamma, -0x27.ffffffffffffffffffffffffffep0L, 1.9886779934224431790713007246380976767855e-16L);
14030   TEST_f_f (tgamma, -0x28.000000000000000000000000002p0L, -1.9886779934224431790713007246380069485580e-16L);
14031   TEST_f_f (tgamma, -0x28.ffffffffffffffffffffffffffep0L, -4.8504341302986419001739042064343853066259e-18L);
14032   TEST_f_f (tgamma, -0x29.000000000000000000000000002p0L, 4.8504341302986419001739042064341625600656e-18L);
14033   TEST_f_f (tgamma, -0x29.ffffffffffffffffffffffffffep0L, 1.1548652691187242619461676681986633377063e-19L);
14034   TEST_f_f (tgamma, -0x2a.000000000000000000000000002p0L, -1.1548652691187242619461676681986099638869e-19L);
14035   TEST_f_f (tgamma, -0x31.ffffffffffffffffffffffffffep0L, 5.3350029459393017997786969431322287652396e-33L);
14036   TEST_f_f (tgamma, -0x32.000000000000000000000000002p0L, -5.3350029459393017997786969431319708591664e-33L);
14037   TEST_f_f (tgamma, -0x63.ffffffffffffffffffffffffffcp0L, 8.6931242233150155021453586128730281632676e-127L);
14038   TEST_f_f (tgamma, -0x64.000000000000000000000000004p0L, -8.6931242233150155021453586128720401960966e-127L);
14039   TEST_f_f (tgamma, -0x95.ffffffffffffffffffffffffff8p0L, 7.0999637896798458052083945552094635720486e-232L);
14040   TEST_f_f (tgamma, -0x96.000000000000000000000000008p0L, -7.0999637896798458052083945552077084073470e-232L);
14041   TEST_f_f (tgamma, -0xb4.ffffffffffffffffffffffffff8p0L, -1.1155769827282483165407420451477844041365e-300L);
14042   TEST_f_f (tgamma, -0xb5.000000000000000000000000008p0L, 1.1155769827282483165407420451474983236060e-300L);
14043   TEST_f_f (tgamma, -0xb5.ffffffffffffffffffffffffff8p0L, 6.1295438611442215194546266216911239298981e-303L);
14044   TEST_f_f (tgamma, -0xb6.000000000000000000000000008p0L, -6.1295438611442215194546266216895503983577e-303L);
14045   TEST_f_f (tgamma, -0xb6.ffffffffffffffffffffffffff8p0L, -3.3494775197509407210134571703230189921356e-305L);
14046   TEST_f_f (tgamma, -0xb7.000000000000000000000000008p0L, 3.3494775197509407210134571703221582364195e-305L);
14047   TEST_f_f (tgamma, -0xb7.ffffffffffffffffffffffffff8p0L, 1.8203682172559460440290528099581627396147e-307L);
14048   TEST_f_f (tgamma, -0xb8.000000000000000000000000008p0L, -1.8203682172559460440290528099576944498174e-307L);
14049   TEST_f_f (tgamma, -0xbb.ffffffffffffffffffffffffff8p0L, 1.5047872954254114273289393917555491216542e-316L);
14050   TEST_f_f (tgamma, -0xbc.000000000000000000000000008p0L, -1.5047872954254114273289393917551604237609e-316L);
14051   TEST_f_f (tgamma, -0xbc.ffffffffffffffffffffffffff8p0L, -7.9618375419333937953912137129923244334851e-319L);
14052   TEST_f_f (tgamma, -0xbd.000000000000000000000000008p0L, 7.9618375419333937953912137129902657538965e-319L);
14053   TEST_f_f (tgamma, -0xbd.ffffffffffffffffffffffffff8p0L, 4.1904408115438914712585335331538555086887e-321L);
14054   TEST_f_f (tgamma, -0xbe.000000000000000000000000008p0L, -4.1904408115438914712585335331527709057227e-321L);
14055   TEST_f_f (tgamma, -0xbe.ffffffffffffffffffffffffff8p0L, -2.1939480688711473671510646770439036908579e-323L);
14056   TEST_f_f (tgamma, -0xbf.000000000000000000000000008p0L, 2.1939480688711473671510646770433352695669e-323L);
14057   TEST_f_f (tgamma, -0xf9.ffffffffffffffffffffffffff8p0L, 1.2547671759429278005937024349858508569625e-461L);
14058   TEST_f_f (tgamma, -0xfa.000000000000000000000000008p0L, -1.2547671759429278005937024349855091492502e-461L);
14059   TEST_f_f (tgamma, -0x1f3.ffffffffffffffffffffffffffp0L, 1.6623061587520224800948170558276526986560e-1103L);
14060   TEST_f_f (tgamma, -0x1f4.00000000000000000000000001p0L, -1.6623061587520224800948170558266338608285e-1103L);
14061   TEST_f_f (tgamma, -0x2ed.fffffffffffffffffffffffffep0L, 3.9294757797334687313030998663853566763041e-1802L);
14062   TEST_f_f (tgamma, -0x2ee.00000000000000000000000002p0L, -3.9294757797334687313030998663802259177992e-1802L);
14063   TEST_f_f (tgamma, -0x3e7.fffffffffffffffffffffffffep0L, 2.5202599107841713834679953735597552855978e-2537L);
14064   TEST_f_f (tgamma, -0x3e8.00000000000000000000000002p0L, -2.5202599107841713834679953735563216504503e-2537L);
14065   TEST_f_f (tgamma, -0x4e1.fffffffffffffffffffffffffcp0L, 3.0766052944457032773369415396747635242705e-3300L);
14066   TEST_f_f (tgamma, -0x4e2.00000000000000000000000004p0L, -3.0766052944457032773369415396661096445778e-3300L);
14067   TEST_f_f (tgamma, -0x5db.fffffffffffffffffffffffffcp0L, 1.0537416297875703295453200836588944487917e-4084L);
14068   TEST_f_f (tgamma, -0x5dc.00000000000000000000000004p0L, -1.0537416297875703295453200836558547326520e-4084L);
14069   TEST_f_f (tgamma, -0x6d5.fffffffffffffffffffffffffcp0L, 2.4165069481061837867659591369998698607387e-4887L);
14070   TEST_f_f (tgamma, -0x6d6.00000000000000000000000004p0L, -2.4165069481061837867659591369927521090377e-4887L);
14071   TEST_f_f (tgamma, -0x6e2.fffffffffffffffffffffffffcp0L, -1.5891611922804672355414813803008070609431e-4929L);
14072   TEST_f_f (tgamma, -0x6e3.00000000000000000000000004p0L, 1.5891611922804672355414813802961215945667e-4929L);
14073   TEST_f_f (tgamma, -0x6e3.fffffffffffffffffffffffffcp0L, 9.0088502963745308137272187091882496519917e-4933L, UNDERFLOW_EXCEPTION);
14074   TEST_f_f (tgamma, -0x6e4.00000000000000000000000004p0L, -9.0088502963745308137272187091616860368392e-4933L, UNDERFLOW_EXCEPTION);
14075   TEST_f_f (tgamma, -0x6e4.fffffffffffffffffffffffffcp0L, -5.1041644738665896961627301468488672286746e-4936L, UNDERFLOW_EXCEPTION);
14076   TEST_f_f (tgamma, -0x6e5.00000000000000000000000004p0L, 5.1041644738665896961627301468338158811446e-4936L, UNDERFLOW_EXCEPTION);
14077   TEST_f_f (tgamma, -0x6e5.fffffffffffffffffffffffffcp0L, 2.8902403589278537350864836618623260468143e-4939L, UNDERFLOW_EXCEPTION);
14078   TEST_f_f (tgamma, -0x6e6.00000000000000000000000004p0L, -2.8902403589278537350864836618538025544424e-4939L, UNDERFLOW_EXCEPTION);
14079   TEST_f_f (tgamma, -0x6eb.fffffffffffffffffffffffffcp0L, 9.4152481960798287090819640211017219042636e-4959L, UNDERFLOW_EXCEPTION);
14080   TEST_f_f (tgamma, -0x6ec.00000000000000000000000004p0L, -9.4152481960798287090819640210739431797168e-4959L, UNDERFLOW_EXCEPTION);
14081   TEST_f_f (tgamma, -0x6ec.fffffffffffffffffffffffffcp0L, -5.3103486723518492437010513373388172315540e-4962L, UNDERFLOW_EXCEPTION);
14082   TEST_f_f (tgamma, -0x6ed.00000000000000000000000004p0L, 5.3103486723518492437010513373231484108489e-4962L, UNDERFLOW_EXCEPTION);
14083   TEST_f_f (tgamma, -0x6ed.fffffffffffffffffffffffffcp0L, 2.9934321715624854812294539669328172615019e-4965L, UNDERFLOW_EXCEPTION);
14084   TEST_f_f (tgamma, -0x6ee.00000000000000000000000004p0L, -2.9934321715624854812294539669239841152754e-4965L, UNDERFLOW_EXCEPTION);
14085   TEST_f_f (tgamma, -0x6ee.fffffffffffffffffffffffffcp0L, minus_zero, UNDERFLOW_EXCEPTION);
14086   TEST_f_f (tgamma, -0x6ef.00000000000000000000000004p0L, plus_zero, UNDERFLOW_EXCEPTION);
14087 # endif
14088 #endif
14089   TEST_f_f (tgamma, -0x1.0a32a2p+5L, 1.8125267978155035272941154746083439329912e-37L);
14090 #ifndef TEST_FLOAT
14091   TEST_f_f (tgamma, -0x1.5800000080001p+7L, -3.1439271448823567326093363350637118195240e-304L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
14092 #endif
14093   TEST_f_f (tgamma, 18.5L, 1.4986120533153361177371791123515513270334e+15L);
14094   TEST_f_f (tgamma, 19.5L, 2.7724322986333718178137813578503699550119e+16L);
14095   TEST_f_f (tgamma, 23.5L, 5.3613035875444147334274983856108155717836e+21L);
14096   TEST_f_f (tgamma, 29.5L, 1.6348125198274266444378807806868221866931e+30L);
14097   TEST_f_f (tgamma, 30.5L, 4.8226969334909086010917483030261254507447e+31L);
14098   TEST_f_f (tgamma, 31.5L, 1.4709225647147271233329832324229682624771e+33L);
14099   TEST_f_f (tgamma, 32.5L, 4.6334060788513904384988971821323500268029e+34L);
14100   TEST_f_f (tgamma, 33.5L, 1.5058569756267018925121415841930137587110e+36L);
14101   TEST_f_f (tgamma, 34.5L, 5.0446208683494513399156743070465960916817e+37L);
14102   TEST_f_f (tgamma, 0x2.30a43cp+4L, 3.4027979115654976101247558405326779640190e+38L);
14103 #ifdef TEST_FLOAT
14104   TEST_f_f (tgamma, 0x2.30a44p+4L, plus_infty, OVERFLOW_EXCEPTION);
14105 #else
14106   TEST_f_f (tgamma, 0x2.30a44p+4L, 3.4028438913396451054667218138127983367181e+38L);
14107 #endif
14108 #ifndef TEST_FLOAT
14109   TEST_f_f (tgamma, 0xa.b9fd72b0fb238p+4L, 1.7976931348622298700886249281842651388250e+308L);
14110 # if !defined TEST_LDOUBLE || LDBL_MAX_EXP <= 1024
14111   TEST_f_f (tgamma, 0xa.b9fd72b0fb24p+4L, plus_infty, OVERFLOW_EXCEPTION);
14112 # else
14113   TEST_f_f (tgamma, 0xa.b9fd72b0fb24p+4L, 1.7976931348624926129589466917917870782484e+308L);
14114 # endif
14115 #endif
14116 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
14117   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f4p+4L, 1.7976931348623158079372897140307719334857e+308L);
14118 # if LDBL_MAX_EXP <= 1024
14119   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f8p+4L, plus_infty, OVERFLOW_EXCEPTION);
14120 # else
14121   TEST_f_f (tgamma, 0xa.b9fd72b0fb23a9ddbf0d3804f8p+4L, 1.7976931348623158079372897140599422519044e+308L);
14122 # endif
14123 #endif
14124 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14125   TEST_f_f (tgamma, 0x6.db8c603359a97108p+8L, 1.1897314953572317517071551278058233700012e+4932L);
14126   TEST_f_f (tgamma, 0x6.db8c603359a9711p+8L, plus_infty, OVERFLOW_EXCEPTION);
14127 # if LDBL_MANT_DIG >= 113
14128   TEST_f_f (tgamma, 0x6.db8c603359a971081bc4a2e9dfdp+8L, 1.1897314953572317650857593266265995494998e+4932L);
14129   TEST_f_f (tgamma, 0x6.db8c603359a971081bc4a2e9dfd4p+8L, plus_infty, OVERFLOW_EXCEPTION);
14130 # endif
14131 #endif
14133   END (tgamma);
14137 static void
14138 trunc_test (void)
14140   START (trunc);
14142   TEST_f_f (trunc, plus_infty, plus_infty);
14143   TEST_f_f (trunc, minus_infty, minus_infty);
14144   TEST_f_f (trunc, qnan_value, qnan_value);
14146   TEST_f_f (trunc, 0, 0);
14147   TEST_f_f (trunc, minus_zero, minus_zero);
14148   TEST_f_f (trunc, 0.1, 0);
14149   TEST_f_f (trunc, 0.25, 0);
14150   TEST_f_f (trunc, 0.625, 0);
14151   TEST_f_f (trunc, -0.1, minus_zero);
14152   TEST_f_f (trunc, -0.25, minus_zero);
14153   TEST_f_f (trunc, -0.625, minus_zero);
14154   TEST_f_f (trunc, 1, 1);
14155   TEST_f_f (trunc, -1, -1);
14156   TEST_f_f (trunc, 1.625, 1);
14157   TEST_f_f (trunc, -1.625, -1);
14159   TEST_f_f (trunc, 1048580.625L, 1048580L);
14160   TEST_f_f (trunc, -1048580.625L, -1048580L);
14162   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
14163   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
14165   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
14166   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
14168 #ifdef TEST_LDOUBLE
14169   /* The result can only be represented in long double.  */
14170   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
14171   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
14172   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
14173   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
14174   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
14176 # if LDBL_MANT_DIG > 100
14177   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
14178   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
14179   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
14180 # endif
14182   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
14183   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
14184   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
14185   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
14186   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
14188 # if LDBL_MANT_DIG > 100
14189   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
14190   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
14191   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
14192 # endif
14194   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
14195   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
14196   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
14197   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
14198   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
14200 # if LDBL_MANT_DIG > 100
14201   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
14202   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
14203   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
14204   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
14205   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
14206   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
14207 # endif
14209   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
14210   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
14211   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
14212   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
14213   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
14215 # if LDBL_MANT_DIG > 100
14216   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
14217   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
14218   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
14219   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
14220   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
14221   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
14222 # endif
14224   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
14225   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
14226   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
14227   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
14228   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
14230   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
14231   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
14232   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
14233   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
14234   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
14236   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
14237   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
14238   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
14239   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
14240   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
14241 #endif
14243   END (trunc);
14246 static void
14247 y0_test (void)
14249   FLOAT s, c;
14250   errno = 0;
14251   FUNC (sincos) (0, &s, &c);
14252   if (errno == ENOSYS)
14253     /* Required function not implemented.  */
14254     return;
14255   FUNC(y0) (1);
14256   if (errno == ENOSYS)
14257     /* Function not implemented.  */
14258     return;
14260   /* y0 is the Bessel function of the second kind of order 0 */
14261   START (y0);
14263   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
14264   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
14265   TEST_f_f (y0, 0.0, minus_infty);
14266   TEST_f_f (y0, qnan_value, qnan_value);
14267   TEST_f_f (y0, plus_infty, 0);
14269   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
14270   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
14271   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
14272   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
14273   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
14274   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
14275   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
14277   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
14279 #ifndef TEST_FLOAT
14280   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
14281   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
14282 #endif
14284 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14285   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
14286   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
14287 #endif
14289   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
14290   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
14291   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
14292   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
14293   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
14294   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
14295   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
14296   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
14297   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
14298   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
14299   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
14301   END (y0);
14305 static void
14306 y1_test (void)
14308   FLOAT s, c;
14309   errno = 0;
14310   FUNC (sincos) (0, &s, &c);
14311   if (errno == ENOSYS)
14312     /* Required function not implemented.  */
14313     return;
14314   FUNC(y1) (1);
14315   if (errno == ENOSYS)
14316     /* Function not implemented.  */
14317     return;
14319   /* y1 is the Bessel function of the second kind of order 1 */
14320   START (y1);
14322   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
14323   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
14324   TEST_f_f (y1, 0.0, minus_infty);
14325   TEST_f_f (y1, plus_infty, 0);
14326   TEST_f_f (y1, qnan_value, qnan_value);
14328   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
14329   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
14330   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
14331   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
14332   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
14333   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
14334   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
14336   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
14338 #ifndef TEST_FLOAT
14339   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
14340   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
14341 #endif
14343 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
14344   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
14345   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
14346 #endif
14348   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
14349   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
14350   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
14351   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
14352   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
14353   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
14354   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
14355   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
14356   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
14357   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
14358   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
14360   END (y1);
14364 static void
14365 yn_test (void)
14367   FLOAT s, c;
14368   errno = 0;
14369   FUNC (sincos) (0, &s, &c);
14370   if (errno == ENOSYS)
14371     /* Required function not implemented.  */
14372     return;
14373   FUNC(yn) (1, 1);
14374   if (errno == ENOSYS)
14375     /* Function not implemented.  */
14376     return;
14378   /* yn is the Bessel function of the second kind of order n */
14379   START (yn);
14381   /* yn (0, x) == y0 (x)  */
14382   TEST_if_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
14383   TEST_if_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
14384   TEST_if_f (yn, 0, 0.0, minus_infty);
14385   TEST_if_f (yn, 0, qnan_value, qnan_value);
14386   TEST_if_f (yn, 0, plus_infty, 0);
14388   TEST_if_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
14389   TEST_if_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
14390   TEST_if_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
14391   TEST_if_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
14392   TEST_if_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
14393   TEST_if_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
14394   TEST_if_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
14396   /* yn (1, x) == y1 (x)  */
14397   TEST_if_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
14398   TEST_if_f (yn, 1, 0.0, minus_infty);
14399   TEST_if_f (yn, 1, plus_infty, 0);
14400   TEST_if_f (yn, 1, qnan_value, qnan_value);
14402   TEST_if_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
14403   TEST_if_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
14404   TEST_if_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
14405   TEST_if_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
14406   TEST_if_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
14407   TEST_if_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
14408   TEST_if_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
14410   /* yn (3, x)  */
14411   TEST_if_f (yn, 3, plus_infty, 0);
14412   TEST_if_f (yn, 3, qnan_value, qnan_value);
14414   TEST_if_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
14415   TEST_if_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
14416   TEST_if_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
14417   TEST_if_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
14418   TEST_if_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
14420   /* yn (10, x)  */
14421   TEST_if_f (yn, 10, plus_infty, 0);
14422   TEST_if_f (yn, 10, qnan_value, qnan_value);
14424   TEST_if_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
14425   TEST_if_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
14426   TEST_if_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
14427   TEST_if_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
14428   TEST_if_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
14430   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
14431      and FLT_MIN.  See Bug 14173.  */
14432   TEST_if_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
14434   TEST_if_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION|ERRNO_ERANGE);
14436   END (yn);
14440 static void
14441 significand_test (void)
14443   /* significand returns the mantissa of the exponential representation.  */
14445   /* TODO: missing +/-Inf as well as qNaN tests.  */
14447   START (significand);
14449   TEST_f_f (significand, 4.0, 1.0);
14450   TEST_f_f (significand, 6.0, 1.5);
14451   TEST_f_f (significand, 8.0, 1.0);
14453   END (significand);
14457 static void
14458 initialize (void)
14460   fpstack_test ("start *init*");
14462   /* Clear all exceptions.  From now on we must not get random exceptions.  */
14463   feclearexcept (FE_ALL_EXCEPT);
14464   errno = 0;
14466   /* Test to make sure we start correctly.  */
14467   fpstack_test ("end *init*");
14470 /* Definitions of arguments for argp functions.  */
14471 static const struct argp_option options[] =
14473   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
14474   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
14475   { "no-max-error", 'f', NULL, 0,
14476     "Don't output maximal errors of functions"},
14477   { "no-points", 'p', NULL, 0,
14478     "Don't output results of functions invocations"},
14479   { "ignore-max-ulp", 'i', "yes/no", 0,
14480     "Ignore given maximal errors"},
14481   { "output-dir", 'o', "DIR", 0,
14482     "Directory where generated files will be placed"},
14483   { NULL, 0, NULL, 0, NULL }
14486 /* Short description of program.  */
14487 static const char doc[] = "Math test suite: " TEST_MSG ;
14489 /* Prototype for option handler.  */
14490 static error_t parse_opt (int key, char *arg, struct argp_state *state);
14492 /* Data structure to communicate with argp functions.  */
14493 static struct argp argp =
14495   options, parse_opt, NULL, doc,
14499 /* Handle program arguments.  */
14500 static error_t
14501 parse_opt (int key, char *arg, struct argp_state *state)
14503   switch (key)
14504     {
14505     case 'f':
14506       output_max_error = 0;
14507       break;
14508     case 'i':
14509       if (strcmp (arg, "yes") == 0)
14510         ignore_max_ulp = 1;
14511       else if (strcmp (arg, "no") == 0)
14512         ignore_max_ulp = 0;
14513       break;
14514     case 'o':
14515       output_dir = (char *) malloc (strlen (arg) + 1);
14516       if (output_dir != NULL)
14517         strcpy (output_dir, arg);
14518       else
14519         return errno;
14520       break;
14521     case 'p':
14522       output_points = 0;
14523       break;
14524     case 'u':
14525       output_ulps = 1;
14526       break;
14527     case 'v':
14528       if (optarg)
14529         verbose = (unsigned int) strtoul (optarg, NULL, 0);
14530       else
14531         verbose = 3;
14532       break;
14533     default:
14534       return ARGP_ERR_UNKNOWN;
14535     }
14536   return 0;
14539 #if 0
14540 /* function to check our ulp calculation.  */
14541 void
14542 check_ulp (void)
14544   int i;
14546   FLOAT u, diff, ulp;
14547   /* This gives one ulp.  */
14548   u = FUNC(nextafter) (10, 20);
14549   check_equal (10.0, u, 1, &diff, &ulp);
14550   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
14552   /* This gives one more ulp.  */
14553   u = FUNC(nextafter) (u, 20);
14554   check_equal (10.0, u, 2, &diff, &ulp);
14555   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
14557   /* And now calculate 100 ulp.  */
14558   for (i = 2; i < 100; i++)
14559     u = FUNC(nextafter) (u, 20);
14560   check_equal (10.0, u, 100, &diff, &ulp);
14561   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
14563 #endif
14566 main (int argc, char **argv)
14569   int remaining;
14570   char *ulps_file_path;
14571   size_t dir_len = 0;
14573   verbose = 1;
14574   output_ulps = 0;
14575   output_max_error = 1;
14576   output_points = 1;
14577   output_dir = NULL;
14578   /* XXX set to 0 for releases.  */
14579   ignore_max_ulp = 0;
14581   /* Parse and process arguments.  */
14582   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
14584   if (remaining != argc)
14585     {
14586       fprintf (stderr, "wrong number of arguments");
14587       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
14588       exit (EXIT_FAILURE);
14589     }
14591   if (output_ulps)
14592     {
14593       if (output_dir != NULL)
14594         dir_len = strlen (output_dir);
14595       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
14596       if (ulps_file_path == NULL)
14597         {
14598           perror ("can't allocate path for `ULPs' file: ");
14599           exit (1);
14600         }
14601       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
14602       ulps_file = fopen (ulps_file_path, "a");
14603       if (ulps_file == NULL)
14604         {
14605           perror ("can't open file `ULPs' for writing: ");
14606           exit (1);
14607         }
14608     }
14611   initialize ();
14612   printf (TEST_MSG);
14614 #if 0
14615   check_ulp ();
14616 #endif
14618   /* Keep the tests a wee bit ordered (according to ISO C99).  */
14619   /* Classification macros:  */
14620   finite_test ();
14621   fpclassify_test ();
14622   isfinite_test ();
14623   isinf_test ();
14624   isnan_test ();
14625   isnormal_test ();
14626   issignaling_test ();
14627   signbit_test ();
14629   /* Trigonometric functions:  */
14630   acos_test ();
14631   acos_test_tonearest ();
14632   acos_test_towardzero ();
14633   acos_test_downward ();
14634   acos_test_upward ();
14635   asin_test ();
14636   asin_test_tonearest ();
14637   asin_test_towardzero ();
14638   asin_test_downward ();
14639   asin_test_upward ();
14640   atan_test ();
14641   atan2_test ();
14642   cos_test ();
14643   cos_test_tonearest ();
14644   cos_test_towardzero ();
14645   cos_test_downward ();
14646   cos_test_upward ();
14647   sin_test ();
14648   sin_test_tonearest ();
14649   sin_test_towardzero ();
14650   sin_test_downward ();
14651   sin_test_upward ();
14652   sincos_test ();
14653   tan_test ();
14654   tan_test_tonearest ();
14655   tan_test_towardzero ();
14656   tan_test_downward ();
14657   tan_test_upward ();
14659   /* Hyperbolic functions:  */
14660   acosh_test ();
14661   asinh_test ();
14662   atanh_test ();
14663   cosh_test ();
14664   cosh_test_tonearest ();
14665   cosh_test_towardzero ();
14666   cosh_test_downward ();
14667   cosh_test_upward ();
14668   sinh_test ();
14669   sinh_test_tonearest ();
14670   sinh_test_towardzero ();
14671   sinh_test_downward ();
14672   sinh_test_upward ();
14673   tanh_test ();
14675   /* Exponential and logarithmic functions:  */
14676   exp_test ();
14677   exp_test_tonearest ();
14678   exp_test_towardzero ();
14679   exp_test_downward ();
14680   exp_test_upward ();
14681   exp10_test ();
14682   exp2_test ();
14683   expm1_test ();
14684   frexp_test ();
14685   ldexp_test ();
14686   log_test ();
14687   log10_test ();
14688   log1p_test ();
14689   log2_test ();
14690   logb_test ();
14691   logb_test_downward ();
14692   modf_test ();
14693   ilogb_test ();
14694   scalb_test ();
14695   scalbn_test ();
14696   scalbln_test ();
14697   significand_test ();
14699   /* Power and absolute value functions:  */
14700   cbrt_test ();
14701   fabs_test ();
14702   hypot_test ();
14703   pow_test ();
14704   pow_test_tonearest ();
14705   pow_test_towardzero ();
14706   pow_test_downward ();
14707   pow_test_upward ();
14708   sqrt_test ();
14710   /* Error and gamma functions:  */
14711   erf_test ();
14712   erfc_test ();
14713   gamma_test ();
14714   lgamma_test ();
14715   tgamma_test ();
14717   /* Nearest integer functions:  */
14718   ceil_test ();
14719   floor_test ();
14720   nearbyint_test ();
14721   rint_test ();
14722   rint_test_tonearest ();
14723   rint_test_towardzero ();
14724   rint_test_downward ();
14725   rint_test_upward ();
14726   lrint_test ();
14727   lrint_test_tonearest ();
14728   lrint_test_towardzero ();
14729   lrint_test_downward ();
14730   lrint_test_upward ();
14731   llrint_test ();
14732   llrint_test_tonearest ();
14733   llrint_test_towardzero ();
14734   llrint_test_downward ();
14735   llrint_test_upward ();
14736   round_test ();
14737   lround_test ();
14738   llround_test ();
14739   trunc_test ();
14741   /* Remainder functions:  */
14742   fmod_test ();
14743   remainder_test ();
14744   remquo_test ();
14746   /* Manipulation functions:  */
14747   copysign_test ();
14748   nextafter_test ();
14749   nexttoward_test ();
14751   /* maximum, minimum and positive difference functions */
14752   fdim_test ();
14753   fmax_test ();
14754   fmin_test ();
14756   /* Multiply and add:  */
14757   fma_test ();
14758   fma_test_towardzero ();
14759   fma_test_downward ();
14760   fma_test_upward ();
14762   /* Comparison macros:  */
14763   isgreater_test ();
14764   isgreaterequal_test ();
14765   isless_test ();
14766   islessequal_test ();
14767   islessgreater_test ();
14768   isunordered_test ();
14770   /* Complex functions:  */
14771   cabs_test ();
14772   cacos_test ();
14773   cacosh_test ();
14774   carg_test ();
14775   casin_test ();
14776   casinh_test ();
14777   catan_test ();
14778   catanh_test ();
14779   ccos_test ();
14780   ccosh_test ();
14781   cexp_test ();
14782   cimag_test ();
14783   clog10_test ();
14784   clog_test ();
14785   conj_test ();
14786   cpow_test ();
14787   cproj_test ();
14788   creal_test ();
14789   csin_test ();
14790   csinh_test ();
14791   csqrt_test ();
14792   ctan_test ();
14793   ctan_test_tonearest ();
14794   ctan_test_towardzero ();
14795   ctan_test_downward ();
14796   ctan_test_upward ();
14797   ctanh_test ();
14798   ctanh_test_tonearest ();
14799   ctanh_test_towardzero ();
14800   ctanh_test_downward ();
14801   ctanh_test_upward ();
14803   /* Bessel functions:  */
14804   j0_test ();
14805   j1_test ();
14806   jn_test ();
14807   y0_test ();
14808   y1_test ();
14809   yn_test ();
14811   if (output_ulps)
14812     fclose (ulps_file);
14814   printf ("\nTest suite completed:\n");
14815   printf ("  %d test cases plus %d tests for exception flags and\n"
14816           "    %d tests for errno executed.\n",
14817           noTests, noExcTests, noErrnoTests);
14818   if (noErrors)
14819     {
14820       printf ("  %d errors occurred.\n", noErrors);
14821       return 1;
14822     }
14823   printf ("  All tests passed successfully.\n");
14825   return 0;
14829  * Local Variables:
14830  * mode:c
14831  * End:
14832  */