libm-test.inc: Fix tests where cos(PI/2) != 0.
[glibc.git] / math / libm-test.inc
blob0049fcda38ab3e12e06213c9f24536dd61173821
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
167 /* Values underflowing only for float.  */
168 #ifdef TEST_FLOAT
169 # define UNDERFLOW_EXCEPTION_FLOAT      UNDERFLOW_EXCEPTION
170 # define UNDERFLOW_EXCEPTION_OK_FLOAT   UNDERFLOW_EXCEPTION_OK
171 #else
172 # define UNDERFLOW_EXCEPTION_FLOAT      0
173 # define UNDERFLOW_EXCEPTION_OK_FLOAT   0
174 #endif
175 /* Values underflowing only for double or types with a larger least
176    positive normal value.  */
177 #if defined TEST_FLOAT || defined TEST_DOUBLE \
178   || (defined TEST_LDOUBLE && LDBL_MIN_EXP >= DBL_MIN_EXP)
179 # define UNDERFLOW_EXCEPTION_DOUBLE     UNDERFLOW_EXCEPTION
180 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  UNDERFLOW_EXCEPTION_OK
181 #else
182 # define UNDERFLOW_EXCEPTION_DOUBLE     0
183 # define UNDERFLOW_EXCEPTION_OK_DOUBLE  0
184 #endif
185 /* Values underflowing only for IBM long double or types with a larger least
186    positive normal value.  */
187 #if defined TEST_FLOAT || (defined TEST_LDOUBLE && LDBL_MIN_EXP > DBL_MIN_EXP)
188 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        UNDERFLOW_EXCEPTION
189 #else
190 # define UNDERFLOW_EXCEPTION_LDOUBLE_IBM        0
191 #endif
192 /* Values underflowing on architectures detecting tininess before
193    rounding, but not on those detecting tininess after rounding.  */
194 #define UNDERFLOW_EXCEPTION_BEFORE_ROUNDING     (TININESS_AFTER_ROUNDING \
195                                                  ? 0                    \
196                                                  : UNDERFLOW_EXCEPTION)
198 /* Various constants (we must supply them precalculated for accuracy).  */
199 #define M_PI_6l                 .52359877559829887307710723054658383L
200 #define M_E2l                   7.389056098930650227230427460575008L
201 #define M_E3l                   20.085536923187667740928529654581719L
202 #define M_2_SQRT_PIl            3.5449077018110320545963349666822903L   /* 2 sqrt (M_PIl)  */
203 #define M_SQRT_PIl              1.7724538509055160272981674833411451L   /* sqrt (M_PIl)  */
204 #define M_LOG_SQRT_PIl          0.57236494292470008707171367567652933L  /* log(sqrt(M_PIl))  */
205 #define M_LOG_2_SQRT_PIl        1.265512123484645396488945797134706L    /* log(2*sqrt(M_PIl))  */
206 #define M_PI_34l                (M_PIl - M_PI_4l)               /* 3*pi/4 */
207 #define M_PI_34_LOG10El         (M_PIl - M_PI_4l) * M_LOG10El
208 #define M_PI2_LOG10El           M_PI_2l * M_LOG10El
209 #define M_PI4_LOG10El           M_PI_4l * M_LOG10El
210 #define M_PI_LOG10El            M_PIl * M_LOG10El
211 #define M_SQRT_2_2              0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
213 #define ulps_file_name "ULPs"   /* Name of the ULPs file.  */
214 static FILE *ulps_file;         /* File to document difference.  */
215 static int output_ulps;         /* Should ulps printed?  */
216 static char *output_dir;        /* Directory where generated files will be written.  */
218 static int noErrors;    /* number of errors */
219 static int noTests;     /* number of tests (without testing exceptions) */
220 static int noExcTests;  /* number of tests for exception flags */
221 static int noXFails;    /* number of expected failures.  */
222 static int noXPasses;   /* number of unexpected passes.  */
224 static int verbose;
225 static int output_max_error;    /* Should the maximal errors printed?  */
226 static int output_points;       /* Should the single function results printed?  */
227 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
229 static FLOAT minus_zero, plus_zero;
230 static FLOAT plus_infty, minus_infty, qnan_value, max_value, min_value;
231 static FLOAT min_subnorm_value;
233 static FLOAT max_error, real_max_error, imag_max_error;
236 #define BUILD_COMPLEX(real, imag) \
237   ({ __complex__ FLOAT __retval;                                              \
238      __real__ __retval = (real);                                              \
239      __imag__ __retval = (imag);                                              \
240      __retval; })
242 #define BUILD_COMPLEX_INT(real, imag) \
243   ({ __complex__ int __retval;                                                \
244      __real__ __retval = (real);                                              \
245      __imag__ __retval = (imag);                                              \
246      __retval; })
249 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
250                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
252 static void
253 init_max_error (void)
255   max_error = 0;
256   real_max_error = 0;
257   imag_max_error = 0;
258   feclearexcept (FE_ALL_EXCEPT);
261 static void
262 set_max_error (FLOAT current, FLOAT *curr_max_error)
264   if (current > *curr_max_error)
265     *curr_max_error = current;
269 /* Print a FLOAT.  */
270 static void
271 print_float (FLOAT f)
273   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
274   if (issignaling (f))
275     printf ("sNaN\n");
276   else if (isnan (f))
277     printf ("qNaN\n");
278   else
279     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
282 /* Should the message print to screen?  This depends on the verbose flag,
283    and the test status.  */
284 static int
285 print_screen (int ok, int xfail)
287   if (output_points
288       && (verbose > 1
289           || (verbose == 1 && ok == xfail)))
290     return 1;
291   return 0;
295 /* Should the message print to screen?  This depends on the verbose flag,
296    and the test status.  */
297 static int
298 print_screen_max_error (int ok, int xfail)
300   if (output_max_error
301       && (verbose > 1
302           || ((verbose == 1) && (ok == xfail))))
303     return 1;
304   return 0;
307 /* Update statistic counters.  */
308 static void
309 update_stats (int ok, int xfail)
311   ++noTests;
312   if (ok && xfail)
313     ++noXPasses;
314   else if (!ok && xfail)
315     ++noXFails;
316   else if (!ok && !xfail)
317     ++noErrors;
320 static void
321 print_ulps (const char *test_name, FLOAT ulp)
323   if (output_ulps)
324     {
325       fprintf (ulps_file, "Test \"%s\":\n", test_name);
326       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
327                CHOOSE("ldouble", "double", "float",
328                       "ildouble", "idouble", "ifloat"),
329                FUNC(ceil) (ulp));
330     }
333 static void
334 print_function_ulps (const char *function_name, FLOAT ulp)
336   if (output_ulps)
337     {
338       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
339       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
340                CHOOSE("ldouble", "double", "float",
341                       "ildouble", "idouble", "ifloat"),
342                FUNC(ceil) (ulp));
343     }
347 static void
348 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
349                              FLOAT imag_ulp)
351   if (output_ulps)
352     {
353       if (real_ulp != 0.0)
354         {
355           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
356           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
357                    CHOOSE("ldouble", "double", "float",
358                           "ildouble", "idouble", "ifloat"),
359                    FUNC(ceil) (real_ulp));
360         }
361       if (imag_ulp != 0.0)
362         {
363           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
364           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
365                    CHOOSE("ldouble", "double", "float",
366                           "ildouble", "idouble", "ifloat"),
367                    FUNC(ceil) (imag_ulp));
368         }
371     }
376 /* Test if Floating-Point stack hasn't changed */
377 static void
378 fpstack_test (const char *test_name)
380 #if defined (__i386__) || defined (__x86_64__)
381   static int old_stack;
382   int sw;
384   asm ("fnstsw" : "=a" (sw));
385   sw >>= 11;
386   sw &= 7;
388   if (sw != old_stack)
389     {
390       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
391               test_name, sw, old_stack);
392       ++noErrors;
393       old_stack = sw;
394     }
395 #endif
399 static void
400 print_max_error (const char *func_name, FLOAT allowed, int xfail)
402   int ok = 0;
404   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
405     {
406       ok = 1;
407     }
409   if (!ok)
410     print_function_ulps (func_name, max_error);
413   if (print_screen_max_error (ok, xfail))
414     {
415       printf ("Maximal error of `%s'\n", func_name);
416       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
417       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
418     }
420   update_stats (ok, xfail);
424 static void
425 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
426                          __complex__ int xfail)
428   int ok = 0;
430   if ((real_max_error == 0 && imag_max_error == 0)
431       || (real_max_error <= __real__ allowed
432           && imag_max_error <= __imag__ allowed
433           && !ignore_max_ulp))
434     {
435       ok = 1;
436     }
438   if (!ok)
439     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
442   if (print_screen_max_error (ok, xfail))
443     {
444       printf ("Maximal error of real part of: %s\n", func_name);
445       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
446               FUNC(ceil) (real_max_error));
447       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
448               FUNC(ceil) (__real__ allowed));
449       printf ("Maximal error of imaginary part of: %s\n", func_name);
450       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
451               FUNC(ceil) (imag_max_error));
452       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
453               FUNC(ceil) (__imag__ allowed));
454     }
456   update_stats (ok, xfail);
460 /* Test whether a given exception was raised.  */
461 static void
462 test_single_exception (const char *test_name,
463                        int exception,
464                        int exc_flag,
465                        int fe_flag,
466                        const char *flag_name)
468 #ifndef TEST_INLINE
469   int ok = 1;
470   if (exception & exc_flag)
471     {
472       if (fetestexcept (fe_flag))
473         {
474           if (print_screen (1, 0))
475             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
476         }
477       else
478         {
479           ok = 0;
480           if (print_screen (0, 0))
481             printf ("Failure: %s: Exception \"%s\" not set\n",
482                     test_name, flag_name);
483         }
484     }
485   else
486     {
487       if (fetestexcept (fe_flag))
488         {
489           ok = 0;
490           if (print_screen (0, 0))
491             printf ("Failure: %s: Exception \"%s\" set\n",
492                     test_name, flag_name);
493         }
494       else
495         {
496           if (print_screen (1, 0))
497             printf ("%s: Exception \"%s\" not set\n", test_name,
498                     flag_name);
499         }
500     }
501   if (!ok)
502     ++noErrors;
504 #endif
508 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
509    allowed but not required exceptions.
511 static void
512 test_exceptions (const char *test_name, int exception)
514   ++noExcTests;
515 #ifdef FE_DIVBYZERO
516   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
517     test_single_exception (test_name, exception,
518                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
519                            "Divide by zero");
520 #endif
521 #ifdef FE_INVALID
522   if ((exception & INVALID_EXCEPTION_OK) == 0)
523     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
524                          "Invalid operation");
525 #endif
526 #ifdef FE_OVERFLOW
527   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
528     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
529                            FE_OVERFLOW, "Overflow");
530 #endif
531 #ifdef FE_UNDERFLOW
532   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
533     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
534                            FE_UNDERFLOW, "Underflow");
535 #endif
536   feclearexcept (FE_ALL_EXCEPT);
540 static void
541 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
542                       FLOAT max_ulp, int xfail, int exceptions,
543                       FLOAT *curr_max_error)
545   int ok = 0;
546   int print_diff = 0;
547   FLOAT diff = 0;
548   FLOAT ulp = 0;
550   test_exceptions (test_name, exceptions);
551   if (issignaling (computed) && issignaling (expected))
552     ok = 1;
553   else if (issignaling (computed) || issignaling (expected))
554     ok = 0;
555   else if (isnan (computed) && isnan (expected))
556     ok = 1;
557   else if (isinf (computed) && isinf (expected))
558     {
559       /* Test for sign of infinities.  */
560       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
561           && signbit (computed) != signbit (expected))
562         {
563           ok = 0;
564           printf ("infinity has wrong sign.\n");
565         }
566       else
567         ok = 1;
568     }
569   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
570   else if (isinf (computed) || isnan (computed)
571            || isinf (expected) || isnan (expected))
572     ok = 0;
573   else
574     {
575       diff = FUNC(fabs) (computed - expected);
576       switch (fpclassify (expected))
577         {
578         case FP_ZERO:
579           /* ilogb (0) isn't allowed. */
580           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
581           break;
582         case FP_NORMAL:
583           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
584           break;
585         case FP_SUBNORMAL:
586           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
587              least normal value.  */
588           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
589           break;
590         default:
591           /* It should never happen. */
592           abort ();
593           break;
594         }
595       set_max_error (ulp, curr_max_error);
596       print_diff = 1;
597       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
598           && computed == 0.0 && expected == 0.0
599           && signbit(computed) != signbit (expected))
600         ok = 0;
601       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
602         ok = 1;
603       else
604         {
605           ok = 0;
606           print_ulps (test_name, ulp);
607         }
609     }
610   if (print_screen (ok, xfail))
611     {
612       if (!ok)
613         printf ("Failure: ");
614       printf ("Test: %s\n", test_name);
615       printf ("Result:\n");
616       printf (" is:         ");
617       print_float (computed);
618       printf (" should be:  ");
619       print_float (expected);
620       if (print_diff)
621         {
622           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
623                   "\n", diff, diff);
624           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
625           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
626         }
627     }
628   update_stats (ok, xfail);
630   fpstack_test (test_name);
634 static void
635 check_float (const char *test_name, FLOAT computed, FLOAT expected,
636              FLOAT max_ulp, int xfail, int exceptions)
638   check_float_internal (test_name, computed, expected, max_ulp, xfail,
639                         exceptions, &max_error);
643 static void
644 check_complex (const char *test_name, __complex__ FLOAT computed,
645                __complex__ FLOAT expected,
646                __complex__ FLOAT max_ulp, __complex__ int xfail,
647                int exception)
649   FLOAT part_comp, part_exp, part_max_ulp;
650   int part_xfail;
651   char *str;
653   if (asprintf (&str, "Real part of: %s", test_name) == -1)
654     abort ();
656   part_comp = __real__ computed;
657   part_exp = __real__ expected;
658   part_max_ulp = __real__ max_ulp;
659   part_xfail = __real__ xfail;
661   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
662                         exception, &real_max_error);
663   free (str);
665   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
666     abort ();
668   part_comp = __imag__ computed;
669   part_exp = __imag__ expected;
670   part_max_ulp = __imag__ max_ulp;
671   part_xfail = __imag__ xfail;
673   /* Don't check again for exceptions, just pass through the
674      zero/inf sign test.  */
675   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
676                         exception & IGNORE_ZERO_INF_SIGN,
677                         &imag_max_error);
678   free (str);
682 /* Check that computed and expected values are equal (int values).  */
683 static void
684 check_int (const char *test_name, int computed, int expected, int max_ulp,
685            int xfail, int exceptions)
687   int diff = computed - expected;
688   int ok = 0;
690   test_exceptions (test_name, exceptions);
691   noTests++;
692   if (abs (diff) <= max_ulp)
693     ok = 1;
695   if (!ok)
696     print_ulps (test_name, diff);
698   if (print_screen (ok, xfail))
699     {
700       if (!ok)
701         printf ("Failure: ");
702       printf ("Test: %s\n", test_name);
703       printf ("Result:\n");
704       printf (" is:         %d\n", computed);
705       printf (" should be:  %d\n", expected);
706     }
708   update_stats (ok, xfail);
709   fpstack_test (test_name);
713 /* Check that computed and expected values are equal (long int values).  */
714 static void
715 check_long (const char *test_name, long int computed, long int expected,
716             long int max_ulp, int xfail, int exceptions)
718   long int diff = computed - expected;
719   int ok = 0;
721   test_exceptions (test_name, exceptions);
722   noTests++;
723   if (labs (diff) <= max_ulp)
724     ok = 1;
726   if (!ok)
727     print_ulps (test_name, diff);
729   if (print_screen (ok, xfail))
730     {
731       if (!ok)
732         printf ("Failure: ");
733       printf ("Test: %s\n", test_name);
734       printf ("Result:\n");
735       printf (" is:         %ld\n", computed);
736       printf (" should be:  %ld\n", expected);
737     }
739   update_stats (ok, xfail);
740   fpstack_test (test_name);
744 /* Check that computed value is true/false.  */
745 static void
746 check_bool (const char *test_name, int computed, int expected,
747             long int max_ulp, int xfail, int exceptions)
749   int ok = 0;
751   test_exceptions (test_name, exceptions);
752   noTests++;
753   if ((computed == 0) == (expected == 0))
754     ok = 1;
756   if (print_screen (ok, xfail))
757     {
758       if (!ok)
759         printf ("Failure: ");
760       printf ("Test: %s\n", test_name);
761       printf ("Result:\n");
762       printf (" is:         %d\n", computed);
763       printf (" should be:  %d\n", expected);
764     }
766   update_stats (ok, xfail);
767   fpstack_test (test_name);
771 /* check that computed and expected values are equal (long int values) */
772 static void
773 check_longlong (const char *test_name, long long int computed,
774                 long long int expected,
775                 long long int max_ulp, int xfail,
776                 int exceptions)
778   long long int diff = computed - expected;
779   int ok = 0;
781   test_exceptions (test_name, exceptions);
782   noTests++;
783   if (llabs (diff) <= max_ulp)
784     ok = 1;
786   if (!ok)
787     print_ulps (test_name, diff);
789   if (print_screen (ok, xfail))
790     {
791       if (!ok)
792         printf ("Failure:");
793       printf ("Test: %s\n", test_name);
794       printf ("Result:\n");
795       printf (" is:         %lld\n", computed);
796       printf (" should be:  %lld\n", expected);
797     }
799   update_stats (ok, xfail);
800   fpstack_test (test_name);
805 /* This is to prevent messages from the SVID libm emulation.  */
807 matherr (struct exception *x __attribute__ ((unused)))
809   return 1;
813 /****************************************************************************
814   Tests for single functions of libm.
815   Please keep them alphabetically sorted!
816 ****************************************************************************/
818 static void
819 acos_test (void)
821   errno = 0;
822   FUNC(acos) (0);
823   if (errno == ENOSYS)
824     /* Function not implemented.  */
825     return;
827   START (acos);
829   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
830   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
831   TEST_f_f (acos, qnan_value, qnan_value);
833   /* |x| > 1: */
834   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
835   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
836   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
837   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
839   TEST_f_f (acos, 0, M_PI_2l);
840   TEST_f_f (acos, minus_zero, M_PI_2l);
841   TEST_f_f (acos, 1, 0);
842   TEST_f_f (acos, -1, M_PIl);
843   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
844   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
845   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
846   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
847   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
848   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
849   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
850 #ifndef TEST_FLOAT
851   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
852   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
853   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
854   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
855 #endif
856 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
857   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
858   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
859 #endif
860   END (acos);
864 static void
865 acos_test_tonearest (void)
867   int save_round_mode;
868   errno = 0;
869   FUNC(acos) (0);
870   if (errno == ENOSYS)
871     /* Function not implemented.  */
872     return;
874   START (acos_tonearest);
876   save_round_mode = fegetround ();
878   if (!fesetround (FE_TONEAREST))
879     {
880       TEST_f_f (acos, 0, M_PI_2l);
881       TEST_f_f (acos, minus_zero, M_PI_2l);
882       TEST_f_f (acos, 1, 0);
883       TEST_f_f (acos, -1, M_PIl);
884       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
885       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
886     }
888   fesetround (save_round_mode);
890   END (acos_tonearest);
894 static void
895 acos_test_towardzero (void)
897   int save_round_mode;
898   errno = 0;
899   FUNC(acos) (0);
900   if (errno == ENOSYS)
901     /* Function not implemented.  */
902     return;
904   START (acos_towardzero);
906   save_round_mode = fegetround ();
908   if (!fesetround (FE_TOWARDZERO))
909     {
910       TEST_f_f (acos, 0, M_PI_2l);
911       TEST_f_f (acos, minus_zero, M_PI_2l);
912       TEST_f_f (acos, 1, 0);
913       TEST_f_f (acos, -1, M_PIl);
914       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
915       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
916     }
918   fesetround (save_round_mode);
920   END (acos_towardzero);
924 static void
925 acos_test_downward (void)
927   int save_round_mode;
928   errno = 0;
929   FUNC(acos) (0);
930   if (errno == ENOSYS)
931     /* Function not implemented.  */
932     return;
934   START (acos_downward);
936   save_round_mode = fegetround ();
938   if (!fesetround (FE_DOWNWARD))
939     {
940       TEST_f_f (acos, 0, M_PI_2l);
941       TEST_f_f (acos, minus_zero, M_PI_2l);
942       TEST_f_f (acos, 1, 0);
943       TEST_f_f (acos, -1, M_PIl);
944       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
945       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
946     }
948   fesetround (save_round_mode);
950   END (acos_downward);
954 static void
955 acos_test_upward (void)
957   int save_round_mode;
958   errno = 0;
959   FUNC(acos) (0);
960   if (errno == ENOSYS)
961     /* Function not implemented.  */
962     return;
964   START (acos_upward);
966   save_round_mode = fegetround ();
968   if (!fesetround (FE_UPWARD))
969     {
970       TEST_f_f (acos, 0, M_PI_2l);
971       TEST_f_f (acos, minus_zero, M_PI_2l);
972       TEST_f_f (acos, 1, 0);
973       TEST_f_f (acos, -1, M_PIl);
974       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
975       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
976     }
978   fesetround (save_round_mode);
980   END (acos_upward);
983 static void
984 acosh_test (void)
986   errno = 0;
987   FUNC(acosh) (7);
988   if (errno == ENOSYS)
989     /* Function not implemented.  */
990     return;
992   START (acosh);
994   TEST_f_f (acosh, plus_infty, plus_infty);
995   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
996   TEST_f_f (acosh, qnan_value, qnan_value);
998   /* x < 1:  */
999   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1000   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1002   TEST_f_f (acosh, 1, 0);
1003   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1005   END (acosh);
1008 static void
1009 asin_test (void)
1011   errno = 0;
1012   FUNC(asin) (0);
1013   if (errno == ENOSYS)
1014     /* Function not implemented.  */
1015     return;
1017   START (asin);
1019   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1020   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1021   TEST_f_f (asin, qnan_value, qnan_value);
1023   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1024   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1025   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1026   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1027   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1029   TEST_f_f (asin, 0, 0);
1030   TEST_f_f (asin, minus_zero, minus_zero);
1031   TEST_f_f (asin, 0.5, M_PI_6l);
1032   TEST_f_f (asin, -0.5, -M_PI_6l);
1033   TEST_f_f (asin, 1.0, M_PI_2l);
1034   TEST_f_f (asin, -1.0, -M_PI_2l);
1035   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1036   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1037   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1038 #ifndef TEST_FLOAT
1039   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1040   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1041   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1042   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1043 #endif
1044 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1045   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1046   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1047 #endif
1049   END (asin);
1053 static void
1054 asin_test_tonearest (void)
1056   int save_round_mode;
1057   errno = 0;
1058   FUNC(asin) (0);
1059   if (errno == ENOSYS)
1060     /* Function not implemented.  */
1061     return;
1063   START (asin_tonearest);
1065   save_round_mode = fegetround ();
1067   if (!fesetround (FE_TONEAREST))
1068     {
1069       TEST_f_f (asin, 0, 0);
1070       TEST_f_f (asin, minus_zero, minus_zero);
1071       TEST_f_f (asin, 0.5, M_PI_6l);
1072       TEST_f_f (asin, -0.5, -M_PI_6l);
1073       TEST_f_f (asin, 1.0, M_PI_2l);
1074       TEST_f_f (asin, -1.0, -M_PI_2l);
1075     }
1077   fesetround (save_round_mode);
1079   END (asin_tonearest);
1083 static void
1084 asin_test_towardzero (void)
1086   int save_round_mode;
1087   errno = 0;
1088   FUNC(asin) (0);
1089   if (errno == ENOSYS)
1090     /* Function not implemented.  */
1091     return;
1093   START (asin_towardzero);
1095   save_round_mode = fegetround ();
1097   if (!fesetround (FE_TOWARDZERO))
1098     {
1099       TEST_f_f (asin, 0, 0);
1100       TEST_f_f (asin, minus_zero, minus_zero);
1101       TEST_f_f (asin, 0.5, M_PI_6l);
1102       TEST_f_f (asin, -0.5, -M_PI_6l);
1103       TEST_f_f (asin, 1.0, M_PI_2l);
1104       TEST_f_f (asin, -1.0, -M_PI_2l);
1105     }
1107   fesetround (save_round_mode);
1109   END (asin_towardzero);
1113 static void
1114 asin_test_downward (void)
1116   int save_round_mode;
1117   errno = 0;
1118   FUNC(asin) (0);
1119   if (errno == ENOSYS)
1120     /* Function not implemented.  */
1121     return;
1123   START (asin_downward);
1125   save_round_mode = fegetround ();
1127   if (!fesetround (FE_DOWNWARD))
1128     {
1129       TEST_f_f (asin, 0, 0);
1130       TEST_f_f (asin, minus_zero, minus_zero);
1131       TEST_f_f (asin, 0.5, M_PI_6l);
1132       TEST_f_f (asin, -0.5, -M_PI_6l);
1133       TEST_f_f (asin, 1.0, M_PI_2l);
1134       TEST_f_f (asin, -1.0, -M_PI_2l);
1135     }
1137   fesetround (save_round_mode);
1139   END (asin_downward);
1143 static void
1144 asin_test_upward (void)
1146   int save_round_mode;
1147   errno = 0;
1148   FUNC(asin) (0);
1149   if (errno == ENOSYS)
1150     /* Function not implemented.  */
1151     return;
1153   START (asin_upward);
1155   save_round_mode = fegetround ();
1157   if (!fesetround (FE_UPWARD))
1158     {
1159       TEST_f_f (asin, 0, 0);
1160       TEST_f_f (asin, minus_zero, minus_zero);
1161       TEST_f_f (asin, 0.5, M_PI_6l);
1162       TEST_f_f (asin, -0.5, -M_PI_6l);
1163       TEST_f_f (asin, 1.0, M_PI_2l);
1164       TEST_f_f (asin, -1.0, -M_PI_2l);
1165     }
1167   fesetround (save_round_mode);
1169   END (asin_upward);
1172 static void
1173 asinh_test (void)
1175   errno = 0;
1176   FUNC(asinh) (0.7L);
1177   if (errno == ENOSYS)
1178     /* Function not implemented.  */
1179     return;
1181   START (asinh);
1183   TEST_f_f (asinh, 0, 0);
1184   TEST_f_f (asinh, minus_zero, minus_zero);
1185 #ifndef TEST_INLINE
1186   TEST_f_f (asinh, plus_infty, plus_infty);
1187   TEST_f_f (asinh, minus_infty, minus_infty);
1188 #endif
1189   TEST_f_f (asinh, qnan_value, qnan_value);
1190   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1192   END (asinh);
1195 static void
1196 atan_test (void)
1198   errno = 0;
1199   FUNC(atan) (0);
1200   if (errno == ENOSYS)
1201     /* Function not implemented.  */
1202     return;
1204   START (atan);
1206   TEST_f_f (atan, 0, 0);
1207   TEST_f_f (atan, minus_zero, minus_zero);
1209   TEST_f_f (atan, plus_infty, M_PI_2l);
1210   TEST_f_f (atan, minus_infty, -M_PI_2l);
1211   TEST_f_f (atan, qnan_value, qnan_value);
1212   TEST_f_f (atan, max_value, M_PI_2l);
1213   TEST_f_f (atan, -max_value, -M_PI_2l);
1215   TEST_f_f (atan, 1, M_PI_4l);
1216   TEST_f_f (atan, -1, -M_PI_4l);
1218   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1220   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1221 #ifndef TEST_FLOAT
1222   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1223 #endif
1224 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1225   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1226 #endif
1228   END (atan);
1233 static void
1234 atanh_test (void)
1236   errno = 0;
1237   FUNC(atanh) (0.7L);
1238   if (errno == ENOSYS)
1239     /* Function not implemented.  */
1240     return;
1242   START (atanh);
1245   TEST_f_f (atanh, 0, 0);
1246   TEST_f_f (atanh, minus_zero, minus_zero);
1248   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1249   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1250   TEST_f_f (atanh, qnan_value, qnan_value);
1252   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1253   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1254   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1255   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1256   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1258   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1260   END (atanh);
1263 static void
1264 atan2_test (void)
1266   errno = 0;
1267   FUNC(atan2) (-0, 1);
1268   if (errno == ENOSYS)
1269     /* Function not implemented.  */
1270     return;
1272   START (atan2);
1274   /* atan2 (0,x) == 0 for x > 0.  */
1275   TEST_ff_f (atan2, 0, 1, 0);
1277   /* atan2 (-0,x) == -0 for x > 0.  */
1278   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1280   TEST_ff_f (atan2, 0, 0, 0);
1281   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1283   /* atan2 (+0,x) == +pi for x < 0.  */
1284   TEST_ff_f (atan2, 0, -1, M_PIl);
1286   /* atan2 (-0,x) == -pi for x < 0.  */
1287   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1289   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1290   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1292   /* atan2 (y,+0) == pi/2 for y > 0.  */
1293   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1295   /* atan2 (y,-0) == pi/2 for y > 0.  */
1296   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1298   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1299   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1301   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1302   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1304   /* atan2 (y,inf) == +0 for finite y > 0.  */
1305   TEST_ff_f (atan2, 1, plus_infty, 0);
1307   /* atan2 (y,inf) == -0 for finite y < 0.  */
1308   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1310   /* atan2(+inf, x) == pi/2 for finite x.  */
1311   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1313   /* atan2(-inf, x) == -pi/2 for finite x.  */
1314   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1316   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1317   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1319   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1320   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1322   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1323   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1324   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1325   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1326   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1328   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1330   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1331   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1333   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1334   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1335   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1336   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1337   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1338   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1340   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1341 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1342   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1343 #endif
1345   END (atan2);
1348 static void
1349 cabs_test (void)
1351   errno = 0;
1352   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1353   if (errno == ENOSYS)
1354     /* Function not implemented.  */
1355     return;
1357   START (cabs);
1359   /* cabs (x + iy) is specified as hypot (x,y) */
1361   /* cabs (+inf + i x) == +inf.  */
1362   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1363   /* cabs (-inf + i x) == +inf.  */
1364   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1366   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1367   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1369   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1371   /* cabs (x,y) == cabs (y,x).  */
1372   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1373   /* cabs (x,y) == cabs (-x,y).  */
1374   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1375   /* cabs (x,y) == cabs (-y,x).  */
1376   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1377   /* cabs (x,y) == cabs (-x,-y).  */
1378   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1379   /* cabs (x,y) == cabs (-y,-x).  */
1380   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1381   /* cabs (x,0) == fabs (x).  */
1382   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1383   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1384   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1385   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1386   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1387   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1389   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1391   END (cabs);
1395 static void
1396 cacos_test (void)
1398   errno = 0;
1399   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1400   if (errno == ENOSYS)
1401     /* Function not implemented.  */
1402     return;
1404   START (cacos);
1407   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1408   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1409   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1410   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1412   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1413   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1415   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1416   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1418   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1419   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1420   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1421   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1422   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1423   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1425   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1426   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1427   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1428   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1430   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1431   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1432   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1433   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1435   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1436   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1438   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1439   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1441   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1442   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1444   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1445   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1447   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1448   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1450   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1452   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1453   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1454   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1455   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1456   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1457   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1458   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1459   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1460   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1461   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1462   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1463   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1465   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1466   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1467   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1468   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1469   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1470   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1471   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1472   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1473   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1474   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1475   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1476   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1478   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1479   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1480   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1481   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1482   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1483   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1484   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1485   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1486 #ifndef TEST_FLOAT
1487   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1488   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1489   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1490   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1491   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1492   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1493   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1494   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1495 #endif
1496 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1497   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1498   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1499   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1500   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1501   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1502   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1503   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1504   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1505 #endif
1507   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1508 #ifndef TEST_FLOAT
1509   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1510 #endif
1511 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1512   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1513 #endif
1515   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1516   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1517   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1518   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1519   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1520   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1521   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1522   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1523 #ifndef TEST_FLOAT
1524   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1525   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1526   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1527   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1528   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1529   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1530   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1531   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1532 #endif
1533 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1534   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1535   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1536   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1537   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1538   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1539   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1540   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1541   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1542 #endif
1544   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1545   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1546   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1547   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1548   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1549   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1550   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1551   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1552   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1553   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1554   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1555   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1556   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1557   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1558   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1559   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1560   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1561   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1562   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1563   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1564   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1565   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1566   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1567   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1568   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1569   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1570   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1571   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1572   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1573   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1574   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1575   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1576   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1577   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1578   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1579   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1580   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1581   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1582   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1583   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1584   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1585   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1586   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1587   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1588   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1589   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1590   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1591   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1592 #ifndef TEST_FLOAT
1593   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1594   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1595   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1596   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1597   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1598   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1599   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1600   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1601   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1602   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1603   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1604   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1605   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1606   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1607   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1608   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1609 #endif
1610 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1611   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1612   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1613   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1614   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1615   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1616   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1617   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1618   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1619   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1620   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1621   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1622   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1623   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1624   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1625   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1626   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1627 #endif
1629   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L)
1630   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L)
1631   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L)
1632   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L)
1633   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L)
1634   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L)
1635   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L)
1636   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L)
1637   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L)
1638   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L)
1639   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L)
1640   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L)
1641   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L)
1642   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L)
1643   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L)
1644   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L)
1645   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L)
1646   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L)
1647   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L)
1648   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L)
1649   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L)
1650   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L)
1651   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L)
1652   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L)
1653 #ifndef TEST_FLOAT
1654   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L)
1655   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L)
1656   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L)
1657   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L)
1658   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L)
1659   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L)
1660   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L)
1661   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L)
1662   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1663   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1664   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1665   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1666   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM)
1667   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
1668   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM)
1669   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L)
1670   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1671   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1672   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1673   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1674   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L)
1675   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
1676   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L)
1677   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L)
1678 #endif
1679 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1680   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L)
1681   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L)
1682   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L)
1683   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L)
1684   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L)
1685   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L)
1686   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L)
1687   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L)
1688 # if LDBL_MIN_EXP <= -16381
1689   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1690   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1691   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1692   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1693   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L)
1694   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
1695   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L)
1696   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L)
1697 # endif
1698   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1699   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1700   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1701   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1702   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L)
1703   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
1704   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L)
1705   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L)
1706 #endif
1707 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1708   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L)
1709   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L)
1710   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L)
1711   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L)
1712   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L)
1713   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L)
1714   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L)
1715   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L)
1716   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1717   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1718   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1719   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1720   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L)
1721   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
1722   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L)
1723   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L)
1724   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1725   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1726   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1727   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1728   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L)
1729   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
1730   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L)
1731   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L)
1732 #endif
1733 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1734   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L)
1735   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L)
1736   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L)
1737   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L)
1738   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L)
1739   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L)
1740   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L)
1741   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L)
1742   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1743   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1744   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1745   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1746   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L)
1747   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
1748   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L)
1749   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L)
1750   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1751   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1752   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1753   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1754   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L)
1755   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
1756   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L)
1757   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L)
1758 #endif
1760   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1761   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1762   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1763   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1764   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1765   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1766   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1767   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1768   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1769   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1770   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1771   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1772   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1773   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1774   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1775   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1776   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1777   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1778   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1779   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1780   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1781   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1782   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1783   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1784   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1785   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1786   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1787   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1788   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1789   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1790   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1791   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1792   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1793   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1794   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1795   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1796   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1797   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1798   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1799   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1800   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1801   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1802   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
1803   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
1804   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
1805   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
1806   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
1807   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
1808   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1809   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1810   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1811   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1812   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1813   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1814   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1815   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1816   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
1817   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
1818   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
1819   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
1820   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1821   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1822   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1823   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1824 #ifndef TEST_FLOAT
1825   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
1826   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
1827   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
1828   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
1829   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
1830   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
1831   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
1832   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
1833   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1834   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1835   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1836   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1837   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1838   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1839   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1840   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1841   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1842   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1843   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1844   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1845   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
1846   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
1847   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
1848   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
1849 #endif
1850   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
1851   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
1852   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
1853   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
1854   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
1855   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
1856   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
1857   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
1858 #ifndef TEST_FLOAT
1859   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1860   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1861   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1862   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1863   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1864   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1865   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1866   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1867 #endif
1868   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
1869   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
1870   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
1871   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
1872 #ifndef TEST_FLOAT
1873   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1874   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1875   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1876   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1877   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1878   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1879   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1880   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1881 #endif
1882   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1883   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1884   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1885   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1886   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
1887   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
1888   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
1889   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
1890 #ifndef TEST_FLOAT
1891   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1892   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1893   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1894   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1895 #endif
1896 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1897   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
1898   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
1899   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
1900   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
1901   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
1902   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
1903   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
1904   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
1905 # if LDBL_MIN_EXP <= -16381
1906   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1907   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1908   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1909   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1910   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
1911   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
1912   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
1913   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
1914 # endif
1915   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1916   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1917   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1918   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1919   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
1920   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
1921   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
1922   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
1923 #endif
1924   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
1925   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
1926   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
1927   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
1928   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
1929   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
1930   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
1931   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
1932 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1933   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1934   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1935   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1936   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1937   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1938   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1939   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1940   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1941 #endif
1942   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
1943   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
1944   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
1945   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
1946 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1947   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1948   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1949   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1950   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1951   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1952   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1953   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1954   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1955 #endif
1956   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1957   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1958   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1959   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1960   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
1961   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
1962   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
1963   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
1964 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1965   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1966   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1967   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1968   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1969 #endif
1970 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1971   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
1972   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
1973   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
1974   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
1975   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
1976   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
1977   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
1978   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
1979   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1980   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1981   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1982   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1983   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1984   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1985   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1986   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1987   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1988   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1989   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1990   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1991   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
1992   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
1993   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
1994   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
1995 #endif
1996   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
1997   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
1998   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
1999   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2000   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2001   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2002   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2003   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2004   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2005   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2006   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2007   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2008 #ifndef TEST_FLOAT
2009   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2010   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2011   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2012   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2013   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2014   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2015   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2016   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2017 #endif
2018   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2019   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2020   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2021   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2022   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2023   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2024   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2025   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2026 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2027   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2028   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2029   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2030   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2031   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2032   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2033   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2034   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2035   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2036   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2037   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2038   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2039   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2040   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2041   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2042   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2043   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2044   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2045   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2046   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2047   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2048   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2049   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2050   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2051 #endif
2052   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2053   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2054   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2055   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2056   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2057   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2058   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2059   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2060   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2061   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2062   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2063   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2064 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2065   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2066   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2067   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2068   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2069   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2070   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2071   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2072   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2073 #endif
2074   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2075   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2076   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2077   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2078   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2079   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2080   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2081   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2083   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2084   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2086   END (cacos, complex);
2089 static void
2090 cacosh_test (void)
2092   errno = 0;
2093   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2094   if (errno == ENOSYS)
2095     /* Function not implemented.  */
2096     return;
2098   START (cacosh);
2101   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2102   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2103   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2104   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2105   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2106   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2108   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2109   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2111   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2112   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2113   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2114   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2115   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2116   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2118   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2119   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2120   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2121   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2123   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2124   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2125   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2126   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2128   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2129   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2131   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2132   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2134   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2135   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2137   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2138   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2140   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2141   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2143   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2145   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2146   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2147   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2148   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2149   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2150   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2151   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2152   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2153   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2154   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2155   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2156   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2158   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2159   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2160   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2161   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2162   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2163   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2164   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2165   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2166   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2167   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2168   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2169   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2171   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2172   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2173   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2174   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2175   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2176   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2177   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2178   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2179 #ifndef TEST_FLOAT
2180   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2181   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2182   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2183   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2184   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2185   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2186   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2187   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2188 #endif
2189 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2190   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2191   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2192   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2193   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2194   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2195   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2196   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2197   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2198 #endif
2199   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2200 #ifndef TEST_FLOAT
2201   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2202 #endif
2203 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2204   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2205 #endif
2206   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2207   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2208   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2209   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2210   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2211   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2212   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2213   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2214 #ifndef TEST_FLOAT
2215   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2216   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2217   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2218   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2219   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2220   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2221   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2222   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2223 #endif
2224 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2225   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2226   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2227   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2228   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2229   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2230   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2231   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2232   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2233 #endif
2234   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2235   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2236   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2237   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2238   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2239   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2240   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2241   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2242   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2243   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2244   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2245   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2246   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2247   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2248   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2249   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2250   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2251   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2252   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2253   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2254   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2255   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2256   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2257   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2258   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2259   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2260   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2261   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2262   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2263   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2264   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2265   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2266   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2267   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2268   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2269   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2270   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2271   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2272   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2273   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2274   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2275   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2276   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2277   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2278   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2279   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2280   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2281   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2282 #ifndef TEST_FLOAT
2283   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2284   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2285   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2286   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2287   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2288   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2289   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2290   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2291   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2292   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2293   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2294   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2295   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2296   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2297   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2298   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2299 #endif
2300 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2301   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2302   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2303   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2304   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2305   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2306   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2307   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2308   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2309   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2310   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2311   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2312   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2313   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2314   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2315   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2316   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2317 #endif
2318   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2319   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2320   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2321   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2322   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2323   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2324   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2325   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2326   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2327   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2328   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2329   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2330   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2331   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2332   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2333   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2334   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2335   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2336   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2337   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2338   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2339   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2340   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2341   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2342 #ifndef TEST_FLOAT
2343   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2344   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2345   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2346   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2347   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2348   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2349   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2350   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2351   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2352   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2353   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2354   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2355   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2356   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2357   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2358   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2359   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2360   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2361   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2362   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2363   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2364   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2365   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2366   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2367 #endif
2368 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2369   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2370   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2371   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2372   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2373   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2374   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2375   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2376   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2377 # if LDBL_MIN_EXP <= -16381
2378   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2379   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2380   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2381   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2382   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2383   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2384   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2385   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2386 # endif
2387   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2388   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2389   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2390   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2391   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2392   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2393   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2394   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2395 #endif
2396 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2397   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2398   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2399   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2400   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2401   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2402   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2403   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2404   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2405   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2406   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2407   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2408   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2409   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2410   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2411   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2412   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2413   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2414   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2415   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2416   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2417   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2418   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2419   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2420   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2421 #endif
2422 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2423   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2424   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2425   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2426   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2427   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2428   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2429   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2430   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2431   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2432   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2433   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2434   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2435   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2436   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2437   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2438   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2439   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2440   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2441   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2442   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2443   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2444   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2445   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2446   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2447 #endif
2448   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2449   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2450   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2451   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2452   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2453   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2454   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2455   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2456   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2457   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2458   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2459   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2460   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2461   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2462   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2463   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2464   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2465   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2466   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2467   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2468   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2469   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2470   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2471   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2472   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2473   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2474   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2475   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2476   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2477   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2478   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2479   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2480   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2481   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2482   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2483   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2484   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2485   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2486   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2487   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2488   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2489   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2490   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2491   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2492   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2493   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2494   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2495   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2496   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2497   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2498   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2499   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2500   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2501   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2502   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2503   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2504   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2505   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2506   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2507   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2508   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2509   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2510   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2511   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2512 #ifndef TEST_FLOAT
2513   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2514   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2515   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2516   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2517   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2518   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2519   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2520   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2521   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2522   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2523   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2524   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2525   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2526   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2527   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2528   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2529   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2530   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2531   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2532   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2533   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2534   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2535   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2536   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2537 #endif
2538   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2539   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2540   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2541   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2542   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2543   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2544   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2545   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2546 #ifndef TEST_FLOAT
2547   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2548   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2549   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2550   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2551   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2552   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2553   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2554   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2555 #endif
2556   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2557   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2558   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2559   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2560 #ifndef TEST_FLOAT
2561   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2562   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2563   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2564   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2565   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2566   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2567   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2568   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2569 #endif
2570   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2571   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2572   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2573   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2574   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2575   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2576   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2577   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2578 #ifndef TEST_FLOAT
2579   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2580   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2581   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2582   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2583 #endif
2584 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2585   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2586   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2587   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2588   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2589   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2590   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2591   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2592   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2593 # if LDBL_MIN_EXP <= -16381
2594   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2595   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2596   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2597   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2598   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2599   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2600   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2601   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2602 # endif
2603   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2605   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2606   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2607   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2608   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2609   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2610   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2611 #endif
2612   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2613   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2614   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2615   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2616   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2617   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2618   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2619   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2620 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2621   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2622   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2623   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2624   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2625   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2626   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2627   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2628   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2629 #endif
2630   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2631   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2632   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2633   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2634 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2635   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2636   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2637   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2638   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2639   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2640   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2641   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2642   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2643 #endif
2644   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2645   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2646   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2647   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2648   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2649   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2650   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2651   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2652 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2653   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2654   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2655   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2656   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2657 #endif
2658 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2659   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2660   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2661   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2662   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2663   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2664   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2665   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2666   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2667   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2668   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2669   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2670   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2671   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2672   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2673   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2674   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2675   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2676   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2677   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2678   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2679   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2680   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2681   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2682   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2683 #endif
2684   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2685   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2686   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2687   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2688   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2689   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2690   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2691   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2692   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2693   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2694   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2695   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2696 #ifndef TEST_FLOAT
2697   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2698   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2699   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2700   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2701   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2702   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2703   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2704   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2705 #endif
2706   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2707   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2708   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2709   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2710   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2711   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2712   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2713   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2714 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2715   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2716   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2717   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2718   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2719   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2720   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2721   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2722   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2723   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2724   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2725   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2726   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2727   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2728   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2729   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2730   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2731   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2732   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2733   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2734   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2735   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2736   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2737   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2738   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2739 #endif
2740   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2741   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2742   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2743   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2744   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2745   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2746   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2747   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2748   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2749   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2750   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2751   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2752 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2753   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2754   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2755   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2756   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2757   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2758   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2759   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2760   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2761 #endif
2762   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2763   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2764   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2765   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2766   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2767   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2768   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2769   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2771   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2772   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2774   END (cacosh, complex);
2778 static void
2779 carg_test (void)
2781   START (carg);
2783   /* carg (x + iy) is specified as atan2 (y, x) */
2785   /* carg (x + i 0) == 0 for x > 0.  */
2786   TEST_c_f (carg, 2.0, 0, 0);
2787   /* carg (x - i 0) == -0 for x > 0.  */
2788   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2790   TEST_c_f (carg, 0, 0, 0);
2791   TEST_c_f (carg, 0, minus_zero, minus_zero);
2793   /* carg (x + i 0) == +pi for x < 0.  */
2794   TEST_c_f (carg, -2.0, 0, M_PIl);
2796   /* carg (x - i 0) == -pi for x < 0.  */
2797   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2799   TEST_c_f (carg, minus_zero, 0, M_PIl);
2800   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2802   /* carg (+0 + i y) == pi/2 for y > 0.  */
2803   TEST_c_f (carg, 0, 2.0, M_PI_2l);
2805   /* carg (-0 + i y) == pi/2 for y > 0.  */
2806   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
2808   /* carg (+0 + i y) == -pi/2 for y < 0.  */
2809   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
2811   /* carg (-0 + i y) == -pi/2 for y < 0.  */
2812   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
2814   /* carg (inf + i y) == +0 for finite y > 0.  */
2815   TEST_c_f (carg, plus_infty, 2.0, 0);
2817   /* carg (inf + i y) == -0 for finite y < 0.  */
2818   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
2820   /* carg(x + i inf) == pi/2 for finite x.  */
2821   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
2823   /* carg(x - i inf) == -pi/2 for finite x.  */
2824   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
2826   /* carg (-inf + i y) == +pi for finite y > 0.  */
2827   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
2829   /* carg (-inf + i y) == -pi for finite y < 0.  */
2830   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
2832   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
2834   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
2836   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
2838   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
2840   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
2842   END (carg);
2845 static void
2846 casin_test (void)
2848   errno = 0;
2849   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
2850   if (errno == ENOSYS)
2851     /* Function not implemented.  */
2852     return;
2854   START (casin);
2856   TEST_c_c (casin, 0, 0, 0.0, 0.0);
2857   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
2858   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
2859   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
2861   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
2862   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
2863   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
2864   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
2866   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
2867   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
2868   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
2869   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
2870   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
2871   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
2872   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
2873   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
2875   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
2876   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
2877   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
2878   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
2880   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
2881   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
2882   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
2883   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
2885   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
2886   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
2888   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
2889   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
2891   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2892   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2894   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2895   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2897   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2898   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2900   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
2902   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
2903   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
2904   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
2905   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
2906   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
2907   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
2908   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
2909   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
2910   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
2911   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
2912   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
2913   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
2915   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
2916   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
2917   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
2918   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
2919   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
2920   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
2921   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
2922   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
2923   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
2924   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
2925   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
2926   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
2928   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2929   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2930   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2931   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2932   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2933   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2934   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2935   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2936 #ifndef TEST_FLOAT
2937   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2938   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2939   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2940   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2941   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2942   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2943   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2944   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2945 #endif
2946 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2947   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2948   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2949   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2950   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2951   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2952   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2953   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2954   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2955 #endif
2957   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
2958 #ifndef TEST_FLOAT
2959   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
2960 #endif
2961 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2962   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
2963 #endif
2965   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2966   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2967   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2968   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2969   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2970   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2971   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2972   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2973 #ifndef TEST_FLOAT
2974   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2975   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2976   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2977   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2978   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2979   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2980   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2981   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2982 #endif
2983 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2984   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2985   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2986   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2987   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2988   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2989   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2990   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2991   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2992 #endif
2994   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2995   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2996   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2997   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2998   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
2999   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3000   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3001   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3002   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3003   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3004   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3005   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3006   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3007   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3008   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3009   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3010   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3011   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3012   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3013   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3014   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3015   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3016   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3017   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3018   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3019   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3020   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3021   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3022   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3023   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3024   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3025   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3026   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3027   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3028   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3029   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3030   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3031   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3032   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3033   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3034   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3035   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3036   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3037   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3038   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3039   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3040   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3041   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3042 #ifndef TEST_FLOAT
3043   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3044   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3045   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3046   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3047   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3048   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3049   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3050   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3051   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3052   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3053   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3054   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3055   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3056   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3057   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3058   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3059 #endif
3060 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3061   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3062   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3063   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3064   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3065   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3066   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3067   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3068   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3069   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3070   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3071   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3072   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3073   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3074   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3075   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3076   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3077 #endif
3079   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
3080   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
3081   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
3082   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
3083   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
3084   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
3085   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
3086   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
3087   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3088   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3089   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3090   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3091   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
3092   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
3093   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
3094   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
3095   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L)
3096   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L)
3097   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L)
3098   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L)
3099   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
3100   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
3101   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
3102   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
3103 #ifndef TEST_FLOAT
3104   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
3105   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
3106   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
3107   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
3108   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
3109   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
3110   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
3111   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
3112   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3113   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3114   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3115   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3116   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3117   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3118   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3119   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3120   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L)
3121   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L)
3122   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L)
3123   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L)
3124   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3125   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3126   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3127   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3128 #endif
3129 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3130   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
3131   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
3132   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
3133   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
3134   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
3135   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
3136   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
3137   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
3138 # if LDBL_MIN_EXP <= -16381
3139   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3140   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3141   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3142   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3143   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3144   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3145   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3146   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3147 # endif
3148   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L)
3149   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L)
3150   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L)
3151   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L)
3152   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3153   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3154   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3155   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3156 #endif
3157 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3158   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
3159   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
3160   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
3161   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
3162   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
3163   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
3164   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
3165   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
3166   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3167   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3168   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3169   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3170   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3171   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3172   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3173   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3174   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L)
3175   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L)
3176   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L)
3177   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L)
3178   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3179   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3180   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3181   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3182 #endif
3183 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3184   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
3185   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
3186   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
3187   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
3188   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
3189   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
3190   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
3191   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
3192   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3193   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3194   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3195   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3196   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3197   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3198   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3199   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3200   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L)
3201   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L)
3202   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L)
3203   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L)
3204   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3205   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3206   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3207   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3208 #endif
3210   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3211   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3212   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3213   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3214   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3215   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3216   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3217   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3218   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3219   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3220   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3221   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3222   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3223   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3224   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3225   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3226   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3227   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3228   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3229   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3230   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3231   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3232   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3233   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3234   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3235   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3236   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3237   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3238   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3239   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3240   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3241   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3242   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3243   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3244   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3245   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3246   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3247   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3248   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3249   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3250   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3251   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3252   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3253   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3254   /* Bug 15319: underflow exception may be missing.  */
3255   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3256   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3257   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3258   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3259   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3260   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3261   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3262   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3263   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3264   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3265   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3266   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3267   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3268   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3269   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3270   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3271   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3272   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3273   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3274   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3275 #ifndef TEST_FLOAT
3276   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3277   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3278   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3279   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3280   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3281   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3282   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3283   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3284   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3285   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3286   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3287   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3288   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3289   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3290   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3291   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3292   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3293   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3294   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3295   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3296   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3297   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3298   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3299   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3300 #endif
3301   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3302   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3303   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3304   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3305   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3306   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3307   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3308   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3309 #ifndef TEST_FLOAT
3310   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3311   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3312   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3313   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3314   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3315   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3316   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3317   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3318 #endif
3319   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3320   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3321   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3322   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3323 #ifndef TEST_FLOAT
3324   /* Bug 15319: underflow exception may be missing.  */
3325   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3326   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3327   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3328   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3329   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3330   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3331   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3332   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3333 #endif
3334   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3335   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3336   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3337   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3338   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3339   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3340   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3341   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3342 #ifndef TEST_FLOAT
3343   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3344   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3345   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3346   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3347 #endif
3348 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3349   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3350   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3351   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3352   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3353   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3354   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3355   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3356   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3357 # if LDBL_MIN_EXP <= -16381
3358   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3359   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3360   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3361   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3362   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3363   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3364   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3365   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3366 # endif
3367   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3368   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3369   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3370   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3371   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3372   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3373   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3374   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3375 #endif
3376   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3377   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3378   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3379   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3380   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3381   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3382   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3383   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3384 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3385   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3386   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3387   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3388   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3389   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3390   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3391   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3392   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3393 #endif
3394   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3395   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3396   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3397   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3398 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3399   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3400   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3401   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3402   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3403   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3404   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3405   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3406   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3407 #endif
3408   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3409   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3410   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3411   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3412   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3413   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3414   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3415   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3416 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3417   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3418   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3419   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3420   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3421 #endif
3422 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3423   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3424   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3425   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3426   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3427   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3428   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3429   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3430   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3431   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3432   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3433   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3434   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3435   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3436   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3437   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3438   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3439   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3440   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3441   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3442   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3443   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3444   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3445   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3446   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3447 #endif
3448   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3449   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3450   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3451   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3452   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3453   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3454   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3455   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3456   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3457   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3458   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3459   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3460 #ifndef TEST_FLOAT
3461   /* Bug 15319: underflow exception may be missing.  */
3462   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3463   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3464   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3465   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3466   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3467   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3468   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3469   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3470 #endif
3471   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3472   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3473   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3474   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3475   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3476   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3477   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3478   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3479 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3480   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3481   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3482   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3483   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3484   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3485   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3486   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3487   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3488   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3489   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3490   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3491   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3492   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3493   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3494   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3495   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3496   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3497   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3498   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3499   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3500   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3501   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3502   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3503   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3504 #endif
3505   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3506   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3507   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3508   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3509   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3510   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3511   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3512   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3513   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3514   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3515   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3516   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3517 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3518   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3519   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3520   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3521   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3522   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3523   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3524   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3525   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3526 #endif
3527   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3528   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3529   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3530   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3531   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3532   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3533   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3534   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3536   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3537   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3539   END (casin, complex);
3543 static void
3544 casinh_test (void)
3546   errno = 0;
3547   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3548   if (errno == ENOSYS)
3549     /* Function not implemented.  */
3550     return;
3552   START (casinh);
3554   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3555   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3556   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3557   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3559   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3560   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3561   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3562   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3564   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3565   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3566   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3567   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3568   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3569   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3570   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3571   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3573   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3574   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3575   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3576   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3578   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3579   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3580   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3581   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3583   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3584   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3586   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3587   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3589   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3590   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3592   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3593   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3595   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3596   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3598   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3600   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3601   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3602   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3603   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3604   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3605   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3606   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3607   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3608   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3609   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3610   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3611   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3613   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3614   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3615   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3616   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3617   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3618   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3619   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3620   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3621   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3622   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3623   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3624   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3626   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3627   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3628   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3629   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3630   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3631   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3632   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3633   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3634 #ifndef TEST_FLOAT
3635   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3636   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3637   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3638   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3639   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3640   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3641   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3642   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3643 #endif
3644 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3645   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3646   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3647   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3648   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3649   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3650   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3651   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3652   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3653 #endif
3655   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3656 #ifndef TEST_FLOAT
3657   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3658 #endif
3659 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3660   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3661 #endif
3663   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3664   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3665   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3666   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3667   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3668   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3669   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3670   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3671 #ifndef TEST_FLOAT
3672   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3673   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3674   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3675   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3676   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3677   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3678   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3679   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3680 #endif
3681 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3682   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3683   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3684   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3685   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3686   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3687   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3688   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3689   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3690 #endif
3692   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3693   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3694   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3695   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3696   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3697   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3698   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3699   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3700   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3701   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3702   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3703   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3704   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3705   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3706   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3707   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3708   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3709   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3710   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3711   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3712   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3713   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3714   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3715   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3716   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3717   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3718   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3719   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3720   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3721   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3722   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3723   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3724   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3725   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3726   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3727   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3728   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3729   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3730   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3731   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3732   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3733   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3734   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3735   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3736   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3737   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3738   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3739   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3740 #ifndef TEST_FLOAT
3741   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3742   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3743   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3744   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3745   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3746   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3747   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3748   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3749   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3750   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3751   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3752   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3753   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3754   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3755   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3756   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3757 #endif
3758 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3759   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3760   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3761   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3762   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3763   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3764   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3765   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3766   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3767   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3768   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3769   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3770   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3771   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3772   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3773   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3774   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3775 #endif
3777   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3778   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3779   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3780   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3781   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3782   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3783   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3784   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3785   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3786   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3787   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3788   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3789   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3790   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3791   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3792   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3793   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3794   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3795   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3796   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3797   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L)
3798   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L)
3799   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L)
3800   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L)
3801 #ifndef TEST_FLOAT
3802   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3803   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3804   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3805   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3806   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3807   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3808   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3809   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3810   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3811   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3812   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3813   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3814   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3815   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3816   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3817   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3818   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3819   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3820   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3821   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3822   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L)
3823   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L)
3824   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L)
3825   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L)
3826 #endif
3827 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3828   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3829   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3830   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3831   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3832   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3833   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3834   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3835   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3836 # if LDBL_MIN_EXP <= -16381
3837   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3838   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3839   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3840   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3841   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3842   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3843   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3844   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3845 # endif
3846   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3847   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3848   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3849   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3850   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L)
3851   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L)
3852   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L)
3853   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L)
3854 #endif
3855 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3856   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3857   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3858   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3859   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3860   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3861   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3862   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3863   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3864   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3865   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3866   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3867   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3868   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3869   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3870   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3871   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3872   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3873   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3874   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3875   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3876   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L)
3877   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L)
3878   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L)
3879   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L)
3880 #endif
3881 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3882   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3883   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3884   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3885   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3886   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3887   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3888   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3889   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3890   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3891   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3892   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3893   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3894   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3895   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3896   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3897   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3898   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3899   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3900   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3901   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3902   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L)
3903   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L)
3904   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L)
3905   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L)
3906 #endif
3908   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3909   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3910   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3911   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3912   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3913   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3914   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3915   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3916   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3917   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3918   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3919   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3920   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3921   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3922   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3923   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3924   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
3925   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
3926   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
3927   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
3928   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
3929   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
3930   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
3931   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
3932   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3933   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3934   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3935   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3936   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3937   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3938   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3939   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3940   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3941   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3942   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3943   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3944   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3945   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3946   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3947   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3948   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3949   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3950   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3951   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3952   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3953   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3954   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3955   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3956   /* Bug 15319: underflow exception may be missing.  */
3957   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3958   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3959   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3960   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3961   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
3962   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
3963   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
3964   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
3965   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
3966   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
3967   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
3968   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
3969   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3970   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3971   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3972   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3973 #ifndef TEST_FLOAT
3974   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3975   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3976   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3977   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3978   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3979   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3980   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3981   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3982   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3983   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3984   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3985   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3986   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3987   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3988   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3989   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3990   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
3991   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
3992   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
3993   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
3994   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
3995   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
3996   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
3997   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
3998 #endif
3999   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4000   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4001   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4002   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4003   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4004   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4005   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4006   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4007 #ifndef TEST_FLOAT
4008   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4009   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4010   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4011   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4012   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4013   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4014   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4015   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4016 #endif
4017   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4018   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4019   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4020   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4021 #ifndef TEST_FLOAT
4022   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4023   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4024   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4025   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4026   /* Bug 15319: underflow exception may be missing.  */
4027   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4028   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4029   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4030   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4031 #endif
4032   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4033   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4034   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4035   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4036   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4037   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4038   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4039   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4040 #ifndef TEST_FLOAT
4041   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4042   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4043   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4044   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4045 #endif
4046 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4047   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4048   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4049   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4050   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4051   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4052   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4053   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4054   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4055 # if LDBL_MIN_EXP <= -16381
4056   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4057   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4058   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4059   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4060   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4061   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4062   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4063   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4064 # endif
4065   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4066   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4067   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4068   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4069   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4070   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4071   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4072   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4073 #endif
4074   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4075   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4076   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4077   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4078   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4079   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4080   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4081   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4082 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4083   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4084   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4085   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4086   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4087   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4088   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4089   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4090   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4091 #endif
4092   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4093   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4094   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4095   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4096 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4097   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4098   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4099   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4100   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4101   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4102   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4103   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4104   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4105 #endif
4106   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4107   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4108   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4109   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4110   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4111   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4112   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4113   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4114 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4115   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4116   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4117   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4118   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4119 #endif
4120 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4121   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4122   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4123   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4124   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4125   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4126   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4127   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4128   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4129   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4130   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4131   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4132   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4133   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4134   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4135   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4136   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4137   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4138   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4139   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4140   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4141   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4142   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4143   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4144   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4145 #endif
4146   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4147   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4148   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4149   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4150   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4151   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4152   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4153   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4154   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4155   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4156   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4157   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4158 #ifndef TEST_FLOAT
4159   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4160   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4161   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4162   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4163   /* Bug 15319: underflow exception may be missing.  */
4164   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4165   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4166   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4167   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4168 #endif
4169   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4170   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4171   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4172   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4173   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4174   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4175   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4176   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4177 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4178   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4179   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4180   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4181   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4182   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4183   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4184   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4185   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4186   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4187   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4188   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4189   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4190   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4191   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4192   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4193   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4194   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4195   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4196   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4197   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4198   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4199   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4200   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4201   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4202 #endif
4203   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4204   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4205   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4206   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4207   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4208   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4209   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4210   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4211   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4212   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4213   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4214   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4215 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4216   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4217   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4218   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4219   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4220   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4221   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4222   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4223   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4224 #endif
4225   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4226   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4227   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4228   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4229   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4230   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4231   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4232   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4234   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4235   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4237   END (casinh, complex);
4241 static void
4242 catan_test (void)
4244   errno = 0;
4245   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4246   if (errno == ENOSYS)
4247     /* Function not implemented.  */
4248     return;
4250   START (catan);
4252   TEST_c_c (catan, 0, 0, 0, 0);
4253   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4254   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4255   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4257   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4258   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4259   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4260   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4263   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4264   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4265   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4266   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4267   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4268   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4269   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4270   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4272   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4273   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4274   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4275   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4277   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4278   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4279   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4280   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4282   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4283   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4285   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4286   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4288   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4289   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4291   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4292   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4294   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4295   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4297   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4298   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4300   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4302   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4303   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4305   END (catan, complex);
4308 static void
4309 catanh_test (void)
4311   errno = 0;
4312   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4313   if (errno == ENOSYS)
4314     /* Function not implemented.  */
4315     return;
4317   START (catanh);
4319   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4320   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4321   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4322   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4324   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4325   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4326   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4327   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4329   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4330   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4331   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4332   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4333   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4334   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4335   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4336   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4338   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4339   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4340   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4341   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4343   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4344   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4345   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4346   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4348   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
4349   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
4351   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
4352   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
4354   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
4355   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
4357   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
4358   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
4360   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4361   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4363   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4364   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4366   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
4368   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
4369   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
4371   END (catanh, complex);
4374 static void
4375 cbrt_test (void)
4377   errno = 0;
4378   FUNC(cbrt) (8);
4379   if (errno == ENOSYS)
4380     /* Function not implemented.  */
4381     return;
4383   START (cbrt);
4385   TEST_f_f (cbrt, 0.0, 0.0);
4386   TEST_f_f (cbrt, minus_zero, minus_zero);
4388   TEST_f_f (cbrt, plus_infty, plus_infty);
4389   TEST_f_f (cbrt, minus_infty, minus_infty);
4390   TEST_f_f (cbrt, qnan_value, qnan_value);
4392   TEST_f_f (cbrt, -0.001L, -0.1L);
4393   TEST_f_f (cbrt, 8, 2);
4394   TEST_f_f (cbrt, -27.0, -3.0);
4395   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
4396   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
4398   END (cbrt);
4402 static void
4403 ccos_test (void)
4405   errno = 0;
4406   FUNC(ccos) (BUILD_COMPLEX (0, 0));
4407   if (errno == ENOSYS)
4408     /* Function not implemented.  */
4409     return;
4411   START (ccos);
4413   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
4414   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
4415   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
4416   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
4418   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4419   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4420   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4421   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4423   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
4424   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
4425   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
4426   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
4428   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4429   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4430   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4431   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4433   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
4434   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
4435   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
4436   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
4438   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4439   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4440   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4441   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4443   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4444   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4446   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
4447   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
4449   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4450   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4452   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4453   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4455   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4456   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4458   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4459   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4461   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
4463   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
4464   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
4466   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4467   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4468   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4469   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4471 #ifndef TEST_FLOAT
4472   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4473   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4474   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4475   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4476 #endif
4478 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4479   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4480   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4481   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4482   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4483 #endif
4485 #ifdef TEST_FLOAT
4486   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
4487 #endif
4489 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4490   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
4491 #endif
4493 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4494   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
4495 #endif
4497   END (ccos, complex);
4501 static void
4502 ccosh_test (void)
4504   errno = 0;
4505   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
4506   if (errno == ENOSYS)
4507     /* Function not implemented.  */
4508     return;
4510   START (ccosh);
4512   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
4513   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
4514   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
4515   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
4517   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4518   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4519   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4520   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4522   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
4523   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
4524   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
4525   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
4527   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4528   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4529   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4530   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4532   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
4533   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
4534   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
4535   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
4537   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4538   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4539   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4540   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4542   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4543   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4545   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
4546   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
4548   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4549   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4551   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4552   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4554   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4555   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4557   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4558   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4560   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
4562   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
4564   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
4566   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4567   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4568   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4569   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4571 #ifndef TEST_FLOAT
4572   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4573   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4574   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4575   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4576 #endif
4578 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4579   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4580   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4581   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4582   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4583 #endif
4585 #ifdef TEST_FLOAT
4586   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
4587 #endif
4589 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4590   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
4591 #endif
4593 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4594   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
4595 #endif
4597   END (ccosh, complex);
4601 static void
4602 ceil_test (void)
4604   START (ceil);
4606   TEST_f_f (ceil, 0.0, 0.0);
4607   TEST_f_f (ceil, minus_zero, minus_zero);
4608   TEST_f_f (ceil, plus_infty, plus_infty);
4609   TEST_f_f (ceil, minus_infty, minus_infty);
4610   TEST_f_f (ceil, qnan_value, qnan_value);
4612   TEST_f_f (ceil, M_PIl, 4.0);
4613   TEST_f_f (ceil, -M_PIl, -3.0);
4614   TEST_f_f (ceil, 0.1, 1.0);
4615   TEST_f_f (ceil, 0.25, 1.0);
4616   TEST_f_f (ceil, 0.625, 1.0);
4617   TEST_f_f (ceil, -0.1, minus_zero);
4618   TEST_f_f (ceil, -0.25, minus_zero);
4619   TEST_f_f (ceil, -0.625, minus_zero);
4621 #ifdef TEST_LDOUBLE
4622   /* The result can only be represented in long double.  */
4623   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
4624   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
4625   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
4626   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
4627   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
4629   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
4630   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
4631   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
4632   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
4633   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
4635 # if LDBL_MANT_DIG > 100
4636   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
4637   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
4638   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
4639   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
4640   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
4641   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
4642 # endif
4644   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
4645   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
4646   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
4647   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
4648   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
4650   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
4651   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
4652   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
4653   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
4654   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
4656 # if LDBL_MANT_DIG > 100
4657   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
4658   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
4659   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
4660   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
4661   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
4662   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
4664   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
4665   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
4666   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
4667   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
4668   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
4669   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
4670 # endif
4672   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
4673   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
4674   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
4675   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
4676   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
4678   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
4679   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
4680   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
4681   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
4682   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
4684   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
4685   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
4686   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
4687   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
4688   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
4689 #endif
4691   END (ceil);
4695 static void
4696 cexp_test (void)
4698   errno = 0;
4699   FUNC(cexp) (BUILD_COMPLEX (0, 0));
4700   if (errno == ENOSYS)
4701     /* Function not implemented.  */
4702     return;
4704   START (cexp);
4706   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
4707   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
4708   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
4709   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
4711   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
4712   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
4714   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
4715   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
4717   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4718   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4720   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4721   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4723   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4724   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4726   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4727   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4729   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
4730   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
4731   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
4732   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
4734   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4735   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4737   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
4738   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
4740   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
4742   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
4744   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4745   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4747   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4748   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4749   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4750   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
4752   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
4753   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
4755   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
4756   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
4757   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
4759 #ifndef TEST_FLOAT
4760   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
4761   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
4762   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
4763 #endif
4765 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4766   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
4767   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
4768 #endif
4770   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
4771   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
4773 #ifndef TEST_FLOAT
4774   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
4775   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
4776 #endif
4778 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4779   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
4780   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
4781 #endif
4783 #ifdef TEST_FLOAT
4784   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
4785 #endif
4787 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4788   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
4789 #endif
4791 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4792   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
4793 #endif
4795   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
4796   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
4797   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
4799   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
4800   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4802   END (cexp, complex);
4806 static void
4807 cimag_test (void)
4809   START (cimag);
4810   TEST_c_f (cimag, 1.0, 0.0, 0.0);
4811   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
4812   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
4813   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
4814   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
4815   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
4816   TEST_c_f (cimag, 2.0, 3.0, 3.0);
4818   END (cimag);
4821 static void
4822 clog_test (void)
4824   errno = 0;
4825   FUNC(clog) (BUILD_COMPLEX (-2, -3));
4826   if (errno == ENOSYS)
4827     /* Function not implemented.  */
4828     return;
4830   START (clog);
4832   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4833   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4835   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
4836   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4838   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
4839   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
4841   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
4842   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
4844   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
4845   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
4846   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
4847   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
4848   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
4849   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
4850   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
4851   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
4853   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
4854   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
4855   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
4856   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
4858   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
4859   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
4860   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
4861   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
4863   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
4864   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
4866   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
4867   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
4869   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4870   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4871   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4872   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4874   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4875   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4876   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4877   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4879   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
4881   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
4882   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
4884   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
4885   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4886   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
4887   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
4889 #ifndef TEST_FLOAT
4890   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
4891   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
4892   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
4893   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
4894 #endif
4896 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4897   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
4898   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
4899   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
4900 #endif
4902   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4903   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4904   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4905   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4906   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
4907   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
4908 #ifdef TEST_FLOAT
4909   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
4910   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
4911 #endif
4913 #ifndef TEST_FLOAT
4914   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4915   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4916   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
4917   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
4918   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
4919   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
4920 #endif
4921 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4922   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
4923   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
4924 #endif
4926 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4927   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4928   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4929   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4930   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4931   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
4932   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
4933   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
4934   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
4935 # if LDBL_MANT_DIG >= 113
4936   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4937   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4938   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4939   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4940   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
4941   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
4942   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
4943   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
4944 # endif
4945 #endif
4947   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
4948   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
4949   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
4950   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
4951   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
4952   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
4953   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
4954   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4955   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
4956 #ifndef TEST_FLOAT
4957   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4958   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4959   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4960 #endif
4961 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4962   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
4963   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4964   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4965 #endif
4967   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
4968   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
4969 #ifndef TEST_FLOAT
4970   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
4971   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
4972 #endif
4973 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4974   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
4975   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4976 #endif
4978   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
4979 #ifndef TEST_FLOAT
4980   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4981 #endif
4982 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4983   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
4984 #endif
4986   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
4987   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
4988   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
4989   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
4990   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
4991   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
4992   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
4993   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
4994   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
4995   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
4996 #ifndef TEST_FLOAT
4997   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
4998   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
4999   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
5000   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
5001   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
5002   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
5003   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
5004   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
5005   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
5006   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
5007   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
5008   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
5009 #endif
5010 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5011   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
5012   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
5013   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
5014   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
5015   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
5016 #endif
5017 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5018   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
5019   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
5020   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
5021   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
5022   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
5023   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
5024   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
5025   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
5026   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
5027   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
5028 #endif
5029 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5030   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
5031   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
5032   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
5033   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
5034   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
5035   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
5036 #endif
5038   END (clog, complex);
5042 static void
5043 clog10_test (void)
5045   errno = 0;
5046   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
5047   if (errno == ENOSYS)
5048     /* Function not implemented.  */
5049     return;
5051   START (clog10);
5053   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5054   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5056   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5057   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5059   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
5061   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
5062   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
5064   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
5065   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
5066   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
5067   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
5068   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
5069   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
5070   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
5071   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
5073   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
5074   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
5075   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
5076   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
5078   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
5079   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
5080   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
5081   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
5083   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
5084   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
5086   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
5087   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
5089   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5090   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5091   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5092   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5094   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5095   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5096   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5097   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5099   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
5101   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
5102   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
5104   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
5105   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5106   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
5107   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
5109 #ifndef TEST_FLOAT
5110   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
5111   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
5112   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
5113   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
5114 #endif
5116 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5117   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
5118   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
5119   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
5120 #endif
5122   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
5123   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
5124   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
5125   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
5126   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
5127   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
5128 #ifdef TEST_FLOAT
5129   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
5130   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
5131 #endif
5133 #ifndef TEST_FLOAT
5134   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
5135   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
5136   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
5137   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
5138   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
5139   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
5140 #endif
5141 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5142   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
5143   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
5144 #endif
5146 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5147   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5148   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5149   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5150   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5151   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
5152   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
5153   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
5154   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
5155 # if LDBL_MANT_DIG >= 113
5156   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5157   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5158   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5159   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5160   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
5161   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
5162   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
5163   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
5164 # endif
5165 #endif
5167   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
5168   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
5169   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
5170   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
5171   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
5172   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
5173   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
5174   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5175   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5176 #ifndef TEST_FLOAT
5177   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5178   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5179   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5180 #endif
5181 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5182   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
5183   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
5184   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
5185 #endif
5187   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
5188   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
5189 #ifndef TEST_FLOAT
5190   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
5191   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
5192 #endif
5193 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5194   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
5195   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5196 #endif
5198   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
5199 #ifndef TEST_FLOAT
5200   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5201 #endif
5202 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5203   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
5204 #endif
5206   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
5207   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
5208   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
5209   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
5210   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
5211   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
5212   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
5213   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
5214   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
5215   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
5216 #ifndef TEST_FLOAT
5217   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
5218   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
5219   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
5220   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
5221   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
5222   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
5223   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
5224   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
5225   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
5226   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
5227   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
5228   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
5229 #endif
5230 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5231   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
5232   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
5233   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
5234   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
5235   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
5236 #endif
5237 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5238   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
5239   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
5240   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
5241   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
5242   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
5243   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
5244   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
5245   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
5246   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
5247   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
5248 #endif
5249 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5250   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
5251   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
5252   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
5253   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
5254   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
5255   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
5256 #endif
5258   END (clog10, complex);
5262 static void
5263 conj_test (void)
5265   START (conj);
5266   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
5267   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
5268   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
5269   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
5270   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
5271   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
5272   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
5274   END (conj, complex);
5278 static void
5279 copysign_test (void)
5281   START (copysign);
5283   TEST_ff_f (copysign, 0, 4, 0);
5284   TEST_ff_f (copysign, 0, -4, minus_zero);
5285   TEST_ff_f (copysign, minus_zero, 4, 0);
5286   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
5288   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
5289   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
5290   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
5291   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
5293   TEST_ff_f (copysign, 0, plus_infty, 0);
5294   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
5295   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
5296   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
5298   /* XXX More correctly we would have to check the sign of the NaN.  */
5299   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
5300   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
5301   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
5302   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
5304   END (copysign);
5308 static void
5309 cos_test (void)
5311   errno = 0;
5312   FUNC(cos) (0);
5313   if (errno == ENOSYS)
5314     /* Function not implemented.  */
5315     return;
5317   START (cos);
5319   TEST_f_f (cos, 0, 1);
5320   TEST_f_f (cos, minus_zero, 1);
5321   errno = 0;
5322   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION);
5323   check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
5324   errno = 0;
5325   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION);
5326   check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
5327   errno = 0;
5328   TEST_f_f (cos, qnan_value, qnan_value);
5329   check_int ("errno for cos(qNaN) unchanged", errno, 0, 0, 0, 0);
5331   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
5332   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
5334   /* The value of M_PI_2l is never exactly PI/2, and therefore the
5335      answer is never exactly zero. The answer is equal to the error
5336      in rounding PI/2 for the type used.  Thus the answer is unique
5337      to each type.  */
5338 #ifdef TEST_FLOAT
5339   /* 32-bit float.  */
5340   TEST_f_f (cos, M_PI_2l, -4.371139000186241438857289400265215e-8L);
5341 #endif
5342 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
5343   /* 64-bit double or 64-bit long double.  */
5344   TEST_f_f (cos, M_PI_2l, 6.123233995736765886130329661375001e-17L);
5345 #endif
5346 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
5347   /* 96-bit long double.  */
5348   TEST_f_f (cos, M_PI_2l, -2.50827880633416601177866354016537e-20L);
5349 #endif
5350 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
5351   /* 128-bit IBM long double.  */
5352   TEST_f_f (cos, M_PI_2l, 1.082856673921913968223746169860580e-32L);
5353 #endif
5354 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
5355   /* 128-bit long double.  */
5356   TEST_f_f (cos, M_PI_2l, 4.335905065061890512398522013021675e-35L);
5357 #endif
5359   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
5361   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
5362   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
5364 #ifdef TEST_DOUBLE
5365   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
5366 #endif
5368   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
5370 #ifndef TEST_FLOAT
5371   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
5372   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
5373 #endif
5375 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5376   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
5377 #endif
5379   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
5380   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
5381   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
5382   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
5383   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
5384   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
5386   END (cos);
5390 static void
5391 cos_test_tonearest (void)
5393   int save_round_mode;
5394   errno = 0;
5395   FUNC(cos) (0);
5396   if (errno == ENOSYS)
5397     /* Function not implemented.  */
5398     return;
5400   START (cos_tonearest);
5402   save_round_mode = fegetround ();
5404   if (!fesetround (FE_TONEAREST))
5405     {
5406       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5407       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5408       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5409       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5410       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5411       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5412       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5413       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5414       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5415       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5416     }
5418   fesetround (save_round_mode);
5420   END (cos_tonearest);
5424 static void
5425 cos_test_towardzero (void)
5427   int save_round_mode;
5428   errno = 0;
5429   FUNC(cos) (0);
5430   if (errno == ENOSYS)
5431     /* Function not implemented.  */
5432     return;
5434   START (cos_towardzero);
5436   save_round_mode = fegetround ();
5438   if (!fesetround (FE_TOWARDZERO))
5439     {
5440       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5441       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5442       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5443       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5444       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5445       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5446       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5447       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5448       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5449       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5450     }
5452   fesetround (save_round_mode);
5454   END (cos_towardzero);
5458 static void
5459 cos_test_downward (void)
5461   int save_round_mode;
5462   errno = 0;
5463   FUNC(cos) (0);
5464   if (errno == ENOSYS)
5465     /* Function not implemented.  */
5466     return;
5468   START (cos_downward);
5470   save_round_mode = fegetround ();
5472   if (!fesetround (FE_DOWNWARD))
5473     {
5474       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5475       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5476       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5477       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5478       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5479       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5480       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5481       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5482       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5483       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5484     }
5486   fesetround (save_round_mode);
5488   END (cos_downward);
5492 static void
5493 cos_test_upward (void)
5495   int save_round_mode;
5496   errno = 0;
5497   FUNC(cos) (0);
5498   if (errno == ENOSYS)
5499     /* Function not implemented.  */
5500     return;
5502   START (cos_upward);
5504   save_round_mode = fegetround ();
5506   if (!fesetround (FE_UPWARD))
5507     {
5508       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5509       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5510       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5511       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5512       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5513       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5514       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5515       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5516       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5517       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5518     }
5520   fesetround (save_round_mode);
5522   END (cos_upward);
5526 static void
5527 cosh_test (void)
5529   errno = 0;
5530   FUNC(cosh) (0.7L);
5531   if (errno == ENOSYS)
5532     /* Function not implemented.  */
5533     return;
5535   START (cosh);
5536   TEST_f_f (cosh, 0, 1);
5537   TEST_f_f (cosh, minus_zero, 1);
5539 #ifndef TEST_INLINE
5540   TEST_f_f (cosh, plus_infty, plus_infty);
5541   TEST_f_f (cosh, minus_infty, plus_infty);
5542 #endif
5543   TEST_f_f (cosh, qnan_value, qnan_value);
5545   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
5547 #ifndef TEST_FLOAT
5548   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
5549   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
5550 #endif
5552   END (cosh);
5556 static void
5557 cosh_test_tonearest (void)
5559   int save_round_mode;
5560   errno = 0;
5561   FUNC(cosh) (0);
5562   if (errno == ENOSYS)
5563     /* Function not implemented.  */
5564     return;
5566   START (cosh_tonearest);
5568   save_round_mode = fegetround ();
5570   if (!fesetround (FE_TONEAREST))
5571     {
5572       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5573       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5574       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5575     }
5577   fesetround (save_round_mode);
5579   END (cosh_tonearest);
5583 static void
5584 cosh_test_towardzero (void)
5586   int save_round_mode;
5587   errno = 0;
5588   FUNC(cosh) (0);
5589   if (errno == ENOSYS)
5590     /* Function not implemented.  */
5591     return;
5593   START (cosh_towardzero);
5595   save_round_mode = fegetround ();
5597   if (!fesetround (FE_TOWARDZERO))
5598     {
5599       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5600       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5601       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5602     }
5604   fesetround (save_round_mode);
5606   END (cosh_towardzero);
5610 static void
5611 cosh_test_downward (void)
5613   int save_round_mode;
5614   errno = 0;
5615   FUNC(cosh) (0);
5616   if (errno == ENOSYS)
5617     /* Function not implemented.  */
5618     return;
5620   START (cosh_downward);
5622   save_round_mode = fegetround ();
5624   if (!fesetround (FE_DOWNWARD))
5625     {
5626       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5627       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5628       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5629     }
5631   fesetround (save_round_mode);
5633   END (cosh_downward);
5637 static void
5638 cosh_test_upward (void)
5640   int save_round_mode;
5641   errno = 0;
5642   FUNC(cosh) (0);
5643   if (errno == ENOSYS)
5644     /* Function not implemented.  */
5645     return;
5647   START (cosh_upward);
5649   save_round_mode = fegetround ();
5651   if (!fesetround (FE_UPWARD))
5652     {
5653       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5654       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5655       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5656     }
5658   fesetround (save_round_mode);
5660   END (cosh_upward);
5664 static void
5665 cpow_test (void)
5667   errno = 0;
5668   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
5669   if (errno == ENOSYS)
5670     /* Function not implemented.  */
5671     return;
5673   START (cpow);
5675   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
5676   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
5678   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
5679   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
5681   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
5683   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
5684   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
5685   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
5686   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
5688   END (cpow, complex);
5692 static void
5693 cproj_test (void)
5695   START (cproj);
5696   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
5697   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
5698   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
5699   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
5701   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
5703   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
5704   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
5705   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
5706   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
5708   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
5709   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
5711   END (cproj, complex);
5715 static void
5716 creal_test (void)
5718   START (creal);
5719   TEST_c_f (creal, 0.0, 1.0, 0.0);
5720   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
5721   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
5722   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
5723   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
5724   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
5725   TEST_c_f (creal, 2.0, 3.0, 2.0);
5727   END (creal);
5730 static void
5731 csin_test (void)
5733   errno = 0;
5734   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
5735   if (errno == ENOSYS)
5736     /* Function not implemented.  */
5737     return;
5739   START (csin);
5741   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
5742   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
5743   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
5744   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
5746   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
5747   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
5748   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
5749   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
5751   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5752   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5753   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5754   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5756   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5757   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5758   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5759   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5761   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5762   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5763   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5764   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
5766   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
5767   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
5768   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
5769   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
5771   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5772   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5774   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5775   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5777   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5778   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5780   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
5781   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
5783   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5784   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5786   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5787   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5789   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
5791   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
5792   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
5794   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5795   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5796   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5797   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5799 #ifndef TEST_FLOAT
5800   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5801   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5802   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5803   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5804 #endif
5806 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5807   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5808   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5809   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5810   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5811 #endif
5813 #ifdef TEST_FLOAT
5814   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
5815 #endif
5817 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5818   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
5819 #endif
5821 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5822   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
5823 #endif
5825   END (csin, complex);
5829 static void
5830 csinh_test (void)
5832   errno = 0;
5833   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
5834   if (errno == ENOSYS)
5835     /* Function not implemented.  */
5836     return;
5838   START (csinh);
5840   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
5841   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
5842   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
5843   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
5845   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5846   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5847   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5848   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5850   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
5851   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
5852   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
5853   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
5855   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5856   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5857   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5858   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5860   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
5861   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
5862   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
5863   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
5865   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5866   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5867   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5868   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5870   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5871   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5873   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5874   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5876   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5877   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5879   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
5880   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
5882   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5883   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5885   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5886   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5888   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
5890   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
5891   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
5893   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5894   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5895   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5896   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5898 #ifndef TEST_FLOAT
5899   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5900   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5901   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5902   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5903 #endif
5905 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5906   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5907   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5908   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5909   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5910 #endif
5912 #ifdef TEST_FLOAT
5913   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5914 #endif
5916 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5917   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5918 #endif
5920 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5921   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5922 #endif
5924   END (csinh, complex);
5928 static void
5929 csqrt_test (void)
5931   errno = 0;
5932   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
5933   if (errno == ENOSYS)
5934     /* Function not implemented.  */
5935     return;
5937   START (csqrt);
5939   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
5940   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
5941   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
5942   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
5944   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
5945   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
5946   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
5947   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
5949   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
5950   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
5951   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
5952   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
5954   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
5955   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
5956   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
5957   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
5958   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
5959   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
5960   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
5961   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
5962   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
5963   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
5964   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
5965   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
5967   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5969   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
5971   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5972   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5973   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5974   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5976   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5977   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5978   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5979   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5981   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
5983   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
5984   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
5985   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
5986   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
5987   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
5988   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
5989   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
5990   /* Principal square root should be returned (i.e., non-negative real
5991      part).  */
5992   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
5994   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
5995   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
5996   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
5997   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
5999   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
6000   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
6001 #ifdef TEST_FLOAT
6002   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
6003 #endif
6004   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
6005   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
6006   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
6008 #ifndef TEST_FLOAT
6009   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
6010   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
6011   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
6012   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
6014   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
6015   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
6016 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6017   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
6018 #endif
6019   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
6020   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
6021   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
6022 #endif
6024 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6025   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
6026   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
6027   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
6029   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
6030   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
6031   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6032   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6033   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
6034   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
6036 # if LDBL_MANT_DIG >= 113
6037   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
6038   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
6039   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6040   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6041   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
6042   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
6043 # endif
6044 #endif
6046   END (csqrt, complex);
6049 static void
6050 ctan_test (void)
6052   errno = 0;
6053   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6054   if (errno == ENOSYS)
6055     /* Function not implemented.  */
6056     return;
6058   START (ctan);
6060   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
6061   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
6062   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
6063   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
6065   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
6066   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
6067   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
6068   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
6070   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
6071   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
6072   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
6073   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
6075   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
6076   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
6077   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
6078   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
6079   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
6080   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
6081   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
6082   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
6084   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
6085   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
6087   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
6088   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
6090   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6091   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6093   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6094   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6095   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6096   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6098   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
6100   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
6101   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
6103   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
6104   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
6106 #ifndef TEST_FLOAT
6107   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
6108   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
6109 #endif
6111 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6112   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
6113   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
6114 #endif
6116   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
6118   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
6120 #ifndef TEST_FLOAT
6121   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
6122 #endif
6124 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6125   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
6126 #endif
6128   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
6129   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
6130   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
6131   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
6133   END (ctan, complex);
6137 static void
6138 ctan_test_tonearest (void)
6140   int save_round_mode;
6141   errno = 0;
6142   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6143   if (errno == ENOSYS)
6144     /* Function not implemented.  */
6145     return;
6147   START (ctan_tonearest);
6149   save_round_mode = fegetround ();
6151   if (!fesetround (FE_TONEAREST))
6152     {
6153       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6155 #ifndef TEST_FLOAT
6156       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6157 #endif
6159 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6160       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6161 #endif
6162     }
6164   fesetround (save_round_mode);
6166   END (ctan_tonearest, complex);
6170 static void
6171 ctan_test_towardzero (void)
6173   int save_round_mode;
6174   errno = 0;
6175   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6176   if (errno == ENOSYS)
6177     /* Function not implemented.  */
6178     return;
6180   START (ctan_towardzero);
6182   save_round_mode = fegetround ();
6184   if (!fesetround (FE_TOWARDZERO))
6185     {
6186       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6188 #ifndef TEST_FLOAT
6189       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6190 #endif
6192 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6193       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6194 #endif
6195     }
6197   fesetround (save_round_mode);
6199   END (ctan_towardzero, complex);
6203 static void
6204 ctan_test_downward (void)
6206   int save_round_mode;
6207   errno = 0;
6208   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6209   if (errno == ENOSYS)
6210     /* Function not implemented.  */
6211     return;
6213   START (ctan_downward);
6215   save_round_mode = fegetround ();
6217   if (!fesetround (FE_DOWNWARD))
6218     {
6219       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6221 #ifndef TEST_FLOAT
6222       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6223 #endif
6225 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6226       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6227 #endif
6228     }
6230   fesetround (save_round_mode);
6232   END (ctan_downward, complex);
6236 static void
6237 ctan_test_upward (void)
6239   int save_round_mode;
6240   errno = 0;
6241   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6242   if (errno == ENOSYS)
6243     /* Function not implemented.  */
6244     return;
6246   START (ctan_upward);
6248   save_round_mode = fegetround ();
6250   if (!fesetround (FE_UPWARD))
6251     {
6252       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6254 #ifndef TEST_FLOAT
6255       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6256 #endif
6258 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6259       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6260 #endif
6261     }
6263   fesetround (save_round_mode);
6265   END (ctan_upward, complex);
6269 static void
6270 ctanh_test (void)
6272   errno = 0;
6273   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
6274   if (errno == ENOSYS)
6275     /* Function not implemented.  */
6276     return;
6278   START (ctanh);
6280   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
6281   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
6282   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
6283   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
6285   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
6286   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
6287   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
6288   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
6289   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
6290   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
6291   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
6292   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
6294   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6295   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6296   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6297   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6298   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6299   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6300   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6301   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6303   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
6304   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
6306   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
6307   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
6309   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6310   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6312   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6313   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6314   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6315   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6317   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
6319   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
6321   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
6322   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
6324   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6325   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
6327 #ifndef TEST_FLOAT
6328   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
6329   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
6330 #endif
6332 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6333   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
6334   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
6335 #endif
6337   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
6339   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
6341 #ifndef TEST_FLOAT
6342   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
6343 #endif
6345 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6346   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
6347 #endif
6349   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
6350   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
6351   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
6352   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
6354   END (ctanh, complex);
6358 static void
6359 ctanh_test_tonearest (void)
6361   int save_round_mode;
6362   errno = 0;
6363   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6364   if (errno == ENOSYS)
6365     /* Function not implemented.  */
6366     return;
6368   START (ctanh_tonearest);
6370   save_round_mode = fegetround ();
6372   if (!fesetround (FE_TONEAREST))
6373     {
6374       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6376 #ifndef TEST_FLOAT
6377       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6378 #endif
6380 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6381       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6382 #endif
6383     }
6385   fesetround (save_round_mode);
6387   END (ctanh_tonearest, complex);
6391 static void
6392 ctanh_test_towardzero (void)
6394   int save_round_mode;
6395   errno = 0;
6396   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6397   if (errno == ENOSYS)
6398     /* Function not implemented.  */
6399     return;
6401   START (ctanh_towardzero);
6403   save_round_mode = fegetround ();
6405   if (!fesetround (FE_TOWARDZERO))
6406     {
6407       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6409 #ifndef TEST_FLOAT
6410       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6411 #endif
6413 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6414       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6415 #endif
6416     }
6418   fesetround (save_round_mode);
6420   END (ctanh_towardzero, complex);
6424 static void
6425 ctanh_test_downward (void)
6427   int save_round_mode;
6428   errno = 0;
6429   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6430   if (errno == ENOSYS)
6431     /* Function not implemented.  */
6432     return;
6434   START (ctanh_downward);
6436   save_round_mode = fegetround ();
6438   if (!fesetround (FE_DOWNWARD))
6439     {
6440       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6442 #ifndef TEST_FLOAT
6443       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6444 #endif
6446 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6447       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6448 #endif
6449     }
6451   fesetround (save_round_mode);
6453   END (ctanh_downward, complex);
6457 static void
6458 ctanh_test_upward (void)
6460   int save_round_mode;
6461   errno = 0;
6462   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6463   if (errno == ENOSYS)
6464     /* Function not implemented.  */
6465     return;
6467   START (ctanh_upward);
6469   save_round_mode = fegetround ();
6471   if (!fesetround (FE_UPWARD))
6472     {
6473       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6475 #ifndef TEST_FLOAT
6476       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6477 #endif
6479 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6480       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6481 #endif
6482     }
6484   fesetround (save_round_mode);
6486   END (ctanh_upward, complex);
6490 static void
6491 erf_test (void)
6493   errno = 0;
6494   FUNC(erf) (0);
6495   if (errno == ENOSYS)
6496     /* Function not implemented.  */
6497     return;
6499   START (erf);
6501   TEST_f_f (erf, 0, 0);
6502   TEST_f_f (erf, minus_zero, minus_zero);
6503   TEST_f_f (erf, plus_infty, 1);
6504   TEST_f_f (erf, minus_infty, -1);
6505   TEST_f_f (erf, qnan_value, qnan_value);
6507   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
6508   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
6509   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
6510   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
6511   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
6512   TEST_f_f (erf, 27.0L, 1.0L);
6514   END (erf);
6518 static void
6519 erfc_test (void)
6521   errno = 0;
6522   FUNC(erfc) (0);
6523   if (errno == ENOSYS)
6524     /* Function not implemented.  */
6525     return;
6527   START (erfc);
6529   TEST_f_f (erfc, plus_infty, 0.0);
6530   TEST_f_f (erfc, minus_infty, 2.0);
6531   TEST_f_f (erfc, 0.0, 1.0);
6532   TEST_f_f (erfc, minus_zero, 1.0);
6533   TEST_f_f (erfc, qnan_value, qnan_value);
6535   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
6536   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
6537   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
6538   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
6539   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
6540   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
6541   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
6542   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
6543 #ifdef TEST_LDOUBLE
6544   /* The result can only be represented in long double.  */
6545 # if LDBL_MIN_10_EXP < -319
6546   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
6547 # endif
6548 # if LDBL_MANT_DIG >= 106
6549   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
6550 # endif
6551 #endif
6553   END (erfc);
6557 static void
6558 exp_test (void)
6560   errno = 0;
6561   FUNC(exp) (0);
6562   if (errno == ENOSYS)
6563     /* Function not implemented.  */
6564     return;
6566   START (exp);
6568   TEST_f_f (exp, 0, 1);
6569   TEST_f_f (exp, minus_zero, 1);
6571 #ifndef TEST_INLINE
6572   TEST_f_f (exp, plus_infty, plus_infty);
6573   TEST_f_f (exp, minus_infty, 0);
6574 #endif
6575   TEST_f_f (exp, qnan_value, qnan_value);
6576   TEST_f_f (exp, 1, M_El);
6578   TEST_f_f (exp, 2, M_E2l);
6579   TEST_f_f (exp, 3, M_E3l);
6580   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
6581   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
6582   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
6583 #ifndef TEST_FLOAT
6584   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
6585 #endif
6586 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
6587   /* The result can only be represented in sane long double.  */
6588   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
6589 #endif
6591 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
6592   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
6593   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
6594 #endif
6595   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
6596   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
6597   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
6599   END (exp);
6603 static void
6604 exp_test_tonearest (void)
6606   int save_round_mode;
6607   errno = 0;
6608   FUNC(exp) (0);
6609   if (errno == ENOSYS)
6610     /* Function not implemented.  */
6611     return;
6613   START (exp_tonearest);
6615   save_round_mode = fegetround ();
6617   if (!fesetround (FE_TONEAREST))
6618     {
6619       TEST_f_f (exp, 1, M_El);
6620       TEST_f_f (exp, 2, M_E2l);
6621       TEST_f_f (exp, 3, M_E3l);
6622     }
6624   fesetround (save_round_mode);
6626   END (exp_tonearest);
6630 static void
6631 exp_test_towardzero (void)
6633   int save_round_mode;
6634   errno = 0;
6635   FUNC(exp) (0);
6636   if (errno == ENOSYS)
6637     /* Function not implemented.  */
6638     return;
6640   START (exp_towardzero);
6642   save_round_mode = fegetround ();
6644   if (!fesetround (FE_TOWARDZERO))
6645     {
6646       TEST_f_f (exp, 1, M_El);
6647       TEST_f_f (exp, 2, M_E2l);
6648       TEST_f_f (exp, 3, M_E3l);
6649     }
6651   fesetround (save_round_mode);
6653   END (exp_towardzero);
6657 static void
6658 exp_test_downward (void)
6660   int save_round_mode;
6661   errno = 0;
6662   FUNC(exp) (0);
6663   if (errno == ENOSYS)
6664     /* Function not implemented.  */
6665     return;
6667   START (exp_downward);
6669   save_round_mode = fegetround ();
6671   if (!fesetround (FE_DOWNWARD))
6672     {
6673       TEST_f_f (exp, 1, M_El);
6674       TEST_f_f (exp, 2, M_E2l);
6675       TEST_f_f (exp, 3, M_E3l);
6676     }
6678   fesetround (save_round_mode);
6680   END (exp_downward);
6684 static void
6685 exp_test_upward (void)
6687   int save_round_mode;
6688   errno = 0;
6689   FUNC(exp) (0);
6690   if (errno == ENOSYS)
6691     /* Function not implemented.  */
6692     return;
6694   START (exp_upward);
6696   save_round_mode = fegetround ();
6698   if (!fesetround (FE_UPWARD))
6699     {
6700       TEST_f_f (exp, 1, M_El);
6701       TEST_f_f (exp, 2, M_E2l);
6702       TEST_f_f (exp, 3, M_E3l);
6703     }
6705   fesetround (save_round_mode);
6707   END (exp_upward);
6711 static void
6712 exp10_test (void)
6714   errno = 0;
6715   FUNC(exp10) (0);
6716   if (errno == ENOSYS)
6717     /* Function not implemented.  */
6718     return;
6720   START (exp10);
6722   TEST_f_f (exp10, 0, 1);
6723   TEST_f_f (exp10, minus_zero, 1);
6725   TEST_f_f (exp10, plus_infty, plus_infty);
6726   TEST_f_f (exp10, minus_infty, 0);
6727   TEST_f_f (exp10, qnan_value, qnan_value);
6728   TEST_f_f (exp10, 3, 1000);
6729   TEST_f_f (exp10, -1, 0.1L);
6730   TEST_f_f (exp10, 36, 1.0e36L);
6731   TEST_f_f (exp10, -36, 1.0e-36L);
6732 #ifndef TEST_FLOAT
6733   TEST_f_f (exp10, 305, 1.0e305L);
6734   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6735 #endif
6736 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
6737   TEST_f_f (exp10, 4932, 1.0e4932L);
6738   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
6739 #endif
6740   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6741   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
6742   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
6743   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
6744   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
6746   END (exp10);
6750 static void
6751 exp2_test (void)
6753   errno = 0;
6754   FUNC(exp2) (0);
6755   if (errno == ENOSYS)
6756     /* Function not implemented.  */
6757     return;
6759   START (exp2);
6761   TEST_f_f (exp2, 0, 1);
6762   TEST_f_f (exp2, minus_zero, 1);
6763   TEST_f_f (exp2, plus_infty, plus_infty);
6764   TEST_f_f (exp2, minus_infty, 0);
6765   TEST_f_f (exp2, qnan_value, qnan_value);
6767   TEST_f_f (exp2, 10, 1024);
6768   TEST_f_f (exp2, -1, 0.5);
6769   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6770   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
6771   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
6772   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
6773   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
6775   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
6776   TEST_f_f (exp2, 127, 0x1p127);
6777   TEST_f_f (exp2, -149, 0x1p-149);
6779 #ifndef TEST_FLOAT
6780   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
6781   TEST_f_f (exp2, 1023, 0x1p1023);
6782   TEST_f_f (exp2, -1074, 0x1p-1074);
6783 #endif
6785 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6786   TEST_f_f (exp2, 16383, 0x1p16383L);
6787   TEST_f_f (exp2, -16400, 0x1p-16400L);
6788 #endif
6790   END (exp2);
6794 static void
6795 expm1_test (void)
6797   errno = 0;
6798   FUNC(expm1) (0);
6799   if (errno == ENOSYS)
6800     /* Function not implemented.  */
6801     return;
6803   START (expm1);
6805   TEST_f_f (expm1, 0, 0);
6806   TEST_f_f (expm1, minus_zero, minus_zero);
6808 #ifndef TEST_INLINE
6809   TEST_f_f (expm1, plus_infty, plus_infty);
6810   TEST_f_f (expm1, minus_infty, -1);
6811 #endif
6812   TEST_f_f (expm1, qnan_value, qnan_value);
6814   TEST_f_f (expm1, 1, M_El - 1.0);
6815   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
6817   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
6819 #ifndef TEST_FLOAT
6820   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
6821   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
6822 #endif
6824 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6825   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
6826 #endif
6828   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
6829   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
6830   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
6831   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
6832   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
6833   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
6834   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
6835   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
6836   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
6837   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
6838   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
6839   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
6840   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
6841   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
6842   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
6843   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
6844   TEST_f_f (expm1, -100.0, -1.0);
6845   TEST_f_f (expm1, -1000.0, -1.0);
6846   TEST_f_f (expm1, -10000.0, -1.0);
6847   TEST_f_f (expm1, -100000.0, -1.0);
6849   errno = 0;
6850   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION);
6851   check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
6852   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
6853   TEST_f_f (expm1, -max_value, -1);
6855   END (expm1);
6859 static void
6860 fabs_test (void)
6862   START (fabs);
6864   TEST_f_f (fabs, 0, 0);
6865   TEST_f_f (fabs, minus_zero, 0);
6867   TEST_f_f (fabs, plus_infty, plus_infty);
6868   TEST_f_f (fabs, minus_infty, plus_infty);
6869   TEST_f_f (fabs, qnan_value, qnan_value);
6871   TEST_f_f (fabs, 38.0, 38.0);
6872   TEST_f_f (fabs, -M_El, M_El);
6874   END (fabs);
6878 static void
6879 fdim_test (void)
6881   START (fdim);
6883   TEST_ff_f (fdim, 0, 0, 0);
6884   TEST_ff_f (fdim, 9, 0, 9);
6885   TEST_ff_f (fdim, 0, 9, 0);
6886   TEST_ff_f (fdim, -9, 0, 0);
6887   TEST_ff_f (fdim, 0, -9, 9);
6889   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
6890   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
6891   TEST_ff_f (fdim, minus_infty, 9, 0);
6892   TEST_ff_f (fdim, minus_infty, -9, 0);
6893   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
6894   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
6895   TEST_ff_f (fdim, 9, plus_infty, 0);
6896   TEST_ff_f (fdim, -9, plus_infty, 0);
6898   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
6899   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
6900   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
6901   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
6902   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
6903   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
6904   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
6905   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
6906   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
6907   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
6909   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
6911   END (fdim);
6915 static void
6916 finite_test (void)
6918   START (finite);
6920   TEST_f_b (finite, 0, 1);
6921   TEST_f_b (finite, minus_zero, 1);
6922   TEST_f_b (finite, 10, 1);
6923   TEST_f_b (finite, min_subnorm_value, 1);
6924   TEST_f_b (finite, plus_infty, 0);
6925   TEST_f_b (finite, minus_infty, 0);
6926   TEST_f_b (finite, qnan_value, 0);
6928   END (finite);
6932 static void
6933 floor_test (void)
6935   START (floor);
6937   TEST_f_f (floor, 0.0, 0.0);
6938   TEST_f_f (floor, minus_zero, minus_zero);
6939   TEST_f_f (floor, plus_infty, plus_infty);
6940   TEST_f_f (floor, minus_infty, minus_infty);
6941   TEST_f_f (floor, qnan_value, qnan_value);
6943   TEST_f_f (floor, M_PIl, 3.0);
6944   TEST_f_f (floor, -M_PIl, -4.0);
6946   TEST_f_f (floor, 0.1, 0.0);
6947   TEST_f_f (floor, 0.25, 0.0);
6948   TEST_f_f (floor, 0.625, 0.0);
6949   TEST_f_f (floor, -0.1, -1.0);
6950   TEST_f_f (floor, -0.25, -1.0);
6951   TEST_f_f (floor, -0.625, -1.0);
6953 #ifdef TEST_LDOUBLE
6954   /* The result can only be represented in long double.  */
6955   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
6956   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
6957   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
6958   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
6959   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
6960 # if LDBL_MANT_DIG > 100
6961   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
6962   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
6963   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
6964 # endif
6966   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
6967   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
6968   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
6969   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
6970   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
6971 # if LDBL_MANT_DIG > 100
6972   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
6973   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
6974   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
6975 # endif
6977   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
6978   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
6979   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
6980   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
6981   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
6983 # if LDBL_MANT_DIG > 100
6984   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
6985   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
6986   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
6987   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
6988   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
6989   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
6990 # endif
6992   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
6993   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
6994   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
6995   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
6996   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
6998 # if LDBL_MANT_DIG > 100
6999   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
7000   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
7001   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
7002   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
7003   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
7004   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
7005 # endif
7007   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
7008   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
7009   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
7010   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
7011   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
7013   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
7014   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
7015   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
7016   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
7017   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
7019   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7020   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7021   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7022   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7023   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7025   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
7026   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
7027 #endif
7029   END (floor);
7033 static void
7034 fma_test (void)
7036   START (fma);
7038   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
7039   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
7040   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
7041   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7042   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7043   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7044   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7045   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7046   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7047   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7048   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7049   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7051   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
7052   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7053   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7054   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
7055   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
7056   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
7057   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7058   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
7060   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
7062   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7063                          LDBL_MAX, DBL_MAX, FLT_MAX);
7064   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
7065   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
7066   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
7067   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
7068   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
7069   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
7070   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
7071   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
7073   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7074   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7075   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7076   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7077   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7078   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7079   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7080   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7081   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7082   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7083   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7084   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7085   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7086   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7087   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7088   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7089   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7090   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7091   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7092   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7093   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7094   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7095   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7096   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7098   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7099   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7100   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7101   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7103   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7104   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7105   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7106   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7107   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7108   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7109   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7110   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7112   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7113   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7114   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7115   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7116   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7117   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7118   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7119   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7121 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7122   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
7123   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
7124   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
7125   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
7126   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
7127   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
7128   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
7129   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7130   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7131   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7132   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7133   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7134   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7135   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7136   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7137   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7138   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
7139   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
7140   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7141   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7142   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7143   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7144   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7145   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7146   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7147   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7148   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7149   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7150   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7151   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7152   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7153   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7154   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7155   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7156   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7157   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7158   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
7159   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
7160   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7161   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7162   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
7163   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
7164   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7165 #endif
7166 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7167   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
7168   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
7169   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
7170   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
7171   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
7172   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
7173   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
7174   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
7175   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
7176   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
7177   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
7178   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
7179   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
7180   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
7181   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
7182   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
7183   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
7184   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
7185   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
7186   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
7187   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7188   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7189   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7190   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7191   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7192   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7193   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7194   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7195   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7196   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
7197   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
7198   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7199   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7200   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7201   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7202   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7203   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7204   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7205   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7206   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7207   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7208   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7209   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7210   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7211   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7212   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7213   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7214   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7215   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7216   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7217   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7218   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7219   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7220   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
7221   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
7222   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7223 #endif
7224 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7225   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
7226   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
7227   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
7228   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
7229   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
7230   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
7231   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7232   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7233   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7234   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7235   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7236   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7237   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7238   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7239   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7240   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
7241   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
7242   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7243   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7244   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7245   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7246   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7247   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7248   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7249   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7250   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7251   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7252   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7253   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7254   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7255   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7256   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7257   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7258   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7259   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7260   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7261   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7262   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7263   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7264   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7265   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7266   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7267 #endif
7268 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7269   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
7270   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
7271   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
7272   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
7273   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
7274   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
7275   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
7276   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
7277   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
7278   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
7279   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
7280   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
7281   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
7282   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7283   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7284   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7285   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7286   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7287   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7288   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7289   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7290   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7291   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
7292   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
7293   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7294   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7295   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7296   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7297   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7298   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7299   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7300   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7301   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7302   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7303   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7304   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7305   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7306   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7307   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7308   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7309   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7310   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7311   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7312   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7313   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7314   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7315   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7316   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7317   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7318 #endif
7320   END (fma);
7324 static void
7325 fma_test_towardzero (void)
7327   int save_round_mode;
7328   START (fma_towardzero);
7330   save_round_mode = fegetround ();
7332   if (!fesetround (FE_TOWARDZERO))
7333     {
7334       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7335       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7336       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7337       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7338       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7339       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7340       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7341       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7342       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7343       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7344       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7345       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7346       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7347       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7348       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7349       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7350       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7351       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7352       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7353       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7354       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7355       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7356       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7357       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7359       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7360       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7361       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7362       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7364       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7365       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7366       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7367       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7368       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7369       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7370       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7371       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7373 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7374       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7375       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7376       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7377       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7378       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7379       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7380       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7381       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7382 #endif
7384 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7385       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7386       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7387       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7388       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7389       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7390       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7391       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7392       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7393       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7394       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
7395       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
7396       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7397       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7398       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7399       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7400       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7401       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7402       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7403       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7404       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7405       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7406       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
7407       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
7408       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7409       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7410       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7411       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7412       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7413       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7414       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
7415       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
7416       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7417       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7418       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
7419       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
7420       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7421 #endif
7422 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7423       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7424       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7425       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7426       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7427       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7428       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7429       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7430       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7431       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7432       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
7433       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
7434       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7435       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7436       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7437       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7438       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7439       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7440       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7441       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7442       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7443       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7444       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
7445       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
7446       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7447       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7448       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7449       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7450       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7451       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7452       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
7453       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
7454       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7455       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7456       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
7457       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
7458       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7459 #endif
7460 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7461       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7462       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7463       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7464       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7465       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7466       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7467       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7468       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7469       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7470       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7471       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7472       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7473       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7474       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7475       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7476       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7477       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7478       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7479       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7480       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7481       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7482       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
7483       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
7484       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7485       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7486       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7487       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7488       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7489       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7490       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7491       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7492       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7493       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7494       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
7495       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
7496       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7497 #endif
7498 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7499       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7500       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7501       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7502       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7503       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7504       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7505       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7506       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7507       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7508       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7509       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7510       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7511       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7512       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7513       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7514       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7515       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7516       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7517       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7518       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7519       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7520       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
7521       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
7522       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7523       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7524       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7525       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7526       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7527       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7528       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7529       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7530       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7531       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7532       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
7533       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
7534       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7535 #endif
7536     }
7538   fesetround (save_round_mode);
7540   END (fma_towardzero);
7544 static void
7545 fma_test_downward (void)
7547   int save_round_mode;
7548   START (fma_downward);
7550   save_round_mode = fegetround ();
7552   if (!fesetround (FE_DOWNWARD))
7553     {
7554       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7555       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
7556       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
7557       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7558       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
7559       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7560       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7561       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
7562       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7563       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
7564       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
7565       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7566       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
7567       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7568       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7569       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
7570       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7571       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
7572       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
7573       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7574       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
7575       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7576       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7577       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
7579       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
7580       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
7581       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
7582       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
7584       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7585       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7586       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7587       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7588       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7589       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7590       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7591       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7593 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7594       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7595       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7596       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7597       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7598       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7599       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7600       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7601       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7602 #endif
7604 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7605       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7606       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
7607       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7608       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7609       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7610       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7611       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7612       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7613       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7614       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
7615       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
7616       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
7617       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7618       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7619       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7620       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
7621       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7622       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7623       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7624       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7625       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7626       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
7627       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7628       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
7629       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7630       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7631       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7632       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7633       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7634       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
7635       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
7636       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
7637       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7638       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
7639       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
7640       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
7641 #endif
7642 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7643       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7644       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7645       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7646       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7647       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7648       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7649       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7650       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7651       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7652       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
7653       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
7654       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
7655       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7656       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7657       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7658       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
7659       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7660       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7661       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7662       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7663       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7664       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
7665       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7666       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
7667       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7668       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7669       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7670       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7671       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7672       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
7673       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7674       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
7675       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7676       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
7677       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
7678       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
7679 #endif
7680 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7681       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7682       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7683       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7684       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7685       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7686       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7687       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7688       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7689       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7690       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7691       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
7692       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
7693       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7694       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7695       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7696       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
7697       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7698       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7699       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7700       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7701       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7702       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
7703       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7704       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
7705       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7706       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7707       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7708       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7709       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7710       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7711       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7712       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
7713       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7714       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
7715       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7716       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
7717 #endif
7718 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7719       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7720       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7721       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7722       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7723       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7724       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7725       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7726       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7727       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7728       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7729       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
7730       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7731       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7732       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7733       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7734       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
7735       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7736       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7737       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7738       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7739       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7740       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
7741       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7742       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
7743       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7744       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7745       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7746       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7747       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7748       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7749       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7750       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7751       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7752       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
7753       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7754       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
7755 #endif
7756     }
7758   fesetround (save_round_mode);
7760   END (fma_downward);
7764 static void
7765 fma_test_upward (void)
7767   int save_round_mode;
7768   START (fma_upward);
7770   save_round_mode = fegetround ();
7772   if (!fesetround (FE_UPWARD))
7773     {
7774       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7775       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7776       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7777       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7778       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7779       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7780       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7781       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7782       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7783       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7784       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7785       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7786       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7787       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7788       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7789       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7790       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7791       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7792       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7793       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7794       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7795       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7796       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7797       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7799       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7800       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7801       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7802       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7804       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7805       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7806       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7807       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7808       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7809       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7810       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7811       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7813 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7814       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7815       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7816       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7817       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7818       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7819       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7820       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7821       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7822 #endif
7824 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7825       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
7826       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7827       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7828       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7829       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7830       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7831       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7832       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7833       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
7834       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
7835       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
7836       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7837       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
7838       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7839       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7840       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7841       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7842       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7843       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7844       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7845       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
7846       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7847       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
7848       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7849       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7850       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7851       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7852       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7853       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
7854       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
7855       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
7856       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7857       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
7858       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
7859       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
7860       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7861 #endif
7862 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7863       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7864       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7865       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7866       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7867       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7868       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7869       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7870       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7871       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
7872       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
7873       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
7874       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7875       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
7876       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7877       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7878       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7879       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7880       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7881       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7882       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7883       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
7884       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7885       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
7886       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7887       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7888       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7889       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7890       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7891       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
7892       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7893       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
7894       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7895       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
7896       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
7897       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
7898       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7899 #endif
7900 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7901       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7902       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7903       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7904       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7905       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7906       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7907       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7908       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7909       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
7910       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
7911       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7912       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7913       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
7914       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7915       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7916       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7917       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7918       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7919       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7920       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7921       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
7922       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7923       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
7924       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7925       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7926       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7927       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7928       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7929       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
7930       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7931       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7932       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7933       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
7934       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7935       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
7936       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7937 #endif
7938 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7939       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7940       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7941       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7942       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7943       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7944       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7945       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7946       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7947       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
7948       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
7949       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7950       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7951       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
7952       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7953       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7954       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7955       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7956       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7957       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7958       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7959       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
7960       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7961       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
7962       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7963       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7964       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7965       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7966       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7967       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
7968       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7969       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7970       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7971       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
7972       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7973       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
7974       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7975 #endif
7976     }
7978   fesetround (save_round_mode);
7980   END (fma_upward);
7984 static void
7985 fmax_test (void)
7987   START (fmax);
7989   TEST_ff_f (fmax, 0, 0, 0);
7990   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
7991   TEST_ff_f (fmax, 9, 0, 9);
7992   TEST_ff_f (fmax, 0, 9, 9);
7993   TEST_ff_f (fmax, -9, 0, 0);
7994   TEST_ff_f (fmax, 0, -9, 0);
7996   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
7997   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
7998   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
7999   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
8001   TEST_ff_f (fmax, minus_infty, 9, 9);
8002   TEST_ff_f (fmax, minus_infty, -9, -9);
8003   TEST_ff_f (fmax, 9, minus_infty, 9);
8004   TEST_ff_f (fmax, -9, minus_infty, -9);
8006   TEST_ff_f (fmax, 0, qnan_value, 0);
8007   TEST_ff_f (fmax, 9, qnan_value, 9);
8008   TEST_ff_f (fmax, -9, qnan_value, -9);
8009   TEST_ff_f (fmax, qnan_value, 0, 0);
8010   TEST_ff_f (fmax, qnan_value, 9, 9);
8011   TEST_ff_f (fmax, qnan_value, -9, -9);
8012   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
8013   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
8014   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
8015   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
8016   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
8018   END (fmax);
8022 static void
8023 fmin_test (void)
8025   START (fmin);
8027   TEST_ff_f (fmin, 0, 0, 0);
8028   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
8029   TEST_ff_f (fmin, 9, 0, 0);
8030   TEST_ff_f (fmin, 0, 9, 0);
8031   TEST_ff_f (fmin, -9, 0, -9);
8032   TEST_ff_f (fmin, 0, -9, -9);
8034   TEST_ff_f (fmin, plus_infty, 9, 9);
8035   TEST_ff_f (fmin, 9, plus_infty, 9);
8036   TEST_ff_f (fmin, plus_infty, -9, -9);
8037   TEST_ff_f (fmin, -9, plus_infty, -9);
8038   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
8039   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
8040   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
8041   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
8043   TEST_ff_f (fmin, 0, qnan_value, 0);
8044   TEST_ff_f (fmin, 9, qnan_value, 9);
8045   TEST_ff_f (fmin, -9, qnan_value, -9);
8046   TEST_ff_f (fmin, qnan_value, 0, 0);
8047   TEST_ff_f (fmin, qnan_value, 9, 9);
8048   TEST_ff_f (fmin, qnan_value, -9, -9);
8049   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
8050   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
8051   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
8052   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
8053   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
8055   END (fmin);
8059 static void
8060 fmod_test (void)
8062   errno = 0;
8063   FUNC(fmod) (6.5, 2.3L);
8064   if (errno == ENOSYS)
8065     /* Function not implemented.  */
8066     return;
8068   START (fmod);
8070   /* fmod (+0, y) == +0 for y != 0.  */
8071   TEST_ff_f (fmod, 0, 3, 0);
8073   /* fmod (-0, y) == -0 for y != 0.  */
8074   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
8076   /* fmod (+inf, y) == qNaN plus invalid exception.  */
8077   errno = 0;
8078   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION);
8079   check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8080   /* fmod (-inf, y) == qNaN plus invalid exception.  */
8081   errno = 0;
8082   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION);
8083   check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8084   /* fmod (x, +0) == qNaN plus invalid exception.  */
8085   errno = 0;
8086   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION);
8087   check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
8088   /* fmod (x, -0) == qNaN plus invalid exception.  */
8089   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
8091   /* fmod (x, +inf) == x for x not infinite.  */
8092   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
8093   /* fmod (x, -inf) == x for x not infinite.  */
8094   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
8096   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
8098   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
8099   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
8100   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
8101   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
8103   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
8104 #ifndef TEST_FLOAT
8105   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
8106 #endif
8107 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
8108   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
8109 #endif
8111   END (fmod);
8115 static void
8116 fpclassify_test (void)
8118   START (fpclassify);
8120   TEST_f_i (fpclassify, qnan_value, FP_NAN);
8121   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
8122   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
8123   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
8124   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
8125   TEST_f_i (fpclassify, 1000, FP_NORMAL);
8126   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
8128   END (fpclassify);
8132 static void
8133 frexp_test (void)
8135   int x;
8137   START (frexp);
8139   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
8140   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
8141   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
8143   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
8144   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
8146   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
8147   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
8149   END (frexp);
8153 static void
8154 gamma_test (void)
8156   errno = 0;
8157   FUNC(gamma) (1);
8159   if (errno == ENOSYS)
8160     /* Function not implemented.  */
8161     return;
8163   START (gamma);
8165   TEST_f_f (gamma, plus_infty, plus_infty);
8166   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8167   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8168   TEST_f_f (gamma, minus_infty, plus_infty);
8169   TEST_f_f (gamma, qnan_value, qnan_value);
8171   TEST_f_f1 (gamma, 1, 0, 1);
8172   TEST_f_f1 (gamma, 3, M_LN2l, 1);
8174   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
8175   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8177   END (gamma);
8180 static void
8181 hypot_test (void)
8183   errno = 0;
8184   FUNC(hypot) (0.7L, 12.4L);
8185   if (errno == ENOSYS)
8186     /* Function not implemented.  */
8187     return;
8189   START (hypot);
8191   TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
8192   TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
8194 #ifndef TEST_INLINE
8195   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
8196   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
8197   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
8198   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
8199 #endif
8201   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
8203   /* hypot (x,y) == hypot (+-x, +-y)  */
8204   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
8205   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
8206   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
8207   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
8208   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
8209   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
8210   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
8211   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
8213   /*  hypot (x,0) == fabs (x)  */
8214   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
8215   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
8216   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
8218   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8220   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
8221 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
8222   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
8223 #endif
8225 #if !(defined TEST_FLOAT && defined TEST_INLINE)
8226   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
8227   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
8228 #endif
8230 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
8231   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
8232 #endif
8234 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
8235   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
8236 #endif
8238   END (hypot);
8242 static void
8243 ilogb_test (void)
8245   START (ilogb);
8247   TEST_f_i (ilogb, 1, 0);
8248   TEST_f_i (ilogb, M_El, 1);
8249   TEST_f_i (ilogb, 1024, 10);
8250   TEST_f_i (ilogb, -2000, 10);
8252   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
8253   errno = 0;
8254   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION);
8255   check_int ("errno for ilogb(0.0) unchanged", errno, EDOM, 0, 0, 0);
8256   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
8257   errno = 0;
8258   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION);
8259   check_int ("errno for ilogb(qNaN) unchanged", errno, EDOM, 0, 0, 0);
8260   /* ilogb (inf) == INT_MAX plus invalid exception  */
8261   errno = 0;
8262   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION);
8263   check_int ("errno for ilogb(Inf) unchanged", errno, EDOM, 0, 0, 0);
8264   /* ilogb (-inf) == INT_MAX plus invalid exception  */
8265   errno = 0;
8266   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION);
8267   check_int ("errno for ilogb(-Inf) unchanged", errno, EDOM, 0, 0, 0);
8269   END (ilogb);
8272 static void
8273 isfinite_test (void)
8275   START (isfinite);
8277   TEST_f_b (isfinite, 0, 1);
8278   TEST_f_b (isfinite, minus_zero, 1);
8279   TEST_f_b (isfinite, 10, 1);
8280   TEST_f_b (isfinite, min_subnorm_value, 1);
8281   TEST_f_b (isfinite, plus_infty, 0);
8282   TEST_f_b (isfinite, minus_infty, 0);
8283   TEST_f_b (isfinite, qnan_value, 0);
8285   END (isfinite);
8288 static void
8289 isgreater_test (void)
8291   START (isgreater);
8293   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
8294   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
8295   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
8296   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
8297   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
8298   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
8299   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
8300   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
8301   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
8302   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
8303   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
8304   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
8305   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
8306   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
8307   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
8308   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
8310   END (isgreater);
8313 static void
8314 isgreaterequal_test (void)
8316   START (isgreaterequal);
8318   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
8319   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
8320   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
8321   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
8322   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
8323   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
8324   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
8325   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
8326   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
8327   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
8328   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
8329   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
8330   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
8331   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
8332   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
8333   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
8335   END (isgreaterequal);
8338 static void
8339 isinf_test (void)
8341   START (isinf);
8343   TEST_f_b (isinf, 0, 0);
8344   TEST_f_b (isinf, minus_zero, 0);
8345   TEST_f_b (isinf, 10, 0);
8346   TEST_f_b (isinf, min_subnorm_value, 0);
8347   TEST_f_b (isinf, plus_infty, 1);
8348   TEST_f_b (isinf, minus_infty, 1);
8349   TEST_f_b (isinf, qnan_value, 0);
8351   END (isinf);
8354 static void
8355 isless_test (void)
8357   START (isless);
8359   TEST_ff_i (isless, minus_zero, minus_zero, 0);
8360   TEST_ff_i (isless, minus_zero, plus_zero, 0);
8361   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
8362   TEST_ff_i (isless, minus_zero, qnan_value, 0);
8363   TEST_ff_i (isless, plus_zero, minus_zero, 0);
8364   TEST_ff_i (isless, plus_zero, plus_zero, 0);
8365   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
8366   TEST_ff_i (isless, plus_zero, qnan_value, 0);
8367   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
8368   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
8369   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
8370   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
8371   TEST_ff_i (isless, qnan_value, minus_zero, 0);
8372   TEST_ff_i (isless, qnan_value, plus_zero, 0);
8373   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
8374   TEST_ff_i (isless, qnan_value, qnan_value, 0);
8376   END (isless);
8379 static void
8380 islessequal_test (void)
8382   START (islessequal);
8384   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
8385   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
8386   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
8387   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
8388   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
8389   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
8390   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
8391   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
8392   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
8393   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
8394   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
8395   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
8396   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
8397   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
8398   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
8399   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
8401   END (islessequal);
8404 static void
8405 islessgreater_test (void)
8407   START (islessgreater);
8409   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
8410   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
8411   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
8412   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
8413   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
8414   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
8415   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
8416   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
8417   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
8418   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
8419   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
8420   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
8421   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
8422   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
8423   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
8424   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
8426   END (islessgreater);
8429 static void
8430 isnan_test (void)
8432   START (isnan);
8434   TEST_f_b (isnan, 0, 0);
8435   TEST_f_b (isnan, minus_zero, 0);
8436   TEST_f_b (isnan, 10, 0);
8437   TEST_f_b (isnan, min_subnorm_value, 0);
8438   TEST_f_b (isnan, plus_infty, 0);
8439   TEST_f_b (isnan, minus_infty, 0);
8440   TEST_f_b (isnan, qnan_value, 1);
8442   END (isnan);
8445 static void
8446 isnormal_test (void)
8448   START (isnormal);
8450   TEST_f_b (isnormal, 0, 0);
8451   TEST_f_b (isnormal, minus_zero, 0);
8452   TEST_f_b (isnormal, 10, 1);
8453   TEST_f_b (isnormal, min_subnorm_value, 0);
8454   TEST_f_b (isnormal, plus_infty, 0);
8455   TEST_f_b (isnormal, minus_infty, 0);
8456   TEST_f_b (isnormal, qnan_value, 0);
8458   END (isnormal);
8461 static void
8462 issignaling_test (void)
8464   START (issignaling);
8466   TEST_f_b (issignaling, 0, 0);
8467   TEST_f_b (issignaling, minus_zero, 0);
8468   TEST_f_b (issignaling, 10, 0);
8469   TEST_f_b (issignaling, min_subnorm_value, 0);
8470   TEST_f_b (issignaling, plus_infty, 0);
8471   TEST_f_b (issignaling, minus_infty, 0);
8472   TEST_f_b (issignaling, qnan_value, 0);
8474   END (issignaling);
8477 static void
8478 isunordered_test (void)
8480   START (isunordered);
8482   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
8483   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
8484   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
8485   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
8486   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
8487   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
8488   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
8489   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
8490   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
8491   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
8492   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
8493   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
8494   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
8495   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
8496   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
8497   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
8499   END (isunordered);
8502 static void
8503 j0_test (void)
8505   FLOAT s, c;
8506   errno = 0;
8507   FUNC (sincos) (0, &s, &c);
8508   if (errno == ENOSYS)
8509     /* Required function not implemented.  */
8510     return;
8511   FUNC(j0) (0);
8512   if (errno == ENOSYS)
8513     /* Function not implemented.  */
8514     return;
8516   START (j0);
8518   /* j0 is the Bessel function of the first kind of order 0 */
8519   TEST_f_f (j0, qnan_value, qnan_value);
8520   TEST_f_f (j0, plus_infty, 0);
8521   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
8522   TEST_f_f (j0, 0.0, 1.0);
8523   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
8524   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
8525   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
8526   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
8527   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
8528   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
8529   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
8530   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
8531   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8533   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
8535 #ifndef TEST_FLOAT
8536   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
8537   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
8538 #endif
8540 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8541   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
8542   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
8543 #endif
8545   END (j0);
8549 static void
8550 j1_test (void)
8552   FLOAT s, c;
8553   errno = 0;
8554   FUNC (sincos) (0, &s, &c);
8555   if (errno == ENOSYS)
8556     /* Required function not implemented.  */
8557     return;
8558   FUNC(j1) (0);
8559   if (errno == ENOSYS)
8560     /* Function not implemented.  */
8561     return;
8563   /* j1 is the Bessel function of the first kind of order 1 */
8565   START (j1);
8567   TEST_f_f (j1, qnan_value, qnan_value);
8568   TEST_f_f (j1, plus_infty, 0);
8570   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
8571   TEST_f_f (j1, 0.0, 0.0);
8572   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
8573   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
8574   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
8575   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
8576   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
8577   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
8578   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
8580   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
8582 #ifndef TEST_FLOAT
8583   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
8584   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
8585 #endif
8587 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8588   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
8589   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
8590 #endif
8592   END (j1);
8595 static void
8596 jn_test (void)
8598   FLOAT s, c;
8599   errno = 0;
8600   FUNC (sincos) (0, &s, &c);
8601   if (errno == ENOSYS)
8602     /* Required function not implemented.  */
8603     return;
8604   FUNC(jn) (1, 1);
8605   if (errno == ENOSYS)
8606     /* Function not implemented.  */
8607     return;
8609   /* jn is the Bessel function of the first kind of order n.  */
8610   START (jn);
8612   /* jn (0, x) == j0 (x)  */
8613   TEST_ff_f (jn, 0, qnan_value, qnan_value);
8614   TEST_ff_f (jn, 0, plus_infty, 0);
8615   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
8616   TEST_ff_f (jn, 0, 0.0, 1.0);
8617   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
8618   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
8619   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
8620   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
8621   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
8622   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
8623   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
8624   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
8625   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8627   /* jn (1, x) == j1 (x)  */
8628   TEST_ff_f (jn, 1, qnan_value, qnan_value);
8629   TEST_ff_f (jn, 1, plus_infty, 0);
8630   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
8631   TEST_ff_f (jn, 1, 0.0, 0.0);
8632   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
8633   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
8634   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
8635   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
8636   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
8637   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
8638   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
8640   /* jn (3, x)  */
8641   TEST_ff_f (jn, 3, qnan_value, qnan_value);
8642   TEST_ff_f (jn, 3, plus_infty, 0);
8644   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
8645   TEST_ff_f (jn, 3, 0.0, 0.0);
8646   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
8647   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
8648   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
8649   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
8650   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
8652   /*  jn (10, x)  */
8653   TEST_ff_f (jn, 10, qnan_value, qnan_value);
8654   TEST_ff_f (jn, 10, plus_infty, 0);
8656   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
8657   TEST_ff_f (jn, 10, 0.0, 0.0);
8658   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
8659   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
8660   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
8661   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
8662   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
8664   /* BZ #11589 .*/
8665   TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
8666   TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
8667   TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
8668   TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
8669   TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
8670   TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
8671   TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
8672   TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
8674   /* Bug 14155: spurious exception may occur.  */
8675   TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
8677   END (jn);
8681 static void
8682 ldexp_test (void)
8684   START (ldexp);
8686   TEST_ff_f (ldexp, 0, 0, 0);
8687   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
8689   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
8690   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
8691   TEST_ff_f (ldexp, qnan_value, 1, qnan_value);
8693   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
8694   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
8696   /* ldexp (x, 0) == x.  */
8697   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
8699   END (ldexp);
8703 static void
8704 lgamma_test (void)
8706   errno = 0;
8707   FUNC(lgamma) (0);
8708   if (errno == ENOSYS)
8709     /* Function not implemented.  */
8710     return;
8712   START (lgamma);
8714   TEST_f_f (lgamma, plus_infty, plus_infty);
8715   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8716   check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
8717   TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8718   check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
8719   TEST_f_f (lgamma, qnan_value, qnan_value);
8721   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
8722   errno = 0;
8723   TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8724   check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
8725   TEST_f_f (lgamma, minus_infty, plus_infty);
8726   TEST_f_f (lgamma, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8727   TEST_f_f (lgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
8729   TEST_f_f1 (lgamma, 1, 0, 1);
8731   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
8733   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
8734   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8735   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
8736   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
8738   END (lgamma);
8742 static void
8743 lrint_test (void)
8745   /* XXX this test is incomplete.  We need to have a way to specifiy
8746      the rounding method and test the critical cases.  So far, only
8747      unproblematic numbers are tested.  */
8748   /* TODO: missing +/-Inf as well as qNaN tests.  */
8750   START (lrint);
8752   TEST_f_l (lrint, 0.0, 0);
8753   TEST_f_l (lrint, minus_zero, 0);
8754   TEST_f_l (lrint, 0.2L, 0);
8755   TEST_f_l (lrint, -0.2L, 0);
8757   TEST_f_l (lrint, 1.4L, 1);
8758   TEST_f_l (lrint, -1.4L, -1);
8760   TEST_f_l (lrint, 8388600.3L, 8388600);
8761   TEST_f_l (lrint, -8388600.3L, -8388600);
8763   TEST_f_l (lrint, 1071930.0008, 1071930);
8764 #ifndef TEST_FLOAT
8765   TEST_f_l (lrint, 1073741824.01, 1073741824);
8766 # if LONG_MAX > 281474976710656
8767   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8768 # endif
8769 #endif
8771   END (lrint);
8775 static void
8776 lrint_test_tonearest (void)
8778   int save_round_mode;
8779   START (lrint_tonearest);
8781   save_round_mode = fegetround ();
8783   if (!fesetround (FE_TONEAREST))
8784     {
8785       TEST_f_l (lrint, 0.0, 0);
8786       TEST_f_l (lrint, minus_zero, 0);
8787       TEST_f_l (lrint, 0.2L, 0);
8788       TEST_f_l (lrint, -0.2L, 0);
8789       TEST_f_l (lrint, 0.5L, 0);
8790       TEST_f_l (lrint, -0.5L, 0);
8791       TEST_f_l (lrint, 0.8L, 1);
8792       TEST_f_l (lrint, -0.8L, -1);
8794       TEST_f_l (lrint, 1.4L, 1);
8795       TEST_f_l (lrint, -1.4L, -1);
8797       TEST_f_l (lrint, 8388600.3L, 8388600);
8798       TEST_f_l (lrint, -8388600.3L, -8388600);
8800       TEST_f_l (lrint, 1071930.0008, 1071930);
8801 #ifndef TEST_FLOAT
8802       TEST_f_l (lrint, 1073741824.01, 1073741824);
8803 # if LONG_MAX > 281474976710656
8804       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8805 # endif
8806 #endif
8807     }
8809   fesetround (save_round_mode);
8811   END (lrint_tonearest);
8815 static void
8816 lrint_test_towardzero (void)
8818   int save_round_mode;
8819   START (lrint_towardzero);
8821   save_round_mode = fegetround ();
8823   if (!fesetround (FE_TOWARDZERO))
8824     {
8825       TEST_f_l (lrint, 0.0, 0);
8826       TEST_f_l (lrint, minus_zero, 0);
8827       TEST_f_l (lrint, 0.2L, 0);
8828       TEST_f_l (lrint, -0.2L, 0);
8829       TEST_f_l (lrint, 0.5L, 0);
8830       TEST_f_l (lrint, -0.5L, 0);
8831       TEST_f_l (lrint, 0.8L, 0);
8832       TEST_f_l (lrint, -0.8L, 0);
8834       TEST_f_l (lrint, 1.4L, 1);
8835       TEST_f_l (lrint, -1.4L, -1);
8837       TEST_f_l (lrint, 8388600.3L, 8388600);
8838       TEST_f_l (lrint, -8388600.3L, -8388600);
8840       TEST_f_l (lrint, 1071930.0008, 1071930);
8841 #ifndef TEST_FLOAT
8842       TEST_f_l (lrint, 1073741824.01, 1073741824);
8843 # if LONG_MAX > 281474976710656
8844       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8845 # endif
8846 #endif
8847     }
8849   fesetround (save_round_mode);
8851   END (lrint_towardzero);
8855 static void
8856 lrint_test_downward (void)
8858   int save_round_mode;
8859   START (lrint_downward);
8861   save_round_mode = fegetround ();
8863   if (!fesetround (FE_DOWNWARD))
8864     {
8865       TEST_f_l (lrint, 0.0, 0);
8866       TEST_f_l (lrint, minus_zero, 0);
8867       TEST_f_l (lrint, 0.2L, 0);
8868       TEST_f_l (lrint, -0.2L, -1);
8869       TEST_f_l (lrint, 0.5L, 0);
8870       TEST_f_l (lrint, -0.5L, -1);
8871       TEST_f_l (lrint, 0.8L, 0);
8872       TEST_f_l (lrint, -0.8L, -1);
8874       TEST_f_l (lrint, 1.4L, 1);
8875       TEST_f_l (lrint, -1.4L, -2);
8877       TEST_f_l (lrint, 8388600.3L, 8388600);
8878       TEST_f_l (lrint, -8388600.3L, -8388601);
8880       TEST_f_l (lrint, 1071930.0008, 1071930);
8881 #ifndef TEST_FLOAT
8882       TEST_f_l (lrint, 1073741824.01, 1073741824);
8883 # if LONG_MAX > 281474976710656
8884       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8885 # endif
8886 #endif
8887     }
8889   fesetround (save_round_mode);
8891   END (lrint_downward);
8895 static void
8896 lrint_test_upward (void)
8898   int save_round_mode;
8899   START (lrint_upward);
8901   save_round_mode = fegetround ();
8903   if (!fesetround (FE_UPWARD))
8904     {
8905       TEST_f_l (lrint, 0.0, 0);
8906       TEST_f_l (lrint, minus_zero, 0);
8907       TEST_f_l (lrint, 0.2L, 1);
8908       TEST_f_l (lrint, -0.2L, 0);
8909       TEST_f_l (lrint, 0.5L, 1);
8910       TEST_f_l (lrint, -0.5L, 0);
8911       TEST_f_l (lrint, 0.8L, 1);
8912       TEST_f_l (lrint, -0.8L, 0);
8914       TEST_f_l (lrint, 1.4L, 2);
8915       TEST_f_l (lrint, -1.4L, -1);
8917       TEST_f_l (lrint, 8388600.3L, 8388601);
8918       TEST_f_l (lrint, -8388600.3L, -8388600);
8920 #ifndef TEST_FLOAT
8921       TEST_f_l (lrint, 1071930.0008, 1071931);
8922       TEST_f_l (lrint, 1073741824.01, 1073741825);
8923 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
8924       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8925 # endif
8926 #endif
8927     }
8929   fesetround (save_round_mode);
8931   END (lrint_upward);
8935 static void
8936 llrint_test (void)
8938   /* XXX this test is incomplete.  We need to have a way to specifiy
8939      the rounding method and test the critical cases.  So far, only
8940      unproblematic numbers are tested.  */
8941   /* TODO: missing +/-Inf as well as qNaN tests.  */
8943   START (llrint);
8945   TEST_f_L (llrint, 0.0, 0);
8946   TEST_f_L (llrint, minus_zero, 0);
8947   TEST_f_L (llrint, 0.2L, 0);
8948   TEST_f_L (llrint, -0.2L, 0);
8950   TEST_f_L (llrint, 1.4L, 1);
8951   TEST_f_L (llrint, -1.4L, -1);
8953   TEST_f_L (llrint, 8388600.3L, 8388600);
8954   TEST_f_L (llrint, -8388600.3L, -8388600);
8956   TEST_f_l (llrint, 1071930.0008, 1071930);
8958   /* Test boundary conditions.  */
8959   /* 0x1FFFFF */
8960   TEST_f_L (llrint, 2097151.0,2097151LL);
8961   /* 0x800000 */
8962   TEST_f_L (llrint, 8388608.0, 8388608LL);
8963   /* 0x1000000 */
8964   TEST_f_L (llrint, 16777216.0, 16777216LL);
8965   /* 0x20000000000 */
8966   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8967   /* 0x40000000000 */
8968   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8969   /* 0x1000000000000 */
8970   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8971   /* 0x10000000000000 */
8972   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8973   /* 0x10000080000000 */
8974   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8975   /* 0x20000000000000 */
8976   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8977   /* 0x80000000000000 */
8978   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8979   /* 0x100000000000000 */
8980   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8981 #ifdef TEST_LDOUBLE
8982   /* The input can only be represented in long double.  */
8983   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
8984   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
8985   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
8986   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
8987   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
8989   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
8990   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
8991   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
8992   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
8993   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
8995 # if LDBL_MANT_DIG > 100
8996   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
8997   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
8998   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
8999   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9000   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9001   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9003   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9004   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9005   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9006   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9007   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9008   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9009 #endif
9011   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9012   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9013   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9014   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9015   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9017   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9018   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9019   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9020   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9021   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9023 # if LDBL_MANT_DIG > 100
9024   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9025   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9026   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9027   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9028   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9029   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9031   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9032   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9033   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9034   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9035   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9036   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9037 #endif
9039   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9040   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9041   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9042   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9043   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9045   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9046   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9047   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9048   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9049   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9051 # if LDBL_MANT_DIG > 100
9052   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9053   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9054   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9055   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9056   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9057   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9058   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9059   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9060   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9061   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9062   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9063   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9064 # endif
9065 #endif
9067   END (llrint);
9070 static void
9071 llrint_test_tonearest (void)
9073   int save_round_mode;
9074   START (llrint_tonearest);
9076   save_round_mode = fegetround ();
9078   if (!fesetround (FE_TONEAREST))
9079     {
9080       TEST_f_L (llrint, 0.0, 0);
9081       TEST_f_L (llrint, minus_zero, 0);
9082       TEST_f_L (llrint, 0.2L, 0);
9083       TEST_f_L (llrint, -0.2L, 0);
9085       TEST_f_L (llrint, 1.4L, 1);
9086       TEST_f_L (llrint, -1.4L, -1);
9088       TEST_f_L (llrint, 8388600.3L, 8388600);
9089       TEST_f_L (llrint, -8388600.3L, -8388600);
9091       TEST_f_l (llrint, 1071930.0008, 1071930);
9093       /* Test boundary conditions.  */
9094       /* 0x1FFFFF */
9095       TEST_f_L (llrint, 2097151.0,2097151LL);
9096       /* 0x800000 */
9097       TEST_f_L (llrint, 8388608.0, 8388608LL);
9098       /* 0x1000000 */
9099       TEST_f_L (llrint, 16777216.0, 16777216LL);
9100       /* 0x20000000000 */
9101       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9102       /* 0x40000000000 */
9103       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9104       /* 0x1000000000000 */
9105       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9106       /* 0x10000000000000 */
9107       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9108       /* 0x10000080000000 */
9109       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9110       /* 0x20000000000000 */
9111       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9112       /* 0x80000000000000 */
9113       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9114       /* 0x100000000000000 */
9115       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9116 #ifdef TEST_LDOUBLE
9117       /* The input can only be represented in long double.  */
9118       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9119       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9120       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9121       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9122       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9124       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9125       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9126       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9127       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9128       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9130 # if LDBL_MANT_DIG > 100
9131       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9132       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9133       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9134       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9135       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9136       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9138       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9139       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9140       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9141       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9142       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9143       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9144 #endif
9146       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9147       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9148       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9149       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9150       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9152       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9153       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9154       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9155       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9156       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9158 # if LDBL_MANT_DIG > 100
9159       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9160       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9161       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9162       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9163       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9164       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9166       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9167       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9168       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9169       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9170       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9171       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9172 #endif
9174       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9175       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9176       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9177       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9178       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9180       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9181       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9182       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9183       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9184       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9186 # if LDBL_MANT_DIG > 100
9187       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9188       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9189       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9190       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9191       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9192       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9193       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9194       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9195       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9196       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9197       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9198       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9199 # endif
9200 #endif
9201     }
9203   fesetround (save_round_mode);
9205   END (llrint_tonearest);
9208 static void
9209 llrint_test_towardzero (void)
9211   int save_round_mode;
9212   START (llrint_towardzero);
9214   save_round_mode = fegetround ();
9216   if (!fesetround (FE_TOWARDZERO))
9217     {
9218       TEST_f_L (llrint, 0.0, 0);
9219       TEST_f_L (llrint, minus_zero, 0);
9220       TEST_f_L (llrint, 0.2L, 0);
9221       TEST_f_L (llrint, -0.2L, 0);
9223       TEST_f_L (llrint, 1.4L, 1);
9224       TEST_f_L (llrint, -1.4L, -1);
9226       TEST_f_L (llrint, 8388600.3L, 8388600);
9227       TEST_f_L (llrint, -8388600.3L, -8388600);
9229       TEST_f_l (llrint, 1071930.0008, 1071930);
9231       /* Test boundary conditions.  */
9232       /* 0x1FFFFF */
9233       TEST_f_L (llrint, 2097151.0,2097151LL);
9234       /* 0x800000 */
9235       TEST_f_L (llrint, 8388608.0, 8388608LL);
9236       /* 0x1000000 */
9237       TEST_f_L (llrint, 16777216.0, 16777216LL);
9238       /* 0x20000000000 */
9239       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9240       /* 0x40000000000 */
9241       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9242       /* 0x1000000000000 */
9243       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9244       /* 0x10000000000000 */
9245       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9246       /* 0x10000080000000 */
9247       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9248       /* 0x20000000000000 */
9249       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9250       /* 0x80000000000000 */
9251       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9252       /* 0x100000000000000 */
9253       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9254 #ifdef TEST_LDOUBLE
9255       /* The input can only be represented in long double.  */
9256       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
9257       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9258       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9259       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
9260       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
9262       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
9263       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9264       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9265       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
9266       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
9268 # if LDBL_MANT_DIG > 100
9269       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9270       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9271       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9272       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
9273       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
9274       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
9276       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9277       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9278       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9279       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
9280       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
9281       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
9282 #endif
9284       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
9285       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9286       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9287       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
9288       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
9290       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
9291       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9292       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9293       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
9294       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
9296 # if LDBL_MANT_DIG > 100
9297       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9298       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9299       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9300       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
9301       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
9302       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
9304       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9305       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9306       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9307       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
9308       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
9309       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
9310 #endif
9312       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
9313       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9314       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9315       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
9316       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
9318       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
9319       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9320       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9321       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
9322       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
9324 # if LDBL_MANT_DIG > 100
9325       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
9326       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
9327       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9328       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9329       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9330       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9331       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9332       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9333       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
9334       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
9335       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9336       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9337 # endif
9338 #endif
9339     }
9341   fesetround (save_round_mode);
9343   END (llrint_towardzero);
9346 static void
9347 llrint_test_downward (void)
9349   int save_round_mode;
9350   START (llrint_downward);
9352   save_round_mode = fegetround ();
9354   if (!fesetround (FE_DOWNWARD))
9355     {
9356       TEST_f_L (llrint, 0.0, 0);
9357       TEST_f_L (llrint, minus_zero, 0);
9358       TEST_f_L (llrint, 0.2L, 0);
9359       TEST_f_L (llrint, -0.2L, -1);
9361       TEST_f_L (llrint, 1.4L, 1);
9362       TEST_f_L (llrint, -1.4L, -2);
9364       TEST_f_L (llrint, 8388600.3L, 8388600);
9365       TEST_f_L (llrint, -8388600.3L, -8388601);
9367       TEST_f_l (llrint, 1071930.0008, 1071930);
9369       /* Test boundary conditions.  */
9370       /* 0x1FFFFF */
9371       TEST_f_L (llrint, 2097151.0,2097151LL);
9372       /* 0x800000 */
9373       TEST_f_L (llrint, 8388608.0, 8388608LL);
9374       /* 0x1000000 */
9375       TEST_f_L (llrint, 16777216.0, 16777216LL);
9376       /* 0x20000000000 */
9377       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9378       /* 0x40000000000 */
9379       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9380       /* 0x1000000000000 */
9381       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9382       /* 0x10000000000000 */
9383       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9384       /* 0x10000080000000 */
9385       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9386       /* 0x20000000000000 */
9387       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9388       /* 0x80000000000000 */
9389       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9390       /* 0x100000000000000 */
9391       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9392 #ifdef TEST_LDOUBLE
9393       /* The input can only be represented in long double.  */
9394       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
9395       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9396       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9397       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
9398       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
9400       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9401       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9402       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9403       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
9404       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
9405       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
9407       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9408       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
9409       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
9410       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9411       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9413       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
9414       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
9415       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
9416       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9417       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9418       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9420       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
9421       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9422       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9423       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
9424       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
9426       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9427       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9428       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9429       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
9430       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
9431       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
9433       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9434       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
9435       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
9436       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9437       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9439       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
9440       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
9441       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
9442       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9443       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9444       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9446       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
9447       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9448       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9449       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
9450       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
9452       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9453       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
9454       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
9455       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9456       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9458 # if LDBL_MANT_DIG > 100
9459       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
9460       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9461       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9462       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9463       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9464       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
9465       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9466       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
9467       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
9468       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9469       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9470       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9471 # endif
9472 #endif
9473     }
9475   fesetround (save_round_mode);
9477   END (llrint_downward);
9480 static void
9481 llrint_test_upward (void)
9483   int save_round_mode;
9484   START (llrint_upward);
9486   save_round_mode = fegetround ();
9488   if (!fesetround (FE_UPWARD))
9489     {
9490       TEST_f_L (llrint, 0.0, 0);
9491       TEST_f_L (llrint, minus_zero, 0);
9492       TEST_f_L (llrint, 0.2L, 1);
9493       TEST_f_L (llrint, -0.2L, 0);
9495       TEST_f_L (llrint, 1.4L, 2);
9496       TEST_f_L (llrint, -1.4L, -1);
9498       TEST_f_L (llrint, 8388600.3L, 8388601);
9499       TEST_f_L (llrint, -8388600.3L, -8388600);
9500 #ifndef TEST_FLOAT
9501       TEST_f_l (llrint, 1071930.0008, 1071931);
9502 #endif
9503       /* Test boundary conditions.  */
9504       /* 0x1FFFFF */
9505       TEST_f_L (llrint, 2097151.0,2097151LL);
9506       /* 0x800000 */
9507       TEST_f_L (llrint, 8388608.0, 8388608LL);
9508       /* 0x1000000 */
9509       TEST_f_L (llrint, 16777216.0, 16777216LL);
9510       /* 0x20000000000 */
9511       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9512       /* 0x40000000000 */
9513       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9514       /* 0x1000000000000 */
9515       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9516       /* 0x10000000000000 */
9517       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9518       /* 0x10000080000000 */
9519       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9520       /* 0x20000000000000 */
9521       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9522       /* 0x80000000000000 */
9523       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9524       /* 0x100000000000000 */
9525       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9526 #ifdef TEST_LDOUBLE
9527       /* The input can only be represented in long double.  */
9528       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9529       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
9530       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
9531       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9532       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9534       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
9535       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
9536       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
9537       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9538       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9539       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9541       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
9542       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9543       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9544       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
9545       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
9547       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9548       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9549       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9550       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
9551       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
9552       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
9554       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9555       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
9556       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
9557       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9558       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9560       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
9561       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
9562       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
9563       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9564       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9565       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9567       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
9568       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9569       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9570       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
9571       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
9573       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9574       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9575       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9576       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
9577       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
9578       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
9580       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9581       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
9582       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
9583       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9584       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9586       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
9587       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9588       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9589       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
9590       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
9592 # if LDBL_MANT_DIG > 100
9593       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9594       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
9595       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9596       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9597       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
9598       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9599       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
9600       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9601       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9602       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
9603       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9604       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9605 # endif
9606 #endif
9607     }
9609   fesetround (save_round_mode);
9611   END (llrint_upward);
9615 static void
9616 log_test (void)
9618   errno = 0;
9619   FUNC(log) (1);
9620   if (errno == ENOSYS)
9621     /* Function not implemented.  */
9622     return;
9623   START (log);
9625   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9626   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9628   TEST_f_f (log, 1, 0);
9630   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
9631   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
9632   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
9633   TEST_f_f (log, plus_infty, plus_infty);
9634   TEST_f_f (log, qnan_value, qnan_value);
9636   TEST_f_f (log, M_El, 1);
9637   TEST_f_f (log, 1.0 / M_El, -1);
9638   TEST_f_f (log, 2, M_LN2l);
9639   TEST_f_f (log, 10, M_LN10l);
9640   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
9642   END (log);
9646 static void
9647 log10_test (void)
9649   errno = 0;
9650   FUNC(log10) (1);
9651   if (errno == ENOSYS)
9652     /* Function not implemented.  */
9653     return;
9655   START (log10);
9657   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9658   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9660   TEST_f_f (log10, 1, 0);
9662   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
9663   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
9664   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
9665   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
9667   TEST_f_f (log10, plus_infty, plus_infty);
9668   TEST_f_f (log10, qnan_value, qnan_value);
9670   TEST_f_f (log10, 0.1L, -1);
9671   TEST_f_f (log10, 10.0, 1);
9672   TEST_f_f (log10, 100.0, 2);
9673   TEST_f_f (log10, 10000.0, 4);
9674   TEST_f_f (log10, M_El, M_LOG10El);
9675   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
9677   END (log10);
9681 static void
9682 log1p_test (void)
9684   errno = 0;
9685   FUNC(log1p) (0);
9686   if (errno == ENOSYS)
9687     /* Function not implemented.  */
9688     return;
9690   START (log1p);
9692   TEST_f_f (log1p, 0, 0);
9693   TEST_f_f (log1p, minus_zero, minus_zero);
9695   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9696   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
9697   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
9698   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
9700   TEST_f_f (log1p, plus_infty, plus_infty);
9701   TEST_f_f (log1p, qnan_value, qnan_value);
9703   TEST_f_f (log1p, M_El - 1.0, 1);
9705   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
9706   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
9708   END (log1p);
9712 static void
9713 log2_test (void)
9715   errno = 0;
9716   FUNC(log2) (1);
9717   if (errno == ENOSYS)
9718     /* Function not implemented.  */
9719     return;
9721   START (log2);
9723   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9724   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9726   TEST_f_f (log2, 1, 0);
9728   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
9729   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
9730   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
9732   TEST_f_f (log2, plus_infty, plus_infty);
9733   TEST_f_f (log2, qnan_value, qnan_value);
9735   TEST_f_f (log2, M_El, M_LOG2El);
9736   TEST_f_f (log2, 2.0, 1);
9737   TEST_f_f (log2, 16.0, 4);
9738   TEST_f_f (log2, 256.0, 8);
9739   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
9741   END (log2);
9745 static void
9746 logb_test (void)
9748   START (logb);
9750   TEST_f_f (logb, plus_infty, plus_infty);
9751   TEST_f_f (logb, minus_infty, plus_infty);
9753   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9755   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9756   TEST_f_f (logb, qnan_value, qnan_value);
9758   TEST_f_f (logb, 1, 0);
9759   TEST_f_f (logb, M_El, 1);
9760   TEST_f_f (logb, 1024, 10);
9761   TEST_f_f (logb, -2000, 10);
9763   TEST_f_f (logb, 0x0.1p-127, -131);
9764   TEST_f_f (logb, 0x0.01p-127, -135);
9765   TEST_f_f (logb, 0x0.011p-127, -135);
9766 #ifndef TEST_FLOAT
9767   TEST_f_f (logb, 0x0.8p-1022, -1023);
9768   TEST_f_f (logb, 0x0.1p-1022, -1026);
9769   TEST_f_f (logb, 0x0.00111p-1022, -1034);
9770   TEST_f_f (logb, 0x0.00001p-1022, -1042);
9771   TEST_f_f (logb, 0x0.000011p-1022, -1042);
9772   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
9773 #endif
9774 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
9775   TEST_f_f (logb, 0x1p-16400L, -16400);
9776   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
9777 #endif
9779   END (logb);
9782 static void
9783 logb_test_downward (void)
9785   int save_round_mode;
9786   errno = 0;
9788   FUNC(logb) (0);
9789   if (errno == ENOSYS)
9790     /* Function not implemented.  */
9791     return;
9793   START (logb_downward);
9795   save_round_mode = fegetround ();
9797   if (!fesetround (FE_DOWNWARD))
9798     {
9800       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
9801          should not return -0 from logb in any rounding mode.  PowerPC32 has
9802          failed with this test for power4 logb (and logbl on all PowerPC
9803          platforms) in the past due to instruction selection.  GCC PR 52775
9804          provides the availability of the fcfid insn in 32-bit mode which
9805          eliminates the use of fsub in this instance and prevents the negative
9806          signed 0.0.  */
9808       /* BZ #887  */
9809       TEST_f_f (logb, 1.000e+0, plus_zero);
9810     }
9812   fesetround (save_round_mode);
9814   END (logb_downward);
9817 static void
9818 lround_test (void)
9820   /* TODO: missing +/-Inf as well as qNaN tests.  */
9822   START (lround);
9824   TEST_f_l (lround, 0, 0);
9825   TEST_f_l (lround, minus_zero, 0);
9826   TEST_f_l (lround, 0.2L, 0.0);
9827   TEST_f_l (lround, -0.2L, 0);
9828   TEST_f_l (lround, 0.5, 1);
9829   TEST_f_l (lround, -0.5, -1);
9830   TEST_f_l (lround, 0.8L, 1);
9831   TEST_f_l (lround, -0.8L, -1);
9832   TEST_f_l (lround, 1.5, 2);
9833   TEST_f_l (lround, -1.5, -2);
9834   TEST_f_l (lround, 22514.5, 22515);
9835   TEST_f_l (lround, -22514.5, -22515);
9836   TEST_f_l (lround, 1071930.0008, 1071930);
9837 #ifndef TEST_FLOAT
9838   TEST_f_l (lround, 1073741824.01, 1073741824);
9839 # if LONG_MAX > 281474976710656
9840   TEST_f_l (lround, 281474976710656.025, 281474976710656);
9841   TEST_f_l (lround, 18014398509481974, 18014398509481974);
9842 # endif
9843   TEST_f_l (lround, 2097152.5, 2097153);
9844   TEST_f_l (lround, -2097152.5, -2097153);
9845   /* nextafter(0.5,-1)  */
9846   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
9847   /* nextafter(-0.5,1)  */
9848   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
9849 #else
9850   /* nextafter(0.5,-1)  */
9851   TEST_f_l (lround, 0x1.fffffp-2, 0);
9852   /* nextafter(-0.5,1)  */
9853   TEST_f_l (lround, -0x1.fffffp-2, 0);
9854   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
9855   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
9856 #endif
9857   END (lround);
9861 static void
9862 llround_test (void)
9864   /* TODO: missing +/-Inf as well as qNaN tests.  */
9866   START (llround);
9868   TEST_f_L (llround, 0, 0);
9869   TEST_f_L (llround, minus_zero, 0);
9870   TEST_f_L (llround, 0.2L, 0.0);
9871   TEST_f_L (llround, -0.2L, 0);
9872   TEST_f_L (llround, 0.5, 1);
9873   TEST_f_L (llround, -0.5, -1);
9874   TEST_f_L (llround, 0.8L, 1);
9875   TEST_f_L (llround, -0.8L, -1);
9876   TEST_f_L (llround, 1.5, 2);
9877   TEST_f_L (llround, -1.5, -2);
9878   TEST_f_L (llround, 22514.5, 22515);
9879   TEST_f_L (llround, -22514.5, -22515);
9880   TEST_f_l (llround, 1071930.0008, 1071930);
9881 #ifndef TEST_FLOAT
9882   TEST_f_L (llround, 2097152.5, 2097153);
9883   TEST_f_L (llround, -2097152.5, -2097153);
9884   TEST_f_L (llround, 34359738368.5, 34359738369ll);
9885   TEST_f_L (llround, -34359738368.5, -34359738369ll);
9886   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
9887 #endif
9889   /* Test boundary conditions.  */
9890   /* 0x1FFFFF */
9891   TEST_f_L (llround, 2097151.0, 2097151LL);
9892   /* 0x800000 */
9893   TEST_f_L (llround, 8388608.0, 8388608LL);
9894   /* 0x1000000 */
9895   TEST_f_L (llround, 16777216.0, 16777216LL);
9896   /* 0x20000000000 */
9897   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
9898   /* 0x40000000000 */
9899   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
9900   /* 0x1000000000000 */
9901   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
9902   /* 0x10000000000000 */
9903   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
9904   /* 0x10000080000000 */
9905   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
9906   /* 0x20000000000000 */
9907   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
9908   /* 0x80000000000000 */
9909   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
9910   /* 0x100000000000000 */
9911   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
9913 #ifndef TEST_FLOAT
9914   /* 0x100000000 */
9915   TEST_f_L (llround, 4294967295.5, 4294967296LL);
9916   /* 0x200000000 */
9917   TEST_f_L (llround, 8589934591.5, 8589934592LL);
9919   /* nextafter(0.5,-1)  */
9920   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
9921   /* nextafter(-0.5,1)  */
9922   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
9923   /* On PowerPC an exponent of '52' is the largest incrementally
9924    * representable sequence of whole-numbers in the 'double' range.  We test
9925    * lround to make sure that a guard bit set during the lround operation
9926    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
9927    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
9928    * rightmost bit set.  */
9929   /* +-(2^52+1)  */
9930   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
9931   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
9932   /* +-(2^53-1): Input is the last (positive and negative) incrementally
9933    * representable whole-number in the 'double' range that might round
9934    * erroneously.  */
9935   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
9936   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
9937 #else
9938   /* nextafter(0.5,-1)  */
9939   TEST_f_L (llround, 0x1.fffffep-2, 0);
9940   /* nextafter(-0.5,1)  */
9941   TEST_f_L (llround, -0x1.fffffep-2, 0);
9942   /* As above, on PowerPC an exponent of '23' is the largest incrementally
9943    * representable sequence of whole-numbers in the 'float' range.
9944    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
9945   TEST_f_L (llround, 0x1.000002p+23,8388609);
9946   TEST_f_L (llround, -0x1.000002p+23,-8388609);
9947   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
9948   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
9949 #endif
9952 #ifdef TEST_LDOUBLE
9953   /* The input can only be represented in long double.  */
9954   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
9955   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
9956   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
9957   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
9958   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
9960 # if LDBL_MANT_DIG > 100
9961   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
9962   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
9963   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
9964   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
9965   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
9966   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
9968   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
9969   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
9970   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
9971   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
9972   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
9973   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
9974 # endif
9976   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
9977   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
9978   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
9979   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
9980   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
9982   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
9983   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
9984   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
9985   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
9986   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
9988 # if LDBL_MANT_DIG > 100
9989   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
9990   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
9991   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
9992   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
9993   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
9994   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
9996   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
9997   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
9998   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
9999   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
10000   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
10001   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
10002 # endif
10004   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
10005   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
10006   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
10007   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
10008   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
10010   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
10011   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
10012   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
10013   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
10014   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
10016   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
10017   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
10018   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
10019   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
10020   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
10022   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
10023   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
10024   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
10025   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
10026   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
10027   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
10028 #endif
10030   END (llround);
10033 static void
10034 modf_test (void)
10036   FLOAT x;
10038   START (modf);
10040   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
10041   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
10042   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
10043   TEST_fF_f1 (modf, 0, 0, 0);
10044   TEST_fF_f1 (modf, 1.5, 0.5, 1);
10045   TEST_fF_f1 (modf, 2.5, 0.5, 2);
10046   TEST_fF_f1 (modf, -2.5, -0.5, -2);
10047   TEST_fF_f1 (modf, 20, 0, 20);
10048   TEST_fF_f1 (modf, 21, 0, 21);
10049   TEST_fF_f1 (modf, 89.5, 0.5, 89);
10051   END (modf);
10055 static void
10056 nearbyint_test (void)
10058   START (nearbyint);
10060   TEST_f_f (nearbyint, 0.0, 0.0);
10061   TEST_f_f (nearbyint, minus_zero, minus_zero);
10062   TEST_f_f (nearbyint, plus_infty, plus_infty);
10063   TEST_f_f (nearbyint, minus_infty, minus_infty);
10064   TEST_f_f (nearbyint, qnan_value, qnan_value);
10066   /* Subnormal values */
10067   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
10068   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
10070   /* Default rounding mode is round to nearest.  */
10071   TEST_f_f (nearbyint, 0.5, 0.0);
10072   TEST_f_f (nearbyint, 1.5, 2.0);
10073   TEST_f_f (nearbyint, -0.5, minus_zero);
10074   TEST_f_f (nearbyint, -1.5, -2.0);
10076   TEST_f_f (nearbyint, 262144.75, 262145.0);
10077   TEST_f_f (nearbyint, 262142.75, 262143.0);
10078   TEST_f_f (nearbyint, 524286.75, 524287.0);
10079   TEST_f_f (nearbyint, 524288.75, 524289.0);
10081   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
10082   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
10083   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
10084   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
10085   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
10086   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
10087   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
10088   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
10089   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
10090   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
10091 #ifndef TEST_FLOAT
10092   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
10093   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
10094   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
10095   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
10096   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
10097   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
10098   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
10099   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
10100   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
10101   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
10102 #endif
10104   END (nearbyint);
10107 static void
10108 nextafter_test (void)
10111   START (nextafter);
10113   TEST_ff_f (nextafter, 0, 0, 0);
10114   TEST_ff_f (nextafter, minus_zero, 0, 0);
10115   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
10116   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
10118   TEST_ff_f (nextafter, 9, 9, 9);
10119   TEST_ff_f (nextafter, -9, -9, -9);
10120   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
10121   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
10123   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
10124   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
10125   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
10127   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
10128                          LDBL_MAX, DBL_MAX, FLT_MAX);
10129   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
10130   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
10132 #ifdef TEST_LDOUBLE
10133   // XXX Enable once gcc is fixed.
10134   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
10135 #endif
10137   /* XXX We need the hexadecimal FP number representation here for further
10138      tests.  */
10140   END (nextafter);
10144 static void
10145 nexttoward_test (void)
10147   START (nexttoward);
10148   TEST_ff_f (nexttoward, 0, 0, 0);
10149   TEST_ff_f (nexttoward, minus_zero, 0, 0);
10150   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
10151   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
10153   TEST_ff_f (nexttoward, 9, 9, 9);
10154   TEST_ff_f (nexttoward, -9, -9, -9);
10155   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
10156   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
10158   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
10159   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
10160   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
10162 #ifdef TEST_FLOAT
10163   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
10164   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
10165   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
10166   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
10167   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
10168   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
10169   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
10170   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
10171   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
10172   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
10173   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
10174   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
10175   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
10176 # if LDBL_MANT_DIG >= 64
10177   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
10178   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
10179   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
10180   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
10181 # endif
10182 # if LDBL_MANT_DIG >= 106
10183   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
10184   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
10185   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
10186   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
10187 # endif
10188 # if LDBL_MANT_DIG >= 113
10189   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
10190   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
10191   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
10192   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
10193 # endif
10194 #endif
10195 #ifdef TEST_DOUBLE
10196   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
10197   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
10198   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
10199   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
10200   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
10201   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
10202   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
10203   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
10204   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
10205   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
10206   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
10207   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
10208   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
10209   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
10210 # if LDBL_MANT_DIG >= 64
10211   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
10212   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
10213   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
10214   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
10215 # endif
10216 # if LDBL_MANT_DIG >= 106
10217   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
10218   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
10219   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
10220   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
10221 # endif
10222 # if LDBL_MANT_DIG >= 113
10223   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
10224   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
10225   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
10226   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
10227 # endif
10228 #endif
10230   END (nexttoward);
10234 static void
10235 pow_test (void)
10238   errno = 0;
10239   FUNC(pow) (0, 0);
10240   if (errno == ENOSYS)
10241     /* Function not implemented.  */
10242     return;
10244   START (pow);
10246   TEST_ff_f (pow, 0, 0, 1);
10247   TEST_ff_f (pow, 0, minus_zero, 1);
10248   TEST_ff_f (pow, minus_zero, 0, 1);
10249   TEST_ff_f (pow, minus_zero, minus_zero, 1);
10251   TEST_ff_f (pow, 10, 0, 1);
10252   TEST_ff_f (pow, 10, minus_zero, 1);
10253   TEST_ff_f (pow, -10, 0, 1);
10254   TEST_ff_f (pow, -10, minus_zero, 1);
10256   TEST_ff_f (pow, qnan_value, 0, 1);
10257   TEST_ff_f (pow, qnan_value, minus_zero, 1);
10260 #ifndef TEST_INLINE
10261   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
10262   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
10263   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
10264   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
10266   TEST_ff_f (pow, 0.9L, plus_infty, 0);
10267   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
10268   TEST_ff_f (pow, -0.9L, plus_infty, 0);
10269   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
10271   TEST_ff_f (pow, 1.1L, minus_infty, 0);
10272   TEST_ff_f (pow, plus_infty, minus_infty, 0);
10273   TEST_ff_f (pow, -1.1L, minus_infty, 0);
10274   TEST_ff_f (pow, minus_infty, minus_infty, 0);
10276   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
10277   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
10278   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
10279   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
10281   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
10282   TEST_ff_f (pow, plus_infty, 1, plus_infty);
10283   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
10284   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
10286   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
10287   TEST_ff_f (pow, plus_infty, -1, 0);
10288   TEST_ff_f (pow, plus_infty, -1e7L, 0);
10289   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
10291   TEST_ff_f (pow, minus_infty, 1, minus_infty);
10292   TEST_ff_f (pow, minus_infty, 11, minus_infty);
10293   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
10295   TEST_ff_f (pow, minus_infty, 2, plus_infty);
10296   TEST_ff_f (pow, minus_infty, 12, plus_infty);
10297   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
10298   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
10299   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
10300   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
10301   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
10302   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
10304   TEST_ff_f (pow, minus_infty, -1, minus_zero);
10305   TEST_ff_f (pow, minus_infty, -11, minus_zero);
10306   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
10308   TEST_ff_f (pow, minus_infty, -2, 0);
10309   TEST_ff_f (pow, minus_infty, -12, 0);
10310   TEST_ff_f (pow, minus_infty, -1002, 0);
10311   TEST_ff_f (pow, minus_infty, -0.1L, 0);
10312   TEST_ff_f (pow, minus_infty, -1.1L, 0);
10313   TEST_ff_f (pow, minus_infty, -11.1L, 0);
10314   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
10315   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
10316 #endif
10318   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
10319   TEST_ff_f (pow, 0, qnan_value, qnan_value);
10320   TEST_ff_f (pow, 1, qnan_value, 1);
10321   TEST_ff_f (pow, -1, qnan_value, qnan_value);
10322   TEST_ff_f (pow, qnan_value, 1, qnan_value);
10323   TEST_ff_f (pow, qnan_value, -1, qnan_value);
10325   /* pow (x, qNaN) == qNaN.  */
10326   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
10327   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
10328   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
10329   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
10330   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
10332   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
10333   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
10334   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
10335   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
10336   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
10337   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
10338   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
10339   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
10341   TEST_ff_f (pow, 1, plus_infty, 1);
10342   TEST_ff_f (pow, -1, plus_infty, 1);
10343   TEST_ff_f (pow, 1, minus_infty, 1);
10344   TEST_ff_f (pow, -1, minus_infty, 1);
10345   TEST_ff_f (pow, 1, 1, 1);
10346   TEST_ff_f (pow, 1, -1, 1);
10347   TEST_ff_f (pow, 1, 1.25, 1);
10348   TEST_ff_f (pow, 1, -1.25, 1);
10349   TEST_ff_f (pow, 1, 0x1p62L, 1);
10350   TEST_ff_f (pow, 1, 0x1p63L, 1);
10351   TEST_ff_f (pow, 1, 0x1p64L, 1);
10352   TEST_ff_f (pow, 1, 0x1p72L, 1);
10353   TEST_ff_f (pow, 1, min_subnorm_value, 1);
10354   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
10356   /* pow (x, +-0) == 1.  */
10357   TEST_ff_f (pow, plus_infty, 0, 1);
10358   TEST_ff_f (pow, plus_infty, minus_zero, 1);
10359   TEST_ff_f (pow, minus_infty, 0, 1);
10360   TEST_ff_f (pow, minus_infty, minus_zero, 1);
10361   TEST_ff_f (pow, 32.75L, 0, 1);
10362   TEST_ff_f (pow, 32.75L, minus_zero, 1);
10363   TEST_ff_f (pow, -32.75L, 0, 1);
10364   TEST_ff_f (pow, -32.75L, minus_zero, 1);
10365   TEST_ff_f (pow, 0x1p72L, 0, 1);
10366   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
10367   TEST_ff_f (pow, 0x1p-72L, 0, 1);
10368   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
10370   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
10371   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
10372   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
10373   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
10374   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10375   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10376   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10377   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10379   errno = 0;
10380   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10381   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10382   errno = 0;
10383   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10384   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10385   errno = 0;
10386   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10387   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10388 #ifndef TEST_FLOAT
10389   errno = 0;
10390   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10391   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10392 #endif
10393 #ifdef TEST_LDOUBLE
10394 # if LDBL_MANT_DIG >= 64
10395   errno = 0;
10396   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10397   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10398 # endif
10399 # if LDBL_MANT_DIG >= 106
10400   errno = 0;
10401   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10402   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10403 # endif
10404 # if LDBL_MANT_DIG >= 113
10405   errno = 0;
10406   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10407   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10408 # endif
10409 #endif
10410   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10411   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10412   errno = 0;
10413   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10414   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10415   errno = 0;
10416   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10417   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10418   errno = 0;
10419   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10420   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10421 #ifndef TEST_FLOAT
10422   errno = 0;
10423   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10424   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10425   errno = 0;
10426   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10427   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10428 #endif
10429 #ifdef TEST_LDOUBLE
10430 # if LDBL_MANT_DIG >= 64
10431   errno = 0;
10432   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10433   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10434   errno = 0;
10435   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10436   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10437 # endif
10438 # if LDBL_MANT_DIG >= 106
10439   errno = 0;
10440   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10441   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10442   errno = 0;
10443   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10444   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10445 # endif
10446 # if LDBL_MANT_DIG >= 113
10447   errno = 0;
10448   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10449   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10450   errno = 0;
10451   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10452   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10453 # endif
10454 #endif
10456   errno = 0;
10457   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10458   check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10459   errno = 0;
10460   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10461   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10462   errno = 0;
10463   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10464   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10465   errno = 0;
10466   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10467   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10468   errno = 0;
10469   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10470   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10471   errno = 0;
10472   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10473   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10474   errno = 0;
10475   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10476   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10477   errno = 0;
10478   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10479   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10480   errno = 0;
10481   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10482   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10483   errno = 0;
10484   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10485   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10486   errno = 0;
10487   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10488   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10489   errno = 0;
10490   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10491   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10493   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
10494   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
10495   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
10496   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
10498   TEST_ff_f (pow, 0, 1, 0);
10499   TEST_ff_f (pow, 0, 11, 0);
10501   TEST_ff_f (pow, minus_zero, 1, minus_zero);
10502   TEST_ff_f (pow, minus_zero, 11, minus_zero);
10504   TEST_ff_f (pow, 0, 2, 0);
10505   TEST_ff_f (pow, 0, 11.1L, 0);
10507   TEST_ff_f (pow, minus_zero, 2, 0);
10508   TEST_ff_f (pow, minus_zero, 11.1L, 0);
10509   TEST_ff_f (pow, 0, plus_infty, 0);
10510   TEST_ff_f (pow, minus_zero, plus_infty, 0);
10511   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
10512   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
10514 #ifndef TEST_INLINE
10515   /* pow (x, +inf) == +inf for |x| > 1.  */
10516   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
10518   /* pow (x, +inf) == +0 for |x| < 1.  */
10519   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
10521   /* pow (x, -inf) == +0 for |x| > 1.  */
10522   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
10524   /* pow (x, -inf) == +inf for |x| < 1.  */
10525   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
10526 #endif
10528   /* pow (+inf, y) == +inf for y > 0.  */
10529   TEST_ff_f (pow, plus_infty, 2, plus_infty);
10530   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
10531 #ifndef TEST_FLOAT
10532   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
10533 #endif
10534 #ifdef TEST_LDOUBLE
10535 # if LDBL_MANT_DIG >= 64
10536   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
10537 # endif
10538 # if LDBL_MANT_DIG >= 106
10539   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
10540 # endif
10541 # if LDBL_MANT_DIG >= 113
10542   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
10543 # endif
10544 #endif
10545   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
10546   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
10547   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
10549   /* pow (+inf, y) == +0 for y < 0.  */
10550   TEST_ff_f (pow, plus_infty, -1, 0.0);
10551   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
10552 #ifndef TEST_FLOAT
10553   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
10554 #endif
10555 #ifdef TEST_LDOUBLE
10556 # if LDBL_MANT_DIG >= 64
10557   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
10558 # endif
10559 # if LDBL_MANT_DIG >= 106
10560   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
10561 # endif
10562 # if LDBL_MANT_DIG >= 113
10563   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
10564 # endif
10565 #endif
10566   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
10567   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
10568   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
10570   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
10571   TEST_ff_f (pow, minus_infty, 27, minus_infty);
10572   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
10573   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
10574 #ifndef TEST_FLOAT
10575   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
10576   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
10577 #endif
10578 #ifdef TEST_LDOUBLE
10579 # if LDBL_MANT_DIG >= 64
10580   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
10581   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
10582 # endif
10583 # if LDBL_MANT_DIG >= 106
10584   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
10585   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
10586 # endif
10587 # if LDBL_MANT_DIG >= 113
10588   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
10589   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
10590 # endif
10591 #endif
10593   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
10594   TEST_ff_f (pow, minus_infty, 28, plus_infty);
10595   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
10596   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
10597   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
10599   /* pow (-inf, y) == -0 for y an odd integer < 0. */
10600   TEST_ff_f (pow, minus_infty, -3, minus_zero);
10601   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
10602   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
10603 #ifndef TEST_FLOAT
10604   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
10605   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
10606 #endif
10607 #ifdef TEST_LDOUBLE
10608 # if LDBL_MANT_DIG >= 64
10609   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
10610   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
10611 # endif
10612 # if LDBL_MANT_DIG >= 106
10613   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
10614   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
10615 # endif
10616 # if LDBL_MANT_DIG >= 113
10617   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
10618   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
10619 # endif
10620 #endif
10621   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
10622   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
10623   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
10624   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
10625   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
10627   /* pow (+0, y) == +0 for y an odd integer > 0.  */
10628   TEST_ff_f (pow, 0.0, 27, 0.0);
10629   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
10630 #ifndef TEST_FLOAT
10631   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
10632 #endif
10633 #ifdef TEST_LDOUBLE
10634 # if LDBL_MANT_DIG >= 64
10635   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
10636 # endif
10637 # if LDBL_MANT_DIG >= 106
10638   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
10639 # endif
10640 # if LDBL_MANT_DIG >= 113
10641   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
10642 # endif
10643 #endif
10645   /* pow (-0, y) == -0 for y an odd integer > 0.  */
10646   TEST_ff_f (pow, minus_zero, 27, minus_zero);
10647   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
10648   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
10649 #ifndef TEST_FLOAT
10650   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
10651   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
10652 #endif
10653 #ifdef TEST_LDOUBLE
10654 # if LDBL_MANT_DIG >= 64
10655   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
10656   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
10657 # endif
10658 # if LDBL_MANT_DIG >= 106
10659   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
10660   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
10661 # endif
10662 # if LDBL_MANT_DIG >= 113
10663   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
10664   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
10665 # endif
10666 #endif
10668   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
10669   TEST_ff_f (pow, 0.0, 4, 0.0);
10670   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
10671   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
10672   TEST_ff_f (pow, 0.0, max_value, 0.0);
10673   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
10675   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
10676   TEST_ff_f (pow, minus_zero, 4, 0.0);
10677   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
10678   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
10679   TEST_ff_f (pow, minus_zero, max_value, 0.0);
10680   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
10682   TEST_ff_f (pow, 16, 0.25L, 2);
10683   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
10684   TEST_ff_f (pow, 2, 4, 16);
10685   TEST_ff_f (pow, 256, 8, 0x1p64L);
10687   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
10689 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
10690   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
10691 #endif
10693   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
10694   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
10695 #ifndef TEST_FLOAT
10696   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
10697   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
10698 #endif
10699 #ifdef TEST_LDOUBLE
10700 # if LDBL_MANT_DIG >= 64
10701   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
10702   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
10703 # endif
10704 # if LDBL_MANT_DIG >= 106
10705   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10706   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10707 # endif
10708 # if LDBL_MANT_DIG >= 113
10709   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10710   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10711 # endif
10712 #endif
10713   TEST_ff_f (pow, -1.0, -max_value, 1.0);
10715   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
10716   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
10717 #ifndef TEST_FLOAT
10718   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
10719   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
10720 #endif
10721 #ifdef TEST_LDOUBLE
10722 # if LDBL_MANT_DIG >= 64
10723   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
10724   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
10725 # endif
10726 # if LDBL_MANT_DIG >= 106
10727   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10728   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10729 # endif
10730 # if LDBL_MANT_DIG >= 113
10731   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10732   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10733 # endif
10734 #endif
10735   TEST_ff_f (pow, -1.0, max_value, 1.0);
10737   TEST_ff_f (pow, -2.0, 126, 0x1p126);
10738   TEST_ff_f (pow, -2.0, 127, -0x1p127);
10739   /* Allow inexact results for float to be considered to underflow.  */
10740   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
10741   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
10743   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10744   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10745 #ifndef TEST_FLOAT
10746   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10747   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10748 #endif
10749 #ifdef TEST_LDOUBLE
10750 # if LDBL_MANT_DIG >= 64
10751   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10752   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10753 # endif
10754 # if LDBL_MANT_DIG >= 106
10755   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10756   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10757 # endif
10758 # if LDBL_MANT_DIG >= 113
10759   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10760   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10761 # endif
10762 #endif
10763   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10765   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10766   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10767 #ifndef TEST_FLOAT
10768   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10769   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10770 #endif
10771 #ifdef TEST_LDOUBLE
10772 # if LDBL_MANT_DIG >= 64
10773   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10774   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10775 # endif
10776 # if LDBL_MANT_DIG >= 106
10777   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10778   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10779 # endif
10780 # if LDBL_MANT_DIG >= 113
10781   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10782   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10783 # endif
10784 #endif
10785   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
10787   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
10788   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
10789   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10790   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
10791   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
10792   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
10793   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
10795   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10796   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10797 #ifndef TEST_FLOAT
10798   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10799   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10800 #endif
10801 #ifdef TEST_LDOUBLE
10802 # if LDBL_MANT_DIG >= 64
10803   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10804   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10805 # endif
10806 # if LDBL_MANT_DIG >= 106
10807   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10808   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10809 # endif
10810 # if LDBL_MANT_DIG >= 113
10811   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10812   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10813 # endif
10814 #endif
10815   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10817   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10818   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10819 #ifndef TEST_FLOAT
10820   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10821   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10822 #endif
10823 #ifdef TEST_LDOUBLE
10824 # if LDBL_MANT_DIG >= 64
10825   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10826   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10827 # endif
10828 # if LDBL_MANT_DIG >= 106
10829   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10830   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10831 # endif
10832 # if LDBL_MANT_DIG >= 113
10833   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10834   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10835 # endif
10836 #endif
10837   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
10839   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
10840   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
10841   TEST_ff_f (pow, -0.5, -126, 0x1p126);
10842   TEST_ff_f (pow, -0.5, -127, -0x1p127);
10844   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10845   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10846 #ifndef TEST_FLOAT
10847   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10848   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10849 #endif
10850 #ifdef TEST_LDOUBLE
10851 # if LDBL_MANT_DIG >= 64
10852   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10853   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10854 # endif
10855 # if LDBL_MANT_DIG >= 106
10856   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10857   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10858 # endif
10859 # if LDBL_MANT_DIG >= 113
10860   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10861   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10862 # endif
10863 #endif
10864   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
10866   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10867   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10868 #ifndef TEST_FLOAT
10869   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10870   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10871 #endif
10872 #ifdef TEST_LDOUBLE
10873 # if LDBL_MANT_DIG >= 64
10874   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10875   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10876 # endif
10877 # if LDBL_MANT_DIG >= 106
10878   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10879   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10880 # endif
10881 # if LDBL_MANT_DIG >= 113
10882   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10883   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10884 # endif
10885 #endif
10886   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
10888   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
10889   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
10890   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10891   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
10892   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
10893   /* Allow inexact results to be considered to underflow.  */
10894   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
10895   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
10896   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
10898   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10899   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10900 #ifndef TEST_FLOAT
10901   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10902   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10903 #endif
10904 #ifdef TEST_LDOUBLE
10905 # if LDBL_MANT_DIG >= 64
10906   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10907   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10908 # endif
10909 # if LDBL_MANT_DIG >= 106
10910   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10911   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10912 # endif
10913 # if LDBL_MANT_DIG >= 113
10914   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10915   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10916 # endif
10917 #endif
10918   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
10920   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10921   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10922 #ifndef TEST_FLOAT
10923   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10924   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10925 #endif
10926 #ifdef TEST_LDOUBLE
10927 # if LDBL_MANT_DIG >= 64
10928   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10929   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10930 # endif
10931 # if LDBL_MANT_DIG >= 106
10932   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10933   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10934 # endif
10935 # if LDBL_MANT_DIG >= 113
10936   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10937   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10938 # endif
10939 #endif
10940   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
10942   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
10943   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
10944   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
10945   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
10946   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
10947   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
10948   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
10949   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
10950   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
10951   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
10952   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
10953   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
10954   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
10955   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
10956   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
10958 #if !defined TEST_FLOAT
10959   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
10960   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
10961   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
10962   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
10963 #endif
10965 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
10966   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
10967   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
10968   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
10969   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
10970 #endif
10972 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
10973   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
10974   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
10975   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
10976   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
10977 #endif
10979 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
10980   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
10981   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
10982   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
10983   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
10984   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
10985   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
10986   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
10987   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
10988   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
10989   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
10990   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
10991   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
10992   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
10993 #endif
10995   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
10996   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
10997   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
10998   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
10999   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
11000   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
11001   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
11002   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
11004   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
11006   END (pow);
11010 static void
11011 pow_test_tonearest (void)
11013   int save_round_mode;
11014   errno = 0;
11015   FUNC(pow) (0, 0);
11016   if (errno == ENOSYS)
11017     /* Function not implemented.  */
11018     return;
11020   START (pow_tonearest);
11022   save_round_mode = fegetround ();
11024   if (!fesetround (FE_TONEAREST))
11025     {
11026       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11027       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11028     }
11030   fesetround (save_round_mode);
11032   END (pow_tonearest);
11036 static void
11037 pow_test_towardzero (void)
11039   int save_round_mode;
11040   errno = 0;
11041   FUNC(pow) (0, 0);
11042   if (errno == ENOSYS)
11043     /* Function not implemented.  */
11044     return;
11046   START (pow_towardzero);
11048   save_round_mode = fegetround ();
11050   if (!fesetround (FE_TOWARDZERO))
11051     {
11052       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11053       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11054     }
11056   fesetround (save_round_mode);
11058   END (pow_towardzero);
11062 static void
11063 pow_test_downward (void)
11065   int save_round_mode;
11066   errno = 0;
11067   FUNC(pow) (0, 0);
11068   if (errno == ENOSYS)
11069     /* Function not implemented.  */
11070     return;
11072   START (pow_downward);
11074   save_round_mode = fegetround ();
11076   if (!fesetround (FE_DOWNWARD))
11077     {
11078       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11079       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11080     }
11082   fesetround (save_round_mode);
11084   END (pow_downward);
11088 static void
11089 pow_test_upward (void)
11091   int save_round_mode;
11092   errno = 0;
11093   FUNC(pow) (0, 0);
11094   if (errno == ENOSYS)
11095     /* Function not implemented.  */
11096     return;
11098   START (pow_upward);
11100   save_round_mode = fegetround ();
11102   if (!fesetround (FE_UPWARD))
11103     {
11104       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11105       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11106     }
11108   fesetround (save_round_mode);
11110   END (pow_upward);
11114 static void
11115 remainder_test (void)
11117   errno = 0;
11118   FUNC(remainder) (1.625, 1.0);
11119   if (errno == ENOSYS)
11120     /* Function not implemented.  */
11121     return;
11123   START (remainder);
11125   errno = 0;
11126   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION);
11127   check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11128   errno = 0;
11129   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION);
11130   check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11131   errno = 0;
11132   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
11133   check_int ("errno for remainder(INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11134   errno = 0;
11135   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION);
11136   check_int ("errno for remainder(INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11137   errno = 0;
11138   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION);
11139   check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
11140   errno = 0;
11141   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION);
11142   check_int ("errno for remainder(INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
11143   errno = 0;
11144   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
11145   check_int ("errno for remainder(-INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11146   errno = 0;
11147   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION);
11148   check_int ("errno for remainder(-INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11149   errno = 0;
11150   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION);
11151   check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
11152   errno = 0;
11153   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION);
11154   check_int ("errno for remainder(-INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
11155   errno = 0;
11156   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value);
11157   check_int ("errno for remainder(qNAN, qNAN) unchanged", errno, 0, 0, 0, 0);
11158   errno = 0;
11159   TEST_ff_f (remainder, 0, qnan_value, qnan_value);
11160   check_int ("errno for remainder(0, qNAN) unchanged", errno, 0, 0, 0, 0);
11161   errno = 0;
11162   TEST_ff_f (remainder, qnan_value, 0, qnan_value);
11163   check_int ("errno for remainder(qNaN, 0) unchanged", errno, 0, 0, 0, 0);
11165   errno = 0;
11166   TEST_ff_f (remainder, 7.0, plus_infty, 7.0);
11167   check_int ("errno for remainder(7.0, INF) unchanged", errno, 0, 0, 0, 0);
11168   errno = 0;
11169   TEST_ff_f (remainder, 7.0, minus_infty, 7.0);
11170   check_int ("errno for remainder(7.0, -INF) unchanged", errno, 0, 0, 0, 0);
11172   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
11173   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
11174   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
11175   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
11176   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
11177   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
11179   END (remainder);
11182 static void
11183 remquo_test (void)
11185   /* x is needed.  */
11186   int x;
11188   errno = 0;
11189   FUNC(remquo) (1.625, 1.0, &x);
11190   if (errno == ENOSYS)
11191     /* Function not implemented.  */
11192     return;
11194   START (remquo);
11196   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
11197   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
11198   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
11199   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
11200   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
11202   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
11203   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
11204   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
11205   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
11207   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
11208   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
11210   END (remquo);
11213 static void
11214 rint_test (void)
11216   /* TODO: missing qNaN tests.  */
11218   START (rint);
11220   TEST_f_f (rint, 0.0, 0.0);
11221   TEST_f_f (rint, minus_zero, minus_zero);
11222   TEST_f_f (rint, plus_infty, plus_infty);
11223   TEST_f_f (rint, minus_infty, minus_infty);
11225   /* Default rounding mode is round to even.  */
11226   TEST_f_f (rint, 0.5, 0.0);
11227   TEST_f_f (rint, 1.5, 2.0);
11228   TEST_f_f (rint, 2.5, 2.0);
11229   TEST_f_f (rint, 3.5, 4.0);
11230   TEST_f_f (rint, 4.5, 4.0);
11231   TEST_f_f (rint, -0.5, -0.0);
11232   TEST_f_f (rint, -1.5, -2.0);
11233   TEST_f_f (rint, -2.5, -2.0);
11234   TEST_f_f (rint, -3.5, -4.0);
11235   TEST_f_f (rint, -4.5, -4.0);
11236   TEST_f_f (rint, 0.1, 0.0);
11237   TEST_f_f (rint, 0.25, 0.0);
11238   TEST_f_f (rint, 0.625, 1.0);
11239   TEST_f_f (rint, -0.1, -0.0);
11240   TEST_f_f (rint, -0.25, -0.0);
11241   TEST_f_f (rint, -0.625, -1.0);
11242   TEST_f_f (rint, 262144.75, 262145.0);
11243   TEST_f_f (rint, 262142.75, 262143.0);
11244   TEST_f_f (rint, 524286.75, 524287.0);
11245   TEST_f_f (rint, 524288.75, 524289.0);
11246   TEST_f_f (rint, 1048576.75, 1048577.0);
11247   TEST_f_f (rint, 2097152.75, 2097153.0);
11248   TEST_f_f (rint, -1048576.75, -1048577.0);
11249   TEST_f_f (rint, -2097152.75, -2097153.0);
11250 #ifndef TEST_FLOAT
11251   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11252   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11253   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11254   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11255   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11256   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11257   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11258   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11259   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11260   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11261 #endif
11262 #ifdef TEST_LDOUBLE
11263   /* The result can only be represented in long double.  */
11264   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11265   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11266   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11267   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11268   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11270 # if LDBL_MANT_DIG > 100
11271   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11272   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11273   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11274 # endif
11276   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11277   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11278   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11279   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11280   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11282 # if LDBL_MANT_DIG > 100
11283   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11284   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11285   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11287   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11288   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11289   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11290   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11291   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11292   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11294   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11295   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11296   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11297   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11298   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11299   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11300 # endif
11302   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
11303   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
11304   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
11305   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
11306   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
11308   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
11309   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
11310   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
11311   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
11312   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
11314   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
11315   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
11316   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
11317   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
11318   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
11320   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
11321   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
11322   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
11323   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
11324   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
11326   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
11327   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
11328   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
11329   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
11330   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
11331 #endif
11333   END (rint);
11336 static void
11337 rint_test_tonearest (void)
11339   int save_round_mode;
11340   START (rint_tonearest);
11342   save_round_mode = fegetround ();
11344   if (!fesetround (FE_TONEAREST))
11345     {
11346       TEST_f_f (rint, 2.0, 2.0);
11347       TEST_f_f (rint, 1.5, 2.0);
11348       TEST_f_f (rint, 1.0, 1.0);
11349       TEST_f_f (rint, 0.5, 0.0);
11350       TEST_f_f (rint, 0.0, 0.0);
11351       TEST_f_f (rint, minus_zero, minus_zero);
11352       TEST_f_f (rint, -0.5, -0.0);
11353       TEST_f_f (rint, -1.0, -1.0);
11354       TEST_f_f (rint, -1.5, -2.0);
11355       TEST_f_f (rint, -2.0, -2.0);
11356       TEST_f_f (rint, 0.1, 0.0);
11357       TEST_f_f (rint, 0.25, 0.0);
11358       TEST_f_f (rint, 0.625, 1.0);
11359       TEST_f_f (rint, -0.1, -0.0);
11360       TEST_f_f (rint, -0.25, -0.0);
11361       TEST_f_f (rint, -0.625, -1.0);
11362       TEST_f_f (rint, 1048576.75, 1048577.0);
11363       TEST_f_f (rint, 2097152.75, 2097153.0);
11364       TEST_f_f (rint, -1048576.75, -1048577.0);
11365       TEST_f_f (rint, -2097152.75, -2097153.0);
11366 #ifndef TEST_FLOAT
11367       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11368       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11369       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11370       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11371       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11372       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11373       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11374       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11375       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11376       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11377 #endif
11378 #ifdef TEST_LDOUBLE
11379       /* The result can only be represented in long double.  */
11380       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11381       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11382       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11383       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11384       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11385 # if LDBL_MANT_DIG > 100
11386       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11387       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11388       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11389 # endif
11390       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11391       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11392       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11393       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11394       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11395 # if LDBL_MANT_DIG > 100
11396       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11397       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11398       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11400       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11401       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11402       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11403       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11404       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11405       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11407       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11408       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11409       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11410       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11411       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11412       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11413 # endif
11414 #endif
11415     }
11417   fesetround (save_round_mode);
11419   END (rint_tonearest);
11422 static void
11423 rint_test_towardzero (void)
11425   int save_round_mode;
11426   START (rint_towardzero);
11428   save_round_mode = fegetround ();
11430   if (!fesetround (FE_TOWARDZERO))
11431     {
11432       TEST_f_f (rint, 2.0, 2.0);
11433       TEST_f_f (rint, 1.5, 1.0);
11434       TEST_f_f (rint, 1.0, 1.0);
11435       TEST_f_f (rint, 0.5, 0.0);
11436       TEST_f_f (rint, 0.0, 0.0);
11437       TEST_f_f (rint, minus_zero, minus_zero);
11438       TEST_f_f (rint, -0.5, -0.0);
11439       TEST_f_f (rint, -1.0, -1.0);
11440       TEST_f_f (rint, -1.5, -1.0);
11441       TEST_f_f (rint, -2.0, -2.0);
11442       TEST_f_f (rint, 0.1, 0.0);
11443       TEST_f_f (rint, 0.25, 0.0);
11444       TEST_f_f (rint, 0.625, 0.0);
11445       TEST_f_f (rint, -0.1, -0.0);
11446       TEST_f_f (rint, -0.25, -0.0);
11447       TEST_f_f (rint, -0.625, -0.0);
11448       TEST_f_f (rint, 1048576.75, 1048576.0);
11449       TEST_f_f (rint, 2097152.75, 2097152.0);
11450       TEST_f_f (rint, -1048576.75, -1048576.0);
11451       TEST_f_f (rint, -2097152.75, -2097152.0);
11452 #ifndef TEST_FLOAT
11453       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
11454       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
11455       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
11456       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
11457       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
11458       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
11459       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
11460       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
11461       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
11462       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
11463 #endif
11464 #ifdef TEST_LDOUBLE
11465       /* The result can only be represented in long double.  */
11466       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
11467       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11468       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11469       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
11470       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
11471 # if LDBL_MANT_DIG > 100
11472       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
11473       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
11474       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
11475 # endif
11476       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
11477       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11478       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11479       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
11480       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
11481 # if LDBL_MANT_DIG > 100
11482       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
11483       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
11484       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
11486       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11487       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11488       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11489       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
11490       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
11491       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
11493       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11494       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11495       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11496       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
11497       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
11498       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
11499 # endif
11500 #endif
11501     }
11503   fesetround (save_round_mode);
11505   END (rint_towardzero);
11508 static void
11509 rint_test_downward (void)
11511   int save_round_mode;
11512   START (rint_downward);
11514   save_round_mode = fegetround ();
11516   if (!fesetround (FE_DOWNWARD))
11517     {
11518       TEST_f_f (rint, 2.0, 2.0);
11519       TEST_f_f (rint, 1.5, 1.0);
11520       TEST_f_f (rint, 1.0, 1.0);
11521       TEST_f_f (rint, 0.5, 0.0);
11522       TEST_f_f (rint, 0.0, 0.0);
11523       TEST_f_f (rint, minus_zero, minus_zero);
11524       TEST_f_f (rint, -0.5, -1.0);
11525       TEST_f_f (rint, -1.0, -1.0);
11526       TEST_f_f (rint, -1.5, -2.0);
11527       TEST_f_f (rint, -2.0, -2.0);
11528       TEST_f_f (rint, 0.1, 0.0);
11529       TEST_f_f (rint, 0.25, 0.0);
11530       TEST_f_f (rint, 0.625, 0.0);
11531       TEST_f_f (rint, -0.1, -1.0);
11532       TEST_f_f (rint, -0.25, -1.0);
11533       TEST_f_f (rint, -0.625, -1.0);
11534       TEST_f_f (rint, 1048576.75, 1048576.0);
11535       TEST_f_f (rint, 2097152.75, 2097152.0);
11536       TEST_f_f (rint, -1048576.75, -1048577.0);
11537       TEST_f_f (rint, -2097152.75, -2097153.0);
11538 #ifndef TEST_FLOAT
11539       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
11540       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
11541       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
11542       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
11543       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
11544       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11545       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11546       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11547       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11548       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11549 #endif
11550 #ifdef TEST_LDOUBLE
11551       /* The result can only be represented in long double.  */
11552       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
11553       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11554       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11555       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
11556       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
11557 # if LDBL_MANT_DIG > 100
11558       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
11559       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
11560       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
11561 # endif
11562       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11563       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
11564       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
11565       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11566       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11567 # if LDBL_MANT_DIG > 100
11568       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11569       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11570       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11572       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11573       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11574       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11575       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
11576       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
11577       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
11579       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
11580       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
11581       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
11582       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11583       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11584       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11585 # endif
11586 #endif
11587     }
11589   fesetround (save_round_mode);
11591   END (rint_downward);
11594 static void
11595 rint_test_upward (void)
11597   int save_round_mode;
11598   START (rint_upward);
11600   save_round_mode = fegetround ();
11602   if (!fesetround (FE_UPWARD))
11603     {
11604       TEST_f_f (rint, 2.0, 2.0);
11605       TEST_f_f (rint, 1.5, 2.0);
11606       TEST_f_f (rint, 1.0, 1.0);
11607       TEST_f_f (rint, 0.5, 1.0);
11608       TEST_f_f (rint, 0.0, 0.0);
11609       TEST_f_f (rint, minus_zero, minus_zero);
11610       TEST_f_f (rint, -0.5, -0.0);
11611       TEST_f_f (rint, -1.0, -1.0);
11612       TEST_f_f (rint, -1.5, -1.0);
11613       TEST_f_f (rint, -2.0, -2.0);
11614       TEST_f_f (rint, 0.1, 1.0);
11615       TEST_f_f (rint, 0.25, 1.0);
11616       TEST_f_f (rint, 0.625, 1.0);
11617       TEST_f_f (rint, -0.1, -0.0);
11618       TEST_f_f (rint, -0.25, -0.0);
11619       TEST_f_f (rint, -0.625, -0.0);
11620       TEST_f_f (rint, 1048576.75, 1048577.0);
11621       TEST_f_f (rint, 2097152.75, 2097153.0);
11622       TEST_f_f (rint, -1048576.75, -1048576.0);
11623       TEST_f_f (rint, -2097152.75, -2097152.0);
11624 #ifndef TEST_FLOAT
11625       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11626       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11627       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11628       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11629       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11630       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
11631       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
11632       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
11633       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
11634       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
11635 #endif
11636 #ifdef TEST_LDOUBLE
11637       /* The result can only be represented in long double.  */
11638       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11639       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
11640       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
11641       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11642       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11643 # if LDBL_MANT_DIG > 100
11644       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11645       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11646       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11647 # endif
11648       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
11649       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11650       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11651       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
11652       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
11653 # if LDBL_MANT_DIG > 100
11654       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
11655       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
11656       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
11658       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
11659       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
11660       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
11661       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11662       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11663       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11665       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11666       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11667       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11668       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
11669       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
11670       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
11671 # endif
11672 #endif
11673     }
11675   fesetround (save_round_mode);
11677   END (rint_upward);
11680 static void
11681 round_test (void)
11683   /* TODO: missing +/-Inf as well as qNaN tests.  */
11685   START (round);
11687   TEST_f_f (round, 0, 0);
11688   TEST_f_f (round, minus_zero, minus_zero);
11689   TEST_f_f (round, 0.2L, 0.0);
11690   TEST_f_f (round, -0.2L, minus_zero);
11691   TEST_f_f (round, 0.5, 1.0);
11692   TEST_f_f (round, -0.5, -1.0);
11693   TEST_f_f (round, 0.8L, 1.0);
11694   TEST_f_f (round, -0.8L, -1.0);
11695   TEST_f_f (round, 1.5, 2.0);
11696   TEST_f_f (round, -1.5, -2.0);
11697   TEST_f_f (round, 0.1, 0.0);
11698   TEST_f_f (round, 0.25, 0.0);
11699   TEST_f_f (round, 0.625, 1.0);
11700   TEST_f_f (round, -0.1, -0.0);
11701   TEST_f_f (round, -0.25, -0.0);
11702   TEST_f_f (round, -0.625, -1.0);
11703   TEST_f_f (round, 2097152.5, 2097153);
11704   TEST_f_f (round, -2097152.5, -2097153);
11706 #ifdef TEST_LDOUBLE
11707   /* The result can only be represented in long double.  */
11708   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
11709   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
11710   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
11711   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
11712   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
11713 # if LDBL_MANT_DIG > 100
11714   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
11715   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
11716   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
11717 # endif
11719   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
11720   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
11721   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
11722   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
11723   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
11724 # if LDBL_MANT_DIG > 100
11725   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
11726   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
11727   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
11728 # endif
11730   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
11731   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
11732   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
11733   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
11734   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
11736   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
11737   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
11738   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
11739   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
11740   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
11742 # if LDBL_MANT_DIG > 100
11743   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
11744   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
11745   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
11746   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
11747   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
11748   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
11750   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
11751   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
11752   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
11753   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
11754   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
11755   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
11756 # endif
11758   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
11759   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
11760   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
11761   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
11762   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
11764   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
11765   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
11766   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
11767   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
11768   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
11770   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
11771   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
11772   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
11773   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
11774   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
11775 #endif
11777   END (round);
11781 static void
11782 scalb_test (void)
11785   START (scalb);
11787   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
11788   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
11790   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11791   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11793   TEST_ff_f (scalb, 1, 0, 1);
11794   TEST_ff_f (scalb, -1, 0, -1);
11796   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
11797   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
11799   TEST_ff_f (scalb, 0, 2, 0);
11800   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
11801   TEST_ff_f (scalb, 0, 0, 0);
11802   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
11803   TEST_ff_f (scalb, 0, -1, 0);
11804   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
11805   TEST_ff_f (scalb, 0, minus_infty, 0);
11806   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
11808   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
11809   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
11810   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
11811   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
11812   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
11813   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
11815   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
11816   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
11818   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
11819   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
11820   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
11821   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
11823   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11824   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11826   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
11827   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11828   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
11829   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11830   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
11831   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
11832   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
11834   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
11835   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
11837   END (scalb);
11841 static void
11842 scalbn_test (void)
11845   START (scalbn);
11847   TEST_fi_f (scalbn, 0, 0, 0);
11848   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
11850   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
11851   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
11852   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
11854   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
11855   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
11857   TEST_fi_f (scalbn, 1, 0L, 1);
11859   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11860   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11861   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11862   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11863   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11864   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11865   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11866   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11868   END (scalbn);
11872 static void
11873 scalbln_test (void)
11876   START (scalbln);
11878   TEST_fl_f (scalbln, 0, 0, 0);
11879   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
11881   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
11882   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
11883   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
11885   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
11886   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
11888   TEST_fl_f (scalbln, 1, 0L, 1);
11890   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11891   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11892   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11893   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11894   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11895   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11896   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11897   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11899   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11900   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11901   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11902   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11903   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11904   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11905   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11906   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11908 #if LONG_MAX >= 0x100000000
11909   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11910   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11911   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11912   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11913   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11914   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11915   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11916   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11917 #endif
11919   END (scalbn);
11923 static void
11924 signbit_test (void)
11926   /* TODO: missing qNaN tests.  */
11928   START (signbit);
11930   TEST_f_b (signbit, 0, 0);
11931   TEST_f_b (signbit, minus_zero, 1);
11932   TEST_f_b (signbit, plus_infty, 0);
11933   TEST_f_b (signbit, minus_infty, 1);
11935   /* signbit (x) != 0 for x < 0.  */
11936   TEST_f_b (signbit, -1, 1);
11937   /* signbit (x) == 0 for x >= 0.  */
11938   TEST_f_b (signbit, 1, 0);
11940   END (signbit);
11944 static void
11945 sin_test (void)
11947   errno = 0;
11948   FUNC(sin) (0);
11949   if (errno == ENOSYS)
11950     /* Function not implemented.  */
11951     return;
11953   START (sin);
11955   TEST_f_f (sin, 0, 0);
11956   TEST_f_f (sin, minus_zero, minus_zero);
11957   errno = 0;
11958   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION);
11959   check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
11960   errno = 0;
11961   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION);
11962   check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
11963   errno = 0;
11964   TEST_f_f (sin, qnan_value, qnan_value);
11965   check_int ("errno for sin(qNaN) unchanged", errno, 0, 0, 0, 0);
11967   TEST_f_f (sin, M_PI_6l, 0.5);
11968   TEST_f_f (sin, -M_PI_6l, -0.5);
11969   TEST_f_f (sin, M_PI_2l, 1);
11970   TEST_f_f (sin, -M_PI_2l, -1);
11971   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
11973   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
11974   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
11976   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
11978 #ifdef TEST_DOUBLE
11979   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
11980   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
11981 #endif
11983 #ifndef TEST_FLOAT
11984   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
11985   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
11986 #endif
11988 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11989   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
11990 #endif
11992   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
11993   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
11994   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
11995   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
11996   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
11997   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
11999   END (sin);
12004 static void
12005 sin_test_tonearest (void)
12007   int save_round_mode;
12008   errno = 0;
12009   FUNC(sin) (0);
12010   if (errno == ENOSYS)
12011     /* Function not implemented.  */
12012     return;
12014   START (sin_tonearest);
12016   save_round_mode = fegetround ();
12018   if (!fesetround (FE_TONEAREST))
12019     {
12020       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12021       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12022       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12023       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12024       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12025       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12026       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12027       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12028       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12029       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12030     }
12032   fesetround (save_round_mode);
12034   END (sin_tonearest);
12038 static void
12039 sin_test_towardzero (void)
12041   int save_round_mode;
12042   errno = 0;
12043   FUNC(sin) (0);
12044   if (errno == ENOSYS)
12045     /* Function not implemented.  */
12046     return;
12048   START (sin_towardzero);
12050   save_round_mode = fegetround ();
12052   if (!fesetround (FE_TOWARDZERO))
12053     {
12054       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12055       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12056       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12057       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12058       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12059       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12060       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12061       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12062       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12063       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12064     }
12066   fesetround (save_round_mode);
12068   END (sin_towardzero);
12072 static void
12073 sin_test_downward (void)
12075   int save_round_mode;
12076   errno = 0;
12077   FUNC(sin) (0);
12078   if (errno == ENOSYS)
12079     /* Function not implemented.  */
12080     return;
12082   START (sin_downward);
12084   save_round_mode = fegetround ();
12086   if (!fesetround (FE_DOWNWARD))
12087     {
12088       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12089       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12090       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12091       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12092       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12093       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12094       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12095       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12096       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12097       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12098     }
12100   fesetround (save_round_mode);
12102   END (sin_downward);
12106 static void
12107 sin_test_upward (void)
12109   int save_round_mode;
12110   errno = 0;
12111   FUNC(sin) (0);
12112   if (errno == ENOSYS)
12113     /* Function not implemented.  */
12114     return;
12116   START (sin_upward);
12118   save_round_mode = fegetround ();
12120   if (!fesetround (FE_UPWARD))
12121     {
12122       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12123       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12124       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12125       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12126       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12127       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12128       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12129       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12130       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12131       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12132     }
12134   fesetround (save_round_mode);
12136   END (sin_upward);
12140 static void
12141 sincos_test (void)
12143   FLOAT sin_res, cos_res;
12145   errno = 0;
12146   FUNC(sincos) (0, &sin_res, &cos_res);
12147   if (errno == ENOSYS)
12148     /* Function not implemented.  */
12149     return;
12151   START (sincos);
12153   /* sincos is treated differently because it returns void.  */
12154   TEST_extra (sincos, 0, 0, 1);
12156   TEST_extra (sincos, minus_zero, minus_zero, 1);
12157   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12158   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12159   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
12161   /* The value of M_PI_2l is never exactly PI/2, and therefore the
12162      answer is never exactly zero. The answer is equal to the error
12163      in rounding PI/2 for the type used.  Thus the answer is unique
12164      to each type.  */
12165 #ifdef TEST_FLOAT
12166   /* 32-bit float.  */
12167   TEST_extra (sincos, M_PI_2l, 1, -4.371139000186241438857289400265215e-8L);
12168 #endif
12169 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
12170   /* 64-bit double or 64-bit long double.  */
12171   TEST_extra (sincos, M_PI_2l, 1, 6.123233995736765886130329661375001e-17L);
12172 #endif
12173 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
12174   /* 96-bit long double.  */
12175   TEST_extra (sincos, M_PI_2l, 1, -2.50827880633416601177866354016537e-20L);
12176 #endif
12177 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
12178   /* 128-bit IBM long double.  */
12179   TEST_extra (sincos, M_PI_2l, 1, 1.082856673921913968223746169860580e-32L);
12180 #endif
12181 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
12182   /* 128-bit long double.  */
12183   TEST_extra (sincos, M_PI_2l, 1, 4.335905065061890512398522013021675e-35L);
12184 #endif
12186   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
12187   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
12188   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
12190   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
12191   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
12193 #ifdef TEST_DOUBLE
12194   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
12195 #endif
12197 #ifndef TEST_FLOAT
12198   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
12199   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
12200 #endif
12202 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12203   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
12204 #endif
12206   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
12207   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
12208   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
12209   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
12210   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
12211   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
12213   END (sincos);
12216 static void
12217 sinh_test (void)
12219   errno = 0;
12220   FUNC(sinh) (0.7L);
12221   if (errno == ENOSYS)
12222     /* Function not implemented.  */
12223     return;
12225   START (sinh);
12226   TEST_f_f (sinh, 0, 0);
12227   TEST_f_f (sinh, minus_zero, minus_zero);
12229 #ifndef TEST_INLINE
12230   TEST_f_f (sinh, plus_infty, plus_infty);
12231   TEST_f_f (sinh, minus_infty, minus_infty);
12232 #endif
12233   TEST_f_f (sinh, qnan_value, qnan_value);
12235   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
12236   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
12238   END (sinh);
12242 static void
12243 sinh_test_tonearest (void)
12245   int save_round_mode;
12246   errno = 0;
12247   FUNC(sinh) (0);
12248   if (errno == ENOSYS)
12249     /* Function not implemented.  */
12250     return;
12252   START (sinh_tonearest);
12254   save_round_mode = fegetround ();
12256   if (!fesetround (FE_TONEAREST))
12257     {
12258       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12259       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12260       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12261     }
12263   fesetround (save_round_mode);
12265   END (sinh_tonearest);
12269 static void
12270 sinh_test_towardzero (void)
12272   int save_round_mode;
12273   errno = 0;
12274   FUNC(sinh) (0);
12275   if (errno == ENOSYS)
12276     /* Function not implemented.  */
12277     return;
12279   START (sinh_towardzero);
12281   save_round_mode = fegetround ();
12283   if (!fesetround (FE_TOWARDZERO))
12284     {
12285       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12286       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12287       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12288     }
12290   fesetround (save_round_mode);
12292   END (sinh_towardzero);
12296 static void
12297 sinh_test_downward (void)
12299   int save_round_mode;
12300   errno = 0;
12301   FUNC(sinh) (0);
12302   if (errno == ENOSYS)
12303     /* Function not implemented.  */
12304     return;
12306   START (sinh_downward);
12308   save_round_mode = fegetround ();
12310   if (!fesetround (FE_DOWNWARD))
12311     {
12312       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12313       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12314       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12315     }
12317   fesetround (save_round_mode);
12319   END (sinh_downward);
12323 static void
12324 sinh_test_upward (void)
12326   int save_round_mode;
12327   errno = 0;
12328   FUNC(sinh) (0);
12329   if (errno == ENOSYS)
12330     /* Function not implemented.  */
12331     return;
12333   START (sinh_upward);
12335   save_round_mode = fegetround ();
12337   if (!fesetround (FE_UPWARD))
12338     {
12339       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12340       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12341       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12342     }
12344   fesetround (save_round_mode);
12346   END (sinh_upward);
12350 static void
12351 sqrt_test (void)
12353   errno = 0;
12354   FUNC(sqrt) (1);
12355   if (errno == ENOSYS)
12356     /* Function not implemented.  */
12357     return;
12359   START (sqrt);
12361   TEST_f_f (sqrt, 0, 0);
12362   TEST_f_f (sqrt, qnan_value, qnan_value);
12363   TEST_f_f (sqrt, plus_infty, plus_infty);
12365   TEST_f_f (sqrt, minus_zero, minus_zero);
12367   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
12368   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
12369   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
12370   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
12372   TEST_f_f (sqrt, 2209, 47);
12373   TEST_f_f (sqrt, 4, 2);
12374   TEST_f_f (sqrt, 2, M_SQRT2l);
12375   TEST_f_f (sqrt, 0.25, 0.5);
12376   TEST_f_f (sqrt, 6642.25, 81.5);
12377   TEST_f_f (sqrt, 15190.5625L, 123.25L);
12378   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
12380   END (sqrt);
12384 static void
12385 tan_test (void)
12387   errno = 0;
12388   FUNC(tan) (0);
12389   if (errno == ENOSYS)
12390     /* Function not implemented.  */
12391     return;
12393   START (tan);
12395   TEST_f_f (tan, 0, 0);
12396   TEST_f_f (tan, minus_zero, minus_zero);
12397   errno = 0;
12398   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION);
12399   check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
12400   errno = 0;
12401   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION);
12402   check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
12403   errno = 0;
12404   TEST_f_f (tan, qnan_value, qnan_value);
12405   check_int ("errno for tan(qNaN) == 0", errno, 0, 0, 0, 0);
12407   TEST_f_f (tan, M_PI_4l, 1);
12408   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
12410   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
12411   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
12413   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
12414   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
12415   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
12416   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
12417   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
12418   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
12419   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
12420   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
12421   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
12422   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
12423   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
12424   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
12425   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
12426   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
12427   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
12428   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
12429   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
12430   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
12432   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
12433   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
12434   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
12435   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
12436   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
12437   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
12438   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
12439   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
12440   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
12441   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
12442   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
12443   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
12444   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
12445   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
12446   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
12447   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
12448   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
12449   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
12451 #ifndef TEST_FLOAT
12452   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
12453   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
12454 #endif
12456 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12457   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
12458 #endif
12460   END (tan);
12464 static void
12465 tan_test_tonearest (void)
12467   int save_round_mode;
12468   errno = 0;
12469   FUNC(tan) (0);
12470   if (errno == ENOSYS)
12471     /* Function not implemented.  */
12472     return;
12474   START (tan_tonearest);
12476   save_round_mode = fegetround ();
12478   if (!fesetround (FE_TONEAREST))
12479     {
12480       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12481       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12482       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12483       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12484       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12485       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12486       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12487       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12488       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12489       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12490     }
12492   fesetround (save_round_mode);
12494   END (tan_tonearest);
12498 static void
12499 tan_test_towardzero (void)
12501   int save_round_mode;
12502   errno = 0;
12503   FUNC(tan) (0);
12504   if (errno == ENOSYS)
12505     /* Function not implemented.  */
12506     return;
12508   START (tan_towardzero);
12510   save_round_mode = fegetround ();
12512   if (!fesetround (FE_TOWARDZERO))
12513     {
12514       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12515       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12516       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12517       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12518       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12519       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12520       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12521       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12522       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12523       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12524     }
12526   fesetround (save_round_mode);
12528   END (tan_towardzero);
12532 static void
12533 tan_test_downward (void)
12535   int save_round_mode;
12536   errno = 0;
12537   FUNC(tan) (0);
12538   if (errno == ENOSYS)
12539     /* Function not implemented.  */
12540     return;
12542   START (tan_downward);
12544   save_round_mode = fegetround ();
12546   if (!fesetround (FE_DOWNWARD))
12547     {
12548       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12549       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12550       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12551       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12552       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12553       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12554       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12555       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12556       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12557       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12558     }
12560   fesetround (save_round_mode);
12562   END (tan_downward);
12566 static void
12567 tan_test_upward (void)
12569   int save_round_mode;
12570   errno = 0;
12571   FUNC(tan) (0);
12572   if (errno == ENOSYS)
12573     /* Function not implemented.  */
12574     return;
12576   START (tan_upward);
12578   save_round_mode = fegetround ();
12580   if (!fesetround (FE_UPWARD))
12581     {
12582       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12583       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12584       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12585       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12586       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12587       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12588       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12589       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12590       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12591       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12592     }
12594   fesetround (save_round_mode);
12596   END (tan_upward);
12600 static void
12601 tanh_test (void)
12603   errno = 0;
12604   FUNC(tanh) (0.7L);
12605   if (errno == ENOSYS)
12606     /* Function not implemented.  */
12607     return;
12609   START (tanh);
12611   TEST_f_f (tanh, 0, 0);
12612   TEST_f_f (tanh, minus_zero, minus_zero);
12614 #ifndef TEST_INLINE
12615   TEST_f_f (tanh, plus_infty, 1);
12616   TEST_f_f (tanh, minus_infty, -1);
12617 #endif
12618   TEST_f_f (tanh, qnan_value, qnan_value);
12620   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
12621   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
12623   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
12624   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
12626   /* 2^-57  */
12627   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
12629   END (tanh);
12632 static void
12633 tgamma_test (void)
12635   errno = 0;
12636   FUNC(tgamma) (1);
12637   if (errno == ENOSYS)
12638     /* Function not implemented.  */
12639     return;
12641   START (tgamma);
12643   TEST_f_f (tgamma, plus_infty, plus_infty);
12644   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
12645   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
12646   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
12647   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
12648   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
12649   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
12650   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
12651   TEST_f_f (tgamma, qnan_value, qnan_value);
12653   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
12654   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
12656   TEST_f_f (tgamma, 1, 1);
12657   TEST_f_f (tgamma, 4, 6);
12659   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
12660   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
12662   END (tgamma);
12666 static void
12667 trunc_test (void)
12669   START (trunc);
12671   TEST_f_f (trunc, plus_infty, plus_infty);
12672   TEST_f_f (trunc, minus_infty, minus_infty);
12673   TEST_f_f (trunc, qnan_value, qnan_value);
12675   TEST_f_f (trunc, 0, 0);
12676   TEST_f_f (trunc, minus_zero, minus_zero);
12677   TEST_f_f (trunc, 0.1, 0);
12678   TEST_f_f (trunc, 0.25, 0);
12679   TEST_f_f (trunc, 0.625, 0);
12680   TEST_f_f (trunc, -0.1, minus_zero);
12681   TEST_f_f (trunc, -0.25, minus_zero);
12682   TEST_f_f (trunc, -0.625, minus_zero);
12683   TEST_f_f (trunc, 1, 1);
12684   TEST_f_f (trunc, -1, -1);
12685   TEST_f_f (trunc, 1.625, 1);
12686   TEST_f_f (trunc, -1.625, -1);
12688   TEST_f_f (trunc, 1048580.625L, 1048580L);
12689   TEST_f_f (trunc, -1048580.625L, -1048580L);
12691   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
12692   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
12694   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
12695   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
12697 #ifdef TEST_LDOUBLE
12698   /* The result can only be represented in long double.  */
12699   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
12700   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
12701   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
12702   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
12703   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
12705 # if LDBL_MANT_DIG > 100
12706   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
12707   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
12708   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
12709 # endif
12711   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
12712   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
12713   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
12714   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
12715   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
12717 # if LDBL_MANT_DIG > 100
12718   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
12719   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
12720   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
12721 # endif
12723   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
12724   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
12725   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
12726   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
12727   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
12729 # if LDBL_MANT_DIG > 100
12730   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
12731   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
12732   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
12733   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
12734   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
12735   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
12736 # endif
12738   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
12739   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
12740   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
12741   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
12742   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
12744 # if LDBL_MANT_DIG > 100
12745   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
12746   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
12747   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
12748   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
12749   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
12750   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
12751 # endif
12753   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
12754   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
12755   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
12756   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
12757   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
12759   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
12760   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
12761   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
12762   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
12763   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
12765   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
12766   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12767   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12768   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
12769   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
12770 #endif
12772   END (trunc);
12775 static void
12776 y0_test (void)
12778   FLOAT s, c;
12779   errno = 0;
12780   FUNC (sincos) (0, &s, &c);
12781   if (errno == ENOSYS)
12782     /* Required function not implemented.  */
12783     return;
12784   FUNC(y0) (1);
12785   if (errno == ENOSYS)
12786     /* Function not implemented.  */
12787     return;
12789   /* y0 is the Bessel function of the second kind of order 0 */
12790   START (y0);
12792   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
12793   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
12794   TEST_f_f (y0, 0.0, minus_infty);
12795   TEST_f_f (y0, qnan_value, qnan_value);
12796   TEST_f_f (y0, plus_infty, 0);
12798   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
12799   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
12800   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
12801   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
12802   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
12803   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
12804   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
12806   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
12808 #ifndef TEST_FLOAT
12809   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
12810   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
12811 #endif
12813 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12814   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
12815   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
12816 #endif
12818   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
12819   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
12820   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
12821   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
12822   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
12823   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
12824   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
12825   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
12826   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
12827   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
12828   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
12830   END (y0);
12834 static void
12835 y1_test (void)
12837   FLOAT s, c;
12838   errno = 0;
12839   FUNC (sincos) (0, &s, &c);
12840   if (errno == ENOSYS)
12841     /* Required function not implemented.  */
12842     return;
12843   FUNC(y1) (1);
12844   if (errno == ENOSYS)
12845     /* Function not implemented.  */
12846     return;
12848   /* y1 is the Bessel function of the second kind of order 1 */
12849   START (y1);
12851   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
12852   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
12853   TEST_f_f (y1, 0.0, minus_infty);
12854   TEST_f_f (y1, plus_infty, 0);
12855   TEST_f_f (y1, qnan_value, qnan_value);
12857   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
12858   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
12859   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
12860   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
12861   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
12862   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
12863   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
12865   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
12867 #ifndef TEST_FLOAT
12868   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
12869   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
12870 #endif
12872 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12873   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
12874   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
12875 #endif
12877   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
12878   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
12879   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
12880   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
12881   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
12882   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
12883   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
12884   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
12885   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
12886   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
12887   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
12889   END (y1);
12893 static void
12894 yn_test (void)
12896   FLOAT s, c;
12897   errno = 0;
12898   FUNC (sincos) (0, &s, &c);
12899   if (errno == ENOSYS)
12900     /* Required function not implemented.  */
12901     return;
12902   FUNC(yn) (1, 1);
12903   if (errno == ENOSYS)
12904     /* Function not implemented.  */
12905     return;
12907   /* yn is the Bessel function of the second kind of order n */
12908   START (yn);
12910   /* yn (0, x) == y0 (x)  */
12911   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
12912   TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
12913   TEST_ff_f (yn, 0, 0.0, minus_infty);
12914   TEST_ff_f (yn, 0, qnan_value, qnan_value);
12915   TEST_ff_f (yn, 0, plus_infty, 0);
12917   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
12918   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
12919   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
12920   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
12921   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
12922   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
12923   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
12925   /* yn (1, x) == y1 (x)  */
12926   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
12927   TEST_ff_f (yn, 1, 0.0, minus_infty);
12928   TEST_ff_f (yn, 1, plus_infty, 0);
12929   TEST_ff_f (yn, 1, qnan_value, qnan_value);
12931   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
12932   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
12933   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
12934   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
12935   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
12936   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
12937   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
12939   /* yn (3, x)  */
12940   TEST_ff_f (yn, 3, plus_infty, 0);
12941   TEST_ff_f (yn, 3, qnan_value, qnan_value);
12943   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
12944   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
12945   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
12946   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
12947   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
12949   /* yn (10, x)  */
12950   TEST_ff_f (yn, 10, plus_infty, 0);
12951   TEST_ff_f (yn, 10, qnan_value, qnan_value);
12953   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
12954   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
12955   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
12956   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
12957   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
12959   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
12960      and FLT_MIN.  See Bug 14173.  */
12961   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
12963   errno = 0;
12964   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
12965   check_int ("errno for yn(10,-min) == ERANGE", errno, ERANGE, 0, 0, 0);
12967   END (yn);
12971 static void
12972 significand_test (void)
12974   /* significand returns the mantissa of the exponential representation.  */
12976   /* TODO: missing +/-Inf as well as qNaN tests.  */
12978   START (significand);
12980   TEST_f_f (significand, 4.0, 1.0);
12981   TEST_f_f (significand, 6.0, 1.5);
12982   TEST_f_f (significand, 8.0, 1.0);
12984   END (significand);
12988 static void
12989 initialize (void)
12991   fpstack_test ("start *init*");
12993   plus_zero = 0.0;
12994   qnan_value = FUNC (__builtin_nan) ("");
12995   minus_zero = FUNC (copysign) (0.0, -1.0);
12996   plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
12997                        HUGE_VALL, HUGE_VAL, HUGE_VALF);
12998   minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
12999                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
13000   max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
13001                       LDBL_MAX, DBL_MAX, FLT_MAX);
13002   min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
13003                       LDBL_MIN, DBL_MIN, FLT_MIN);
13004   min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
13005                               __DBL_DENORM_MIN__,
13006                               __FLT_DENORM_MIN__,
13007                               __LDBL_DENORM_MIN__,
13008                               __DBL_DENORM_MIN__,
13009                               __FLT_DENORM_MIN__);
13011   (void) &plus_zero;
13012   (void) &qnan_value;
13013   (void) &minus_zero;
13014   (void) &plus_infty;
13015   (void) &minus_infty;
13016   (void) &max_value;
13017   (void) &min_value;
13018   (void) &min_subnorm_value;
13020   /* Clear all exceptions.  From now on we must not get random exceptions.  */
13021   feclearexcept (FE_ALL_EXCEPT);
13023   /* Test to make sure we start correctly.  */
13024   fpstack_test ("end *init*");
13027 /* Definitions of arguments for argp functions.  */
13028 static const struct argp_option options[] =
13030   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
13031   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
13032   { "no-max-error", 'f', NULL, 0,
13033     "Don't output maximal errors of functions"},
13034   { "no-points", 'p', NULL, 0,
13035     "Don't output results of functions invocations"},
13036   { "ignore-max-ulp", 'i', "yes/no", 0,
13037     "Ignore given maximal errors"},
13038   { "output-dir", 'o', "DIR", 0,
13039     "Directory where generated files will be placed"},
13040   { NULL, 0, NULL, 0, NULL }
13043 /* Short description of program.  */
13044 static const char doc[] = "Math test suite: " TEST_MSG ;
13046 /* Prototype for option handler.  */
13047 static error_t parse_opt (int key, char *arg, struct argp_state *state);
13049 /* Data structure to communicate with argp functions.  */
13050 static struct argp argp =
13052   options, parse_opt, NULL, doc,
13056 /* Handle program arguments.  */
13057 static error_t
13058 parse_opt (int key, char *arg, struct argp_state *state)
13060   switch (key)
13061     {
13062     case 'f':
13063       output_max_error = 0;
13064       break;
13065     case 'i':
13066       if (strcmp (arg, "yes") == 0)
13067         ignore_max_ulp = 1;
13068       else if (strcmp (arg, "no") == 0)
13069         ignore_max_ulp = 0;
13070       break;
13071     case 'o':
13072       output_dir = (char *) malloc (strlen (arg) + 1);
13073       if (output_dir != NULL)
13074         strcpy (output_dir, arg);
13075       else
13076         return errno;
13077       break;
13078     case 'p':
13079       output_points = 0;
13080       break;
13081     case 'u':
13082       output_ulps = 1;
13083       break;
13084     case 'v':
13085       if (optarg)
13086         verbose = (unsigned int) strtoul (optarg, NULL, 0);
13087       else
13088         verbose = 3;
13089       break;
13090     default:
13091       return ARGP_ERR_UNKNOWN;
13092     }
13093   return 0;
13096 #if 0
13097 /* function to check our ulp calculation.  */
13098 void
13099 check_ulp (void)
13101   int i;
13103   FLOAT u, diff, ulp;
13104   /* This gives one ulp.  */
13105   u = FUNC(nextafter) (10, 20);
13106   check_equal (10.0, u, 1, &diff, &ulp);
13107   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
13109   /* This gives one more ulp.  */
13110   u = FUNC(nextafter) (u, 20);
13111   check_equal (10.0, u, 2, &diff, &ulp);
13112   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
13114   /* And now calculate 100 ulp.  */
13115   for (i = 2; i < 100; i++)
13116     u = FUNC(nextafter) (u, 20);
13117   check_equal (10.0, u, 100, &diff, &ulp);
13118   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
13120 #endif
13123 main (int argc, char **argv)
13126   int remaining;
13127   char *ulps_file_path;
13128   size_t dir_len = 0;
13130   verbose = 1;
13131   output_ulps = 0;
13132   output_max_error = 1;
13133   output_points = 1;
13134   output_dir = NULL;
13135   /* XXX set to 0 for releases.  */
13136   ignore_max_ulp = 0;
13138   /* Parse and process arguments.  */
13139   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
13141   if (remaining != argc)
13142     {
13143       fprintf (stderr, "wrong number of arguments");
13144       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
13145       exit (EXIT_FAILURE);
13146     }
13148   if (output_ulps)
13149     {
13150       if (output_dir != NULL)
13151         dir_len = strlen (output_dir);
13152       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
13153       if (ulps_file_path == NULL)
13154         {
13155           perror ("can't allocate path for `ULPs' file: ");
13156           exit (1);
13157         }
13158       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
13159       ulps_file = fopen (ulps_file_path, "a");
13160       if (ulps_file == NULL)
13161         {
13162           perror ("can't open file `ULPs' for writing: ");
13163           exit (1);
13164         }
13165     }
13168   initialize ();
13169   printf (TEST_MSG);
13171 #if 0
13172   check_ulp ();
13173 #endif
13175   /* Keep the tests a wee bit ordered (according to ISO C99).  */
13176   /* Classification macros:  */
13177   finite_test ();
13178   fpclassify_test ();
13179   isfinite_test ();
13180   isinf_test ();
13181   isnan_test ();
13182   isnormal_test ();
13183   issignaling_test ();
13184   signbit_test ();
13186   /* Trigonometric functions:  */
13187   acos_test ();
13188   acos_test_tonearest ();
13189   acos_test_towardzero ();
13190   acos_test_downward ();
13191   acos_test_upward ();
13192   asin_test ();
13193   asin_test_tonearest ();
13194   asin_test_towardzero ();
13195   asin_test_downward ();
13196   asin_test_upward ();
13197   atan_test ();
13198   atan2_test ();
13199   cos_test ();
13200   cos_test_tonearest ();
13201   cos_test_towardzero ();
13202   cos_test_downward ();
13203   cos_test_upward ();
13204   sin_test ();
13205   sin_test_tonearest ();
13206   sin_test_towardzero ();
13207   sin_test_downward ();
13208   sin_test_upward ();
13209   sincos_test ();
13210   tan_test ();
13211   tan_test_tonearest ();
13212   tan_test_towardzero ();
13213   tan_test_downward ();
13214   tan_test_upward ();
13216   /* Hyperbolic functions:  */
13217   acosh_test ();
13218   asinh_test ();
13219   atanh_test ();
13220   cosh_test ();
13221   cosh_test_tonearest ();
13222   cosh_test_towardzero ();
13223   cosh_test_downward ();
13224   cosh_test_upward ();
13225   sinh_test ();
13226   sinh_test_tonearest ();
13227   sinh_test_towardzero ();
13228   sinh_test_downward ();
13229   sinh_test_upward ();
13230   tanh_test ();
13232   /* Exponential and logarithmic functions:  */
13233   exp_test ();
13234   exp_test_tonearest ();
13235   exp_test_towardzero ();
13236   exp_test_downward ();
13237   exp_test_upward ();
13238   exp10_test ();
13239   exp2_test ();
13240   expm1_test ();
13241   frexp_test ();
13242   ldexp_test ();
13243   log_test ();
13244   log10_test ();
13245   log1p_test ();
13246   log2_test ();
13247   logb_test ();
13248   logb_test_downward ();
13249   modf_test ();
13250   ilogb_test ();
13251   scalb_test ();
13252   scalbn_test ();
13253   scalbln_test ();
13254   significand_test ();
13256   /* Power and absolute value functions:  */
13257   cbrt_test ();
13258   fabs_test ();
13259   hypot_test ();
13260   pow_test ();
13261   pow_test_tonearest ();
13262   pow_test_towardzero ();
13263   pow_test_downward ();
13264   pow_test_upward ();
13265   sqrt_test ();
13267   /* Error and gamma functions:  */
13268   erf_test ();
13269   erfc_test ();
13270   gamma_test ();
13271   lgamma_test ();
13272   tgamma_test ();
13274   /* Nearest integer functions:  */
13275   ceil_test ();
13276   floor_test ();
13277   nearbyint_test ();
13278   rint_test ();
13279   rint_test_tonearest ();
13280   rint_test_towardzero ();
13281   rint_test_downward ();
13282   rint_test_upward ();
13283   lrint_test ();
13284   lrint_test_tonearest ();
13285   lrint_test_towardzero ();
13286   lrint_test_downward ();
13287   lrint_test_upward ();
13288   llrint_test ();
13289   llrint_test_tonearest ();
13290   llrint_test_towardzero ();
13291   llrint_test_downward ();
13292   llrint_test_upward ();
13293   round_test ();
13294   lround_test ();
13295   llround_test ();
13296   trunc_test ();
13298   /* Remainder functions:  */
13299   fmod_test ();
13300   remainder_test ();
13301   remquo_test ();
13303   /* Manipulation functions:  */
13304   copysign_test ();
13305   nextafter_test ();
13306   nexttoward_test ();
13308   /* maximum, minimum and positive difference functions */
13309   fdim_test ();
13310   fmax_test ();
13311   fmin_test ();
13313   /* Multiply and add:  */
13314   fma_test ();
13315   fma_test_towardzero ();
13316   fma_test_downward ();
13317   fma_test_upward ();
13319   /* Comparison macros:  */
13320   isgreater_test ();
13321   isgreaterequal_test ();
13322   isless_test ();
13323   islessequal_test ();
13324   islessgreater_test ();
13325   isunordered_test ();
13327   /* Complex functions:  */
13328   cabs_test ();
13329   cacos_test ();
13330   cacosh_test ();
13331   carg_test ();
13332   casin_test ();
13333   casinh_test ();
13334   catan_test ();
13335   catanh_test ();
13336   ccos_test ();
13337   ccosh_test ();
13338   cexp_test ();
13339   cimag_test ();
13340   clog10_test ();
13341   clog_test ();
13342   conj_test ();
13343   cpow_test ();
13344   cproj_test ();
13345   creal_test ();
13346   csin_test ();
13347   csinh_test ();
13348   csqrt_test ();
13349   ctan_test ();
13350   ctan_test_tonearest ();
13351   ctan_test_towardzero ();
13352   ctan_test_downward ();
13353   ctan_test_upward ();
13354   ctanh_test ();
13355   ctanh_test_tonearest ();
13356   ctanh_test_towardzero ();
13357   ctanh_test_downward ();
13358   ctanh_test_upward ();
13360   /* Bessel functions:  */
13361   j0_test ();
13362   j1_test ();
13363   jn_test ();
13364   y0_test ();
13365   y1_test ();
13366   yn_test ();
13368   if (output_ulps)
13369     fclose (ulps_file);
13371   printf ("\nTest suite completed:\n");
13372   printf ("  %d test cases plus %d tests for exception flags executed.\n",
13373           noTests, noExcTests);
13374   if (noXFails)
13375     printf ("  %d expected failures occurred.\n", noXFails);
13376   if (noXPasses)
13377     printf ("  %d unexpected passes occurred.\n", noXPasses);
13378   if (noErrors)
13379     {
13380       printf ("  %d errors occurred.\n", noErrors);
13381       return 1;
13382     }
13383   printf ("  All tests passed successfully.\n");
13385   return 0;
13389  * Local Variables:
13390  * mode:c
13391  * End:
13392  */