Use mantissa_t in mpexp
[glibc.git] / math / libm-test.inc
blob1d3ba48b7da92b0419c54e07fa2ddc263956d716
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 static FILE *ulps_file; /* File to document difference.  */
214 static int output_ulps; /* Should ulps printed?  */
216 static int noErrors;    /* number of errors */
217 static int noTests;     /* number of tests (without testing exceptions) */
218 static int noExcTests;  /* number of tests for exception flags */
219 static int noXFails;    /* number of expected failures.  */
220 static int noXPasses;   /* number of unexpected passes.  */
222 static int verbose;
223 static int output_max_error;    /* Should the maximal errors printed?  */
224 static int output_points;       /* Should the single function results printed?  */
225 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
227 static FLOAT minus_zero, plus_zero;
228 static FLOAT plus_infty, minus_infty, qnan_value, max_value, min_value;
229 static FLOAT min_subnorm_value;
231 static FLOAT max_error, real_max_error, imag_max_error;
234 #define BUILD_COMPLEX(real, imag) \
235   ({ __complex__ FLOAT __retval;                                              \
236      __real__ __retval = (real);                                              \
237      __imag__ __retval = (imag);                                              \
238      __retval; })
240 #define BUILD_COMPLEX_INT(real, imag) \
241   ({ __complex__ int __retval;                                                \
242      __real__ __retval = (real);                                              \
243      __imag__ __retval = (imag);                                              \
244      __retval; })
247 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
248                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
250 static void
251 init_max_error (void)
253   max_error = 0;
254   real_max_error = 0;
255   imag_max_error = 0;
256   feclearexcept (FE_ALL_EXCEPT);
259 static void
260 set_max_error (FLOAT current, FLOAT *curr_max_error)
262   if (current > *curr_max_error)
263     *curr_max_error = current;
267 /* Print a FLOAT.  */
268 static void
269 print_float (FLOAT f)
271   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
272   if (issignaling (f))
273     printf ("sNaN\n");
274   else if (isnan (f))
275     printf ("qNaN\n");
276   else
277     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
280 /* Should the message print to screen?  This depends on the verbose flag,
281    and the test status.  */
282 static int
283 print_screen (int ok, int xfail)
285   if (output_points
286       && (verbose > 1
287           || (verbose == 1 && ok == xfail)))
288     return 1;
289   return 0;
293 /* Should the message print to screen?  This depends on the verbose flag,
294    and the test status.  */
295 static int
296 print_screen_max_error (int ok, int xfail)
298   if (output_max_error
299       && (verbose > 1
300           || ((verbose == 1) && (ok == xfail))))
301     return 1;
302   return 0;
305 /* Update statistic counters.  */
306 static void
307 update_stats (int ok, int xfail)
309   ++noTests;
310   if (ok && xfail)
311     ++noXPasses;
312   else if (!ok && xfail)
313     ++noXFails;
314   else if (!ok && !xfail)
315     ++noErrors;
318 static void
319 print_ulps (const char *test_name, FLOAT ulp)
321   if (output_ulps)
322     {
323       fprintf (ulps_file, "Test \"%s\":\n", test_name);
324       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
325                CHOOSE("ldouble", "double", "float",
326                       "ildouble", "idouble", "ifloat"),
327                FUNC(ceil) (ulp));
328     }
331 static void
332 print_function_ulps (const char *function_name, FLOAT ulp)
334   if (output_ulps)
335     {
336       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
337       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
338                CHOOSE("ldouble", "double", "float",
339                       "ildouble", "idouble", "ifloat"),
340                FUNC(ceil) (ulp));
341     }
345 static void
346 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
347                              FLOAT imag_ulp)
349   if (output_ulps)
350     {
351       if (real_ulp != 0.0)
352         {
353           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
354           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
355                    CHOOSE("ldouble", "double", "float",
356                           "ildouble", "idouble", "ifloat"),
357                    FUNC(ceil) (real_ulp));
358         }
359       if (imag_ulp != 0.0)
360         {
361           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
362           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
363                    CHOOSE("ldouble", "double", "float",
364                           "ildouble", "idouble", "ifloat"),
365                    FUNC(ceil) (imag_ulp));
366         }
369     }
374 /* Test if Floating-Point stack hasn't changed */
375 static void
376 fpstack_test (const char *test_name)
378 #if defined (__i386__) || defined (__x86_64__)
379   static int old_stack;
380   int sw;
382   asm ("fnstsw" : "=a" (sw));
383   sw >>= 11;
384   sw &= 7;
386   if (sw != old_stack)
387     {
388       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
389               test_name, sw, old_stack);
390       ++noErrors;
391       old_stack = sw;
392     }
393 #endif
397 static void
398 print_max_error (const char *func_name, FLOAT allowed, int xfail)
400   int ok = 0;
402   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
403     {
404       ok = 1;
405     }
407   if (!ok)
408     print_function_ulps (func_name, max_error);
411   if (print_screen_max_error (ok, xfail))
412     {
413       printf ("Maximal error of `%s'\n", func_name);
414       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
415       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
416     }
418   update_stats (ok, xfail);
422 static void
423 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
424                          __complex__ int xfail)
426   int ok = 0;
428   if ((real_max_error == 0 && imag_max_error == 0)
429       || (real_max_error <= __real__ allowed
430           && imag_max_error <= __imag__ allowed
431           && !ignore_max_ulp))
432     {
433       ok = 1;
434     }
436   if (!ok)
437     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
440   if (print_screen_max_error (ok, xfail))
441     {
442       printf ("Maximal error of real part of: %s\n", func_name);
443       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
444               FUNC(ceil) (real_max_error));
445       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
446               FUNC(ceil) (__real__ allowed));
447       printf ("Maximal error of imaginary part of: %s\n", func_name);
448       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
449               FUNC(ceil) (imag_max_error));
450       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
451               FUNC(ceil) (__imag__ allowed));
452     }
454   update_stats (ok, xfail);
458 /* Test whether a given exception was raised.  */
459 static void
460 test_single_exception (const char *test_name,
461                        int exception,
462                        int exc_flag,
463                        int fe_flag,
464                        const char *flag_name)
466 #ifndef TEST_INLINE
467   int ok = 1;
468   if (exception & exc_flag)
469     {
470       if (fetestexcept (fe_flag))
471         {
472           if (print_screen (1, 0))
473             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
474         }
475       else
476         {
477           ok = 0;
478           if (print_screen (0, 0))
479             printf ("Failure: %s: Exception \"%s\" not set\n",
480                     test_name, flag_name);
481         }
482     }
483   else
484     {
485       if (fetestexcept (fe_flag))
486         {
487           ok = 0;
488           if (print_screen (0, 0))
489             printf ("Failure: %s: Exception \"%s\" set\n",
490                     test_name, flag_name);
491         }
492       else
493         {
494           if (print_screen (1, 0))
495             printf ("%s: Exception \"%s\" not set\n", test_name,
496                     flag_name);
497         }
498     }
499   if (!ok)
500     ++noErrors;
502 #endif
506 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
507    allowed but not required exceptions.
509 static void
510 test_exceptions (const char *test_name, int exception)
512   ++noExcTests;
513 #ifdef FE_DIVBYZERO
514   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
515     test_single_exception (test_name, exception,
516                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
517                            "Divide by zero");
518 #endif
519 #ifdef FE_INVALID
520   if ((exception & INVALID_EXCEPTION_OK) == 0)
521     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
522                          "Invalid operation");
523 #endif
524 #ifdef FE_OVERFLOW
525   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
526     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
527                            FE_OVERFLOW, "Overflow");
528 #endif
529 #ifdef FE_UNDERFLOW
530   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
531     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
532                            FE_UNDERFLOW, "Underflow");
533 #endif
534   feclearexcept (FE_ALL_EXCEPT);
538 static void
539 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
540                       FLOAT max_ulp, int xfail, int exceptions,
541                       FLOAT *curr_max_error)
543   int ok = 0;
544   int print_diff = 0;
545   FLOAT diff = 0;
546   FLOAT ulp = 0;
548   test_exceptions (test_name, exceptions);
549   if (issignaling (computed) && issignaling (expected))
550     ok = 1;
551   else if (issignaling (computed) || issignaling (expected))
552     ok = 0;
553   else if (isnan (computed) && isnan (expected))
554     ok = 1;
555   else if (isinf (computed) && isinf (expected))
556     {
557       /* Test for sign of infinities.  */
558       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
559           && signbit (computed) != signbit (expected))
560         {
561           ok = 0;
562           printf ("infinity has wrong sign.\n");
563         }
564       else
565         ok = 1;
566     }
567   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
568   else if (isinf (computed) || isnan (computed)
569            || isinf (expected) || isnan (expected))
570     ok = 0;
571   else
572     {
573       diff = FUNC(fabs) (computed - expected);
574       switch (fpclassify (expected))
575         {
576         case FP_ZERO:
577           /* ilogb (0) isn't allowed. */
578           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
579           break;
580         case FP_NORMAL:
581           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
582           break;
583         case FP_SUBNORMAL:
584           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
585              least normal value.  */
586           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
587           break;
588         default:
589           /* It should never happen. */
590           abort ();
591           break;
592         }
593       set_max_error (ulp, curr_max_error);
594       print_diff = 1;
595       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
596           && computed == 0.0 && expected == 0.0
597           && signbit(computed) != signbit (expected))
598         ok = 0;
599       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
600         ok = 1;
601       else
602         {
603           ok = 0;
604           print_ulps (test_name, ulp);
605         }
607     }
608   if (print_screen (ok, xfail))
609     {
610       if (!ok)
611         printf ("Failure: ");
612       printf ("Test: %s\n", test_name);
613       printf ("Result:\n");
614       printf (" is:         ");
615       print_float (computed);
616       printf (" should be:  ");
617       print_float (expected);
618       if (print_diff)
619         {
620           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
621                   "\n", diff, diff);
622           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
623           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
624         }
625     }
626   update_stats (ok, xfail);
628   fpstack_test (test_name);
632 static void
633 check_float (const char *test_name, FLOAT computed, FLOAT expected,
634              FLOAT max_ulp, int xfail, int exceptions)
636   check_float_internal (test_name, computed, expected, max_ulp, xfail,
637                         exceptions, &max_error);
641 static void
642 check_complex (const char *test_name, __complex__ FLOAT computed,
643                __complex__ FLOAT expected,
644                __complex__ FLOAT max_ulp, __complex__ int xfail,
645                int exception)
647   FLOAT part_comp, part_exp, part_max_ulp;
648   int part_xfail;
649   char *str;
651   if (asprintf (&str, "Real part of: %s", test_name) == -1)
652     abort ();
654   part_comp = __real__ computed;
655   part_exp = __real__ expected;
656   part_max_ulp = __real__ max_ulp;
657   part_xfail = __real__ xfail;
659   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
660                         exception, &real_max_error);
661   free (str);
663   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
664     abort ();
666   part_comp = __imag__ computed;
667   part_exp = __imag__ expected;
668   part_max_ulp = __imag__ max_ulp;
669   part_xfail = __imag__ xfail;
671   /* Don't check again for exceptions, just pass through the
672      zero/inf sign test.  */
673   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
674                         exception & IGNORE_ZERO_INF_SIGN,
675                         &imag_max_error);
676   free (str);
680 /* Check that computed and expected values are equal (int values).  */
681 static void
682 check_int (const char *test_name, int computed, int expected, int max_ulp,
683            int xfail, int exceptions)
685   int diff = computed - expected;
686   int ok = 0;
688   test_exceptions (test_name, exceptions);
689   noTests++;
690   if (abs (diff) <= max_ulp)
691     ok = 1;
693   if (!ok)
694     print_ulps (test_name, diff);
696   if (print_screen (ok, xfail))
697     {
698       if (!ok)
699         printf ("Failure: ");
700       printf ("Test: %s\n", test_name);
701       printf ("Result:\n");
702       printf (" is:         %d\n", computed);
703       printf (" should be:  %d\n", expected);
704     }
706   update_stats (ok, xfail);
707   fpstack_test (test_name);
711 /* Check that computed and expected values are equal (long int values).  */
712 static void
713 check_long (const char *test_name, long int computed, long int expected,
714             long int max_ulp, int xfail, int exceptions)
716   long int diff = computed - expected;
717   int ok = 0;
719   test_exceptions (test_name, exceptions);
720   noTests++;
721   if (labs (diff) <= max_ulp)
722     ok = 1;
724   if (!ok)
725     print_ulps (test_name, diff);
727   if (print_screen (ok, xfail))
728     {
729       if (!ok)
730         printf ("Failure: ");
731       printf ("Test: %s\n", test_name);
732       printf ("Result:\n");
733       printf (" is:         %ld\n", computed);
734       printf (" should be:  %ld\n", expected);
735     }
737   update_stats (ok, xfail);
738   fpstack_test (test_name);
742 /* Check that computed value is true/false.  */
743 static void
744 check_bool (const char *test_name, int computed, int expected,
745             long int max_ulp, int xfail, int exceptions)
747   int ok = 0;
749   test_exceptions (test_name, exceptions);
750   noTests++;
751   if ((computed == 0) == (expected == 0))
752     ok = 1;
754   if (print_screen (ok, xfail))
755     {
756       if (!ok)
757         printf ("Failure: ");
758       printf ("Test: %s\n", test_name);
759       printf ("Result:\n");
760       printf (" is:         %d\n", computed);
761       printf (" should be:  %d\n", expected);
762     }
764   update_stats (ok, xfail);
765   fpstack_test (test_name);
769 /* check that computed and expected values are equal (long int values) */
770 static void
771 check_longlong (const char *test_name, long long int computed,
772                 long long int expected,
773                 long long int max_ulp, int xfail,
774                 int exceptions)
776   long long int diff = computed - expected;
777   int ok = 0;
779   test_exceptions (test_name, exceptions);
780   noTests++;
781   if (llabs (diff) <= max_ulp)
782     ok = 1;
784   if (!ok)
785     print_ulps (test_name, diff);
787   if (print_screen (ok, xfail))
788     {
789       if (!ok)
790         printf ("Failure:");
791       printf ("Test: %s\n", test_name);
792       printf ("Result:\n");
793       printf (" is:         %lld\n", computed);
794       printf (" should be:  %lld\n", expected);
795     }
797   update_stats (ok, xfail);
798   fpstack_test (test_name);
803 /* This is to prevent messages from the SVID libm emulation.  */
805 matherr (struct exception *x __attribute__ ((unused)))
807   return 1;
811 /****************************************************************************
812   Tests for single functions of libm.
813   Please keep them alphabetically sorted!
814 ****************************************************************************/
816 static void
817 acos_test (void)
819   errno = 0;
820   FUNC(acos) (0);
821   if (errno == ENOSYS)
822     /* Function not implemented.  */
823     return;
825   START (acos);
827   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
828   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
829   TEST_f_f (acos, qnan_value, qnan_value);
831   /* |x| > 1: */
832   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
833   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
834   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
835   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
837   TEST_f_f (acos, 0, M_PI_2l);
838   TEST_f_f (acos, minus_zero, M_PI_2l);
839   TEST_f_f (acos, 1, 0);
840   TEST_f_f (acos, -1, M_PIl);
841   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
842   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
843   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
844   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
845   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
846   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
847   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
848 #ifndef TEST_FLOAT
849   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
850   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
851   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
852   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
853 #endif
854 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
855   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
856   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
857 #endif
858   END (acos);
862 static void
863 acos_test_tonearest (void)
865   int save_round_mode;
866   errno = 0;
867   FUNC(acos) (0);
868   if (errno == ENOSYS)
869     /* Function not implemented.  */
870     return;
872   START (acos_tonearest);
874   save_round_mode = fegetround ();
876   if (!fesetround (FE_TONEAREST))
877     {
878       TEST_f_f (acos, 0, M_PI_2l);
879       TEST_f_f (acos, minus_zero, M_PI_2l);
880       TEST_f_f (acos, 1, 0);
881       TEST_f_f (acos, -1, M_PIl);
882       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
883       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
884     }
886   fesetround (save_round_mode);
888   END (acos_tonearest);
892 static void
893 acos_test_towardzero (void)
895   int save_round_mode;
896   errno = 0;
897   FUNC(acos) (0);
898   if (errno == ENOSYS)
899     /* Function not implemented.  */
900     return;
902   START (acos_towardzero);
904   save_round_mode = fegetround ();
906   if (!fesetround (FE_TOWARDZERO))
907     {
908       TEST_f_f (acos, 0, M_PI_2l);
909       TEST_f_f (acos, minus_zero, M_PI_2l);
910       TEST_f_f (acos, 1, 0);
911       TEST_f_f (acos, -1, M_PIl);
912       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
913       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
914     }
916   fesetround (save_round_mode);
918   END (acos_towardzero);
922 static void
923 acos_test_downward (void)
925   int save_round_mode;
926   errno = 0;
927   FUNC(acos) (0);
928   if (errno == ENOSYS)
929     /* Function not implemented.  */
930     return;
932   START (acos_downward);
934   save_round_mode = fegetround ();
936   if (!fesetround (FE_DOWNWARD))
937     {
938       TEST_f_f (acos, 0, M_PI_2l);
939       TEST_f_f (acos, minus_zero, M_PI_2l);
940       TEST_f_f (acos, 1, 0);
941       TEST_f_f (acos, -1, M_PIl);
942       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
943       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
944     }
946   fesetround (save_round_mode);
948   END (acos_downward);
952 static void
953 acos_test_upward (void)
955   int save_round_mode;
956   errno = 0;
957   FUNC(acos) (0);
958   if (errno == ENOSYS)
959     /* Function not implemented.  */
960     return;
962   START (acos_upward);
964   save_round_mode = fegetround ();
966   if (!fesetround (FE_UPWARD))
967     {
968       TEST_f_f (acos, 0, M_PI_2l);
969       TEST_f_f (acos, minus_zero, M_PI_2l);
970       TEST_f_f (acos, 1, 0);
971       TEST_f_f (acos, -1, M_PIl);
972       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
973       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
974     }
976   fesetround (save_round_mode);
978   END (acos_upward);
981 static void
982 acosh_test (void)
984   errno = 0;
985   FUNC(acosh) (7);
986   if (errno == ENOSYS)
987     /* Function not implemented.  */
988     return;
990   START (acosh);
992   TEST_f_f (acosh, plus_infty, plus_infty);
993   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
994   TEST_f_f (acosh, qnan_value, qnan_value);
996   /* x < 1:  */
997   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
998   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1000   TEST_f_f (acosh, 1, 0);
1001   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1003   END (acosh);
1006 static void
1007 asin_test (void)
1009   errno = 0;
1010   FUNC(asin) (0);
1011   if (errno == ENOSYS)
1012     /* Function not implemented.  */
1013     return;
1015   START (asin);
1017   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1018   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1019   TEST_f_f (asin, qnan_value, qnan_value);
1021   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1022   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1023   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1024   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1025   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1027   TEST_f_f (asin, 0, 0);
1028   TEST_f_f (asin, minus_zero, minus_zero);
1029   TEST_f_f (asin, 0.5, M_PI_6l);
1030   TEST_f_f (asin, -0.5, -M_PI_6l);
1031   TEST_f_f (asin, 1.0, M_PI_2l);
1032   TEST_f_f (asin, -1.0, -M_PI_2l);
1033   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1034   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1035   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1036 #ifndef TEST_FLOAT
1037   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1038   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1039   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1040   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1041 #endif
1042 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1043   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1044   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1045 #endif
1047   END (asin);
1051 static void
1052 asin_test_tonearest (void)
1054   int save_round_mode;
1055   errno = 0;
1056   FUNC(asin) (0);
1057   if (errno == ENOSYS)
1058     /* Function not implemented.  */
1059     return;
1061   START (asin_tonearest);
1063   save_round_mode = fegetround ();
1065   if (!fesetround (FE_TONEAREST))
1066     {
1067       TEST_f_f (asin, 0, 0);
1068       TEST_f_f (asin, minus_zero, minus_zero);
1069       TEST_f_f (asin, 0.5, M_PI_6l);
1070       TEST_f_f (asin, -0.5, -M_PI_6l);
1071       TEST_f_f (asin, 1.0, M_PI_2l);
1072       TEST_f_f (asin, -1.0, -M_PI_2l);
1073     }
1075   fesetround (save_round_mode);
1077   END (asin_tonearest);
1081 static void
1082 asin_test_towardzero (void)
1084   int save_round_mode;
1085   errno = 0;
1086   FUNC(asin) (0);
1087   if (errno == ENOSYS)
1088     /* Function not implemented.  */
1089     return;
1091   START (asin_towardzero);
1093   save_round_mode = fegetround ();
1095   if (!fesetround (FE_TOWARDZERO))
1096     {
1097       TEST_f_f (asin, 0, 0);
1098       TEST_f_f (asin, minus_zero, minus_zero);
1099       TEST_f_f (asin, 0.5, M_PI_6l);
1100       TEST_f_f (asin, -0.5, -M_PI_6l);
1101       TEST_f_f (asin, 1.0, M_PI_2l);
1102       TEST_f_f (asin, -1.0, -M_PI_2l);
1103     }
1105   fesetround (save_round_mode);
1107   END (asin_towardzero);
1111 static void
1112 asin_test_downward (void)
1114   int save_round_mode;
1115   errno = 0;
1116   FUNC(asin) (0);
1117   if (errno == ENOSYS)
1118     /* Function not implemented.  */
1119     return;
1121   START (asin_downward);
1123   save_round_mode = fegetround ();
1125   if (!fesetround (FE_DOWNWARD))
1126     {
1127       TEST_f_f (asin, 0, 0);
1128       TEST_f_f (asin, minus_zero, minus_zero);
1129       TEST_f_f (asin, 0.5, M_PI_6l);
1130       TEST_f_f (asin, -0.5, -M_PI_6l);
1131       TEST_f_f (asin, 1.0, M_PI_2l);
1132       TEST_f_f (asin, -1.0, -M_PI_2l);
1133     }
1135   fesetround (save_round_mode);
1137   END (asin_downward);
1141 static void
1142 asin_test_upward (void)
1144   int save_round_mode;
1145   errno = 0;
1146   FUNC(asin) (0);
1147   if (errno == ENOSYS)
1148     /* Function not implemented.  */
1149     return;
1151   START (asin_upward);
1153   save_round_mode = fegetround ();
1155   if (!fesetround (FE_UPWARD))
1156     {
1157       TEST_f_f (asin, 0, 0);
1158       TEST_f_f (asin, minus_zero, minus_zero);
1159       TEST_f_f (asin, 0.5, M_PI_6l);
1160       TEST_f_f (asin, -0.5, -M_PI_6l);
1161       TEST_f_f (asin, 1.0, M_PI_2l);
1162       TEST_f_f (asin, -1.0, -M_PI_2l);
1163     }
1165   fesetround (save_round_mode);
1167   END (asin_upward);
1170 static void
1171 asinh_test (void)
1173   errno = 0;
1174   FUNC(asinh) (0.7L);
1175   if (errno == ENOSYS)
1176     /* Function not implemented.  */
1177     return;
1179   START (asinh);
1181   TEST_f_f (asinh, 0, 0);
1182   TEST_f_f (asinh, minus_zero, minus_zero);
1183 #ifndef TEST_INLINE
1184   TEST_f_f (asinh, plus_infty, plus_infty);
1185   TEST_f_f (asinh, minus_infty, minus_infty);
1186 #endif
1187   TEST_f_f (asinh, qnan_value, qnan_value);
1188   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1190   END (asinh);
1193 static void
1194 atan_test (void)
1196   errno = 0;
1197   FUNC(atan) (0);
1198   if (errno == ENOSYS)
1199     /* Function not implemented.  */
1200     return;
1202   START (atan);
1204   TEST_f_f (atan, 0, 0);
1205   TEST_f_f (atan, minus_zero, minus_zero);
1207   TEST_f_f (atan, plus_infty, M_PI_2l);
1208   TEST_f_f (atan, minus_infty, -M_PI_2l);
1209   TEST_f_f (atan, qnan_value, qnan_value);
1210   TEST_f_f (atan, max_value, M_PI_2l);
1211   TEST_f_f (atan, -max_value, -M_PI_2l);
1213   TEST_f_f (atan, 1, M_PI_4l);
1214   TEST_f_f (atan, -1, -M_PI_4l);
1216   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1218   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1219 #ifndef TEST_FLOAT
1220   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1221 #endif
1222 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1223   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1224 #endif
1226   END (atan);
1231 static void
1232 atanh_test (void)
1234   errno = 0;
1235   FUNC(atanh) (0.7L);
1236   if (errno == ENOSYS)
1237     /* Function not implemented.  */
1238     return;
1240   START (atanh);
1243   TEST_f_f (atanh, 0, 0);
1244   TEST_f_f (atanh, minus_zero, minus_zero);
1246   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1247   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1248   TEST_f_f (atanh, qnan_value, qnan_value);
1250   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1251   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1252   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1253   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1254   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1256   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1258   END (atanh);
1261 static void
1262 atan2_test (void)
1264   errno = 0;
1265   FUNC(atan2) (-0, 1);
1266   if (errno == ENOSYS)
1267     /* Function not implemented.  */
1268     return;
1270   START (atan2);
1272   /* atan2 (0,x) == 0 for x > 0.  */
1273   TEST_ff_f (atan2, 0, 1, 0);
1275   /* atan2 (-0,x) == -0 for x > 0.  */
1276   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1278   TEST_ff_f (atan2, 0, 0, 0);
1279   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1281   /* atan2 (+0,x) == +pi for x < 0.  */
1282   TEST_ff_f (atan2, 0, -1, M_PIl);
1284   /* atan2 (-0,x) == -pi for x < 0.  */
1285   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1287   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1288   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1290   /* atan2 (y,+0) == pi/2 for y > 0.  */
1291   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1293   /* atan2 (y,-0) == pi/2 for y > 0.  */
1294   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1296   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1297   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1299   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1300   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1302   /* atan2 (y,inf) == +0 for finite y > 0.  */
1303   TEST_ff_f (atan2, 1, plus_infty, 0);
1305   /* atan2 (y,inf) == -0 for finite y < 0.  */
1306   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1308   /* atan2(+inf, x) == pi/2 for finite x.  */
1309   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1311   /* atan2(-inf, x) == -pi/2 for finite x.  */
1312   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1314   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1315   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1317   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1318   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1320   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1321   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1322   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1323   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1324   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1326   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1328   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1329   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1331   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1332   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1333   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1334   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1335   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1336   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1338   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1339 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1340   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1341 #endif
1343   END (atan2);
1346 static void
1347 cabs_test (void)
1349   errno = 0;
1350   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1351   if (errno == ENOSYS)
1352     /* Function not implemented.  */
1353     return;
1355   START (cabs);
1357   /* cabs (x + iy) is specified as hypot (x,y) */
1359   /* cabs (+inf + i x) == +inf.  */
1360   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1361   /* cabs (-inf + i x) == +inf.  */
1362   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1364   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1365   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1367   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1369   /* cabs (x,y) == cabs (y,x).  */
1370   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1371   /* cabs (x,y) == cabs (-x,y).  */
1372   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1373   /* cabs (x,y) == cabs (-y,x).  */
1374   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1375   /* cabs (x,y) == cabs (-x,-y).  */
1376   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1377   /* cabs (x,y) == cabs (-y,-x).  */
1378   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1379   /* cabs (x,0) == fabs (x).  */
1380   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1381   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1382   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1383   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1384   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1385   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1387   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1389   END (cabs);
1393 static void
1394 cacos_test (void)
1396   errno = 0;
1397   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1398   if (errno == ENOSYS)
1399     /* Function not implemented.  */
1400     return;
1402   START (cacos);
1405   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1406   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1407   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1408   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1410   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1411   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1413   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1414   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1416   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1417   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1418   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1419   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1420   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1421   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1423   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1424   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1425   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1426   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1428   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1429   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1430   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1431   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1433   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1434   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1436   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1437   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1439   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1440   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1442   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1443   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1445   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1446   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1448   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1450   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1451   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1452   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1453   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1454   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1455   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
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, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1459   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1460   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1461   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1463   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1464   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1465   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1466   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1467   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1468   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1469   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1470   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1471   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1472   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1473   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1474   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1476   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1477   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1478   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1479   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1480   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1481   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
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 #ifndef TEST_FLOAT
1485   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1486   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1487   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1488   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1489   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1490   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -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 #endif
1494 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1495   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1496   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1497   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1498   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1499   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1500   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -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 #endif
1505   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1506 #ifndef TEST_FLOAT
1507   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1508 #endif
1509 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1510   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1511 #endif
1513   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1514   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1515   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1516   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1517   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1518   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
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 #ifndef TEST_FLOAT
1522   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1523   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
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, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1527   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
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 #endif
1531 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1532   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1533   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
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, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1537   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
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 #endif
1542   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1543   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1544   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1545   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1546   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1547   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-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, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1551   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1552   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1553   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1554   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1555   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-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, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1559   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1560   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1561   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1562   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1563   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
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, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1567   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1568   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1569   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1570   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1571   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
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, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1575   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1576   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1577   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1578   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1579   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
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, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1583   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1584   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1585   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1586   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1587   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
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 #ifndef TEST_FLOAT
1591   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1592   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
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, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1596   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
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, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1600   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
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, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1604   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
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 #endif
1608 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1609   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1610   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
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, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1614   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
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, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1618   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
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, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1622   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
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 #endif
1627   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L)
1628   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L)
1629   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L)
1630   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L)
1631   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L)
1632   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L)
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.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L)
1636   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L)
1637   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L)
1638   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L)
1639   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L)
1640   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L)
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, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L)
1644   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L)
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, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L)
1648   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L)
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 #ifndef TEST_FLOAT
1652   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L)
1653   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L)
1654   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L)
1655   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L)
1656   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L)
1657   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L)
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.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1661   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
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.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM)
1665   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
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, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1669   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
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, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L)
1673   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
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 #endif
1677 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1678   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L)
1679   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L)
1680   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L)
1681   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L)
1682   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L)
1683   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L)
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 # if LDBL_MIN_EXP <= -16381
1687   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1688   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
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.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L)
1692   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
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 # endif
1696   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1697   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
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, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L)
1701   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
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 #endif
1705 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1706   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L)
1707   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L)
1708   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L)
1709   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L)
1710   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L)
1711   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L)
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.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1715   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
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.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L)
1719   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
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, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1723   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
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, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L)
1727   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
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 #endif
1731 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1732   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L)
1733   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L)
1734   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L)
1735   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L)
1736   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L)
1737   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L)
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.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1741   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
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.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L)
1745   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
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, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1749   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
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, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L)
1753   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
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 #endif
1758   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1759   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1760   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1761   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1762   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1763   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
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, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1767   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1768   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1769   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1770   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1771   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
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, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1775   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
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, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1779   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
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, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1783   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1784   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1785   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1786   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1787   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
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, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1791   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1792   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1793   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1794   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1795   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
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, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1799   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1800   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
1801   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
1802   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
1803   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
1804   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
1805   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
1806   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1807   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
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, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1811   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
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, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
1815   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
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, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1819   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1820   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1821   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1822 #ifndef TEST_FLOAT
1823   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
1824   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
1825   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
1826   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
1827   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
1828   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
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, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1832   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
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, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1836   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
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, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1840   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
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, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
1844   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
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 #endif
1848   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
1849   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
1850   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
1851   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
1852   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
1853   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
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 #ifndef TEST_FLOAT
1857   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1858   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
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, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1862   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
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 #endif
1866   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
1867   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
1868   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
1869   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
1870 #ifndef TEST_FLOAT
1871   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1872   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
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, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1876   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
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 #endif
1880   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1881   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
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, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
1885   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
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 #ifndef TEST_FLOAT
1889   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1890   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
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 #endif
1894 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1895   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
1896   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
1897   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
1898   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
1899   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
1900   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
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 # if LDBL_MIN_EXP <= -16381
1904   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1905   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
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, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
1909   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
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 # endif
1913   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1914   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
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, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
1918   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
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 #endif
1922   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
1923   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
1924   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
1925   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
1926   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
1927   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
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 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1931   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1932   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
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, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1936   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
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 #endif
1940   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
1941   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
1942   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
1943   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
1944 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1945   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1946   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
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, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1950   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
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 #endif
1954   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1955   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
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, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
1959   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
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 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1963   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1964   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
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 #endif
1968 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1969   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
1970   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
1971   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
1972   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
1973   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
1974   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
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, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1978   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
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, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1982   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
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, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1986   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
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, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
1990   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
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 #endif
1994   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
1995   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
1996   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
1997   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
1998   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
1999   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
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, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2003   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2004   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2005   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2006 #ifndef TEST_FLOAT
2007   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2008   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
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, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2012   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
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 #endif
2016   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2017   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
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, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2021   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
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 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2025   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2026   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2027   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2028   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2029   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2030   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
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, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2034   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
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, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2038   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
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, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2042   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
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, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2046   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
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 #endif
2050   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2051   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2052   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2053   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2054   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2055   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
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, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2059   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2060   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2061   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2062 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2063   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2064   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
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, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2068   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
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 #endif
2072   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2073   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
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, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2077   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
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);
2081   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2082   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2084   END (cacos, complex);
2087 static void
2088 cacosh_test (void)
2090   errno = 0;
2091   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2092   if (errno == ENOSYS)
2093     /* Function not implemented.  */
2094     return;
2096   START (cacosh);
2099   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2100   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2101   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2102   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2103   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2104   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2106   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2107   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2109   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2110   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2111   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2112   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2113   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2114   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2116   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2117   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2118   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2119   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2121   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2122   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2123   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2124   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2126   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2127   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2129   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2130   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2132   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2133   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2135   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2136   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2138   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2139   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2141   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2143   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2144   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2145   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2146   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2147   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2148   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -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, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2152   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2153   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2154   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2156   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2157   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2158   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2159   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2160   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2161   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2162   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2163   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2164   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2165   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2166   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2167   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2169   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2170   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2172   END (cacosh, complex);
2176 static void
2177 carg_test (void)
2179   START (carg);
2181   /* carg (x + iy) is specified as atan2 (y, x) */
2183   /* carg (x + i 0) == 0 for x > 0.  */
2184   TEST_c_f (carg, 2.0, 0, 0);
2185   /* carg (x - i 0) == -0 for x > 0.  */
2186   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2188   TEST_c_f (carg, 0, 0, 0);
2189   TEST_c_f (carg, 0, minus_zero, minus_zero);
2191   /* carg (x + i 0) == +pi for x < 0.  */
2192   TEST_c_f (carg, -2.0, 0, M_PIl);
2194   /* carg (x - i 0) == -pi for x < 0.  */
2195   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2197   TEST_c_f (carg, minus_zero, 0, M_PIl);
2198   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2200   /* carg (+0 + i y) == pi/2 for y > 0.  */
2201   TEST_c_f (carg, 0, 2.0, M_PI_2l);
2203   /* carg (-0 + i y) == pi/2 for y > 0.  */
2204   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
2206   /* carg (+0 + i y) == -pi/2 for y < 0.  */
2207   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
2209   /* carg (-0 + i y) == -pi/2 for y < 0.  */
2210   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
2212   /* carg (inf + i y) == +0 for finite y > 0.  */
2213   TEST_c_f (carg, plus_infty, 2.0, 0);
2215   /* carg (inf + i y) == -0 for finite y < 0.  */
2216   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
2218   /* carg(x + i inf) == pi/2 for finite x.  */
2219   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
2221   /* carg(x - i inf) == -pi/2 for finite x.  */
2222   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
2224   /* carg (-inf + i y) == +pi for finite y > 0.  */
2225   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
2227   /* carg (-inf + i y) == -pi for finite y < 0.  */
2228   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
2230   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
2232   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
2234   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
2236   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
2238   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
2240   END (carg);
2243 static void
2244 casin_test (void)
2246   errno = 0;
2247   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
2248   if (errno == ENOSYS)
2249     /* Function not implemented.  */
2250     return;
2252   START (casin);
2254   TEST_c_c (casin, 0, 0, 0.0, 0.0);
2255   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
2256   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
2257   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
2259   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
2260   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
2261   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
2262   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
2264   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
2265   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
2266   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
2267   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
2268   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
2269   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
2270   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
2271   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
2273   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
2274   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
2275   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
2276   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
2278   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
2279   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
2280   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
2281   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
2283   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
2284   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
2286   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
2287   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
2289   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2290   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2292   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2293   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2295   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2296   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2298   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
2300   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
2301   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
2302   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
2303   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
2304   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
2305   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
2306   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
2307   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
2308   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
2309   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
2310   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
2311   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
2313   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
2314   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
2315   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
2316   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
2317   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
2318   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
2319   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
2320   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
2321   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
2322   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
2323   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
2324   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
2326   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2327   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2328   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2329   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2330   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2331   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2332   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2333   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2334 #ifndef TEST_FLOAT
2335   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2336   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2337   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2338   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2339   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2340   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2341   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2342   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2343 #endif
2344 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2345   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2346   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2347   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2348   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2349   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2350   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2351   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2352   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2353 #endif
2355   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
2356 #ifndef TEST_FLOAT
2357   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
2358 #endif
2359 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2360   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
2361 #endif
2363   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2364   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2365   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2366   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2367   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2368   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2369   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2370   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2371 #ifndef TEST_FLOAT
2372   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2373   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2374   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2375   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2376   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2377   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2378   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2379   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2380 #endif
2381 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2382   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2383   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2384   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2385   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2386   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2387   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2388   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2389   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2390 #endif
2392   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2393   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2394   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2395   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2396   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
2397   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
2398   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
2399   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
2400   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
2401   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
2402   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
2403   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
2404   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
2405   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
2406   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
2407   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
2408   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
2409   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
2410   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
2411   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
2412   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
2413   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
2414   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
2415   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
2416   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
2417   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
2418   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
2419   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
2420   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
2421   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
2422   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
2423   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
2424   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
2425   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
2426   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
2427   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
2428   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
2429   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
2430   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
2431   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
2432   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2433   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2434   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2435   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2436   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
2437   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
2438   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
2439   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
2440 #ifndef TEST_FLOAT
2441   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2442   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2443   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2444   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2445   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
2446   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
2447   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
2448   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
2449   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2450   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2451   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2452   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2453   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
2454   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
2455   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
2456   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
2457 #endif
2458 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2459   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
2460   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
2461   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
2462   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
2463   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
2464   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
2465   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
2466   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
2467   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
2468   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
2469   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
2470   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
2471   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
2472   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
2473   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
2474   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
2475 #endif
2477   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
2478   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
2479   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
2480   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
2481   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
2482   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
2483   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
2484   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
2485   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
2486   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
2487   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
2488   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
2489   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
2490   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
2491   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
2492   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
2493   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L)
2494   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L)
2495   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L)
2496   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L)
2497   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
2498   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
2499   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
2500   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
2501 #ifndef TEST_FLOAT
2502   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
2503   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
2504   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
2505   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
2506   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
2507   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
2508   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
2509   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
2510   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2511   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2512   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2513   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2514   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
2515   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
2516   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
2517   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
2518   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L)
2519   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L)
2520   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L)
2521   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L)
2522   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
2523   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
2524   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
2525   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
2526 #endif
2527 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2528   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
2529   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
2530   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
2531   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
2532   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
2533   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
2534   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
2535   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
2536 # if LDBL_MIN_EXP <= -16381
2537   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
2538   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
2539   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
2540   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
2541   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
2542   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
2543   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
2544   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
2545 # endif
2546   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L)
2547   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L)
2548   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L)
2549   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L)
2550   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
2551   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
2552   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
2553   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
2554 #endif
2555 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2556   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
2557   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
2558   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
2559   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
2560   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
2561   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
2562   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
2563   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
2564   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2565   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2566   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2567   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
2568   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
2569   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
2570   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
2571   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
2572   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L)
2573   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L)
2574   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L)
2575   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L)
2576   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
2577   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
2578   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
2579   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
2580 #endif
2581 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2582   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
2583   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
2584   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
2585   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
2586   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
2587   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
2588   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
2589   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
2590   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
2591   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
2592   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
2593   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
2594   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
2595   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
2596   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
2597   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
2598   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L)
2599   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L)
2600   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L)
2601   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L)
2602   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
2603   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
2604   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
2605   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
2606 #endif
2608   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
2609   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
2610   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
2611   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
2612   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
2613   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
2614   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
2615   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
2616   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2617   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2618   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2619   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2620   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
2621   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
2622   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
2623   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
2624   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
2625   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
2626   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
2627   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
2628   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
2629   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
2630   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
2631   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
2632   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
2633   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
2634   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
2635   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
2636   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
2637   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
2638   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
2639   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
2640   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2641   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2642   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2643   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
2644   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2645   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2646   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2647   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2648   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
2649   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
2650   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
2651   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
2652   /* Bug 15319: underflow exception may be missing.  */
2653   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
2654   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
2655   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
2656   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
2657   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2658   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2659   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2660   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2661   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
2662   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
2663   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
2664   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
2665   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
2666   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
2667   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
2668   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
2669   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2670   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2671   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2672   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2673 #ifndef TEST_FLOAT
2674   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
2675   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
2676   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
2677   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
2678   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
2679   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
2680   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
2681   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
2682   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2683   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2684   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2685   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2686   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2687   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2688   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2689   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2690   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
2691   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
2692   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
2693   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
2694   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
2695   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
2696   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
2697   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
2698 #endif
2699   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
2700   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
2701   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
2702   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
2703   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
2704   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
2705   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
2706   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
2707 #ifndef TEST_FLOAT
2708   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2709   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2710   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2711   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2712   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2713   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2714   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2715   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2716 #endif
2717   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
2718   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
2719   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
2720   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
2721 #ifndef TEST_FLOAT
2722   /* Bug 15319: underflow exception may be missing.  */
2723   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2724   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2725   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2726   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2727   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2728   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2729   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2730   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2731 #endif
2732   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
2733   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
2734   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
2735   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
2736   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
2737   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
2738   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
2739   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
2740 #ifndef TEST_FLOAT
2741   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2742   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2743   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2744   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2745 #endif
2746 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2747   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
2748   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
2749   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
2750   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
2751   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
2752   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
2753   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
2754   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
2755 # if LDBL_MIN_EXP <= -16381
2756   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
2757   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
2758   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
2759   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
2760   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
2761   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
2762   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
2763   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
2764 # endif
2765   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
2766   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
2767   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
2768   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
2769   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
2770   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
2771   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
2772   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
2773 #endif
2774   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
2775   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
2776   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
2777   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
2778   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
2779   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
2780   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
2781   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
2782 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2783   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
2784   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
2785   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
2786   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
2787   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2788   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2789   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2790   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
2791 #endif
2792   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
2793   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
2794   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
2795   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
2796 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2797   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
2798   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
2799   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
2800   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
2801   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2802   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2803   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2804   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
2805 #endif
2806   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
2807   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
2808   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
2809   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
2810   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
2811   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
2812   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
2813   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
2814 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2815   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2816   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2817   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2818   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2819 #endif
2820 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2821   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
2822   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
2823   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
2824   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
2825   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
2826   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
2827   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
2828   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
2829   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2830   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2831   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2832   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
2833   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2834   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2835   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2836   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2837   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
2838   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
2839   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
2840   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
2841   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
2842   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
2843   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
2844   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
2845 #endif
2846   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
2847   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
2848   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
2849   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
2850   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
2851   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
2852   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
2853   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
2854   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
2855   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
2856   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
2857   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
2858 #ifndef TEST_FLOAT
2859   /* Bug 15319: underflow exception may be missing.  */
2860   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2861   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2862   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2863   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
2864   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2865   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2866   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2867   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2868 #endif
2869   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
2870   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
2871   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
2872   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
2873   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
2874   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
2875   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
2876   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
2877 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2878   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
2879   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
2880   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
2881   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
2882   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
2883   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
2884   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
2885   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
2886   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
2887   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
2888   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
2889   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
2890   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
2891   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
2892   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
2893   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
2894   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
2895   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
2896   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
2897   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
2898   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
2899   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
2900   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
2901   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
2902 #endif
2903   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
2904   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
2905   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
2906   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
2907   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
2908   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
2909   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
2910   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
2911   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
2912   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
2913   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
2914   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
2915 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2916   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
2917   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
2918   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
2919   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
2920   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2921   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2922   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2923   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2924 #endif
2925   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
2926   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
2927   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
2928   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
2929   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
2930   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
2931   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
2932   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
2934   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
2935   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
2937   END (casin, complex);
2941 static void
2942 casinh_test (void)
2944   errno = 0;
2945   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
2946   if (errno == ENOSYS)
2947     /* Function not implemented.  */
2948     return;
2950   START (casinh);
2952   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
2953   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
2954   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
2955   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
2957   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2958   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2959   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
2960   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
2962   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
2963   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
2964   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
2965   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
2966   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
2967   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
2968   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2969   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2971   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
2972   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
2973   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
2974   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
2976   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
2977   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
2978   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
2979   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
2981   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
2982   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
2984   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
2985   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
2987   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
2988   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
2990   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2991   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2993   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2994   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2996   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
2998   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
2999   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3000   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3001   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3002   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3003   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3004   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3005   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3006   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3007   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3008   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3009   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3011   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3012   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3013   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3014   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3015   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3016   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3017   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3018   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3019   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3020   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3021   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3022   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3024   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3025   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3026   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3027   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3028   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3029   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3030   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3031   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3032 #ifndef TEST_FLOAT
3033   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3034   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3035   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3036   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3037   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3038   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3039   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3040   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3041 #endif
3042 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3043   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3044   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3045   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3046   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3047   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3048   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3049   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3050   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3051 #endif
3053   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3054 #ifndef TEST_FLOAT
3055   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3056 #endif
3057 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3058   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3059 #endif
3061   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3062   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3063   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3064   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3065   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3066   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3067   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3068   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3069 #ifndef TEST_FLOAT
3070   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3071   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3072   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3073   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3074   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3075   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3076   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3077   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3078 #endif
3079 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3080   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3081   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3082   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3083   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3084   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3085   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3086   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3087   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3088 #endif
3090   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3091   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3092   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3093   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3094   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3095   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3096   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3097   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3098   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3099   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3100   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3101   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3102   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3103   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3104   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3105   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3106   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3107   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3108   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3109   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3110   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3111   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3112   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3113   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3114   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3115   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3116   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3117   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3118   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3119   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3120   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3121   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3122   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3123   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3124   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3125   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3126   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3127   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3128   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3129   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3130   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3131   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3132   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3133   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3134   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3135   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3136   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3137   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3138 #ifndef TEST_FLOAT
3139   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3140   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3141   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3142   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3143   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3144   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3145   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3146   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3147   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3148   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3149   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3150   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3151   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3152   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3153   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3154   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3155 #endif
3156 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3157   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3158   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3159   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3160   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3161   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3162   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3163   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3164   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3165   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3166   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3167   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3168   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3169   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3170   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3171   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3172   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3173 #endif
3175   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3176   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3177   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3178   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3179   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3180   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3181   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3182   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3183   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3184   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3185   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3186   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3187   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3188   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3189   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3190   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3191   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3192   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3193   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3194   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3195   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L)
3196   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L)
3197   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L)
3198   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L)
3199 #ifndef TEST_FLOAT
3200   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3201   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3202   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3203   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3204   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3205   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3206   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3207   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3208   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3209   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3210   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3211   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3212   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3213   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3214   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3215   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3216   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3217   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3218   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3219   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3220   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L)
3221   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L)
3222   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L)
3223   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L)
3224 #endif
3225 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3226   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3227   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3228   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3229   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3230   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3231   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3232   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3233   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3234 # if LDBL_MIN_EXP <= -16381
3235   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3236   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3237   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3238   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3239   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3240   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3241   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3242   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3243 # endif
3244   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3245   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3246   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3247   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3248   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L)
3249   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L)
3250   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L)
3251   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L)
3252 #endif
3253 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3254   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3255   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3256   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3257   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3258   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3259   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3260   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3261   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3262   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3263   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3264   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3265   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3266   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3267   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3268   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3269   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3270   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3271   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3272   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3273   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3274   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L)
3275   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L)
3276   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L)
3277   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L)
3278 #endif
3279 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3280   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3281   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3282   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3283   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3284   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3285   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3286   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3287   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3288   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3289   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3290   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3291   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3292   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3293   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3294   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3295   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3296   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3297   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3298   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3299   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3300   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L)
3301   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L)
3302   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L)
3303   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L)
3304 #endif
3306   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3307   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3308   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3309   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3310   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3311   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3312   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3313   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3314   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3315   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3316   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3317   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3318   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3319   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3320   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3321   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3322   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
3323   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
3324   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
3325   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
3326   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
3327   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
3328   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
3329   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
3330   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3331   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3332   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3333   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3334   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3335   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3336   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3337   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3338   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3339   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3340   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3341   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3342   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3343   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3344   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3345   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3346   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3347   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3348   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3349   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3350   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3351   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3352   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3353   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3354   /* Bug 15319: underflow exception may be missing.  */
3355   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3356   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3357   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3358   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3359   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
3360   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
3361   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
3362   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
3363   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
3364   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
3365   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
3366   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
3367   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3368   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3369   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3370   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3371 #ifndef TEST_FLOAT
3372   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3373   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3374   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3375   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3376   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3377   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3378   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3379   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3380   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3381   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3382   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3383   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3384   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3385   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3386   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3387   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3388   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
3389   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
3390   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
3391   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
3392   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
3393   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
3394   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
3395   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
3396 #endif
3397   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
3398   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
3399   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
3400   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
3401   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
3402   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
3403   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
3404   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
3405 #ifndef TEST_FLOAT
3406   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3407   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3408   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3409   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3410   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3411   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3412   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3413   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3414 #endif
3415   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
3416   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
3417   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
3418   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
3419 #ifndef TEST_FLOAT
3420   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
3421   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
3422   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
3423   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
3424   /* Bug 15319: underflow exception may be missing.  */
3425   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3426   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3427   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3428   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3429 #endif
3430   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
3431   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
3432   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
3433   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
3434   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
3435   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
3436   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
3437   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
3438 #ifndef TEST_FLOAT
3439   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3440   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3441   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3442   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3443 #endif
3444 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3445   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
3446   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
3447   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
3448   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
3449   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
3450   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
3451   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
3452   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
3453 # if LDBL_MIN_EXP <= -16381
3454   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
3455   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
3456   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
3457   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
3458   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
3459   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
3460   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
3461   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
3462 # endif
3463   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
3464   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
3465   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
3466   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
3467   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
3468   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
3469   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
3470   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
3471 #endif
3472   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
3473   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
3474   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
3475   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
3476   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
3477   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
3478   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
3479   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
3480 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3481   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
3482   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
3483   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
3484   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
3485   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
3486   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
3487   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
3488   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
3489 #endif
3490   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
3491   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
3492   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
3493   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
3494 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3495   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
3496   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
3497   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
3498   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
3499   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
3500   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
3501   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
3502   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
3503 #endif
3504   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
3505   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
3506   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
3507   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
3508   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
3509   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
3510   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
3511   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
3512 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3513   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3514   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3515   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3516   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3517 #endif
3518 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3519   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
3520   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
3521   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
3522   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
3523   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
3524   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
3525   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
3526   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
3527   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3528   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3529   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3530   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3531   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3532   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3533   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3534   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3535   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
3536   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
3537   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
3538   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
3539   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
3540   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
3541   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
3542   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
3543 #endif
3544   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
3545   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
3546   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
3547   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
3548   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
3549   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
3550   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
3551   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
3552   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3553   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3554   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3555   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3556 #ifndef TEST_FLOAT
3557   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
3558   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
3559   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
3560   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
3561   /* Bug 15319: underflow exception may be missing.  */
3562   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3563   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3564   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3565   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3566 #endif
3567   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3568   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3569   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3570   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3571   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3572   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3573   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3574   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3575 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3576   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
3577   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
3578   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
3579   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
3580   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
3581   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
3582   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
3583   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
3584   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
3585   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
3586   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
3587   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
3588   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
3589   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
3590   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
3591   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
3592   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
3593   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
3594   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
3595   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
3596   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
3597   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
3598   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
3599   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
3600 #endif
3601   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
3602   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
3603   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
3604   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
3605   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
3606   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
3607   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
3608   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
3609   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3610   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3611   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3612   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3613 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3614   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3615   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3616   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3617   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3618   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3619   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3620   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3621   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3622 #endif
3623   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3624   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3625   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3626   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3627   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3628   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3629   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3630   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3632   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
3633   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
3635   END (casinh, complex);
3639 static void
3640 catan_test (void)
3642   errno = 0;
3643   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
3644   if (errno == ENOSYS)
3645     /* Function not implemented.  */
3646     return;
3648   START (catan);
3650   TEST_c_c (catan, 0, 0, 0, 0);
3651   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
3652   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
3653   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
3655   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
3656   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
3657   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
3658   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
3661   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
3662   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
3663   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
3664   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
3665   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
3666   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
3667   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
3668   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
3670   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
3671   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
3672   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
3673   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
3675   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
3676   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
3677   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
3678   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
3680   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
3681   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
3683   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
3684   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
3686   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
3687   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
3689   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
3690   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
3692   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3693   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3695   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3696   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3698   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
3700   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
3701   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
3703   END (catan, complex);
3706 static void
3707 catanh_test (void)
3709   errno = 0;
3710   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
3711   if (errno == ENOSYS)
3712     /* Function not implemented.  */
3713     return;
3715   START (catanh);
3717   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
3718   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
3719   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
3720   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
3722   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
3723   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
3724   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
3725   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
3727   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
3728   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
3729   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
3730   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
3731   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
3732   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
3733   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
3734   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
3736   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
3737   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
3738   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
3739   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
3741   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
3742   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
3743   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
3744   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
3746   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
3747   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
3749   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
3750   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
3752   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
3753   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
3755   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
3756   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
3758   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3759   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3761   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3762   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3764   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
3766   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
3767   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
3769   END (catanh, complex);
3772 static void
3773 cbrt_test (void)
3775   errno = 0;
3776   FUNC(cbrt) (8);
3777   if (errno == ENOSYS)
3778     /* Function not implemented.  */
3779     return;
3781   START (cbrt);
3783   TEST_f_f (cbrt, 0.0, 0.0);
3784   TEST_f_f (cbrt, minus_zero, minus_zero);
3786   TEST_f_f (cbrt, plus_infty, plus_infty);
3787   TEST_f_f (cbrt, minus_infty, minus_infty);
3788   TEST_f_f (cbrt, qnan_value, qnan_value);
3790   TEST_f_f (cbrt, -0.001L, -0.1L);
3791   TEST_f_f (cbrt, 8, 2);
3792   TEST_f_f (cbrt, -27.0, -3.0);
3793   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
3794   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
3796   END (cbrt);
3800 static void
3801 ccos_test (void)
3803   errno = 0;
3804   FUNC(ccos) (BUILD_COMPLEX (0, 0));
3805   if (errno == ENOSYS)
3806     /* Function not implemented.  */
3807     return;
3809   START (ccos);
3811   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
3812   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
3813   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
3814   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
3816   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3817   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3818   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3819   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3821   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
3822   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
3823   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
3824   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
3826   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3827   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3828   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3829   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3831   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
3832   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
3833   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
3834   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
3836   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
3837   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
3838   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
3839   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
3841   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3842   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3844   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
3845   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
3847   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3848   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3850   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3851   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3853   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3854   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3856   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3857   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3859   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
3861   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
3862   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
3864   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3865   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3866   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3867   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3869 #ifndef TEST_FLOAT
3870   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3871   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3872   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3873   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3874 #endif
3876 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3877   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3878   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3879   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3880   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3881 #endif
3883 #ifdef TEST_FLOAT
3884   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
3885 #endif
3887 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
3888   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
3889 #endif
3891 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3892   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
3893 #endif
3895   END (ccos, complex);
3899 static void
3900 ccosh_test (void)
3902   errno = 0;
3903   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
3904   if (errno == ENOSYS)
3905     /* Function not implemented.  */
3906     return;
3908   START (ccosh);
3910   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
3911   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
3912   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
3913   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
3915   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3916   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3917   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3918   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
3920   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
3921   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
3922   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
3923   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
3925   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3926   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3927   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3928   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
3930   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
3931   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
3932   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
3933   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
3935   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
3936   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
3937   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
3938   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
3940   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3941   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3943   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
3944   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
3946   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3947   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3949   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3950   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
3952   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3953   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3955   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3956   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3958   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
3960   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
3962   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
3964   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3965   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3966   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
3967   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
3969 #ifndef TEST_FLOAT
3970   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3971   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3972   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
3973   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
3974 #endif
3976 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3977   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3978   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3979   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
3980   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
3981 #endif
3983 #ifdef TEST_FLOAT
3984   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
3985 #endif
3987 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
3988   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
3989 #endif
3991 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3992   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
3993 #endif
3995   END (ccosh, complex);
3999 static void
4000 ceil_test (void)
4002   START (ceil);
4004   TEST_f_f (ceil, 0.0, 0.0);
4005   TEST_f_f (ceil, minus_zero, minus_zero);
4006   TEST_f_f (ceil, plus_infty, plus_infty);
4007   TEST_f_f (ceil, minus_infty, minus_infty);
4008   TEST_f_f (ceil, qnan_value, qnan_value);
4010   TEST_f_f (ceil, M_PIl, 4.0);
4011   TEST_f_f (ceil, -M_PIl, -3.0);
4012   TEST_f_f (ceil, 0.1, 1.0);
4013   TEST_f_f (ceil, 0.25, 1.0);
4014   TEST_f_f (ceil, 0.625, 1.0);
4015   TEST_f_f (ceil, -0.1, minus_zero);
4016   TEST_f_f (ceil, -0.25, minus_zero);
4017   TEST_f_f (ceil, -0.625, minus_zero);
4019 #ifdef TEST_LDOUBLE
4020   /* The result can only be represented in long double.  */
4021   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
4022   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
4023   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
4024   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
4025   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
4027   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
4028   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
4029   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
4030   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
4031   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
4033 # if LDBL_MANT_DIG > 100
4034   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
4035   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
4036   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
4037   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
4038   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
4039   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
4040 # endif
4042   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
4043   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
4044   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
4045   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
4046   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
4048   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
4049   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
4050   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
4051   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
4052   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
4054 # if LDBL_MANT_DIG > 100
4055   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
4056   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
4057   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
4058   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
4059   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
4060   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
4062   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
4063   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
4064   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
4065   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
4066   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
4067   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
4068 # endif
4070   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
4071   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
4072   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
4073   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
4074   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
4076   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
4077   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
4078   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
4079   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
4080   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
4082   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
4083   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
4084   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
4085   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
4086   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
4087 #endif
4089   END (ceil);
4093 static void
4094 cexp_test (void)
4096   errno = 0;
4097   FUNC(cexp) (BUILD_COMPLEX (0, 0));
4098   if (errno == ENOSYS)
4099     /* Function not implemented.  */
4100     return;
4102   START (cexp);
4104   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
4105   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
4106   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
4107   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
4109   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
4110   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
4112   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
4113   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
4115   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4116   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4118   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4119   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4121   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4122   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4124   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4125   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4127   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
4128   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
4129   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
4130   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
4132   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4133   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4135   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
4136   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
4138   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
4140   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
4142   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4143   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4145   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4146   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4147   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4148   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
4150   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
4151   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
4153   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
4154   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
4155   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
4157 #ifndef TEST_FLOAT
4158   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
4159   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
4160   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
4161 #endif
4163 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4164   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
4165   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
4166 #endif
4168   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
4169   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
4171 #ifndef TEST_FLOAT
4172   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
4173   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
4174 #endif
4176 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4177   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
4178   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
4179 #endif
4181 #ifdef TEST_FLOAT
4182   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
4183 #endif
4185 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4186   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
4187 #endif
4189 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4190   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
4191 #endif
4193   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
4194   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
4195   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
4197   END (cexp, complex);
4201 static void
4202 cimag_test (void)
4204   START (cimag);
4205   TEST_c_f (cimag, 1.0, 0.0, 0.0);
4206   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
4207   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
4208   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
4209   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
4210   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
4211   TEST_c_f (cimag, 2.0, 3.0, 3.0);
4213   END (cimag);
4216 static void
4217 clog_test (void)
4219   errno = 0;
4220   FUNC(clog) (BUILD_COMPLEX (-2, -3));
4221   if (errno == ENOSYS)
4222     /* Function not implemented.  */
4223     return;
4225   START (clog);
4227   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4228   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4230   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
4231   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4233   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
4234   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
4236   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
4237   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
4239   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
4240   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
4241   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
4242   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
4243   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
4244   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
4245   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
4246   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
4248   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
4249   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
4250   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
4251   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
4253   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
4254   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
4255   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
4256   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
4258   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
4259   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
4261   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
4262   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
4264   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4265   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4266   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4267   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4269   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4270   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4271   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4272   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4274   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
4276   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
4277   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
4279   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
4280   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4281   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
4282   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
4284 #ifndef TEST_FLOAT
4285   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
4286   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
4287   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
4288   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
4289 #endif
4291 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4292   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
4293   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
4294   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
4295 #endif
4297   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4298   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4299   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4300   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4301   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
4302   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
4303 #ifdef TEST_FLOAT
4304   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
4305   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
4306 #endif
4308 #ifndef TEST_FLOAT
4309   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4310   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4311   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
4312   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
4313   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
4314   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
4315 #endif
4316 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4317   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
4318   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
4319 #endif
4321 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4322   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4323   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4324   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4325   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4326   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
4327   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
4328   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
4329   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
4330 # if LDBL_MANT_DIG >= 113
4331   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4332   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
4333   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4334   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
4335   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
4336   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
4337   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
4338   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
4339 # endif
4340 #endif
4342   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
4343   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
4344   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
4345   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
4346   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
4347   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
4348   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
4349   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
4350   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
4351 #ifndef TEST_FLOAT
4352   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4353   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4354   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
4355 #endif
4356 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4357   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
4358   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4359   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
4360 #endif
4362   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
4363   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
4364 #ifndef TEST_FLOAT
4365   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
4366   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
4367 #endif
4368 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4369   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
4370   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4371 #endif
4373   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
4374 #ifndef TEST_FLOAT
4375   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4376 #endif
4377 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4378   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
4379 #endif
4381   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
4382   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
4383   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
4384   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
4385   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
4386   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
4387   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
4388   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
4389   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
4390   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
4391 #ifndef TEST_FLOAT
4392   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
4393   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
4394   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
4395   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
4396   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
4397   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
4398   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
4399   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
4400   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
4401   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
4402   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
4403   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
4404 #endif
4405 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4406   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
4407   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
4408   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
4409   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
4410   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
4411 #endif
4412 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4413   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
4414   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
4415   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
4416   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
4417   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
4418   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
4419   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
4420   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
4421   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
4422   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
4423 #endif
4424 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4425   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
4426   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
4427   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
4428   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
4429   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
4430   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
4431 #endif
4433   END (clog, complex);
4437 static void
4438 clog10_test (void)
4440   errno = 0;
4441   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
4442   if (errno == ENOSYS)
4443     /* Function not implemented.  */
4444     return;
4446   START (clog10);
4448   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4449   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4451   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
4452   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4454   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
4456   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
4457   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
4459   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
4460   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
4461   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
4462   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
4463   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
4464   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
4465   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
4466   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
4468   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
4469   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
4470   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
4471   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
4473   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
4474   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
4475   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
4476   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
4478   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
4479   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
4481   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
4482   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
4484   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4485   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4486   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4487   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4489   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4490   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4491   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4492   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4494   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
4496   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
4497   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
4499   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
4500   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4501   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
4502   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
4504 #ifndef TEST_FLOAT
4505   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
4506   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
4507   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
4508   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
4509 #endif
4511 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4512   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
4513   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
4514   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
4515 #endif
4517   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
4518   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
4519   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
4520   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
4521   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
4522   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
4523 #ifdef TEST_FLOAT
4524   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
4525   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
4526 #endif
4528 #ifndef TEST_FLOAT
4529   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
4530   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
4531   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
4532   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
4533   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
4534   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
4535 #endif
4536 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4537   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
4538   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
4539 #endif
4541 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4542   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
4543   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
4544   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
4545   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
4546   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
4547   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
4548   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
4549   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
4550 # if LDBL_MANT_DIG >= 113
4551   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
4552   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
4553   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
4554   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
4555   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
4556   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
4557   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
4558   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
4559 # endif
4560 #endif
4562   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
4563   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
4564   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
4565   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
4566   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
4567   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
4568   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
4569   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4570   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
4571 #ifndef TEST_FLOAT
4572   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4573   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4574   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4575 #endif
4576 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4577   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
4578   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
4579   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
4580 #endif
4582   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
4583   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
4584 #ifndef TEST_FLOAT
4585   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
4586   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
4587 #endif
4588 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4589   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
4590   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4591 #endif
4593   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
4594 #ifndef TEST_FLOAT
4595   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4596 #endif
4597 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4598   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
4599 #endif
4601   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
4602   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
4603   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
4604   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
4605   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
4606   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
4607   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
4608   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
4609   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
4610   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
4611 #ifndef TEST_FLOAT
4612   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
4613   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
4614   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
4615   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
4616   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
4617   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
4618   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
4619   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
4620   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
4621   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
4622   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
4623   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
4624 #endif
4625 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4626   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
4627   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
4628   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
4629   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
4630   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
4631 #endif
4632 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4633   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
4634   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
4635   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
4636   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
4637   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
4638   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
4639   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
4640   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
4641   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
4642   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
4643 #endif
4644 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4645   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
4646   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
4647   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
4648   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
4649   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
4650   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
4651 #endif
4653   END (clog10, complex);
4657 static void
4658 conj_test (void)
4660   START (conj);
4661   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
4662   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
4663   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
4664   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
4665   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
4666   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
4667   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
4669   END (conj, complex);
4673 static void
4674 copysign_test (void)
4676   START (copysign);
4678   TEST_ff_f (copysign, 0, 4, 0);
4679   TEST_ff_f (copysign, 0, -4, minus_zero);
4680   TEST_ff_f (copysign, minus_zero, 4, 0);
4681   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
4683   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
4684   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
4685   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
4686   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
4688   TEST_ff_f (copysign, 0, plus_infty, 0);
4689   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
4690   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
4691   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
4693   /* XXX More correctly we would have to check the sign of the NaN.  */
4694   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
4695   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
4696   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
4697   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
4699   END (copysign);
4703 static void
4704 cos_test (void)
4706   errno = 0;
4707   FUNC(cos) (0);
4708   if (errno == ENOSYS)
4709     /* Function not implemented.  */
4710     return;
4712   START (cos);
4714   TEST_f_f (cos, 0, 1);
4715   TEST_f_f (cos, minus_zero, 1);
4716   errno = 0;
4717   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION);
4718   check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
4719   errno = 0;
4720   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION);
4721   check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
4722   errno = 0;
4723   TEST_f_f (cos, qnan_value, qnan_value);
4724   check_int ("errno for cos(qNaN) unchanged", errno, 0, 0, 0, 0);
4726   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
4727   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
4728   TEST_f_f (cos, M_PI_2l, 0);
4730   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
4732   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
4733   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
4735 #ifdef TEST_DOUBLE
4736   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
4737 #endif
4739   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
4741 #ifndef TEST_FLOAT
4742   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
4743   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
4744 #endif
4746 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4747   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
4748 #endif
4750   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
4751   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
4752   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
4753   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
4754   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
4755   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
4757   END (cos);
4761 static void
4762 cos_test_tonearest (void)
4764   int save_round_mode;
4765   errno = 0;
4766   FUNC(cos) (0);
4767   if (errno == ENOSYS)
4768     /* Function not implemented.  */
4769     return;
4771   START (cos_tonearest);
4773   save_round_mode = fegetround ();
4775   if (!fesetround (FE_TONEAREST))
4776     {
4777       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
4778       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
4779       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
4780       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
4781       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
4782       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
4783       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
4784       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
4785       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
4786       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
4787     }
4789   fesetround (save_round_mode);
4791   END (cos_tonearest);
4795 static void
4796 cos_test_towardzero (void)
4798   int save_round_mode;
4799   errno = 0;
4800   FUNC(cos) (0);
4801   if (errno == ENOSYS)
4802     /* Function not implemented.  */
4803     return;
4805   START (cos_towardzero);
4807   save_round_mode = fegetround ();
4809   if (!fesetround (FE_TOWARDZERO))
4810     {
4811       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
4812       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
4813       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
4814       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
4815       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
4816       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
4817       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
4818       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
4819       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
4820       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
4821     }
4823   fesetround (save_round_mode);
4825   END (cos_towardzero);
4829 static void
4830 cos_test_downward (void)
4832   int save_round_mode;
4833   errno = 0;
4834   FUNC(cos) (0);
4835   if (errno == ENOSYS)
4836     /* Function not implemented.  */
4837     return;
4839   START (cos_downward);
4841   save_round_mode = fegetround ();
4843   if (!fesetround (FE_DOWNWARD))
4844     {
4845       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
4846       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
4847       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
4848       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
4849       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
4850       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
4851       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
4852       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
4853       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
4854       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
4855     }
4857   fesetround (save_round_mode);
4859   END (cos_downward);
4863 static void
4864 cos_test_upward (void)
4866   int save_round_mode;
4867   errno = 0;
4868   FUNC(cos) (0);
4869   if (errno == ENOSYS)
4870     /* Function not implemented.  */
4871     return;
4873   START (cos_upward);
4875   save_round_mode = fegetround ();
4877   if (!fesetround (FE_UPWARD))
4878     {
4879       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
4880       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
4881       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
4882       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
4883       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
4884       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
4885       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
4886       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
4887       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
4888       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
4889     }
4891   fesetround (save_round_mode);
4893   END (cos_upward);
4897 static void
4898 cosh_test (void)
4900   errno = 0;
4901   FUNC(cosh) (0.7L);
4902   if (errno == ENOSYS)
4903     /* Function not implemented.  */
4904     return;
4906   START (cosh);
4907   TEST_f_f (cosh, 0, 1);
4908   TEST_f_f (cosh, minus_zero, 1);
4910 #ifndef TEST_INLINE
4911   TEST_f_f (cosh, plus_infty, plus_infty);
4912   TEST_f_f (cosh, minus_infty, plus_infty);
4913 #endif
4914   TEST_f_f (cosh, qnan_value, qnan_value);
4916   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
4918 #ifndef TEST_FLOAT
4919   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
4920   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
4921 #endif
4923   END (cosh);
4927 static void
4928 cosh_test_tonearest (void)
4930   int save_round_mode;
4931   errno = 0;
4932   FUNC(cosh) (0);
4933   if (errno == ENOSYS)
4934     /* Function not implemented.  */
4935     return;
4937   START (cosh_tonearest);
4939   save_round_mode = fegetround ();
4941   if (!fesetround (FE_TONEAREST))
4942     {
4943       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
4944       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
4945       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
4946     }
4948   fesetround (save_round_mode);
4950   END (cosh_tonearest);
4954 static void
4955 cosh_test_towardzero (void)
4957   int save_round_mode;
4958   errno = 0;
4959   FUNC(cosh) (0);
4960   if (errno == ENOSYS)
4961     /* Function not implemented.  */
4962     return;
4964   START (cosh_towardzero);
4966   save_round_mode = fegetround ();
4968   if (!fesetround (FE_TOWARDZERO))
4969     {
4970       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
4971       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
4972       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
4973     }
4975   fesetround (save_round_mode);
4977   END (cosh_towardzero);
4981 static void
4982 cosh_test_downward (void)
4984   int save_round_mode;
4985   errno = 0;
4986   FUNC(cosh) (0);
4987   if (errno == ENOSYS)
4988     /* Function not implemented.  */
4989     return;
4991   START (cosh_downward);
4993   save_round_mode = fegetround ();
4995   if (!fesetround (FE_DOWNWARD))
4996     {
4997       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
4998       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
4999       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5000     }
5002   fesetround (save_round_mode);
5004   END (cosh_downward);
5008 static void
5009 cosh_test_upward (void)
5011   int save_round_mode;
5012   errno = 0;
5013   FUNC(cosh) (0);
5014   if (errno == ENOSYS)
5015     /* Function not implemented.  */
5016     return;
5018   START (cosh_upward);
5020   save_round_mode = fegetround ();
5022   if (!fesetround (FE_UPWARD))
5023     {
5024       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5025       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5026       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5027     }
5029   fesetround (save_round_mode);
5031   END (cosh_upward);
5035 static void
5036 cpow_test (void)
5038   errno = 0;
5039   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
5040   if (errno == ENOSYS)
5041     /* Function not implemented.  */
5042     return;
5044   START (cpow);
5046   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
5047   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
5049   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
5050   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
5052   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
5054   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
5055   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
5056   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
5057   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
5059   END (cpow, complex);
5063 static void
5064 cproj_test (void)
5066   START (cproj);
5067   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
5068   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
5069   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
5070   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
5072   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
5074   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
5075   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
5076   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
5077   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
5079   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
5080   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
5082   END (cproj, complex);
5086 static void
5087 creal_test (void)
5089   START (creal);
5090   TEST_c_f (creal, 0.0, 1.0, 0.0);
5091   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
5092   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
5093   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
5094   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
5095   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
5096   TEST_c_f (creal, 2.0, 3.0, 2.0);
5098   END (creal);
5101 static void
5102 csin_test (void)
5104   errno = 0;
5105   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
5106   if (errno == ENOSYS)
5107     /* Function not implemented.  */
5108     return;
5110   START (csin);
5112   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
5113   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
5114   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
5115   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
5117   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
5118   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
5119   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
5120   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
5122   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5123   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5124   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5125   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5127   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5128   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5129   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5130   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5132   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5133   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5134   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5135   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
5137   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
5138   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
5139   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
5140   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
5142   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5143   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5145   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5146   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5148   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5149   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5151   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
5152   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
5154   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5155   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5157   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5158   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5160   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
5162   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
5163   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
5165   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5166   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5167   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5168   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5170 #ifndef TEST_FLOAT
5171   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5172   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5173   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5174   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5175 #endif
5177 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5178   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5179   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5180   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5181   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5182 #endif
5184 #ifdef TEST_FLOAT
5185   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
5186 #endif
5188 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5189   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
5190 #endif
5192 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5193   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
5194 #endif
5196   END (csin, complex);
5200 static void
5201 csinh_test (void)
5203   errno = 0;
5204   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
5205   if (errno == ENOSYS)
5206     /* Function not implemented.  */
5207     return;
5209   START (csinh);
5211   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
5212   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
5213   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
5214   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
5216   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5217   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5218   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5219   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5221   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
5222   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
5223   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
5224   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
5226   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5227   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5228   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5229   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5231   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
5232   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
5233   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
5234   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
5236   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5237   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5238   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5239   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5241   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5242   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5244   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5245   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5247   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5248   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5250   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
5251   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
5253   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5254   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5256   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5257   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5259   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
5261   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
5262   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
5264   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5265   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5266   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5267   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5269 #ifndef TEST_FLOAT
5270   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5271   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5272   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5273   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5274 #endif
5276 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5277   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5278   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5279   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5280   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5281 #endif
5283 #ifdef TEST_FLOAT
5284   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5285 #endif
5287 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5288   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
5289 #endif
5291 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5292   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
5293 #endif
5295   END (csinh, complex);
5299 static void
5300 csqrt_test (void)
5302   errno = 0;
5303   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
5304   if (errno == ENOSYS)
5305     /* Function not implemented.  */
5306     return;
5308   START (csqrt);
5310   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
5311   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
5312   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
5313   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
5315   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
5316   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
5317   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
5318   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
5320   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
5321   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
5322   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
5323   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
5325   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
5326   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
5327   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
5328   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
5329   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
5330   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
5331   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
5332   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
5333   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
5334   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
5335   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
5336   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
5338   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5340   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
5342   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5343   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5344   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5345   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5347   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5348   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5349   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5350   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5352   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
5354   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
5355   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
5356   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
5357   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
5358   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
5359   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
5360   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
5361   /* Principal square root should be returned (i.e., non-negative real
5362      part).  */
5363   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
5365   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
5366   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
5367   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
5368   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
5370   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
5371   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
5372 #ifdef TEST_FLOAT
5373   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
5374 #endif
5375   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
5376   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
5377   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
5379 #ifndef TEST_FLOAT
5380   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
5381   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
5382   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
5383   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
5385   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
5386   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
5387 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5388   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
5389 #endif
5390   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
5391   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
5392   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
5393 #endif
5395 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5396   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
5397   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
5398   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
5400   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
5401   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
5402   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
5403   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
5404   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
5405   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
5407 # if LDBL_MANT_DIG >= 113
5408   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
5409   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
5410   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
5411   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
5412   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
5413   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
5414 # endif
5415 #endif
5417   END (csqrt, complex);
5420 static void
5421 ctan_test (void)
5423   errno = 0;
5424   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
5425   if (errno == ENOSYS)
5426     /* Function not implemented.  */
5427     return;
5429   START (ctan);
5431   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
5432   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
5433   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
5434   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
5436   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
5437   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
5438   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
5439   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
5441   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
5442   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
5443   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
5444   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
5446   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
5447   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
5448   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
5449   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
5450   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
5451   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
5452   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
5453   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
5455   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
5456   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
5458   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
5459   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
5461   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5462   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5464   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5465   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5466   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5467   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5469   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
5471   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
5472   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
5474   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
5475   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
5477 #ifndef TEST_FLOAT
5478   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
5479   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
5480 #endif
5482 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5483   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
5484   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
5485 #endif
5487   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
5489   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
5491 #ifndef TEST_FLOAT
5492   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
5493 #endif
5495 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5496   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
5497 #endif
5499   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
5500   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
5501   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
5502   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
5504   END (ctan, complex);
5508 static void
5509 ctan_test_tonearest (void)
5511   int save_round_mode;
5512   errno = 0;
5513   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
5514   if (errno == ENOSYS)
5515     /* Function not implemented.  */
5516     return;
5518   START (ctan_tonearest);
5520   save_round_mode = fegetround ();
5522   if (!fesetround (FE_TONEAREST))
5523     {
5524       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
5526 #ifndef TEST_FLOAT
5527       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
5528 #endif
5530 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5531       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
5532 #endif
5533     }
5535   fesetround (save_round_mode);
5537   END (ctan_tonearest, complex);
5541 static void
5542 ctan_test_towardzero (void)
5544   int save_round_mode;
5545   errno = 0;
5546   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
5547   if (errno == ENOSYS)
5548     /* Function not implemented.  */
5549     return;
5551   START (ctan_towardzero);
5553   save_round_mode = fegetround ();
5555   if (!fesetround (FE_TOWARDZERO))
5556     {
5557       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
5559 #ifndef TEST_FLOAT
5560       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
5561 #endif
5563 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5564       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
5565 #endif
5566     }
5568   fesetround (save_round_mode);
5570   END (ctan_towardzero, complex);
5574 static void
5575 ctan_test_downward (void)
5577   int save_round_mode;
5578   errno = 0;
5579   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
5580   if (errno == ENOSYS)
5581     /* Function not implemented.  */
5582     return;
5584   START (ctan_downward);
5586   save_round_mode = fegetround ();
5588   if (!fesetround (FE_DOWNWARD))
5589     {
5590       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
5592 #ifndef TEST_FLOAT
5593       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
5594 #endif
5596 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5597       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
5598 #endif
5599     }
5601   fesetround (save_round_mode);
5603   END (ctan_downward, complex);
5607 static void
5608 ctan_test_upward (void)
5610   int save_round_mode;
5611   errno = 0;
5612   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
5613   if (errno == ENOSYS)
5614     /* Function not implemented.  */
5615     return;
5617   START (ctan_upward);
5619   save_round_mode = fegetround ();
5621   if (!fesetround (FE_UPWARD))
5622     {
5623       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
5625 #ifndef TEST_FLOAT
5626       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
5627 #endif
5629 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5630       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
5631 #endif
5632     }
5634   fesetround (save_round_mode);
5636   END (ctan_upward, complex);
5640 static void
5641 ctanh_test (void)
5643   errno = 0;
5644   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
5645   if (errno == ENOSYS)
5646     /* Function not implemented.  */
5647     return;
5649   START (ctanh);
5651   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
5652   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
5653   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
5654   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
5656   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
5657   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
5658   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
5659   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
5660   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
5661   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
5662   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
5663   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
5665   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5666   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5667   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5668   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5669   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5670   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5671   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5672   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5674   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
5675   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
5677   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
5678   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
5680   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5681   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5683   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5684   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5685   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5686   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5688   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
5690   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
5692   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
5693   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
5695   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5696   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
5698 #ifndef TEST_FLOAT
5699   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
5700   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
5701 #endif
5703 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5704   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
5705   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
5706 #endif
5708   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
5710   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
5712 #ifndef TEST_FLOAT
5713   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
5714 #endif
5716 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5717   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
5718 #endif
5720   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
5721   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
5722   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
5723   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
5725   END (ctanh, complex);
5729 static void
5730 ctanh_test_tonearest (void)
5732   int save_round_mode;
5733   errno = 0;
5734   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
5735   if (errno == ENOSYS)
5736     /* Function not implemented.  */
5737     return;
5739   START (ctanh_tonearest);
5741   save_round_mode = fegetround ();
5743   if (!fesetround (FE_TONEAREST))
5744     {
5745       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
5747 #ifndef TEST_FLOAT
5748       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
5749 #endif
5751 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5752       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
5753 #endif
5754     }
5756   fesetround (save_round_mode);
5758   END (ctanh_tonearest, complex);
5762 static void
5763 ctanh_test_towardzero (void)
5765   int save_round_mode;
5766   errno = 0;
5767   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
5768   if (errno == ENOSYS)
5769     /* Function not implemented.  */
5770     return;
5772   START (ctanh_towardzero);
5774   save_round_mode = fegetround ();
5776   if (!fesetround (FE_TOWARDZERO))
5777     {
5778       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
5780 #ifndef TEST_FLOAT
5781       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
5782 #endif
5784 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5785       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
5786 #endif
5787     }
5789   fesetround (save_round_mode);
5791   END (ctanh_towardzero, complex);
5795 static void
5796 ctanh_test_downward (void)
5798   int save_round_mode;
5799   errno = 0;
5800   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
5801   if (errno == ENOSYS)
5802     /* Function not implemented.  */
5803     return;
5805   START (ctanh_downward);
5807   save_round_mode = fegetround ();
5809   if (!fesetround (FE_DOWNWARD))
5810     {
5811       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
5813 #ifndef TEST_FLOAT
5814       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
5815 #endif
5817 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5818       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
5819 #endif
5820     }
5822   fesetround (save_round_mode);
5824   END (ctanh_downward, complex);
5828 static void
5829 ctanh_test_upward (void)
5831   int save_round_mode;
5832   errno = 0;
5833   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
5834   if (errno == ENOSYS)
5835     /* Function not implemented.  */
5836     return;
5838   START (ctanh_upward);
5840   save_round_mode = fegetround ();
5842   if (!fesetround (FE_UPWARD))
5843     {
5844       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
5846 #ifndef TEST_FLOAT
5847       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
5848 #endif
5850 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5851       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
5852 #endif
5853     }
5855   fesetround (save_round_mode);
5857   END (ctanh_upward, complex);
5861 static void
5862 erf_test (void)
5864   errno = 0;
5865   FUNC(erf) (0);
5866   if (errno == ENOSYS)
5867     /* Function not implemented.  */
5868     return;
5870   START (erf);
5872   TEST_f_f (erf, 0, 0);
5873   TEST_f_f (erf, minus_zero, minus_zero);
5874   TEST_f_f (erf, plus_infty, 1);
5875   TEST_f_f (erf, minus_infty, -1);
5876   TEST_f_f (erf, qnan_value, qnan_value);
5878   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
5879   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
5880   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
5881   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
5882   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
5883   TEST_f_f (erf, 27.0L, 1.0L);
5885   END (erf);
5889 static void
5890 erfc_test (void)
5892   errno = 0;
5893   FUNC(erfc) (0);
5894   if (errno == ENOSYS)
5895     /* Function not implemented.  */
5896     return;
5898   START (erfc);
5900   TEST_f_f (erfc, plus_infty, 0.0);
5901   TEST_f_f (erfc, minus_infty, 2.0);
5902   TEST_f_f (erfc, 0.0, 1.0);
5903   TEST_f_f (erfc, minus_zero, 1.0);
5904   TEST_f_f (erfc, qnan_value, qnan_value);
5906   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
5907   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
5908   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
5909   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
5910   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
5911   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
5912   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
5913   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
5914 #ifdef TEST_LDOUBLE
5915   /* The result can only be represented in long double.  */
5916 # if LDBL_MIN_10_EXP < -319
5917   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
5918 # endif
5919 # if LDBL_MANT_DIG >= 106
5920   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
5921 # endif
5922 #endif
5924   END (erfc);
5928 static void
5929 exp_test (void)
5931   errno = 0;
5932   FUNC(exp) (0);
5933   if (errno == ENOSYS)
5934     /* Function not implemented.  */
5935     return;
5937   START (exp);
5939   TEST_f_f (exp, 0, 1);
5940   TEST_f_f (exp, minus_zero, 1);
5942 #ifndef TEST_INLINE
5943   TEST_f_f (exp, plus_infty, plus_infty);
5944   TEST_f_f (exp, minus_infty, 0);
5945 #endif
5946   TEST_f_f (exp, qnan_value, qnan_value);
5947   TEST_f_f (exp, 1, M_El);
5949   TEST_f_f (exp, 2, M_E2l);
5950   TEST_f_f (exp, 3, M_E3l);
5951   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
5952   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
5953   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
5954 #ifndef TEST_FLOAT
5955   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
5956 #endif
5957 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
5958   /* The result can only be represented in sane long double.  */
5959   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
5960 #endif
5962 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
5963   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
5964   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
5965 #endif
5966   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
5967   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
5968   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
5970   END (exp);
5974 static void
5975 exp_test_tonearest (void)
5977   int save_round_mode;
5978   errno = 0;
5979   FUNC(exp) (0);
5980   if (errno == ENOSYS)
5981     /* Function not implemented.  */
5982     return;
5984   START (exp_tonearest);
5986   save_round_mode = fegetround ();
5988   if (!fesetround (FE_TONEAREST))
5989     {
5990       TEST_f_f (exp, 1, M_El);
5991       TEST_f_f (exp, 2, M_E2l);
5992       TEST_f_f (exp, 3, M_E3l);
5993     }
5995   fesetround (save_round_mode);
5997   END (exp_tonearest);
6001 static void
6002 exp_test_towardzero (void)
6004   int save_round_mode;
6005   errno = 0;
6006   FUNC(exp) (0);
6007   if (errno == ENOSYS)
6008     /* Function not implemented.  */
6009     return;
6011   START (exp_towardzero);
6013   save_round_mode = fegetround ();
6015   if (!fesetround (FE_TOWARDZERO))
6016     {
6017       TEST_f_f (exp, 1, M_El);
6018       TEST_f_f (exp, 2, M_E2l);
6019       TEST_f_f (exp, 3, M_E3l);
6020     }
6022   fesetround (save_round_mode);
6024   END (exp_towardzero);
6028 static void
6029 exp_test_downward (void)
6031   int save_round_mode;
6032   errno = 0;
6033   FUNC(exp) (0);
6034   if (errno == ENOSYS)
6035     /* Function not implemented.  */
6036     return;
6038   START (exp_downward);
6040   save_round_mode = fegetround ();
6042   if (!fesetround (FE_DOWNWARD))
6043     {
6044       TEST_f_f (exp, 1, M_El);
6045       TEST_f_f (exp, 2, M_E2l);
6046       TEST_f_f (exp, 3, M_E3l);
6047     }
6049   fesetround (save_round_mode);
6051   END (exp_downward);
6055 static void
6056 exp_test_upward (void)
6058   int save_round_mode;
6059   errno = 0;
6060   FUNC(exp) (0);
6061   if (errno == ENOSYS)
6062     /* Function not implemented.  */
6063     return;
6065   START (exp_upward);
6067   save_round_mode = fegetround ();
6069   if (!fesetround (FE_UPWARD))
6070     {
6071       TEST_f_f (exp, 1, M_El);
6072       TEST_f_f (exp, 2, M_E2l);
6073       TEST_f_f (exp, 3, M_E3l);
6074     }
6076   fesetround (save_round_mode);
6078   END (exp_upward);
6082 static void
6083 exp10_test (void)
6085   errno = 0;
6086   FUNC(exp10) (0);
6087   if (errno == ENOSYS)
6088     /* Function not implemented.  */
6089     return;
6091   START (exp10);
6093   TEST_f_f (exp10, 0, 1);
6094   TEST_f_f (exp10, minus_zero, 1);
6096   TEST_f_f (exp10, plus_infty, plus_infty);
6097   TEST_f_f (exp10, minus_infty, 0);
6098   TEST_f_f (exp10, qnan_value, qnan_value);
6099   TEST_f_f (exp10, 3, 1000);
6100   TEST_f_f (exp10, -1, 0.1L);
6101   TEST_f_f (exp10, 36, 1.0e36L);
6102   TEST_f_f (exp10, -36, 1.0e-36L);
6103 #ifndef TEST_FLOAT
6104   TEST_f_f (exp10, 305, 1.0e305L);
6105   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6106 #endif
6107 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
6108   TEST_f_f (exp10, 4932, 1.0e4932L);
6109   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
6110 #endif
6111   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6112   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
6113   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
6114   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
6115   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
6117   END (exp10);
6121 static void
6122 exp2_test (void)
6124   errno = 0;
6125   FUNC(exp2) (0);
6126   if (errno == ENOSYS)
6127     /* Function not implemented.  */
6128     return;
6130   START (exp2);
6132   TEST_f_f (exp2, 0, 1);
6133   TEST_f_f (exp2, minus_zero, 1);
6134   TEST_f_f (exp2, plus_infty, plus_infty);
6135   TEST_f_f (exp2, minus_infty, 0);
6136   TEST_f_f (exp2, qnan_value, qnan_value);
6138   TEST_f_f (exp2, 10, 1024);
6139   TEST_f_f (exp2, -1, 0.5);
6140   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6141   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
6142   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
6143   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
6144   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
6146   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
6147   TEST_f_f (exp2, 127, 0x1p127);
6148   TEST_f_f (exp2, -149, 0x1p-149);
6150 #ifndef TEST_FLOAT
6151   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
6152   TEST_f_f (exp2, 1023, 0x1p1023);
6153   TEST_f_f (exp2, -1074, 0x1p-1074);
6154 #endif
6156 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6157   TEST_f_f (exp2, 16383, 0x1p16383L);
6158   TEST_f_f (exp2, -16400, 0x1p-16400L);
6159 #endif
6161   END (exp2);
6165 static void
6166 expm1_test (void)
6168   errno = 0;
6169   FUNC(expm1) (0);
6170   if (errno == ENOSYS)
6171     /* Function not implemented.  */
6172     return;
6174   START (expm1);
6176   TEST_f_f (expm1, 0, 0);
6177   TEST_f_f (expm1, minus_zero, minus_zero);
6179 #ifndef TEST_INLINE
6180   TEST_f_f (expm1, plus_infty, plus_infty);
6181   TEST_f_f (expm1, minus_infty, -1);
6182 #endif
6183   TEST_f_f (expm1, qnan_value, qnan_value);
6185   TEST_f_f (expm1, 1, M_El - 1.0);
6186   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
6188   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
6190 #ifndef TEST_FLOAT
6191   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
6192   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
6193 #endif
6195 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6196   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
6197 #endif
6199   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
6200   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
6201   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
6202   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
6203   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
6204   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
6205   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
6206   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
6207   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
6208   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
6209   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
6210   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
6211   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
6212   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
6213   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
6214   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
6215   TEST_f_f (expm1, -100.0, -1.0);
6216   TEST_f_f (expm1, -1000.0, -1.0);
6217   TEST_f_f (expm1, -10000.0, -1.0);
6218   TEST_f_f (expm1, -100000.0, -1.0);
6220   errno = 0;
6221   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION);
6222   check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
6223   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
6224   TEST_f_f (expm1, -max_value, -1);
6226   END (expm1);
6230 static void
6231 fabs_test (void)
6233   START (fabs);
6235   TEST_f_f (fabs, 0, 0);
6236   TEST_f_f (fabs, minus_zero, 0);
6238   TEST_f_f (fabs, plus_infty, plus_infty);
6239   TEST_f_f (fabs, minus_infty, plus_infty);
6240   TEST_f_f (fabs, qnan_value, qnan_value);
6242   TEST_f_f (fabs, 38.0, 38.0);
6243   TEST_f_f (fabs, -M_El, M_El);
6245   END (fabs);
6249 static void
6250 fdim_test (void)
6252   START (fdim);
6254   TEST_ff_f (fdim, 0, 0, 0);
6255   TEST_ff_f (fdim, 9, 0, 9);
6256   TEST_ff_f (fdim, 0, 9, 0);
6257   TEST_ff_f (fdim, -9, 0, 0);
6258   TEST_ff_f (fdim, 0, -9, 9);
6260   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
6261   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
6262   TEST_ff_f (fdim, minus_infty, 9, 0);
6263   TEST_ff_f (fdim, minus_infty, -9, 0);
6264   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
6265   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
6266   TEST_ff_f (fdim, 9, plus_infty, 0);
6267   TEST_ff_f (fdim, -9, plus_infty, 0);
6269   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
6270   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
6271   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
6272   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
6273   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
6274   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
6275   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
6276   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
6277   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
6278   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
6280   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
6282   END (fdim);
6286 static void
6287 finite_test (void)
6289   START (finite);
6291   TEST_f_b (finite, 0, 1);
6292   TEST_f_b (finite, minus_zero, 1);
6293   TEST_f_b (finite, 10, 1);
6294   TEST_f_b (finite, min_subnorm_value, 1);
6295   TEST_f_b (finite, plus_infty, 0);
6296   TEST_f_b (finite, minus_infty, 0);
6297   TEST_f_b (finite, qnan_value, 0);
6299   END (finite);
6303 static void
6304 floor_test (void)
6306   START (floor);
6308   TEST_f_f (floor, 0.0, 0.0);
6309   TEST_f_f (floor, minus_zero, minus_zero);
6310   TEST_f_f (floor, plus_infty, plus_infty);
6311   TEST_f_f (floor, minus_infty, minus_infty);
6312   TEST_f_f (floor, qnan_value, qnan_value);
6314   TEST_f_f (floor, M_PIl, 3.0);
6315   TEST_f_f (floor, -M_PIl, -4.0);
6317   TEST_f_f (floor, 0.1, 0.0);
6318   TEST_f_f (floor, 0.25, 0.0);
6319   TEST_f_f (floor, 0.625, 0.0);
6320   TEST_f_f (floor, -0.1, -1.0);
6321   TEST_f_f (floor, -0.25, -1.0);
6322   TEST_f_f (floor, -0.625, -1.0);
6324 #ifdef TEST_LDOUBLE
6325   /* The result can only be represented in long double.  */
6326   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
6327   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
6328   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
6329   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
6330   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
6331 # if LDBL_MANT_DIG > 100
6332   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
6333   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
6334   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
6335 # endif
6337   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
6338   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
6339   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
6340   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
6341   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
6342 # if LDBL_MANT_DIG > 100
6343   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
6344   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
6345   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
6346 # endif
6348   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
6349   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
6350   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
6351   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
6352   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
6354 # if LDBL_MANT_DIG > 100
6355   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
6356   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
6357   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
6358   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
6359   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
6360   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
6361 # endif
6363   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
6364   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
6365   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
6366   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
6367   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
6369 # if LDBL_MANT_DIG > 100
6370   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
6371   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
6372   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
6373   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
6374   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
6375   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
6376 # endif
6378   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
6379   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
6380   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
6381   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
6382   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
6384   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
6385   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
6386   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
6387   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
6388   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
6390   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
6391   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
6392   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
6393   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
6394   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
6396   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
6397   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
6398 #endif
6400   END (floor);
6404 static void
6405 fma_test (void)
6407   START (fma);
6409   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
6410   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
6411   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
6412   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6413   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6414   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6415   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6416   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6417   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
6418   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
6419   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
6420   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
6422   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
6423   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
6424   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
6425   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
6426   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
6427   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
6428   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
6429   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
6431   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
6433   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
6434                          LDBL_MAX, DBL_MAX, FLT_MAX);
6435   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
6436   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
6437   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
6438   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
6439   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
6440   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
6441   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
6442   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
6444   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
6445   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
6446   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
6447   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
6448   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
6449   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
6450   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
6451   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
6452   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
6453   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
6454   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
6455   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
6456   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
6457   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
6458   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
6459   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
6460   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
6461   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
6462   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
6463   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
6464   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
6465   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
6466   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
6467   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
6469   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
6470   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
6471   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
6472   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
6474   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6475   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6476   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6477   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6478   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6479   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6480   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6481   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6483   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
6484   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
6485   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
6486   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
6487   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
6488   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
6489   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
6490   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
6492 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
6493   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
6494   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
6495   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
6496   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
6497   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
6498   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
6499   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
6500   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
6501   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
6502   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6503   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6504   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
6505   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
6506   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
6507   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
6508   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
6509   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
6510   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
6511   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
6512   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
6513   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6514   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6515   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
6516   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6517   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6518   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6519   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6520   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
6521   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
6522   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
6523   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
6524   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
6525   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
6526   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
6527   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
6528   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
6529   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
6530   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
6531   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
6532   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
6533   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
6534   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
6535   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
6536 #endif
6537 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
6538   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
6539   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
6540   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
6541   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
6542   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
6543   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
6544   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
6545   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
6546   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
6547   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
6548   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
6549   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
6550   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
6551   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
6552   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
6553   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
6554   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
6555   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
6556   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
6557   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
6558   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
6559   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
6560   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6561   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6562   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
6563   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
6564   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
6565   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
6566   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
6567   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
6568   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
6569   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
6570   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
6571   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6572   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6573   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
6574   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6575   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6576   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6577   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6578   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
6579   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
6580   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
6581   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
6582   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
6583   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
6584   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
6585   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
6586   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
6587   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
6588   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
6589   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
6590   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
6591   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
6592   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
6593   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
6594 #endif
6595 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
6596   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
6597   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
6598   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
6599   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
6600   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
6601   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
6602   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
6603   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
6604   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6605   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6606   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
6607   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
6608   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
6609   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
6610   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
6611   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
6612   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
6613   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
6614   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
6615   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6616   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6617   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
6618   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6619   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6620   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6621   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6622   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
6623   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
6624   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
6625   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
6626   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
6627   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
6628   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
6629   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
6630   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
6631   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
6632   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
6633   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
6634   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
6635   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
6636   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
6637   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
6638 #endif
6639 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
6640   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
6641   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
6642   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
6643   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
6644   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
6645   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
6646   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
6647   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
6648   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
6649   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
6650   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
6651   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
6652   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
6653   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
6654   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
6655   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6656   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6657   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
6658   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
6659   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
6660   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
6661   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
6662   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
6663   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
6664   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
6665   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
6666   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6667   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6668   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
6669   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6670   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6671   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6672   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6673   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
6674   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
6675   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
6676   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
6677   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
6678   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
6679   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
6680   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
6681   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
6682   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
6683   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
6684   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
6685   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
6686   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
6687   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
6688   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
6689 #endif
6691   END (fma);
6695 static void
6696 fma_test_towardzero (void)
6698   int save_round_mode;
6699   START (fma_towardzero);
6701   save_round_mode = fegetround ();
6703   if (!fesetround (FE_TOWARDZERO))
6704     {
6705       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
6706       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
6707       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
6708       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
6709       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
6710       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
6711       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
6712       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
6713       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
6714       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
6715       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
6716       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
6717       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
6718       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
6719       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
6720       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
6721       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
6722       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
6723       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
6724       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
6725       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
6726       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
6727       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
6728       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
6730       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
6731       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
6732       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
6733       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
6735       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6736       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6737       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6738       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6739       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6740       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
6741       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6742       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6744 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
6745       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
6746       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
6747       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
6748       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
6749       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
6750       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
6751       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
6752       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
6753 #endif
6755 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
6756       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
6757       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
6758       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6759       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6760       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6761       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6762       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6763       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6764       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
6765       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
6766       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
6767       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
6768       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
6769       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6770       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6771       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
6772       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6773       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
6774       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
6775       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6776       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
6777       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
6778       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
6779       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
6780       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
6781       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
6782       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
6783       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
6784       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
6785       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
6786       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
6787       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
6788       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
6789       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
6790       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
6791       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
6792 #endif
6793 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
6794       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
6795       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
6796       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6797       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6798       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6799       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6800       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6801       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6802       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
6803       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
6804       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
6805       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
6806       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
6807       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6808       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6809       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
6810       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6811       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
6812       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
6813       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
6814       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
6815       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
6816       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
6817       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
6818       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
6819       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
6820       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
6821       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
6822       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
6823       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
6824       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
6825       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
6826       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
6827       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
6828       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
6829       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
6830 #endif
6831 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
6832       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
6833       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
6834       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6835       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6836       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6837       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6838       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6839       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6840       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
6841       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
6842       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
6843       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
6844       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
6845       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6846       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6847       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
6848       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6849       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
6850       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
6851       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6852       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
6853       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
6854       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
6855       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
6856       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
6857       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
6858       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
6859       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
6860       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
6861       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
6862       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
6863       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
6864       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
6865       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
6866       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
6867       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
6868 #endif
6869 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
6870       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
6871       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
6872       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6873       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6874       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6875       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6876       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6877       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6878       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
6879       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
6880       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
6881       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
6882       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
6883       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6884       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6885       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
6886       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6887       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6888       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
6889       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
6890       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
6891       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
6892       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
6893       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
6894       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
6895       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
6896       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
6897       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
6898       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
6899       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
6900       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
6901       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
6902       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
6903       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
6904       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
6905       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
6906 #endif
6907     }
6909   fesetround (save_round_mode);
6911   END (fma_towardzero);
6915 static void
6916 fma_test_downward (void)
6918   int save_round_mode;
6919   START (fma_downward);
6921   save_round_mode = fegetround ();
6923   if (!fesetround (FE_DOWNWARD))
6924     {
6925       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
6926       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
6927       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
6928       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
6929       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
6930       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
6931       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
6932       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
6933       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
6934       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
6935       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
6936       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
6937       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
6938       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
6939       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
6940       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
6941       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
6942       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
6943       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
6944       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
6945       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
6946       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
6947       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
6948       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
6950       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
6951       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
6952       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
6953       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
6955       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6956       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6957       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
6958       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
6959       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
6960       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
6961       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6962       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
6964 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
6965       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
6966       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
6967       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
6968       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
6969       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
6970       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
6971       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
6972       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
6973 #endif
6975 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
6976       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
6977       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
6978       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6979       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6980       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6981       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
6982       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6983       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6984       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
6985       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
6986       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
6987       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
6988       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
6989       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6990       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
6991       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
6992       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6993       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
6994       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
6995       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
6996       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
6997       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
6998       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
6999       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
7000       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7001       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7002       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7003       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7004       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7005       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
7006       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
7007       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
7008       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7009       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
7010       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
7011       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
7012 #endif
7013 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7014       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7015       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7016       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7017       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7018       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7019       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7020       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7021       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7022       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7023       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
7024       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
7025       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
7026       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7027       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7028       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7029       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
7030       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7031       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7032       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7033       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7034       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7035       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
7036       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7037       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
7038       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7039       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7040       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7041       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7042       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7043       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
7044       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7045       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
7046       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7047       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
7048       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
7049       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
7050 #endif
7051 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7052       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7053       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7054       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7055       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7056       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7057       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7058       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7059       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7060       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7061       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7062       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
7063       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
7064       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7065       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7066       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7067       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
7068       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7069       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7070       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7071       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7072       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7073       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
7074       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7075       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
7076       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7077       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7078       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7079       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7080       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7081       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7082       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7083       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
7084       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7085       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
7086       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7087       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
7088 #endif
7089 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7090       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7091       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7092       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7093       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7094       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7095       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7096       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7097       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7098       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7099       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7100       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
7101       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7102       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7103       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7104       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7105       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
7106       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7107       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7108       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7109       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7110       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7111       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
7112       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7113       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
7114       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7115       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7116       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7117       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7118       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7119       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7120       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7121       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7122       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7123       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
7124       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7125       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
7126 #endif
7127     }
7129   fesetround (save_round_mode);
7131   END (fma_downward);
7135 static void
7136 fma_test_upward (void)
7138   int save_round_mode;
7139   START (fma_upward);
7141   save_round_mode = fegetround ();
7143   if (!fesetround (FE_UPWARD))
7144     {
7145       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7146       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7147       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7148       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7149       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7150       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7151       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7152       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7153       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7154       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7155       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7156       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7157       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7158       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7159       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7160       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7161       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7162       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7163       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7164       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7165       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7166       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7167       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7168       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7170       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7171       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7172       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7173       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7175       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7176       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7177       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7178       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7179       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7180       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7181       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7182       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7184 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7185       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7186       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7187       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7188       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7189       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7190       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7191       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7192       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7193 #endif
7195 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7196       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
7197       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7198       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7199       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7200       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7201       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7202       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7203       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7204       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
7205       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
7206       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
7207       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7208       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
7209       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7210       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7211       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7212       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7213       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7214       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7215       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7216       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
7217       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7218       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
7219       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7220       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7221       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7222       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7223       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7224       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
7225       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
7226       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
7227       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7228       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
7229       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
7230       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
7231       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7232 #endif
7233 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7234       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7235       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7236       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7237       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7238       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7239       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7240       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7241       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7242       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
7243       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
7244       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
7245       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7246       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
7247       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7248       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7249       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7250       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7251       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7252       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7253       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7254       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
7255       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7256       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
7257       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7258       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7259       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7260       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7261       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7262       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
7263       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7264       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
7265       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7266       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
7267       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
7268       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
7269       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7270 #endif
7271 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7272       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7273       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7274       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7275       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7276       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7277       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7278       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7279       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7280       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
7281       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
7282       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7283       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7284       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
7285       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7286       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7287       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7288       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7289       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7290       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7291       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7292       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
7293       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7294       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
7295       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7296       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7297       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7298       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7299       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7300       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
7301       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7302       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7303       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7304       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
7305       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7306       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
7307       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7308 #endif
7309 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7310       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7311       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7312       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7313       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7314       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7315       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7316       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7317       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7318       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
7319       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
7320       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7321       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7322       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
7323       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7324       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7325       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7326       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7327       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7328       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7329       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7330       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
7331       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7332       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
7333       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7334       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7335       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7336       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7337       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7338       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
7339       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7340       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7341       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7342       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
7343       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7344       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
7345       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7346 #endif
7347     }
7349   fesetround (save_round_mode);
7351   END (fma_upward);
7355 static void
7356 fmax_test (void)
7358   START (fmax);
7360   TEST_ff_f (fmax, 0, 0, 0);
7361   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
7362   TEST_ff_f (fmax, 9, 0, 9);
7363   TEST_ff_f (fmax, 0, 9, 9);
7364   TEST_ff_f (fmax, -9, 0, 0);
7365   TEST_ff_f (fmax, 0, -9, 0);
7367   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
7368   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
7369   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
7370   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
7372   TEST_ff_f (fmax, minus_infty, 9, 9);
7373   TEST_ff_f (fmax, minus_infty, -9, -9);
7374   TEST_ff_f (fmax, 9, minus_infty, 9);
7375   TEST_ff_f (fmax, -9, minus_infty, -9);
7377   TEST_ff_f (fmax, 0, qnan_value, 0);
7378   TEST_ff_f (fmax, 9, qnan_value, 9);
7379   TEST_ff_f (fmax, -9, qnan_value, -9);
7380   TEST_ff_f (fmax, qnan_value, 0, 0);
7381   TEST_ff_f (fmax, qnan_value, 9, 9);
7382   TEST_ff_f (fmax, qnan_value, -9, -9);
7383   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
7384   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
7385   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
7386   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
7387   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
7389   END (fmax);
7393 static void
7394 fmin_test (void)
7396   START (fmin);
7398   TEST_ff_f (fmin, 0, 0, 0);
7399   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
7400   TEST_ff_f (fmin, 9, 0, 0);
7401   TEST_ff_f (fmin, 0, 9, 0);
7402   TEST_ff_f (fmin, -9, 0, -9);
7403   TEST_ff_f (fmin, 0, -9, -9);
7405   TEST_ff_f (fmin, plus_infty, 9, 9);
7406   TEST_ff_f (fmin, 9, plus_infty, 9);
7407   TEST_ff_f (fmin, plus_infty, -9, -9);
7408   TEST_ff_f (fmin, -9, plus_infty, -9);
7409   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
7410   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
7411   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
7412   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
7414   TEST_ff_f (fmin, 0, qnan_value, 0);
7415   TEST_ff_f (fmin, 9, qnan_value, 9);
7416   TEST_ff_f (fmin, -9, qnan_value, -9);
7417   TEST_ff_f (fmin, qnan_value, 0, 0);
7418   TEST_ff_f (fmin, qnan_value, 9, 9);
7419   TEST_ff_f (fmin, qnan_value, -9, -9);
7420   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
7421   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
7422   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
7423   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
7424   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
7426   END (fmin);
7430 static void
7431 fmod_test (void)
7433   errno = 0;
7434   FUNC(fmod) (6.5, 2.3L);
7435   if (errno == ENOSYS)
7436     /* Function not implemented.  */
7437     return;
7439   START (fmod);
7441   /* fmod (+0, y) == +0 for y != 0.  */
7442   TEST_ff_f (fmod, 0, 3, 0);
7444   /* fmod (-0, y) == -0 for y != 0.  */
7445   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
7447   /* fmod (+inf, y) == qNaN plus invalid exception.  */
7448   errno = 0;
7449   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION);
7450   check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
7451   /* fmod (-inf, y) == qNaN plus invalid exception.  */
7452   errno = 0;
7453   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION);
7454   check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
7455   /* fmod (x, +0) == qNaN plus invalid exception.  */
7456   errno = 0;
7457   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION);
7458   check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
7459   /* fmod (x, -0) == qNaN plus invalid exception.  */
7460   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
7462   /* fmod (x, +inf) == x for x not infinite.  */
7463   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
7464   /* fmod (x, -inf) == x for x not infinite.  */
7465   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
7467   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
7469   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
7470   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
7471   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
7472   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
7474   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
7475 #ifndef TEST_FLOAT
7476   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
7477 #endif
7478 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
7479   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
7480 #endif
7482   END (fmod);
7486 static void
7487 fpclassify_test (void)
7489   START (fpclassify);
7491   TEST_f_i (fpclassify, qnan_value, FP_NAN);
7492   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
7493   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
7494   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
7495   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
7496   TEST_f_i (fpclassify, 1000, FP_NORMAL);
7497   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
7499   END (fpclassify);
7503 static void
7504 frexp_test (void)
7506   int x;
7508   START (frexp);
7510   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
7511   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
7512   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
7514   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
7515   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
7517   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
7518   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
7520   END (frexp);
7524 static void
7525 gamma_test (void)
7527   errno = 0;
7528   FUNC(gamma) (1);
7530   if (errno == ENOSYS)
7531     /* Function not implemented.  */
7532     return;
7534   START (gamma);
7536   TEST_f_f (gamma, plus_infty, plus_infty);
7537   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7538   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7539   TEST_f_f (gamma, minus_infty, plus_infty);
7540   TEST_f_f (gamma, qnan_value, qnan_value);
7542   TEST_f_f1 (gamma, 1, 0, 1);
7543   TEST_f_f1 (gamma, 3, M_LN2l, 1);
7545   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
7546   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
7548   END (gamma);
7551 static void
7552 hypot_test (void)
7554   errno = 0;
7555   FUNC(hypot) (0.7L, 12.4L);
7556   if (errno == ENOSYS)
7557     /* Function not implemented.  */
7558     return;
7560   START (hypot);
7562   TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
7563   TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
7565 #ifndef TEST_INLINE
7566   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
7567   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
7568   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
7569   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
7570 #endif
7572   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
7574   /* hypot (x,y) == hypot (+-x, +-y)  */
7575   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
7576   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
7577   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
7578   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
7579   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
7580   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
7581   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
7582   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
7584   /*  hypot (x,0) == fabs (x)  */
7585   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
7586   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
7587   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
7589   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
7591   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
7592 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
7593   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
7594 #endif
7596 #if !(defined TEST_FLOAT && defined TEST_INLINE)
7597   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
7598   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
7599 #endif
7601 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
7602   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
7603 #endif
7605 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
7606   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
7607 #endif
7609   END (hypot);
7613 static void
7614 ilogb_test (void)
7616   START (ilogb);
7618   TEST_f_i (ilogb, 1, 0);
7619   TEST_f_i (ilogb, M_El, 1);
7620   TEST_f_i (ilogb, 1024, 10);
7621   TEST_f_i (ilogb, -2000, 10);
7623   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
7624   errno = 0;
7625   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION);
7626   check_int ("errno for ilogb(0.0) unchanged", errno, EDOM, 0, 0, 0);
7627   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
7628   errno = 0;
7629   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION);
7630   check_int ("errno for ilogb(qNaN) unchanged", errno, EDOM, 0, 0, 0);
7631   /* ilogb (inf) == INT_MAX plus invalid exception  */
7632   errno = 0;
7633   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION);
7634   check_int ("errno for ilogb(Inf) unchanged", errno, EDOM, 0, 0, 0);
7635   /* ilogb (-inf) == INT_MAX plus invalid exception  */
7636   errno = 0;
7637   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION);
7638   check_int ("errno for ilogb(-Inf) unchanged", errno, EDOM, 0, 0, 0);
7640   END (ilogb);
7643 static void
7644 isfinite_test (void)
7646   START (isfinite);
7648   TEST_f_b (isfinite, 0, 1);
7649   TEST_f_b (isfinite, minus_zero, 1);
7650   TEST_f_b (isfinite, 10, 1);
7651   TEST_f_b (isfinite, min_subnorm_value, 1);
7652   TEST_f_b (isfinite, plus_infty, 0);
7653   TEST_f_b (isfinite, minus_infty, 0);
7654   TEST_f_b (isfinite, qnan_value, 0);
7656   END (isfinite);
7659 static void
7660 isgreater_test (void)
7662   START (isgreater);
7664   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
7665   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
7666   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
7667   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
7668   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
7669   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
7670   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
7671   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
7672   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
7673   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
7674   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
7675   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
7676   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
7677   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
7678   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
7679   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
7681   END (isgreater);
7684 static void
7685 isgreaterequal_test (void)
7687   START (isgreaterequal);
7689   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
7690   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
7691   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
7692   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
7693   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
7694   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
7695   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
7696   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
7697   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
7698   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
7699   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
7700   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
7701   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
7702   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
7703   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
7704   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
7706   END (isgreaterequal);
7709 static void
7710 isinf_test (void)
7712   START (isinf);
7714   TEST_f_b (isinf, 0, 0);
7715   TEST_f_b (isinf, minus_zero, 0);
7716   TEST_f_b (isinf, 10, 0);
7717   TEST_f_b (isinf, min_subnorm_value, 0);
7718   TEST_f_b (isinf, plus_infty, 1);
7719   TEST_f_b (isinf, minus_infty, 1);
7720   TEST_f_b (isinf, qnan_value, 0);
7722   END (isinf);
7725 static void
7726 isless_test (void)
7728   START (isless);
7730   TEST_ff_i (isless, minus_zero, minus_zero, 0);
7731   TEST_ff_i (isless, minus_zero, plus_zero, 0);
7732   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
7733   TEST_ff_i (isless, minus_zero, qnan_value, 0);
7734   TEST_ff_i (isless, plus_zero, minus_zero, 0);
7735   TEST_ff_i (isless, plus_zero, plus_zero, 0);
7736   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
7737   TEST_ff_i (isless, plus_zero, qnan_value, 0);
7738   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
7739   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
7740   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
7741   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
7742   TEST_ff_i (isless, qnan_value, minus_zero, 0);
7743   TEST_ff_i (isless, qnan_value, plus_zero, 0);
7744   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
7745   TEST_ff_i (isless, qnan_value, qnan_value, 0);
7747   END (isless);
7750 static void
7751 islessequal_test (void)
7753   START (islessequal);
7755   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
7756   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
7757   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
7758   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
7759   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
7760   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
7761   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
7762   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
7763   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
7764   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
7765   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
7766   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
7767   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
7768   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
7769   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
7770   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
7772   END (islessequal);
7775 static void
7776 islessgreater_test (void)
7778   START (islessgreater);
7780   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
7781   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
7782   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
7783   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
7784   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
7785   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
7786   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
7787   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
7788   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
7789   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
7790   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
7791   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
7792   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
7793   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
7794   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
7795   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
7797   END (islessgreater);
7800 static void
7801 isnan_test (void)
7803   START (isnan);
7805   TEST_f_b (isnan, 0, 0);
7806   TEST_f_b (isnan, minus_zero, 0);
7807   TEST_f_b (isnan, 10, 0);
7808   TEST_f_b (isnan, min_subnorm_value, 0);
7809   TEST_f_b (isnan, plus_infty, 0);
7810   TEST_f_b (isnan, minus_infty, 0);
7811   TEST_f_b (isnan, qnan_value, 1);
7813   END (isnan);
7816 static void
7817 isnormal_test (void)
7819   START (isnormal);
7821   TEST_f_b (isnormal, 0, 0);
7822   TEST_f_b (isnormal, minus_zero, 0);
7823   TEST_f_b (isnormal, 10, 1);
7824   TEST_f_b (isnormal, min_subnorm_value, 0);
7825   TEST_f_b (isnormal, plus_infty, 0);
7826   TEST_f_b (isnormal, minus_infty, 0);
7827   TEST_f_b (isnormal, qnan_value, 0);
7829   END (isnormal);
7832 static void
7833 issignaling_test (void)
7835   START (issignaling);
7837   TEST_f_b (issignaling, 0, 0);
7838   TEST_f_b (issignaling, minus_zero, 0);
7839   TEST_f_b (issignaling, 10, 0);
7840   TEST_f_b (issignaling, min_subnorm_value, 0);
7841   TEST_f_b (issignaling, plus_infty, 0);
7842   TEST_f_b (issignaling, minus_infty, 0);
7843   TEST_f_b (issignaling, qnan_value, 0);
7845   END (issignaling);
7848 static void
7849 isunordered_test (void)
7851   START (isunordered);
7853   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
7854   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
7855   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
7856   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
7857   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
7858   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
7859   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
7860   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
7861   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
7862   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
7863   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
7864   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
7865   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
7866   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
7867   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
7868   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
7870   END (isunordered);
7873 static void
7874 j0_test (void)
7876   FLOAT s, c;
7877   errno = 0;
7878   FUNC (sincos) (0, &s, &c);
7879   if (errno == ENOSYS)
7880     /* Required function not implemented.  */
7881     return;
7882   FUNC(j0) (0);
7883   if (errno == ENOSYS)
7884     /* Function not implemented.  */
7885     return;
7887   START (j0);
7889   /* j0 is the Bessel function of the first kind of order 0 */
7890   TEST_f_f (j0, qnan_value, qnan_value);
7891   TEST_f_f (j0, plus_infty, 0);
7892   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
7893   TEST_f_f (j0, 0.0, 1.0);
7894   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
7895   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
7896   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
7897   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
7898   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
7899   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
7900   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
7901   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
7902   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
7904   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
7906 #ifndef TEST_FLOAT
7907   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
7908   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
7909 #endif
7911 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7912   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
7913   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
7914 #endif
7916   END (j0);
7920 static void
7921 j1_test (void)
7923   FLOAT s, c;
7924   errno = 0;
7925   FUNC (sincos) (0, &s, &c);
7926   if (errno == ENOSYS)
7927     /* Required function not implemented.  */
7928     return;
7929   FUNC(j1) (0);
7930   if (errno == ENOSYS)
7931     /* Function not implemented.  */
7932     return;
7934   /* j1 is the Bessel function of the first kind of order 1 */
7936   START (j1);
7938   TEST_f_f (j1, qnan_value, qnan_value);
7939   TEST_f_f (j1, plus_infty, 0);
7941   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
7942   TEST_f_f (j1, 0.0, 0.0);
7943   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
7944   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
7945   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
7946   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
7947   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
7948   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
7949   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
7951   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
7953 #ifndef TEST_FLOAT
7954   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
7955   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
7956 #endif
7958 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
7959   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
7960   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
7961 #endif
7963   END (j1);
7966 static void
7967 jn_test (void)
7969   FLOAT s, c;
7970   errno = 0;
7971   FUNC (sincos) (0, &s, &c);
7972   if (errno == ENOSYS)
7973     /* Required function not implemented.  */
7974     return;
7975   FUNC(jn) (1, 1);
7976   if (errno == ENOSYS)
7977     /* Function not implemented.  */
7978     return;
7980   /* jn is the Bessel function of the first kind of order n.  */
7981   START (jn);
7983   /* jn (0, x) == j0 (x)  */
7984   TEST_ff_f (jn, 0, qnan_value, qnan_value);
7985   TEST_ff_f (jn, 0, plus_infty, 0);
7986   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
7987   TEST_ff_f (jn, 0, 0.0, 1.0);
7988   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
7989   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
7990   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
7991   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
7992   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
7993   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
7994   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
7995   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
7996   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
7998   /* jn (1, x) == j1 (x)  */
7999   TEST_ff_f (jn, 1, qnan_value, qnan_value);
8000   TEST_ff_f (jn, 1, plus_infty, 0);
8001   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
8002   TEST_ff_f (jn, 1, 0.0, 0.0);
8003   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
8004   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
8005   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
8006   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
8007   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
8008   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
8009   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
8011   /* jn (3, x)  */
8012   TEST_ff_f (jn, 3, qnan_value, qnan_value);
8013   TEST_ff_f (jn, 3, plus_infty, 0);
8015   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
8016   TEST_ff_f (jn, 3, 0.0, 0.0);
8017   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
8018   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
8019   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
8020   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
8021   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
8023   /*  jn (10, x)  */
8024   TEST_ff_f (jn, 10, qnan_value, qnan_value);
8025   TEST_ff_f (jn, 10, plus_infty, 0);
8027   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
8028   TEST_ff_f (jn, 10, 0.0, 0.0);
8029   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
8030   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
8031   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
8032   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
8033   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
8035   /* BZ #11589 .*/
8036   TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
8037   TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
8038   TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
8039   TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
8040   TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
8041   TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
8042   TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
8043   TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
8045   /* Bug 14155: spurious exception may occur.  */
8046   TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
8048   END (jn);
8052 static void
8053 ldexp_test (void)
8055   START (ldexp);
8057   TEST_ff_f (ldexp, 0, 0, 0);
8058   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
8060   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
8061   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
8062   TEST_ff_f (ldexp, qnan_value, 1, qnan_value);
8064   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
8065   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
8067   /* ldexp (x, 0) == x.  */
8068   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
8070   END (ldexp);
8074 static void
8075 lgamma_test (void)
8077   errno = 0;
8078   FUNC(lgamma) (0);
8079   if (errno == ENOSYS)
8080     /* Function not implemented.  */
8081     return;
8083   START (lgamma);
8085   TEST_f_f (lgamma, plus_infty, plus_infty);
8086   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8087   check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
8088   TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8089   check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
8090   TEST_f_f (lgamma, qnan_value, qnan_value);
8092   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
8093   errno = 0;
8094   TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8095   check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
8096   TEST_f_f (lgamma, minus_infty, plus_infty);
8097   TEST_f_f (lgamma, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8098   TEST_f_f (lgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
8100   TEST_f_f1 (lgamma, 1, 0, 1);
8102   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
8104   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
8105   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8106   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
8107   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
8109   END (lgamma);
8113 static void
8114 lrint_test (void)
8116   /* XXX this test is incomplete.  We need to have a way to specifiy
8117      the rounding method and test the critical cases.  So far, only
8118      unproblematic numbers are tested.  */
8119   /* TODO: missing +/-Inf as well as qNaN tests.  */
8121   START (lrint);
8123   TEST_f_l (lrint, 0.0, 0);
8124   TEST_f_l (lrint, minus_zero, 0);
8125   TEST_f_l (lrint, 0.2L, 0);
8126   TEST_f_l (lrint, -0.2L, 0);
8128   TEST_f_l (lrint, 1.4L, 1);
8129   TEST_f_l (lrint, -1.4L, -1);
8131   TEST_f_l (lrint, 8388600.3L, 8388600);
8132   TEST_f_l (lrint, -8388600.3L, -8388600);
8134   TEST_f_l (lrint, 1071930.0008, 1071930);
8135 #ifndef TEST_FLOAT
8136   TEST_f_l (lrint, 1073741824.01, 1073741824);
8137 # if LONG_MAX > 281474976710656
8138   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8139 # endif
8140 #endif
8142   END (lrint);
8146 static void
8147 lrint_test_tonearest (void)
8149   int save_round_mode;
8150   START (lrint_tonearest);
8152   save_round_mode = fegetround ();
8154   if (!fesetround (FE_TONEAREST))
8155     {
8156       TEST_f_l (lrint, 0.0, 0);
8157       TEST_f_l (lrint, minus_zero, 0);
8158       TEST_f_l (lrint, 0.2L, 0);
8159       TEST_f_l (lrint, -0.2L, 0);
8160       TEST_f_l (lrint, 0.5L, 0);
8161       TEST_f_l (lrint, -0.5L, 0);
8162       TEST_f_l (lrint, 0.8L, 1);
8163       TEST_f_l (lrint, -0.8L, -1);
8165       TEST_f_l (lrint, 1.4L, 1);
8166       TEST_f_l (lrint, -1.4L, -1);
8168       TEST_f_l (lrint, 8388600.3L, 8388600);
8169       TEST_f_l (lrint, -8388600.3L, -8388600);
8171       TEST_f_l (lrint, 1071930.0008, 1071930);
8172 #ifndef TEST_FLOAT
8173       TEST_f_l (lrint, 1073741824.01, 1073741824);
8174 # if LONG_MAX > 281474976710656
8175       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8176 # endif
8177 #endif
8178     }
8180   fesetround (save_round_mode);
8182   END (lrint_tonearest);
8186 static void
8187 lrint_test_towardzero (void)
8189   int save_round_mode;
8190   START (lrint_towardzero);
8192   save_round_mode = fegetround ();
8194   if (!fesetround (FE_TOWARDZERO))
8195     {
8196       TEST_f_l (lrint, 0.0, 0);
8197       TEST_f_l (lrint, minus_zero, 0);
8198       TEST_f_l (lrint, 0.2L, 0);
8199       TEST_f_l (lrint, -0.2L, 0);
8200       TEST_f_l (lrint, 0.5L, 0);
8201       TEST_f_l (lrint, -0.5L, 0);
8202       TEST_f_l (lrint, 0.8L, 0);
8203       TEST_f_l (lrint, -0.8L, 0);
8205       TEST_f_l (lrint, 1.4L, 1);
8206       TEST_f_l (lrint, -1.4L, -1);
8208       TEST_f_l (lrint, 8388600.3L, 8388600);
8209       TEST_f_l (lrint, -8388600.3L, -8388600);
8211       TEST_f_l (lrint, 1071930.0008, 1071930);
8212 #ifndef TEST_FLOAT
8213       TEST_f_l (lrint, 1073741824.01, 1073741824);
8214 # if LONG_MAX > 281474976710656
8215       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8216 # endif
8217 #endif
8218     }
8220   fesetround (save_round_mode);
8222   END (lrint_towardzero);
8226 static void
8227 lrint_test_downward (void)
8229   int save_round_mode;
8230   START (lrint_downward);
8232   save_round_mode = fegetround ();
8234   if (!fesetround (FE_DOWNWARD))
8235     {
8236       TEST_f_l (lrint, 0.0, 0);
8237       TEST_f_l (lrint, minus_zero, 0);
8238       TEST_f_l (lrint, 0.2L, 0);
8239       TEST_f_l (lrint, -0.2L, -1);
8240       TEST_f_l (lrint, 0.5L, 0);
8241       TEST_f_l (lrint, -0.5L, -1);
8242       TEST_f_l (lrint, 0.8L, 0);
8243       TEST_f_l (lrint, -0.8L, -1);
8245       TEST_f_l (lrint, 1.4L, 1);
8246       TEST_f_l (lrint, -1.4L, -2);
8248       TEST_f_l (lrint, 8388600.3L, 8388600);
8249       TEST_f_l (lrint, -8388600.3L, -8388601);
8251       TEST_f_l (lrint, 1071930.0008, 1071930);
8252 #ifndef TEST_FLOAT
8253       TEST_f_l (lrint, 1073741824.01, 1073741824);
8254 # if LONG_MAX > 281474976710656
8255       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8256 # endif
8257 #endif
8258     }
8260   fesetround (save_round_mode);
8262   END (lrint_downward);
8266 static void
8267 lrint_test_upward (void)
8269   int save_round_mode;
8270   START (lrint_upward);
8272   save_round_mode = fegetround ();
8274   if (!fesetround (FE_UPWARD))
8275     {
8276       TEST_f_l (lrint, 0.0, 0);
8277       TEST_f_l (lrint, minus_zero, 0);
8278       TEST_f_l (lrint, 0.2L, 1);
8279       TEST_f_l (lrint, -0.2L, 0);
8280       TEST_f_l (lrint, 0.5L, 1);
8281       TEST_f_l (lrint, -0.5L, 0);
8282       TEST_f_l (lrint, 0.8L, 1);
8283       TEST_f_l (lrint, -0.8L, 0);
8285       TEST_f_l (lrint, 1.4L, 2);
8286       TEST_f_l (lrint, -1.4L, -1);
8288       TEST_f_l (lrint, 8388600.3L, 8388601);
8289       TEST_f_l (lrint, -8388600.3L, -8388600);
8291 #ifndef TEST_FLOAT
8292       TEST_f_l (lrint, 1071930.0008, 1071931);
8293       TEST_f_l (lrint, 1073741824.01, 1073741825);
8294 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
8295       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8296 # endif
8297 #endif
8298     }
8300   fesetround (save_round_mode);
8302   END (lrint_upward);
8306 static void
8307 llrint_test (void)
8309   /* XXX this test is incomplete.  We need to have a way to specifiy
8310      the rounding method and test the critical cases.  So far, only
8311      unproblematic numbers are tested.  */
8312   /* TODO: missing +/-Inf as well as qNaN tests.  */
8314   START (llrint);
8316   TEST_f_L (llrint, 0.0, 0);
8317   TEST_f_L (llrint, minus_zero, 0);
8318   TEST_f_L (llrint, 0.2L, 0);
8319   TEST_f_L (llrint, -0.2L, 0);
8321   TEST_f_L (llrint, 1.4L, 1);
8322   TEST_f_L (llrint, -1.4L, -1);
8324   TEST_f_L (llrint, 8388600.3L, 8388600);
8325   TEST_f_L (llrint, -8388600.3L, -8388600);
8327   TEST_f_l (llrint, 1071930.0008, 1071930);
8329   /* Test boundary conditions.  */
8330   /* 0x1FFFFF */
8331   TEST_f_L (llrint, 2097151.0,2097151LL);
8332   /* 0x800000 */
8333   TEST_f_L (llrint, 8388608.0, 8388608LL);
8334   /* 0x1000000 */
8335   TEST_f_L (llrint, 16777216.0, 16777216LL);
8336   /* 0x20000000000 */
8337   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8338   /* 0x40000000000 */
8339   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8340   /* 0x1000000000000 */
8341   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8342   /* 0x10000000000000 */
8343   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8344   /* 0x10000080000000 */
8345   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8346   /* 0x20000000000000 */
8347   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8348   /* 0x80000000000000 */
8349   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8350   /* 0x100000000000000 */
8351   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8352 #ifdef TEST_LDOUBLE
8353   /* The input can only be represented in long double.  */
8354   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
8355   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
8356   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
8357   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
8358   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
8360   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
8361   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
8362   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
8363   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
8364   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
8366 # if LDBL_MANT_DIG > 100
8367   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
8368   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
8369   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
8370   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
8371   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
8372   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
8374   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
8375   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
8376   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
8377   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
8378   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
8379   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
8380 #endif
8382   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
8383   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
8384   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
8385   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
8386   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
8388   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
8389   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
8390   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
8391   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
8392   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
8394 # if LDBL_MANT_DIG > 100
8395   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
8396   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
8397   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
8398   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
8399   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
8400   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
8402   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
8403   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
8404   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
8405   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
8406   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
8407   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
8408 #endif
8410   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
8411   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
8412   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
8413   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
8414   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
8416   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
8417   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
8418   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
8419   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
8420   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
8422 # if LDBL_MANT_DIG > 100
8423   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
8424   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
8425   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
8426   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
8427   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
8428   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
8429   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
8430   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
8431   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
8432   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
8433   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
8434   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
8435 # endif
8436 #endif
8438   END (llrint);
8441 static void
8442 llrint_test_tonearest (void)
8444   int save_round_mode;
8445   START (llrint_tonearest);
8447   save_round_mode = fegetround ();
8449   if (!fesetround (FE_TONEAREST))
8450     {
8451       TEST_f_L (llrint, 0.0, 0);
8452       TEST_f_L (llrint, minus_zero, 0);
8453       TEST_f_L (llrint, 0.2L, 0);
8454       TEST_f_L (llrint, -0.2L, 0);
8456       TEST_f_L (llrint, 1.4L, 1);
8457       TEST_f_L (llrint, -1.4L, -1);
8459       TEST_f_L (llrint, 8388600.3L, 8388600);
8460       TEST_f_L (llrint, -8388600.3L, -8388600);
8462       TEST_f_l (llrint, 1071930.0008, 1071930);
8464       /* Test boundary conditions.  */
8465       /* 0x1FFFFF */
8466       TEST_f_L (llrint, 2097151.0,2097151LL);
8467       /* 0x800000 */
8468       TEST_f_L (llrint, 8388608.0, 8388608LL);
8469       /* 0x1000000 */
8470       TEST_f_L (llrint, 16777216.0, 16777216LL);
8471       /* 0x20000000000 */
8472       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8473       /* 0x40000000000 */
8474       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8475       /* 0x1000000000000 */
8476       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8477       /* 0x10000000000000 */
8478       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8479       /* 0x10000080000000 */
8480       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8481       /* 0x20000000000000 */
8482       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8483       /* 0x80000000000000 */
8484       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8485       /* 0x100000000000000 */
8486       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8487 #ifdef TEST_LDOUBLE
8488       /* The input can only be represented in long double.  */
8489       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
8490       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
8491       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
8492       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
8493       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
8495       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
8496       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
8497       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
8498       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
8499       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
8501 # if LDBL_MANT_DIG > 100
8502       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
8503       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
8504       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
8505       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
8506       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
8507       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
8509       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
8510       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
8511       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
8512       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
8513       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
8514       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
8515 #endif
8517       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
8518       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
8519       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
8520       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
8521       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
8523       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
8524       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
8525       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
8526       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
8527       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
8529 # if LDBL_MANT_DIG > 100
8530       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
8531       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
8532       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
8533       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
8534       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
8535       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
8537       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
8538       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
8539       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
8540       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
8541       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
8542       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
8543 #endif
8545       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
8546       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
8547       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
8548       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
8549       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
8551       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
8552       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
8553       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
8554       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
8555       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
8557 # if LDBL_MANT_DIG > 100
8558       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
8559       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
8560       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
8561       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
8562       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
8563       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
8564       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
8565       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
8566       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
8567       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
8568       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
8569       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
8570 # endif
8571 #endif
8572     }
8574   fesetround (save_round_mode);
8576   END (llrint_tonearest);
8579 static void
8580 llrint_test_towardzero (void)
8582   int save_round_mode;
8583   START (llrint_towardzero);
8585   save_round_mode = fegetround ();
8587   if (!fesetround (FE_TOWARDZERO))
8588     {
8589       TEST_f_L (llrint, 0.0, 0);
8590       TEST_f_L (llrint, minus_zero, 0);
8591       TEST_f_L (llrint, 0.2L, 0);
8592       TEST_f_L (llrint, -0.2L, 0);
8594       TEST_f_L (llrint, 1.4L, 1);
8595       TEST_f_L (llrint, -1.4L, -1);
8597       TEST_f_L (llrint, 8388600.3L, 8388600);
8598       TEST_f_L (llrint, -8388600.3L, -8388600);
8600       TEST_f_l (llrint, 1071930.0008, 1071930);
8602       /* Test boundary conditions.  */
8603       /* 0x1FFFFF */
8604       TEST_f_L (llrint, 2097151.0,2097151LL);
8605       /* 0x800000 */
8606       TEST_f_L (llrint, 8388608.0, 8388608LL);
8607       /* 0x1000000 */
8608       TEST_f_L (llrint, 16777216.0, 16777216LL);
8609       /* 0x20000000000 */
8610       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8611       /* 0x40000000000 */
8612       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8613       /* 0x1000000000000 */
8614       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8615       /* 0x10000000000000 */
8616       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8617       /* 0x10000080000000 */
8618       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8619       /* 0x20000000000000 */
8620       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8621       /* 0x80000000000000 */
8622       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8623       /* 0x100000000000000 */
8624       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8625 #ifdef TEST_LDOUBLE
8626       /* The input can only be represented in long double.  */
8627       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
8628       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
8629       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
8630       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
8631       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
8633       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
8634       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
8635       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
8636       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
8637       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
8639 # if LDBL_MANT_DIG > 100
8640       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
8641       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
8642       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
8643       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
8644       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
8645       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
8647       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
8648       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
8649       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
8650       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
8651       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
8652       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
8653 #endif
8655       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
8656       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
8657       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
8658       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
8659       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
8661       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
8662       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
8663       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
8664       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
8665       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
8667 # if LDBL_MANT_DIG > 100
8668       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
8669       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
8670       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
8671       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
8672       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
8673       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
8675       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
8676       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
8677       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
8678       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
8679       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
8680       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
8681 #endif
8683       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
8684       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
8685       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
8686       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
8687       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
8689       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
8690       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
8691       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
8692       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
8693       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
8695 # if LDBL_MANT_DIG > 100
8696       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
8697       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
8698       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
8699       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
8700       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
8701       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
8702       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
8703       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
8704       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
8705       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
8706       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
8707       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
8708 # endif
8709 #endif
8710     }
8712   fesetround (save_round_mode);
8714   END (llrint_towardzero);
8717 static void
8718 llrint_test_downward (void)
8720   int save_round_mode;
8721   START (llrint_downward);
8723   save_round_mode = fegetround ();
8725   if (!fesetround (FE_DOWNWARD))
8726     {
8727       TEST_f_L (llrint, 0.0, 0);
8728       TEST_f_L (llrint, minus_zero, 0);
8729       TEST_f_L (llrint, 0.2L, 0);
8730       TEST_f_L (llrint, -0.2L, -1);
8732       TEST_f_L (llrint, 1.4L, 1);
8733       TEST_f_L (llrint, -1.4L, -2);
8735       TEST_f_L (llrint, 8388600.3L, 8388600);
8736       TEST_f_L (llrint, -8388600.3L, -8388601);
8738       TEST_f_l (llrint, 1071930.0008, 1071930);
8740       /* Test boundary conditions.  */
8741       /* 0x1FFFFF */
8742       TEST_f_L (llrint, 2097151.0,2097151LL);
8743       /* 0x800000 */
8744       TEST_f_L (llrint, 8388608.0, 8388608LL);
8745       /* 0x1000000 */
8746       TEST_f_L (llrint, 16777216.0, 16777216LL);
8747       /* 0x20000000000 */
8748       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8749       /* 0x40000000000 */
8750       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8751       /* 0x1000000000000 */
8752       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8753       /* 0x10000000000000 */
8754       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8755       /* 0x10000080000000 */
8756       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8757       /* 0x20000000000000 */
8758       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8759       /* 0x80000000000000 */
8760       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8761       /* 0x100000000000000 */
8762       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8763 #ifdef TEST_LDOUBLE
8764       /* The input can only be represented in long double.  */
8765       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
8766       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
8767       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
8768       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
8769       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
8771       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
8772       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
8773       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
8774       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
8775       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
8776       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
8778       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
8779       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
8780       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
8781       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
8782       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
8784       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
8785       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
8786       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
8787       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
8788       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
8789       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
8791       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
8792       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
8793       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
8794       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
8795       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
8797       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
8798       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
8799       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
8800       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
8801       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
8802       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
8804       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
8805       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
8806       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
8807       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
8808       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
8810       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
8811       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
8812       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
8813       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
8814       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
8815       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
8817       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
8818       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
8819       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
8820       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
8821       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
8823       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
8824       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
8825       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
8826       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
8827       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
8829 # if LDBL_MANT_DIG > 100
8830       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
8831       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
8832       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
8833       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
8834       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
8835       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
8836       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
8837       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
8838       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
8839       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
8840       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
8841       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
8842 # endif
8843 #endif
8844     }
8846   fesetround (save_round_mode);
8848   END (llrint_downward);
8851 static void
8852 llrint_test_upward (void)
8854   int save_round_mode;
8855   START (llrint_upward);
8857   save_round_mode = fegetround ();
8859   if (!fesetround (FE_UPWARD))
8860     {
8861       TEST_f_L (llrint, 0.0, 0);
8862       TEST_f_L (llrint, minus_zero, 0);
8863       TEST_f_L (llrint, 0.2L, 1);
8864       TEST_f_L (llrint, -0.2L, 0);
8866       TEST_f_L (llrint, 1.4L, 2);
8867       TEST_f_L (llrint, -1.4L, -1);
8869       TEST_f_L (llrint, 8388600.3L, 8388601);
8870       TEST_f_L (llrint, -8388600.3L, -8388600);
8871 #ifndef TEST_FLOAT
8872       TEST_f_l (llrint, 1071930.0008, 1071931);
8873 #endif
8874       /* Test boundary conditions.  */
8875       /* 0x1FFFFF */
8876       TEST_f_L (llrint, 2097151.0,2097151LL);
8877       /* 0x800000 */
8878       TEST_f_L (llrint, 8388608.0, 8388608LL);
8879       /* 0x1000000 */
8880       TEST_f_L (llrint, 16777216.0, 16777216LL);
8881       /* 0x20000000000 */
8882       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
8883       /* 0x40000000000 */
8884       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
8885       /* 0x1000000000000 */
8886       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
8887       /* 0x10000000000000 */
8888       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
8889       /* 0x10000080000000 */
8890       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
8891       /* 0x20000000000000 */
8892       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
8893       /* 0x80000000000000 */
8894       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
8895       /* 0x100000000000000 */
8896       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
8897 #ifdef TEST_LDOUBLE
8898       /* The input can only be represented in long double.  */
8899       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
8900       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
8901       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
8902       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
8903       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
8905       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
8906       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
8907       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
8908       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
8909       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
8910       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
8912       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
8913       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
8914       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
8915       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
8916       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
8918       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
8919       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
8920       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
8921       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
8922       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
8923       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
8925       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
8926       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
8927       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
8928       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
8929       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
8931       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
8932       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
8933       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
8934       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
8935       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
8936       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
8938       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
8939       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
8940       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
8941       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
8942       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
8944       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
8945       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
8946       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
8947       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
8948       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
8949       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
8951       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
8952       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
8953       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
8954       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
8955       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
8957       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
8958       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
8959       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
8960       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
8961       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
8963 # if LDBL_MANT_DIG > 100
8964       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
8965       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
8966       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
8967       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
8968       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
8969       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
8970       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
8971       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
8972       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
8973       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
8974       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
8975       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
8976 # endif
8977 #endif
8978     }
8980   fesetround (save_round_mode);
8982   END (llrint_upward);
8986 static void
8987 log_test (void)
8989   errno = 0;
8990   FUNC(log) (1);
8991   if (errno == ENOSYS)
8992     /* Function not implemented.  */
8993     return;
8994   START (log);
8996   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8997   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8999   TEST_f_f (log, 1, 0);
9001   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
9002   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
9003   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
9004   TEST_f_f (log, plus_infty, plus_infty);
9005   TEST_f_f (log, qnan_value, qnan_value);
9007   TEST_f_f (log, M_El, 1);
9008   TEST_f_f (log, 1.0 / M_El, -1);
9009   TEST_f_f (log, 2, M_LN2l);
9010   TEST_f_f (log, 10, M_LN10l);
9011   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
9013   END (log);
9017 static void
9018 log10_test (void)
9020   errno = 0;
9021   FUNC(log10) (1);
9022   if (errno == ENOSYS)
9023     /* Function not implemented.  */
9024     return;
9026   START (log10);
9028   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9029   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9031   TEST_f_f (log10, 1, 0);
9033   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
9034   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
9035   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
9036   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
9038   TEST_f_f (log10, plus_infty, plus_infty);
9039   TEST_f_f (log10, qnan_value, qnan_value);
9041   TEST_f_f (log10, 0.1L, -1);
9042   TEST_f_f (log10, 10.0, 1);
9043   TEST_f_f (log10, 100.0, 2);
9044   TEST_f_f (log10, 10000.0, 4);
9045   TEST_f_f (log10, M_El, M_LOG10El);
9046   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
9048   END (log10);
9052 static void
9053 log1p_test (void)
9055   errno = 0;
9056   FUNC(log1p) (0);
9057   if (errno == ENOSYS)
9058     /* Function not implemented.  */
9059     return;
9061   START (log1p);
9063   TEST_f_f (log1p, 0, 0);
9064   TEST_f_f (log1p, minus_zero, minus_zero);
9066   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9067   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
9068   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
9069   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
9071   TEST_f_f (log1p, plus_infty, plus_infty);
9072   TEST_f_f (log1p, qnan_value, qnan_value);
9074   TEST_f_f (log1p, M_El - 1.0, 1);
9076   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
9077   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
9079   END (log1p);
9083 static void
9084 log2_test (void)
9086   errno = 0;
9087   FUNC(log2) (1);
9088   if (errno == ENOSYS)
9089     /* Function not implemented.  */
9090     return;
9092   START (log2);
9094   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9095   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9097   TEST_f_f (log2, 1, 0);
9099   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
9100   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
9101   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
9103   TEST_f_f (log2, plus_infty, plus_infty);
9104   TEST_f_f (log2, qnan_value, qnan_value);
9106   TEST_f_f (log2, M_El, M_LOG2El);
9107   TEST_f_f (log2, 2.0, 1);
9108   TEST_f_f (log2, 16.0, 4);
9109   TEST_f_f (log2, 256.0, 8);
9110   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
9112   END (log2);
9116 static void
9117 logb_test (void)
9119   START (logb);
9121   TEST_f_f (logb, plus_infty, plus_infty);
9122   TEST_f_f (logb, minus_infty, plus_infty);
9124   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9126   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9127   TEST_f_f (logb, qnan_value, qnan_value);
9129   TEST_f_f (logb, 1, 0);
9130   TEST_f_f (logb, M_El, 1);
9131   TEST_f_f (logb, 1024, 10);
9132   TEST_f_f (logb, -2000, 10);
9134   TEST_f_f (logb, 0x0.1p-127, -131);
9135   TEST_f_f (logb, 0x0.01p-127, -135);
9136   TEST_f_f (logb, 0x0.011p-127, -135);
9137 #ifndef TEST_FLOAT
9138   TEST_f_f (logb, 0x0.8p-1022, -1023);
9139   TEST_f_f (logb, 0x0.1p-1022, -1026);
9140   TEST_f_f (logb, 0x0.00111p-1022, -1034);
9141   TEST_f_f (logb, 0x0.00001p-1022, -1042);
9142   TEST_f_f (logb, 0x0.000011p-1022, -1042);
9143   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
9144 #endif
9145 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
9146   TEST_f_f (logb, 0x1p-16400L, -16400);
9147   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
9148 #endif
9150   END (logb);
9153 static void
9154 logb_test_downward (void)
9156   int save_round_mode;
9157   errno = 0;
9159   FUNC(logb) (0);
9160   if (errno == ENOSYS)
9161     /* Function not implemented.  */
9162     return;
9164   START (logb_downward);
9166   save_round_mode = fegetround ();
9168   if (!fesetround (FE_DOWNWARD))
9169     {
9171       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
9172          should not return -0 from logb in any rounding mode.  PowerPC32 has
9173          failed with this test for power4 logb (and logbl on all PowerPC
9174          platforms) in the past due to instruction selection.  GCC PR 52775
9175          provides the availability of the fcfid insn in 32-bit mode which
9176          eliminates the use of fsub in this instance and prevents the negative
9177          signed 0.0.  */
9179       /* BZ #887  */
9180       TEST_f_f (logb, 1.000e+0, plus_zero);
9181     }
9183   fesetround (save_round_mode);
9185   END (logb_downward);
9188 static void
9189 lround_test (void)
9191   /* TODO: missing +/-Inf as well as qNaN tests.  */
9193   START (lround);
9195   TEST_f_l (lround, 0, 0);
9196   TEST_f_l (lround, minus_zero, 0);
9197   TEST_f_l (lround, 0.2L, 0.0);
9198   TEST_f_l (lround, -0.2L, 0);
9199   TEST_f_l (lround, 0.5, 1);
9200   TEST_f_l (lround, -0.5, -1);
9201   TEST_f_l (lround, 0.8L, 1);
9202   TEST_f_l (lround, -0.8L, -1);
9203   TEST_f_l (lround, 1.5, 2);
9204   TEST_f_l (lround, -1.5, -2);
9205   TEST_f_l (lround, 22514.5, 22515);
9206   TEST_f_l (lround, -22514.5, -22515);
9207   TEST_f_l (lround, 1071930.0008, 1071930);
9208 #ifndef TEST_FLOAT
9209   TEST_f_l (lround, 1073741824.01, 1073741824);
9210 # if LONG_MAX > 281474976710656
9211   TEST_f_l (lround, 281474976710656.025, 281474976710656);
9212   TEST_f_l (lround, 18014398509481974, 18014398509481974);
9213 # endif
9214   TEST_f_l (lround, 2097152.5, 2097153);
9215   TEST_f_l (lround, -2097152.5, -2097153);
9216   /* nextafter(0.5,-1)  */
9217   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
9218   /* nextafter(-0.5,1)  */
9219   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
9220 #else
9221   /* nextafter(0.5,-1)  */
9222   TEST_f_l (lround, 0x1.fffffp-2, 0);
9223   /* nextafter(-0.5,1)  */
9224   TEST_f_l (lround, -0x1.fffffp-2, 0);
9225   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
9226   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
9227 #endif
9228   END (lround);
9232 static void
9233 llround_test (void)
9235   /* TODO: missing +/-Inf as well as qNaN tests.  */
9237   START (llround);
9239   TEST_f_L (llround, 0, 0);
9240   TEST_f_L (llround, minus_zero, 0);
9241   TEST_f_L (llround, 0.2L, 0.0);
9242   TEST_f_L (llround, -0.2L, 0);
9243   TEST_f_L (llround, 0.5, 1);
9244   TEST_f_L (llround, -0.5, -1);
9245   TEST_f_L (llround, 0.8L, 1);
9246   TEST_f_L (llround, -0.8L, -1);
9247   TEST_f_L (llround, 1.5, 2);
9248   TEST_f_L (llround, -1.5, -2);
9249   TEST_f_L (llround, 22514.5, 22515);
9250   TEST_f_L (llround, -22514.5, -22515);
9251   TEST_f_l (llround, 1071930.0008, 1071930);
9252 #ifndef TEST_FLOAT
9253   TEST_f_L (llround, 2097152.5, 2097153);
9254   TEST_f_L (llround, -2097152.5, -2097153);
9255   TEST_f_L (llround, 34359738368.5, 34359738369ll);
9256   TEST_f_L (llround, -34359738368.5, -34359738369ll);
9257   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
9258 #endif
9260   /* Test boundary conditions.  */
9261   /* 0x1FFFFF */
9262   TEST_f_L (llround, 2097151.0, 2097151LL);
9263   /* 0x800000 */
9264   TEST_f_L (llround, 8388608.0, 8388608LL);
9265   /* 0x1000000 */
9266   TEST_f_L (llround, 16777216.0, 16777216LL);
9267   /* 0x20000000000 */
9268   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
9269   /* 0x40000000000 */
9270   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
9271   /* 0x1000000000000 */
9272   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
9273   /* 0x10000000000000 */
9274   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
9275   /* 0x10000080000000 */
9276   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
9277   /* 0x20000000000000 */
9278   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
9279   /* 0x80000000000000 */
9280   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
9281   /* 0x100000000000000 */
9282   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
9284 #ifndef TEST_FLOAT
9285   /* 0x100000000 */
9286   TEST_f_L (llround, 4294967295.5, 4294967296LL);
9287   /* 0x200000000 */
9288   TEST_f_L (llround, 8589934591.5, 8589934592LL);
9290   /* nextafter(0.5,-1)  */
9291   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
9292   /* nextafter(-0.5,1)  */
9293   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
9294   /* On PowerPC an exponent of '52' is the largest incrementally
9295    * representable sequence of whole-numbers in the 'double' range.  We test
9296    * lround to make sure that a guard bit set during the lround operation
9297    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
9298    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
9299    * rightmost bit set.  */
9300   /* +-(2^52+1)  */
9301   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
9302   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
9303   /* +-(2^53-1): Input is the last (positive and negative) incrementally
9304    * representable whole-number in the 'double' range that might round
9305    * erroneously.  */
9306   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
9307   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
9308 #else
9309   /* nextafter(0.5,-1)  */
9310   TEST_f_L (llround, 0x1.fffffep-2, 0);
9311   /* nextafter(-0.5,1)  */
9312   TEST_f_L (llround, -0x1.fffffep-2, 0);
9313   /* As above, on PowerPC an exponent of '23' is the largest incrementally
9314    * representable sequence of whole-numbers in the 'float' range.
9315    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
9316   TEST_f_L (llround, 0x1.000002p+23,8388609);
9317   TEST_f_L (llround, -0x1.000002p+23,-8388609);
9318   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
9319   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
9320 #endif
9323 #ifdef TEST_LDOUBLE
9324   /* The input can only be represented in long double.  */
9325   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
9326   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
9327   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
9328   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
9329   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
9331 # if LDBL_MANT_DIG > 100
9332   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
9333   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
9334   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
9335   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
9336   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
9337   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
9339   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
9340   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
9341   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
9342   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
9343   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
9344   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
9345 # endif
9347   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
9348   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
9349   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
9350   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
9351   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
9353   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
9354   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
9355   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
9356   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
9357   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
9359 # if LDBL_MANT_DIG > 100
9360   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
9361   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
9362   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
9363   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
9364   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
9365   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
9367   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
9368   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
9369   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
9370   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
9371   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
9372   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
9373 # endif
9375   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
9376   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
9377   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
9378   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
9379   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
9381   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
9382   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
9383   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
9384   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
9385   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
9387   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
9388   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
9389   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
9390   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
9391   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
9393   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
9394   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
9395   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
9396   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
9397   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
9398   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
9399 #endif
9401   END (llround);
9404 static void
9405 modf_test (void)
9407   FLOAT x;
9409   START (modf);
9411   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
9412   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
9413   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
9414   TEST_fF_f1 (modf, 0, 0, 0);
9415   TEST_fF_f1 (modf, 1.5, 0.5, 1);
9416   TEST_fF_f1 (modf, 2.5, 0.5, 2);
9417   TEST_fF_f1 (modf, -2.5, -0.5, -2);
9418   TEST_fF_f1 (modf, 20, 0, 20);
9419   TEST_fF_f1 (modf, 21, 0, 21);
9420   TEST_fF_f1 (modf, 89.5, 0.5, 89);
9422   END (modf);
9426 static void
9427 nearbyint_test (void)
9429   START (nearbyint);
9431   TEST_f_f (nearbyint, 0.0, 0.0);
9432   TEST_f_f (nearbyint, minus_zero, minus_zero);
9433   TEST_f_f (nearbyint, plus_infty, plus_infty);
9434   TEST_f_f (nearbyint, minus_infty, minus_infty);
9435   TEST_f_f (nearbyint, qnan_value, qnan_value);
9437   /* Subnormal values */
9438   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
9439   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
9441   /* Default rounding mode is round to nearest.  */
9442   TEST_f_f (nearbyint, 0.5, 0.0);
9443   TEST_f_f (nearbyint, 1.5, 2.0);
9444   TEST_f_f (nearbyint, -0.5, minus_zero);
9445   TEST_f_f (nearbyint, -1.5, -2.0);
9447   TEST_f_f (nearbyint, 262144.75, 262145.0);
9448   TEST_f_f (nearbyint, 262142.75, 262143.0);
9449   TEST_f_f (nearbyint, 524286.75, 524287.0);
9450   TEST_f_f (nearbyint, 524288.75, 524289.0);
9452   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
9453   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
9454   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
9455   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
9456   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
9457   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
9458   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
9459   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
9460   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
9461   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
9462 #ifndef TEST_FLOAT
9463   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
9464   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
9465   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
9466   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
9467   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
9468   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
9469   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
9470   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
9471   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
9472   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
9473 #endif
9475   END (nearbyint);
9478 static void
9479 nextafter_test (void)
9482   START (nextafter);
9484   TEST_ff_f (nextafter, 0, 0, 0);
9485   TEST_ff_f (nextafter, minus_zero, 0, 0);
9486   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
9487   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
9489   TEST_ff_f (nextafter, 9, 9, 9);
9490   TEST_ff_f (nextafter, -9, -9, -9);
9491   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
9492   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
9494   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
9495   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
9496   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
9498   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
9499                          LDBL_MAX, DBL_MAX, FLT_MAX);
9500   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
9501   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
9503 #ifdef TEST_LDOUBLE
9504   // XXX Enable once gcc is fixed.
9505   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
9506 #endif
9508   /* XXX We need the hexadecimal FP number representation here for further
9509      tests.  */
9511   END (nextafter);
9515 static void
9516 nexttoward_test (void)
9518   START (nexttoward);
9519   TEST_ff_f (nexttoward, 0, 0, 0);
9520   TEST_ff_f (nexttoward, minus_zero, 0, 0);
9521   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
9522   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
9524   TEST_ff_f (nexttoward, 9, 9, 9);
9525   TEST_ff_f (nexttoward, -9, -9, -9);
9526   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
9527   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
9529   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
9530   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
9531   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
9533 #ifdef TEST_FLOAT
9534   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
9535   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
9536   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
9537   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
9538   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
9539   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
9540   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
9541   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
9542   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
9543   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
9544   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
9545   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
9546   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
9547 # if LDBL_MANT_DIG >= 64
9548   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
9549   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
9550   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
9551   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
9552 # endif
9553 # if LDBL_MANT_DIG >= 106
9554   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
9555   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
9556   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
9557   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
9558 # endif
9559 # if LDBL_MANT_DIG >= 113
9560   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
9561   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
9562   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
9563   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
9564 # endif
9565 #endif
9566 #ifdef TEST_DOUBLE
9567   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
9568   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
9569   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
9570   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
9571   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
9572   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
9573   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
9574   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
9575   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
9576   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
9577   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
9578   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
9579   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
9580   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
9581 # if LDBL_MANT_DIG >= 64
9582   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
9583   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
9584   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
9585   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
9586 # endif
9587 # if LDBL_MANT_DIG >= 106
9588   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
9589   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
9590   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
9591   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
9592 # endif
9593 # if LDBL_MANT_DIG >= 113
9594   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
9595   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
9596   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
9597   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
9598 # endif
9599 #endif
9601   END (nexttoward);
9605 static void
9606 pow_test (void)
9609   errno = 0;
9610   FUNC(pow) (0, 0);
9611   if (errno == ENOSYS)
9612     /* Function not implemented.  */
9613     return;
9615   START (pow);
9617   TEST_ff_f (pow, 0, 0, 1);
9618   TEST_ff_f (pow, 0, minus_zero, 1);
9619   TEST_ff_f (pow, minus_zero, 0, 1);
9620   TEST_ff_f (pow, minus_zero, minus_zero, 1);
9622   TEST_ff_f (pow, 10, 0, 1);
9623   TEST_ff_f (pow, 10, minus_zero, 1);
9624   TEST_ff_f (pow, -10, 0, 1);
9625   TEST_ff_f (pow, -10, minus_zero, 1);
9627   TEST_ff_f (pow, qnan_value, 0, 1);
9628   TEST_ff_f (pow, qnan_value, minus_zero, 1);
9631 #ifndef TEST_INLINE
9632   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
9633   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
9634   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
9635   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
9637   TEST_ff_f (pow, 0.9L, plus_infty, 0);
9638   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
9639   TEST_ff_f (pow, -0.9L, plus_infty, 0);
9640   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
9642   TEST_ff_f (pow, 1.1L, minus_infty, 0);
9643   TEST_ff_f (pow, plus_infty, minus_infty, 0);
9644   TEST_ff_f (pow, -1.1L, minus_infty, 0);
9645   TEST_ff_f (pow, minus_infty, minus_infty, 0);
9647   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
9648   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
9649   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
9650   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
9652   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
9653   TEST_ff_f (pow, plus_infty, 1, plus_infty);
9654   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
9655   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
9657   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
9658   TEST_ff_f (pow, plus_infty, -1, 0);
9659   TEST_ff_f (pow, plus_infty, -1e7L, 0);
9660   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
9662   TEST_ff_f (pow, minus_infty, 1, minus_infty);
9663   TEST_ff_f (pow, minus_infty, 11, minus_infty);
9664   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
9666   TEST_ff_f (pow, minus_infty, 2, plus_infty);
9667   TEST_ff_f (pow, minus_infty, 12, plus_infty);
9668   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
9669   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
9670   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
9671   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
9672   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
9673   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
9675   TEST_ff_f (pow, minus_infty, -1, minus_zero);
9676   TEST_ff_f (pow, minus_infty, -11, minus_zero);
9677   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
9679   TEST_ff_f (pow, minus_infty, -2, 0);
9680   TEST_ff_f (pow, minus_infty, -12, 0);
9681   TEST_ff_f (pow, minus_infty, -1002, 0);
9682   TEST_ff_f (pow, minus_infty, -0.1L, 0);
9683   TEST_ff_f (pow, minus_infty, -1.1L, 0);
9684   TEST_ff_f (pow, minus_infty, -11.1L, 0);
9685   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
9686   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
9687 #endif
9689   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
9690   TEST_ff_f (pow, 0, qnan_value, qnan_value);
9691   TEST_ff_f (pow, 1, qnan_value, 1);
9692   TEST_ff_f (pow, -1, qnan_value, qnan_value);
9693   TEST_ff_f (pow, qnan_value, 1, qnan_value);
9694   TEST_ff_f (pow, qnan_value, -1, qnan_value);
9696   /* pow (x, qNaN) == qNaN.  */
9697   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
9698   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
9699   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
9700   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
9701   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
9703   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
9704   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
9705   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
9706   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
9707   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
9708   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
9709   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
9710   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
9712   TEST_ff_f (pow, 1, plus_infty, 1);
9713   TEST_ff_f (pow, -1, plus_infty, 1);
9714   TEST_ff_f (pow, 1, minus_infty, 1);
9715   TEST_ff_f (pow, -1, minus_infty, 1);
9716   TEST_ff_f (pow, 1, 1, 1);
9717   TEST_ff_f (pow, 1, -1, 1);
9718   TEST_ff_f (pow, 1, 1.25, 1);
9719   TEST_ff_f (pow, 1, -1.25, 1);
9720   TEST_ff_f (pow, 1, 0x1p62L, 1);
9721   TEST_ff_f (pow, 1, 0x1p63L, 1);
9722   TEST_ff_f (pow, 1, 0x1p64L, 1);
9723   TEST_ff_f (pow, 1, 0x1p72L, 1);
9724   TEST_ff_f (pow, 1, min_subnorm_value, 1);
9725   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
9727   /* pow (x, +-0) == 1.  */
9728   TEST_ff_f (pow, plus_infty, 0, 1);
9729   TEST_ff_f (pow, plus_infty, minus_zero, 1);
9730   TEST_ff_f (pow, minus_infty, 0, 1);
9731   TEST_ff_f (pow, minus_infty, minus_zero, 1);
9732   TEST_ff_f (pow, 32.75L, 0, 1);
9733   TEST_ff_f (pow, 32.75L, minus_zero, 1);
9734   TEST_ff_f (pow, -32.75L, 0, 1);
9735   TEST_ff_f (pow, -32.75L, minus_zero, 1);
9736   TEST_ff_f (pow, 0x1p72L, 0, 1);
9737   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
9738   TEST_ff_f (pow, 0x1p-72L, 0, 1);
9739   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
9741   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
9742   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
9743   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
9744   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
9745   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
9746   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
9747   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
9748   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
9750   errno = 0;
9751   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9752   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9753   errno = 0;
9754   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9755   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9756   errno = 0;
9757   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9758   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9759 #ifndef TEST_FLOAT
9760   errno = 0;
9761   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9762   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9763 #endif
9764 #ifdef TEST_LDOUBLE
9765 # if LDBL_MANT_DIG >= 64
9766   errno = 0;
9767   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9768   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9769 # endif
9770 # if LDBL_MANT_DIG >= 106
9771   errno = 0;
9772   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9773   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9774 # endif
9775 # if LDBL_MANT_DIG >= 113
9776   errno = 0;
9777   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9778   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9779 # endif
9780 #endif
9781   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9782   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9783   errno = 0;
9784   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9785   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9786   errno = 0;
9787   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9788   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9789   errno = 0;
9790   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9791   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9792 #ifndef TEST_FLOAT
9793   errno = 0;
9794   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9795   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9796   errno = 0;
9797   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9798   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9799 #endif
9800 #ifdef TEST_LDOUBLE
9801 # if LDBL_MANT_DIG >= 64
9802   errno = 0;
9803   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9804   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9805   errno = 0;
9806   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9807   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9808 # endif
9809 # if LDBL_MANT_DIG >= 106
9810   errno = 0;
9811   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9812   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9813   errno = 0;
9814   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9815   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9816 # endif
9817 # if LDBL_MANT_DIG >= 113
9818   errno = 0;
9819   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9820   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
9821   errno = 0;
9822   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9823   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9824 # endif
9825 #endif
9827   errno = 0;
9828   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9829   check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9830   errno = 0;
9831   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9832   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9833   errno = 0;
9834   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9835   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9836   errno = 0;
9837   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9838   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9839   errno = 0;
9840   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9841   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9842   errno = 0;
9843   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9844   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9845   errno = 0;
9846   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9847   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
9848   errno = 0;
9849   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9850   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9851   errno = 0;
9852   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9853   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9854   errno = 0;
9855   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9856   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9857   errno = 0;
9858   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9859   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9860   errno = 0;
9861   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9862   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
9864   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
9865   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
9866   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
9867   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
9869   TEST_ff_f (pow, 0, 1, 0);
9870   TEST_ff_f (pow, 0, 11, 0);
9872   TEST_ff_f (pow, minus_zero, 1, minus_zero);
9873   TEST_ff_f (pow, minus_zero, 11, minus_zero);
9875   TEST_ff_f (pow, 0, 2, 0);
9876   TEST_ff_f (pow, 0, 11.1L, 0);
9878   TEST_ff_f (pow, minus_zero, 2, 0);
9879   TEST_ff_f (pow, minus_zero, 11.1L, 0);
9880   TEST_ff_f (pow, 0, plus_infty, 0);
9881   TEST_ff_f (pow, minus_zero, plus_infty, 0);
9882   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
9883   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
9885 #ifndef TEST_INLINE
9886   /* pow (x, +inf) == +inf for |x| > 1.  */
9887   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
9889   /* pow (x, +inf) == +0 for |x| < 1.  */
9890   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
9892   /* pow (x, -inf) == +0 for |x| > 1.  */
9893   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
9895   /* pow (x, -inf) == +inf for |x| < 1.  */
9896   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
9897 #endif
9899   /* pow (+inf, y) == +inf for y > 0.  */
9900   TEST_ff_f (pow, plus_infty, 2, plus_infty);
9901   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
9902 #ifndef TEST_FLOAT
9903   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
9904 #endif
9905 #ifdef TEST_LDOUBLE
9906 # if LDBL_MANT_DIG >= 64
9907   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
9908 # endif
9909 # if LDBL_MANT_DIG >= 106
9910   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
9911 # endif
9912 # if LDBL_MANT_DIG >= 113
9913   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
9914 # endif
9915 #endif
9916   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
9917   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
9918   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
9920   /* pow (+inf, y) == +0 for y < 0.  */
9921   TEST_ff_f (pow, plus_infty, -1, 0.0);
9922   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
9923 #ifndef TEST_FLOAT
9924   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
9925 #endif
9926 #ifdef TEST_LDOUBLE
9927 # if LDBL_MANT_DIG >= 64
9928   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
9929 # endif
9930 # if LDBL_MANT_DIG >= 106
9931   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
9932 # endif
9933 # if LDBL_MANT_DIG >= 113
9934   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
9935 # endif
9936 #endif
9937   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
9938   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
9939   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
9941   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
9942   TEST_ff_f (pow, minus_infty, 27, minus_infty);
9943   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
9944   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
9945 #ifndef TEST_FLOAT
9946   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
9947   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
9948 #endif
9949 #ifdef TEST_LDOUBLE
9950 # if LDBL_MANT_DIG >= 64
9951   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
9952   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
9953 # endif
9954 # if LDBL_MANT_DIG >= 106
9955   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
9956   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
9957 # endif
9958 # if LDBL_MANT_DIG >= 113
9959   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
9960   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
9961 # endif
9962 #endif
9964   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
9965   TEST_ff_f (pow, minus_infty, 28, plus_infty);
9966   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
9967   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
9968   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
9970   /* pow (-inf, y) == -0 for y an odd integer < 0. */
9971   TEST_ff_f (pow, minus_infty, -3, minus_zero);
9972   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
9973   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
9974 #ifndef TEST_FLOAT
9975   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
9976   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
9977 #endif
9978 #ifdef TEST_LDOUBLE
9979 # if LDBL_MANT_DIG >= 64
9980   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
9981   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
9982 # endif
9983 # if LDBL_MANT_DIG >= 106
9984   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
9985   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
9986 # endif
9987 # if LDBL_MANT_DIG >= 113
9988   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
9989   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
9990 # endif
9991 #endif
9992   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
9993   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
9994   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
9995   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
9996   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
9998   /* pow (+0, y) == +0 for y an odd integer > 0.  */
9999   TEST_ff_f (pow, 0.0, 27, 0.0);
10000   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
10001 #ifndef TEST_FLOAT
10002   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
10003 #endif
10004 #ifdef TEST_LDOUBLE
10005 # if LDBL_MANT_DIG >= 64
10006   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
10007 # endif
10008 # if LDBL_MANT_DIG >= 106
10009   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
10010 # endif
10011 # if LDBL_MANT_DIG >= 113
10012   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
10013 # endif
10014 #endif
10016   /* pow (-0, y) == -0 for y an odd integer > 0.  */
10017   TEST_ff_f (pow, minus_zero, 27, minus_zero);
10018   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
10019   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
10020 #ifndef TEST_FLOAT
10021   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
10022   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
10023 #endif
10024 #ifdef TEST_LDOUBLE
10025 # if LDBL_MANT_DIG >= 64
10026   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
10027   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
10028 # endif
10029 # if LDBL_MANT_DIG >= 106
10030   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
10031   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
10032 # endif
10033 # if LDBL_MANT_DIG >= 113
10034   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
10035   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
10036 # endif
10037 #endif
10039   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
10040   TEST_ff_f (pow, 0.0, 4, 0.0);
10041   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
10042   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
10043   TEST_ff_f (pow, 0.0, max_value, 0.0);
10044   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
10046   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
10047   TEST_ff_f (pow, minus_zero, 4, 0.0);
10048   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
10049   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
10050   TEST_ff_f (pow, minus_zero, max_value, 0.0);
10051   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
10053   TEST_ff_f (pow, 16, 0.25L, 2);
10054   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
10055   TEST_ff_f (pow, 2, 4, 16);
10056   TEST_ff_f (pow, 256, 8, 0x1p64L);
10058   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
10060 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
10061   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
10062 #endif
10064   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
10065   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
10066 #ifndef TEST_FLOAT
10067   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
10068   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
10069 #endif
10070 #ifdef TEST_LDOUBLE
10071 # if LDBL_MANT_DIG >= 64
10072   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
10073   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
10074 # endif
10075 # if LDBL_MANT_DIG >= 106
10076   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10077   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10078 # endif
10079 # if LDBL_MANT_DIG >= 113
10080   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10081   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10082 # endif
10083 #endif
10084   TEST_ff_f (pow, -1.0, -max_value, 1.0);
10086   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
10087   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
10088 #ifndef TEST_FLOAT
10089   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
10090   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
10091 #endif
10092 #ifdef TEST_LDOUBLE
10093 # if LDBL_MANT_DIG >= 64
10094   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
10095   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
10096 # endif
10097 # if LDBL_MANT_DIG >= 106
10098   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10099   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10100 # endif
10101 # if LDBL_MANT_DIG >= 113
10102   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10103   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10104 # endif
10105 #endif
10106   TEST_ff_f (pow, -1.0, max_value, 1.0);
10108   TEST_ff_f (pow, -2.0, 126, 0x1p126);
10109   TEST_ff_f (pow, -2.0, 127, -0x1p127);
10110   /* Allow inexact results for float to be considered to underflow.  */
10111   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
10112   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
10114   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10115   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10116 #ifndef TEST_FLOAT
10117   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10118   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10119 #endif
10120 #ifdef TEST_LDOUBLE
10121 # if LDBL_MANT_DIG >= 64
10122   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10123   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10124 # endif
10125 # if LDBL_MANT_DIG >= 106
10126   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10127   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10128 # endif
10129 # if LDBL_MANT_DIG >= 113
10130   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10131   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10132 # endif
10133 #endif
10134   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10136   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10137   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10138 #ifndef TEST_FLOAT
10139   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10140   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10141 #endif
10142 #ifdef TEST_LDOUBLE
10143 # if LDBL_MANT_DIG >= 64
10144   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10145   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10146 # endif
10147 # if LDBL_MANT_DIG >= 106
10148   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10149   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10150 # endif
10151 # if LDBL_MANT_DIG >= 113
10152   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10153   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10154 # endif
10155 #endif
10156   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
10158   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
10159   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
10160   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10161   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
10162   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
10163   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
10164   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
10166   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10167   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10168 #ifndef TEST_FLOAT
10169   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10170   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10171 #endif
10172 #ifdef TEST_LDOUBLE
10173 # if LDBL_MANT_DIG >= 64
10174   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10175   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10176 # endif
10177 # if LDBL_MANT_DIG >= 106
10178   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10179   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10180 # endif
10181 # if LDBL_MANT_DIG >= 113
10182   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10183   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10184 # endif
10185 #endif
10186   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10188   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10189   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10190 #ifndef TEST_FLOAT
10191   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10192   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10193 #endif
10194 #ifdef TEST_LDOUBLE
10195 # if LDBL_MANT_DIG >= 64
10196   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10197   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10198 # endif
10199 # if LDBL_MANT_DIG >= 106
10200   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10201   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10202 # endif
10203 # if LDBL_MANT_DIG >= 113
10204   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10205   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10206 # endif
10207 #endif
10208   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
10210   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
10211   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
10212   TEST_ff_f (pow, -0.5, -126, 0x1p126);
10213   TEST_ff_f (pow, -0.5, -127, -0x1p127);
10215   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10216   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10217 #ifndef TEST_FLOAT
10218   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10219   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10220 #endif
10221 #ifdef TEST_LDOUBLE
10222 # if LDBL_MANT_DIG >= 64
10223   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10224   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10225 # endif
10226 # if LDBL_MANT_DIG >= 106
10227   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10228   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10229 # endif
10230 # if LDBL_MANT_DIG >= 113
10231   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10232   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10233 # endif
10234 #endif
10235   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
10237   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10238   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10239 #ifndef TEST_FLOAT
10240   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10241   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10242 #endif
10243 #ifdef TEST_LDOUBLE
10244 # if LDBL_MANT_DIG >= 64
10245   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10246   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10247 # endif
10248 # if LDBL_MANT_DIG >= 106
10249   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10250   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10251 # endif
10252 # if LDBL_MANT_DIG >= 113
10253   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10254   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10255 # endif
10256 #endif
10257   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
10259   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
10260   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
10261   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10262   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
10263   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
10264   /* Allow inexact results to be considered to underflow.  */
10265   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
10266   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
10267   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
10269   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10270   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10271 #ifndef TEST_FLOAT
10272   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10273   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10274 #endif
10275 #ifdef TEST_LDOUBLE
10276 # if LDBL_MANT_DIG >= 64
10277   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10278   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10279 # endif
10280 # if LDBL_MANT_DIG >= 106
10281   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10282   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10283 # endif
10284 # if LDBL_MANT_DIG >= 113
10285   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10286   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10287 # endif
10288 #endif
10289   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
10291   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10292   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10293 #ifndef TEST_FLOAT
10294   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10295   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10296 #endif
10297 #ifdef TEST_LDOUBLE
10298 # if LDBL_MANT_DIG >= 64
10299   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10300   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10301 # endif
10302 # if LDBL_MANT_DIG >= 106
10303   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10304   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10305 # endif
10306 # if LDBL_MANT_DIG >= 113
10307   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10308   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10309 # endif
10310 #endif
10311   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
10313   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
10314   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
10315   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
10316   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
10317   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
10318   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
10319   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
10320   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
10321   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
10322   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
10323   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
10324   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
10325   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
10326   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
10327   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
10329 #if !defined TEST_FLOAT
10330   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
10331   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
10332   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
10333   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
10334 #endif
10336 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
10337   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
10338   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
10339   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
10340   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
10341 #endif
10343 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
10344   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
10345   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
10346   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
10347   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
10348 #endif
10350 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
10351   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
10352   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
10353   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
10354   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
10355   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
10356   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
10357   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
10358   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
10359   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
10360   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
10361   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
10362   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
10363   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
10364 #endif
10366   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
10367   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
10368   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
10369   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
10370   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
10371   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
10372   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
10373   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
10375   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
10377   END (pow);
10381 static void
10382 pow_test_tonearest (void)
10384   int save_round_mode;
10385   errno = 0;
10386   FUNC(pow) (0, 0);
10387   if (errno == ENOSYS)
10388     /* Function not implemented.  */
10389     return;
10391   START (pow_tonearest);
10393   save_round_mode = fegetround ();
10395   if (!fesetround (FE_TONEAREST))
10396     {
10397       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
10398       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
10399     }
10401   fesetround (save_round_mode);
10403   END (pow_tonearest);
10407 static void
10408 pow_test_towardzero (void)
10410   int save_round_mode;
10411   errno = 0;
10412   FUNC(pow) (0, 0);
10413   if (errno == ENOSYS)
10414     /* Function not implemented.  */
10415     return;
10417   START (pow_towardzero);
10419   save_round_mode = fegetround ();
10421   if (!fesetround (FE_TOWARDZERO))
10422     {
10423       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
10424       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
10425     }
10427   fesetround (save_round_mode);
10429   END (pow_towardzero);
10433 static void
10434 pow_test_downward (void)
10436   int save_round_mode;
10437   errno = 0;
10438   FUNC(pow) (0, 0);
10439   if (errno == ENOSYS)
10440     /* Function not implemented.  */
10441     return;
10443   START (pow_downward);
10445   save_round_mode = fegetround ();
10447   if (!fesetround (FE_DOWNWARD))
10448     {
10449       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
10450       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
10451     }
10453   fesetround (save_round_mode);
10455   END (pow_downward);
10459 static void
10460 pow_test_upward (void)
10462   int save_round_mode;
10463   errno = 0;
10464   FUNC(pow) (0, 0);
10465   if (errno == ENOSYS)
10466     /* Function not implemented.  */
10467     return;
10469   START (pow_upward);
10471   save_round_mode = fegetround ();
10473   if (!fesetround (FE_UPWARD))
10474     {
10475       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
10476       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
10477     }
10479   fesetround (save_round_mode);
10481   END (pow_upward);
10485 static void
10486 remainder_test (void)
10488   errno = 0;
10489   FUNC(remainder) (1.625, 1.0);
10490   if (errno == ENOSYS)
10491     /* Function not implemented.  */
10492     return;
10494   START (remainder);
10496   errno = 0;
10497   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION);
10498   check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
10499   errno = 0;
10500   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION);
10501   check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
10502   errno = 0;
10503   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION);
10504   check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
10505   errno = 0;
10506   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION);
10507   check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
10508   errno = 0;
10509   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value);
10510   check_int ("errno for remainder(qNAN, qNAN) unchanged", errno, 0, 0, 0, 0);
10511   errno = 0;
10512   TEST_ff_f (remainder, 0, qnan_value, qnan_value);
10513   check_int ("errno for remainder(0, qNAN) unchanged", errno, 0, 0, 0, 0);
10514   errno = 0;
10515   TEST_ff_f (remainder, qnan_value, 0, qnan_value);
10516   check_int ("errno for remainder(qNaN, 0) unchanged", errno, 0, 0, 0, 0);
10518   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
10519   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
10520   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
10521   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
10522   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
10523   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
10525   END (remainder);
10528 static void
10529 remquo_test (void)
10531   /* x is needed.  */
10532   int x;
10534   errno = 0;
10535   FUNC(remquo) (1.625, 1.0, &x);
10536   if (errno == ENOSYS)
10537     /* Function not implemented.  */
10538     return;
10540   START (remquo);
10542   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
10543   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
10544   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
10545   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
10546   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
10548   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
10549   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
10550   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
10551   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
10553   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
10554   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
10556   END (remquo);
10559 static void
10560 rint_test (void)
10562   /* TODO: missing qNaN tests.  */
10564   START (rint);
10566   TEST_f_f (rint, 0.0, 0.0);
10567   TEST_f_f (rint, minus_zero, minus_zero);
10568   TEST_f_f (rint, plus_infty, plus_infty);
10569   TEST_f_f (rint, minus_infty, minus_infty);
10571   /* Default rounding mode is round to even.  */
10572   TEST_f_f (rint, 0.5, 0.0);
10573   TEST_f_f (rint, 1.5, 2.0);
10574   TEST_f_f (rint, 2.5, 2.0);
10575   TEST_f_f (rint, 3.5, 4.0);
10576   TEST_f_f (rint, 4.5, 4.0);
10577   TEST_f_f (rint, -0.5, -0.0);
10578   TEST_f_f (rint, -1.5, -2.0);
10579   TEST_f_f (rint, -2.5, -2.0);
10580   TEST_f_f (rint, -3.5, -4.0);
10581   TEST_f_f (rint, -4.5, -4.0);
10582   TEST_f_f (rint, 0.1, 0.0);
10583   TEST_f_f (rint, 0.25, 0.0);
10584   TEST_f_f (rint, 0.625, 1.0);
10585   TEST_f_f (rint, -0.1, -0.0);
10586   TEST_f_f (rint, -0.25, -0.0);
10587   TEST_f_f (rint, -0.625, -1.0);
10588   TEST_f_f (rint, 262144.75, 262145.0);
10589   TEST_f_f (rint, 262142.75, 262143.0);
10590   TEST_f_f (rint, 524286.75, 524287.0);
10591   TEST_f_f (rint, 524288.75, 524289.0);
10592   TEST_f_f (rint, 1048576.75, 1048577.0);
10593   TEST_f_f (rint, 2097152.75, 2097153.0);
10594   TEST_f_f (rint, -1048576.75, -1048577.0);
10595   TEST_f_f (rint, -2097152.75, -2097153.0);
10596 #ifndef TEST_FLOAT
10597   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
10598   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
10599   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
10600   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
10601   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
10602   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
10603   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
10604   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
10605   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
10606   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
10607 #endif
10608 #ifdef TEST_LDOUBLE
10609   /* The result can only be represented in long double.  */
10610   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
10611   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
10612   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
10613   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
10614   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
10616 # if LDBL_MANT_DIG > 100
10617   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
10618   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
10619   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
10620 # endif
10622   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
10623   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
10624   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
10625   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
10626   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
10628 # if LDBL_MANT_DIG > 100
10629   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
10630   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
10631   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
10633   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
10634   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
10635   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
10636   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
10637   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
10638   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
10640   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
10641   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
10642   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
10643   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
10644   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
10645   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
10646 # endif
10648   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
10649   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
10650   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
10651   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
10652   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
10654   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
10655   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
10656   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
10657   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
10658   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
10660   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
10661   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
10662   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
10663   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
10664   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
10666   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
10667   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
10668   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
10669   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
10670   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
10672   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
10673   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
10674   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
10675   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
10676   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
10677 #endif
10679   END (rint);
10682 static void
10683 rint_test_tonearest (void)
10685   int save_round_mode;
10686   START (rint_tonearest);
10688   save_round_mode = fegetround ();
10690   if (!fesetround (FE_TONEAREST))
10691     {
10692       TEST_f_f (rint, 2.0, 2.0);
10693       TEST_f_f (rint, 1.5, 2.0);
10694       TEST_f_f (rint, 1.0, 1.0);
10695       TEST_f_f (rint, 0.5, 0.0);
10696       TEST_f_f (rint, 0.0, 0.0);
10697       TEST_f_f (rint, minus_zero, minus_zero);
10698       TEST_f_f (rint, -0.5, -0.0);
10699       TEST_f_f (rint, -1.0, -1.0);
10700       TEST_f_f (rint, -1.5, -2.0);
10701       TEST_f_f (rint, -2.0, -2.0);
10702       TEST_f_f (rint, 0.1, 0.0);
10703       TEST_f_f (rint, 0.25, 0.0);
10704       TEST_f_f (rint, 0.625, 1.0);
10705       TEST_f_f (rint, -0.1, -0.0);
10706       TEST_f_f (rint, -0.25, -0.0);
10707       TEST_f_f (rint, -0.625, -1.0);
10708       TEST_f_f (rint, 1048576.75, 1048577.0);
10709       TEST_f_f (rint, 2097152.75, 2097153.0);
10710       TEST_f_f (rint, -1048576.75, -1048577.0);
10711       TEST_f_f (rint, -2097152.75, -2097153.0);
10712 #ifndef TEST_FLOAT
10713       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
10714       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
10715       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
10716       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
10717       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
10718       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
10719       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
10720       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
10721       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
10722       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
10723 #endif
10724 #ifdef TEST_LDOUBLE
10725       /* The result can only be represented in long double.  */
10726       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
10727       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
10728       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
10729       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
10730       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
10731 # if LDBL_MANT_DIG > 100
10732       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
10733       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
10734       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
10735 # endif
10736       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
10737       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
10738       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
10739       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
10740       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
10741 # if LDBL_MANT_DIG > 100
10742       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
10743       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
10744       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
10746       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
10747       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
10748       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
10749       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
10750       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
10751       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
10753       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
10754       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
10755       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
10756       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
10757       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
10758       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
10759 # endif
10760 #endif
10761     }
10763   fesetround (save_round_mode);
10765   END (rint_tonearest);
10768 static void
10769 rint_test_towardzero (void)
10771   int save_round_mode;
10772   START (rint_towardzero);
10774   save_round_mode = fegetround ();
10776   if (!fesetround (FE_TOWARDZERO))
10777     {
10778       TEST_f_f (rint, 2.0, 2.0);
10779       TEST_f_f (rint, 1.5, 1.0);
10780       TEST_f_f (rint, 1.0, 1.0);
10781       TEST_f_f (rint, 0.5, 0.0);
10782       TEST_f_f (rint, 0.0, 0.0);
10783       TEST_f_f (rint, minus_zero, minus_zero);
10784       TEST_f_f (rint, -0.5, -0.0);
10785       TEST_f_f (rint, -1.0, -1.0);
10786       TEST_f_f (rint, -1.5, -1.0);
10787       TEST_f_f (rint, -2.0, -2.0);
10788       TEST_f_f (rint, 0.1, 0.0);
10789       TEST_f_f (rint, 0.25, 0.0);
10790       TEST_f_f (rint, 0.625, 0.0);
10791       TEST_f_f (rint, -0.1, -0.0);
10792       TEST_f_f (rint, -0.25, -0.0);
10793       TEST_f_f (rint, -0.625, -0.0);
10794       TEST_f_f (rint, 1048576.75, 1048576.0);
10795       TEST_f_f (rint, 2097152.75, 2097152.0);
10796       TEST_f_f (rint, -1048576.75, -1048576.0);
10797       TEST_f_f (rint, -2097152.75, -2097152.0);
10798 #ifndef TEST_FLOAT
10799       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
10800       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
10801       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
10802       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
10803       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
10804       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
10805       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
10806       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
10807       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
10808       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
10809 #endif
10810 #ifdef TEST_LDOUBLE
10811       /* The result can only be represented in long double.  */
10812       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
10813       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
10814       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
10815       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
10816       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
10817 # if LDBL_MANT_DIG > 100
10818       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
10819       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
10820       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
10821 # endif
10822       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
10823       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
10824       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
10825       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
10826       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
10827 # if LDBL_MANT_DIG > 100
10828       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
10829       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
10830       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
10832       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
10833       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
10834       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
10835       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
10836       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
10837       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
10839       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
10840       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
10841       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
10842       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
10843       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
10844       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
10845 # endif
10846 #endif
10847     }
10849   fesetround (save_round_mode);
10851   END (rint_towardzero);
10854 static void
10855 rint_test_downward (void)
10857   int save_round_mode;
10858   START (rint_downward);
10860   save_round_mode = fegetround ();
10862   if (!fesetround (FE_DOWNWARD))
10863     {
10864       TEST_f_f (rint, 2.0, 2.0);
10865       TEST_f_f (rint, 1.5, 1.0);
10866       TEST_f_f (rint, 1.0, 1.0);
10867       TEST_f_f (rint, 0.5, 0.0);
10868       TEST_f_f (rint, 0.0, 0.0);
10869       TEST_f_f (rint, minus_zero, minus_zero);
10870       TEST_f_f (rint, -0.5, -1.0);
10871       TEST_f_f (rint, -1.0, -1.0);
10872       TEST_f_f (rint, -1.5, -2.0);
10873       TEST_f_f (rint, -2.0, -2.0);
10874       TEST_f_f (rint, 0.1, 0.0);
10875       TEST_f_f (rint, 0.25, 0.0);
10876       TEST_f_f (rint, 0.625, 0.0);
10877       TEST_f_f (rint, -0.1, -1.0);
10878       TEST_f_f (rint, -0.25, -1.0);
10879       TEST_f_f (rint, -0.625, -1.0);
10880       TEST_f_f (rint, 1048576.75, 1048576.0);
10881       TEST_f_f (rint, 2097152.75, 2097152.0);
10882       TEST_f_f (rint, -1048576.75, -1048577.0);
10883       TEST_f_f (rint, -2097152.75, -2097153.0);
10884 #ifndef TEST_FLOAT
10885       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
10886       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
10887       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
10888       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
10889       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
10890       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
10891       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
10892       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
10893       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
10894       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
10895 #endif
10896 #ifdef TEST_LDOUBLE
10897       /* The result can only be represented in long double.  */
10898       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
10899       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
10900       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
10901       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
10902       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
10903 # if LDBL_MANT_DIG > 100
10904       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
10905       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
10906       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
10907 # endif
10908       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
10909       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
10910       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
10911       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
10912       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
10913 # if LDBL_MANT_DIG > 100
10914       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
10915       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
10916       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
10918       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
10919       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
10920       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
10921       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
10922       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
10923       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
10925       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
10926       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
10927       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
10928       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
10929       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
10930       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
10931 # endif
10932 #endif
10933     }
10935   fesetround (save_round_mode);
10937   END (rint_downward);
10940 static void
10941 rint_test_upward (void)
10943   int save_round_mode;
10944   START (rint_upward);
10946   save_round_mode = fegetround ();
10948   if (!fesetround (FE_UPWARD))
10949     {
10950       TEST_f_f (rint, 2.0, 2.0);
10951       TEST_f_f (rint, 1.5, 2.0);
10952       TEST_f_f (rint, 1.0, 1.0);
10953       TEST_f_f (rint, 0.5, 1.0);
10954       TEST_f_f (rint, 0.0, 0.0);
10955       TEST_f_f (rint, minus_zero, minus_zero);
10956       TEST_f_f (rint, -0.5, -0.0);
10957       TEST_f_f (rint, -1.0, -1.0);
10958       TEST_f_f (rint, -1.5, -1.0);
10959       TEST_f_f (rint, -2.0, -2.0);
10960       TEST_f_f (rint, 0.1, 1.0);
10961       TEST_f_f (rint, 0.25, 1.0);
10962       TEST_f_f (rint, 0.625, 1.0);
10963       TEST_f_f (rint, -0.1, -0.0);
10964       TEST_f_f (rint, -0.25, -0.0);
10965       TEST_f_f (rint, -0.625, -0.0);
10966       TEST_f_f (rint, 1048576.75, 1048577.0);
10967       TEST_f_f (rint, 2097152.75, 2097153.0);
10968       TEST_f_f (rint, -1048576.75, -1048576.0);
10969       TEST_f_f (rint, -2097152.75, -2097152.0);
10970 #ifndef TEST_FLOAT
10971       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
10972       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
10973       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
10974       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
10975       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
10976       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
10977       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
10978       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
10979       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
10980       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
10981 #endif
10982 #ifdef TEST_LDOUBLE
10983       /* The result can only be represented in long double.  */
10984       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
10985       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
10986       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
10987       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
10988       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
10989 # if LDBL_MANT_DIG > 100
10990       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
10991       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
10992       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
10993 # endif
10994       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
10995       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
10996       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
10997       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
10998       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
10999 # if LDBL_MANT_DIG > 100
11000       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
11001       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
11002       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
11004       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
11005       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
11006       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
11007       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11008       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11009       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11011       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11012       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11013       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11014       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
11015       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
11016       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
11017 # endif
11018 #endif
11019     }
11021   fesetround (save_round_mode);
11023   END (rint_upward);
11026 static void
11027 round_test (void)
11029   /* TODO: missing +/-Inf as well as qNaN tests.  */
11031   START (round);
11033   TEST_f_f (round, 0, 0);
11034   TEST_f_f (round, minus_zero, minus_zero);
11035   TEST_f_f (round, 0.2L, 0.0);
11036   TEST_f_f (round, -0.2L, minus_zero);
11037   TEST_f_f (round, 0.5, 1.0);
11038   TEST_f_f (round, -0.5, -1.0);
11039   TEST_f_f (round, 0.8L, 1.0);
11040   TEST_f_f (round, -0.8L, -1.0);
11041   TEST_f_f (round, 1.5, 2.0);
11042   TEST_f_f (round, -1.5, -2.0);
11043   TEST_f_f (round, 0.1, 0.0);
11044   TEST_f_f (round, 0.25, 0.0);
11045   TEST_f_f (round, 0.625, 1.0);
11046   TEST_f_f (round, -0.1, -0.0);
11047   TEST_f_f (round, -0.25, -0.0);
11048   TEST_f_f (round, -0.625, -1.0);
11049   TEST_f_f (round, 2097152.5, 2097153);
11050   TEST_f_f (round, -2097152.5, -2097153);
11052 #ifdef TEST_LDOUBLE
11053   /* The result can only be represented in long double.  */
11054   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
11055   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
11056   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
11057   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
11058   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
11059 # if LDBL_MANT_DIG > 100
11060   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
11061   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
11062   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
11063 # endif
11065   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
11066   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
11067   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
11068   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
11069   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
11070 # if LDBL_MANT_DIG > 100
11071   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
11072   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
11073   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
11074 # endif
11076   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
11077   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
11078   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
11079   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
11080   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
11082   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
11083   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
11084   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
11085   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
11086   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
11088 # if LDBL_MANT_DIG > 100
11089   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
11090   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
11091   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
11092   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
11093   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
11094   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
11096   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
11097   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
11098   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
11099   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
11100   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
11101   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
11102 # endif
11104   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
11105   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
11106   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
11107   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
11108   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
11110   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
11111   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
11112   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
11113   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
11114   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
11116   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
11117   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
11118   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
11119   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
11120   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
11121 #endif
11123   END (round);
11127 static void
11128 scalb_test (void)
11131   START (scalb);
11133   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
11134   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
11136   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11137   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11139   TEST_ff_f (scalb, 1, 0, 1);
11140   TEST_ff_f (scalb, -1, 0, -1);
11142   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
11143   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
11145   TEST_ff_f (scalb, 0, 2, 0);
11146   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
11147   TEST_ff_f (scalb, 0, 0, 0);
11148   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
11149   TEST_ff_f (scalb, 0, -1, 0);
11150   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
11151   TEST_ff_f (scalb, 0, minus_infty, 0);
11152   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
11154   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
11155   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
11156   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
11157   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
11158   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
11159   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
11161   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
11162   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
11164   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
11165   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
11166   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
11167   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
11169   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11170   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11172   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
11173   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11174   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
11175   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11176   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
11177   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
11178   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
11180   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
11181   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
11183   END (scalb);
11187 static void
11188 scalbn_test (void)
11191   START (scalbn);
11193   TEST_fi_f (scalbn, 0, 0, 0);
11194   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
11196   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
11197   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
11198   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
11200   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
11201   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
11203   TEST_fi_f (scalbn, 1, 0L, 1);
11205   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11206   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11207   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11208   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11209   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11210   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11211   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11212   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11214   END (scalbn);
11218 static void
11219 scalbln_test (void)
11222   START (scalbln);
11224   TEST_fl_f (scalbln, 0, 0, 0);
11225   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
11227   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
11228   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
11229   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
11231   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
11232   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
11234   TEST_fl_f (scalbln, 1, 0L, 1);
11236   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11237   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11238   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11239   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11240   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11241   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11242   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11243   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11245   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11246   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11247   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11248   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11249   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11250   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11251   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11252   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11254 #if LONG_MAX >= 0x100000000
11255   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11256   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11257   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11258   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11259   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11260   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11261   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11262   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11263 #endif
11265   END (scalbn);
11269 static void
11270 signbit_test (void)
11272   /* TODO: missing qNaN tests.  */
11274   START (signbit);
11276   TEST_f_b (signbit, 0, 0);
11277   TEST_f_b (signbit, minus_zero, 1);
11278   TEST_f_b (signbit, plus_infty, 0);
11279   TEST_f_b (signbit, minus_infty, 1);
11281   /* signbit (x) != 0 for x < 0.  */
11282   TEST_f_b (signbit, -1, 1);
11283   /* signbit (x) == 0 for x >= 0.  */
11284   TEST_f_b (signbit, 1, 0);
11286   END (signbit);
11290 static void
11291 sin_test (void)
11293   errno = 0;
11294   FUNC(sin) (0);
11295   if (errno == ENOSYS)
11296     /* Function not implemented.  */
11297     return;
11299   START (sin);
11301   TEST_f_f (sin, 0, 0);
11302   TEST_f_f (sin, minus_zero, minus_zero);
11303   errno = 0;
11304   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION);
11305   check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
11306   errno = 0;
11307   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION);
11308   check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
11309   errno = 0;
11310   TEST_f_f (sin, qnan_value, qnan_value);
11311   check_int ("errno for sin(qNaN) unchanged", errno, 0, 0, 0, 0);
11313   TEST_f_f (sin, M_PI_6l, 0.5);
11314   TEST_f_f (sin, -M_PI_6l, -0.5);
11315   TEST_f_f (sin, M_PI_2l, 1);
11316   TEST_f_f (sin, -M_PI_2l, -1);
11317   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
11319   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
11320   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
11322   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
11324 #ifdef TEST_DOUBLE
11325   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
11326   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
11327 #endif
11329 #ifndef TEST_FLOAT
11330   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
11331   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
11332 #endif
11334 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11335   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
11336 #endif
11338   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
11339   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
11340   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
11341   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
11342   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
11343   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
11345   END (sin);
11350 static void
11351 sin_test_tonearest (void)
11353   int save_round_mode;
11354   errno = 0;
11355   FUNC(sin) (0);
11356   if (errno == ENOSYS)
11357     /* Function not implemented.  */
11358     return;
11360   START (sin_tonearest);
11362   save_round_mode = fegetround ();
11364   if (!fesetround (FE_TONEAREST))
11365     {
11366       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
11367       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
11368       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
11369       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
11370       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
11371       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
11372       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
11373       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
11374       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
11375       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
11376     }
11378   fesetround (save_round_mode);
11380   END (sin_tonearest);
11384 static void
11385 sin_test_towardzero (void)
11387   int save_round_mode;
11388   errno = 0;
11389   FUNC(sin) (0);
11390   if (errno == ENOSYS)
11391     /* Function not implemented.  */
11392     return;
11394   START (sin_towardzero);
11396   save_round_mode = fegetround ();
11398   if (!fesetround (FE_TOWARDZERO))
11399     {
11400       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
11401       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
11402       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
11403       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
11404       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
11405       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
11406       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
11407       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
11408       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
11409       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
11410     }
11412   fesetround (save_round_mode);
11414   END (sin_towardzero);
11418 static void
11419 sin_test_downward (void)
11421   int save_round_mode;
11422   errno = 0;
11423   FUNC(sin) (0);
11424   if (errno == ENOSYS)
11425     /* Function not implemented.  */
11426     return;
11428   START (sin_downward);
11430   save_round_mode = fegetround ();
11432   if (!fesetround (FE_DOWNWARD))
11433     {
11434       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
11435       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
11436       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
11437       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
11438       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
11439       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
11440       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
11441       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
11442       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
11443       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
11444     }
11446   fesetround (save_round_mode);
11448   END (sin_downward);
11452 static void
11453 sin_test_upward (void)
11455   int save_round_mode;
11456   errno = 0;
11457   FUNC(sin) (0);
11458   if (errno == ENOSYS)
11459     /* Function not implemented.  */
11460     return;
11462   START (sin_upward);
11464   save_round_mode = fegetround ();
11466   if (!fesetround (FE_UPWARD))
11467     {
11468       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
11469       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
11470       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
11471       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
11472       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
11473       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
11474       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
11475       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
11476       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
11477       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
11478     }
11480   fesetround (save_round_mode);
11482   END (sin_upward);
11486 static void
11487 sincos_test (void)
11489   FLOAT sin_res, cos_res;
11491   errno = 0;
11492   FUNC(sincos) (0, &sin_res, &cos_res);
11493   if (errno == ENOSYS)
11494     /* Function not implemented.  */
11495     return;
11497   START (sincos);
11499   /* sincos is treated differently because it returns void.  */
11500   TEST_extra (sincos, 0, 0, 1);
11502   TEST_extra (sincos, minus_zero, minus_zero, 1);
11503   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
11504   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
11505   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
11507   TEST_extra (sincos, M_PI_2l, 1, 0);
11508   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
11509   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
11510   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
11512   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
11513   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
11515 #ifdef TEST_DOUBLE
11516   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
11517 #endif
11519 #ifndef TEST_FLOAT
11520   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
11521   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
11522 #endif
11524 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11525   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
11526 #endif
11528   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
11529   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
11530   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
11531   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
11532   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
11533   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
11535   END (sincos);
11538 static void
11539 sinh_test (void)
11541   errno = 0;
11542   FUNC(sinh) (0.7L);
11543   if (errno == ENOSYS)
11544     /* Function not implemented.  */
11545     return;
11547   START (sinh);
11548   TEST_f_f (sinh, 0, 0);
11549   TEST_f_f (sinh, minus_zero, minus_zero);
11551 #ifndef TEST_INLINE
11552   TEST_f_f (sinh, plus_infty, plus_infty);
11553   TEST_f_f (sinh, minus_infty, minus_infty);
11554 #endif
11555   TEST_f_f (sinh, qnan_value, qnan_value);
11557   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
11558   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
11560   END (sinh);
11564 static void
11565 sinh_test_tonearest (void)
11567   int save_round_mode;
11568   errno = 0;
11569   FUNC(sinh) (0);
11570   if (errno == ENOSYS)
11571     /* Function not implemented.  */
11572     return;
11574   START (sinh_tonearest);
11576   save_round_mode = fegetround ();
11578   if (!fesetround (FE_TONEAREST))
11579     {
11580       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
11581       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
11582       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
11583     }
11585   fesetround (save_round_mode);
11587   END (sinh_tonearest);
11591 static void
11592 sinh_test_towardzero (void)
11594   int save_round_mode;
11595   errno = 0;
11596   FUNC(sinh) (0);
11597   if (errno == ENOSYS)
11598     /* Function not implemented.  */
11599     return;
11601   START (sinh_towardzero);
11603   save_round_mode = fegetround ();
11605   if (!fesetround (FE_TOWARDZERO))
11606     {
11607       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
11608       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
11609       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
11610     }
11612   fesetround (save_round_mode);
11614   END (sinh_towardzero);
11618 static void
11619 sinh_test_downward (void)
11621   int save_round_mode;
11622   errno = 0;
11623   FUNC(sinh) (0);
11624   if (errno == ENOSYS)
11625     /* Function not implemented.  */
11626     return;
11628   START (sinh_downward);
11630   save_round_mode = fegetround ();
11632   if (!fesetround (FE_DOWNWARD))
11633     {
11634       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
11635       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
11636       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
11637     }
11639   fesetround (save_round_mode);
11641   END (sinh_downward);
11645 static void
11646 sinh_test_upward (void)
11648   int save_round_mode;
11649   errno = 0;
11650   FUNC(sinh) (0);
11651   if (errno == ENOSYS)
11652     /* Function not implemented.  */
11653     return;
11655   START (sinh_upward);
11657   save_round_mode = fegetround ();
11659   if (!fesetround (FE_UPWARD))
11660     {
11661       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
11662       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
11663       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
11664     }
11666   fesetround (save_round_mode);
11668   END (sinh_upward);
11672 static void
11673 sqrt_test (void)
11675   errno = 0;
11676   FUNC(sqrt) (1);
11677   if (errno == ENOSYS)
11678     /* Function not implemented.  */
11679     return;
11681   START (sqrt);
11683   TEST_f_f (sqrt, 0, 0);
11684   TEST_f_f (sqrt, qnan_value, qnan_value);
11685   TEST_f_f (sqrt, plus_infty, plus_infty);
11687   TEST_f_f (sqrt, minus_zero, minus_zero);
11689   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
11690   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
11691   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
11692   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
11694   TEST_f_f (sqrt, 2209, 47);
11695   TEST_f_f (sqrt, 4, 2);
11696   TEST_f_f (sqrt, 2, M_SQRT2l);
11697   TEST_f_f (sqrt, 0.25, 0.5);
11698   TEST_f_f (sqrt, 6642.25, 81.5);
11699   TEST_f_f (sqrt, 15190.5625L, 123.25L);
11700   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
11702   END (sqrt);
11706 static void
11707 tan_test (void)
11709   errno = 0;
11710   FUNC(tan) (0);
11711   if (errno == ENOSYS)
11712     /* Function not implemented.  */
11713     return;
11715   START (tan);
11717   TEST_f_f (tan, 0, 0);
11718   TEST_f_f (tan, minus_zero, minus_zero);
11719   errno = 0;
11720   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION);
11721   check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
11722   errno = 0;
11723   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION);
11724   check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
11725   errno = 0;
11726   TEST_f_f (tan, qnan_value, qnan_value);
11727   check_int ("errno for tan(qNaN) == 0", errno, 0, 0, 0, 0);
11729   TEST_f_f (tan, M_PI_4l, 1);
11730   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
11732   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
11733   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
11735   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
11736   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
11737   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
11738   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
11739   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
11740   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
11741   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
11742   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
11743   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
11744   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
11745   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
11746   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
11747   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
11748   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
11749   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
11750   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
11751   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
11752   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
11754   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
11755   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
11756   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
11757   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
11758   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
11759   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
11760   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
11761   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
11762   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
11763   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
11764   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
11765   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
11766   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
11767   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
11768   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
11769   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
11770   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
11771   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
11773 #ifndef TEST_FLOAT
11774   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
11775   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
11776 #endif
11778 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11779   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
11780 #endif
11782   END (tan);
11786 static void
11787 tan_test_tonearest (void)
11789   int save_round_mode;
11790   errno = 0;
11791   FUNC(tan) (0);
11792   if (errno == ENOSYS)
11793     /* Function not implemented.  */
11794     return;
11796   START (tan_tonearest);
11798   save_round_mode = fegetround ();
11800   if (!fesetround (FE_TONEAREST))
11801     {
11802       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
11803       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
11804       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
11805       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
11806       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
11807       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
11808       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
11809       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
11810       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
11811       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
11812     }
11814   fesetround (save_round_mode);
11816   END (tan_tonearest);
11820 static void
11821 tan_test_towardzero (void)
11823   int save_round_mode;
11824   errno = 0;
11825   FUNC(tan) (0);
11826   if (errno == ENOSYS)
11827     /* Function not implemented.  */
11828     return;
11830   START (tan_towardzero);
11832   save_round_mode = fegetround ();
11834   if (!fesetround (FE_TOWARDZERO))
11835     {
11836       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
11837       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
11838       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
11839       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
11840       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
11841       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
11842       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
11843       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
11844       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
11845       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
11846     }
11848   fesetround (save_round_mode);
11850   END (tan_towardzero);
11854 static void
11855 tan_test_downward (void)
11857   int save_round_mode;
11858   errno = 0;
11859   FUNC(tan) (0);
11860   if (errno == ENOSYS)
11861     /* Function not implemented.  */
11862     return;
11864   START (tan_downward);
11866   save_round_mode = fegetround ();
11868   if (!fesetround (FE_DOWNWARD))
11869     {
11870       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
11871       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
11872       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
11873       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
11874       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
11875       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
11876       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
11877       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
11878       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
11879       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
11880     }
11882   fesetround (save_round_mode);
11884   END (tan_downward);
11888 static void
11889 tan_test_upward (void)
11891   int save_round_mode;
11892   errno = 0;
11893   FUNC(tan) (0);
11894   if (errno == ENOSYS)
11895     /* Function not implemented.  */
11896     return;
11898   START (tan_upward);
11900   save_round_mode = fegetround ();
11902   if (!fesetround (FE_UPWARD))
11903     {
11904       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
11905       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
11906       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
11907       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
11908       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
11909       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
11910       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
11911       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
11912       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
11913       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
11914     }
11916   fesetround (save_round_mode);
11918   END (tan_upward);
11922 static void
11923 tanh_test (void)
11925   errno = 0;
11926   FUNC(tanh) (0.7L);
11927   if (errno == ENOSYS)
11928     /* Function not implemented.  */
11929     return;
11931   START (tanh);
11933   TEST_f_f (tanh, 0, 0);
11934   TEST_f_f (tanh, minus_zero, minus_zero);
11936 #ifndef TEST_INLINE
11937   TEST_f_f (tanh, plus_infty, 1);
11938   TEST_f_f (tanh, minus_infty, -1);
11939 #endif
11940   TEST_f_f (tanh, qnan_value, qnan_value);
11942   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
11943   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
11945   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
11946   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
11948   /* 2^-57  */
11949   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
11951   END (tanh);
11954 static void
11955 tgamma_test (void)
11957   errno = 0;
11958   FUNC(tgamma) (1);
11959   if (errno == ENOSYS)
11960     /* Function not implemented.  */
11961     return;
11963   START (tgamma);
11965   TEST_f_f (tgamma, plus_infty, plus_infty);
11966   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
11967   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
11968   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
11969   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
11970   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
11971   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
11972   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
11973   TEST_f_f (tgamma, qnan_value, qnan_value);
11975   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
11976   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
11978   TEST_f_f (tgamma, 1, 1);
11979   TEST_f_f (tgamma, 4, 6);
11981   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
11982   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
11984   END (tgamma);
11988 static void
11989 trunc_test (void)
11991   START (trunc);
11993   TEST_f_f (trunc, plus_infty, plus_infty);
11994   TEST_f_f (trunc, minus_infty, minus_infty);
11995   TEST_f_f (trunc, qnan_value, qnan_value);
11997   TEST_f_f (trunc, 0, 0);
11998   TEST_f_f (trunc, minus_zero, minus_zero);
11999   TEST_f_f (trunc, 0.1, 0);
12000   TEST_f_f (trunc, 0.25, 0);
12001   TEST_f_f (trunc, 0.625, 0);
12002   TEST_f_f (trunc, -0.1, minus_zero);
12003   TEST_f_f (trunc, -0.25, minus_zero);
12004   TEST_f_f (trunc, -0.625, minus_zero);
12005   TEST_f_f (trunc, 1, 1);
12006   TEST_f_f (trunc, -1, -1);
12007   TEST_f_f (trunc, 1.625, 1);
12008   TEST_f_f (trunc, -1.625, -1);
12010   TEST_f_f (trunc, 1048580.625L, 1048580L);
12011   TEST_f_f (trunc, -1048580.625L, -1048580L);
12013   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
12014   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
12016   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
12017   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
12019 #ifdef TEST_LDOUBLE
12020   /* The result can only be represented in long double.  */
12021   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
12022   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
12023   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
12024   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
12025   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
12027 # if LDBL_MANT_DIG > 100
12028   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
12029   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
12030   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
12031 # endif
12033   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
12034   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
12035   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
12036   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
12037   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
12039 # if LDBL_MANT_DIG > 100
12040   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
12041   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
12042   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
12043 # endif
12045   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
12046   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
12047   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
12048   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
12049   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
12051 # if LDBL_MANT_DIG > 100
12052   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
12053   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
12054   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
12055   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
12056   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
12057   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
12058 # endif
12060   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
12061   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
12062   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
12063   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
12064   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
12066 # if LDBL_MANT_DIG > 100
12067   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
12068   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
12069   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
12070   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
12071   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
12072   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
12073 # endif
12075   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
12076   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
12077   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
12078   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
12079   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
12081   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
12082   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
12083   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
12084   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
12085   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
12087   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
12088   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12089   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12090   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
12091   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
12092 #endif
12094   END (trunc);
12097 static void
12098 y0_test (void)
12100   FLOAT s, c;
12101   errno = 0;
12102   FUNC (sincos) (0, &s, &c);
12103   if (errno == ENOSYS)
12104     /* Required function not implemented.  */
12105     return;
12106   FUNC(y0) (1);
12107   if (errno == ENOSYS)
12108     /* Function not implemented.  */
12109     return;
12111   /* y0 is the Bessel function of the second kind of order 0 */
12112   START (y0);
12114   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
12115   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
12116   TEST_f_f (y0, 0.0, minus_infty);
12117   TEST_f_f (y0, qnan_value, qnan_value);
12118   TEST_f_f (y0, plus_infty, 0);
12120   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
12121   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
12122   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
12123   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
12124   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
12125   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
12126   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
12128   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
12130 #ifndef TEST_FLOAT
12131   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
12132   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
12133 #endif
12135 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12136   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
12137   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
12138 #endif
12140   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
12141   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
12142   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
12143   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
12144   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
12145   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
12146   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
12147   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
12148   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
12149   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
12150   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
12152   END (y0);
12156 static void
12157 y1_test (void)
12159   FLOAT s, c;
12160   errno = 0;
12161   FUNC (sincos) (0, &s, &c);
12162   if (errno == ENOSYS)
12163     /* Required function not implemented.  */
12164     return;
12165   FUNC(y1) (1);
12166   if (errno == ENOSYS)
12167     /* Function not implemented.  */
12168     return;
12170   /* y1 is the Bessel function of the second kind of order 1 */
12171   START (y1);
12173   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
12174   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
12175   TEST_f_f (y1, 0.0, minus_infty);
12176   TEST_f_f (y1, plus_infty, 0);
12177   TEST_f_f (y1, qnan_value, qnan_value);
12179   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
12180   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
12181   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
12182   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
12183   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
12184   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
12185   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
12187   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
12189 #ifndef TEST_FLOAT
12190   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
12191   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
12192 #endif
12194 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12195   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
12196   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
12197 #endif
12199   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
12200   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
12201   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
12202   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
12203   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
12204   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
12205   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
12206   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
12207   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
12208   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
12209   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
12211   END (y1);
12215 static void
12216 yn_test (void)
12218   FLOAT s, c;
12219   errno = 0;
12220   FUNC (sincos) (0, &s, &c);
12221   if (errno == ENOSYS)
12222     /* Required function not implemented.  */
12223     return;
12224   FUNC(yn) (1, 1);
12225   if (errno == ENOSYS)
12226     /* Function not implemented.  */
12227     return;
12229   /* yn is the Bessel function of the second kind of order n */
12230   START (yn);
12232   /* yn (0, x) == y0 (x)  */
12233   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
12234   TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
12235   TEST_ff_f (yn, 0, 0.0, minus_infty);
12236   TEST_ff_f (yn, 0, qnan_value, qnan_value);
12237   TEST_ff_f (yn, 0, plus_infty, 0);
12239   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
12240   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
12241   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
12242   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
12243   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
12244   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
12245   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
12247   /* yn (1, x) == y1 (x)  */
12248   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
12249   TEST_ff_f (yn, 1, 0.0, minus_infty);
12250   TEST_ff_f (yn, 1, plus_infty, 0);
12251   TEST_ff_f (yn, 1, qnan_value, qnan_value);
12253   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
12254   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
12255   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
12256   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
12257   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
12258   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
12259   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
12261   /* yn (3, x)  */
12262   TEST_ff_f (yn, 3, plus_infty, 0);
12263   TEST_ff_f (yn, 3, qnan_value, qnan_value);
12265   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
12266   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
12267   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
12268   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
12269   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
12271   /* yn (10, x)  */
12272   TEST_ff_f (yn, 10, plus_infty, 0);
12273   TEST_ff_f (yn, 10, qnan_value, qnan_value);
12275   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
12276   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
12277   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
12278   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
12279   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
12281   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
12282      and FLT_MIN.  See Bug 14173.  */
12283   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
12285   errno = 0;
12286   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
12287   check_int ("errno for yn(10,-min) == ERANGE", errno, ERANGE, 0, 0, 0);
12289   END (yn);
12293 static void
12294 significand_test (void)
12296   /* significand returns the mantissa of the exponential representation.  */
12298   /* TODO: missing +/-Inf as well as qNaN tests.  */
12300   START (significand);
12302   TEST_f_f (significand, 4.0, 1.0);
12303   TEST_f_f (significand, 6.0, 1.5);
12304   TEST_f_f (significand, 8.0, 1.0);
12306   END (significand);
12310 static void
12311 initialize (void)
12313   fpstack_test ("start *init*");
12315   plus_zero = 0.0;
12316   qnan_value = FUNC (__builtin_nan) ("");
12317   minus_zero = FUNC (copysign) (0.0, -1.0);
12318   plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
12319                        HUGE_VALL, HUGE_VAL, HUGE_VALF);
12320   minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
12321                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
12322   max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
12323                       LDBL_MAX, DBL_MAX, FLT_MAX);
12324   min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
12325                       LDBL_MIN, DBL_MIN, FLT_MIN);
12326   min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
12327                               __DBL_DENORM_MIN__,
12328                               __FLT_DENORM_MIN__,
12329                               __LDBL_DENORM_MIN__,
12330                               __DBL_DENORM_MIN__,
12331                               __FLT_DENORM_MIN__);
12333   (void) &plus_zero;
12334   (void) &qnan_value;
12335   (void) &minus_zero;
12336   (void) &plus_infty;
12337   (void) &minus_infty;
12338   (void) &max_value;
12339   (void) &min_value;
12340   (void) &min_subnorm_value;
12342   /* Clear all exceptions.  From now on we must not get random exceptions.  */
12343   feclearexcept (FE_ALL_EXCEPT);
12345   /* Test to make sure we start correctly.  */
12346   fpstack_test ("end *init*");
12349 /* Definitions of arguments for argp functions.  */
12350 static const struct argp_option options[] =
12352   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
12353   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
12354   { "no-max-error", 'f', NULL, 0,
12355     "Don't output maximal errors of functions"},
12356   { "no-points", 'p', NULL, 0,
12357     "Don't output results of functions invocations"},
12358   { "ignore-max-ulp", 'i', "yes/no", 0,
12359     "Ignore given maximal errors"},
12360   { NULL, 0, NULL, 0, NULL }
12363 /* Short description of program.  */
12364 static const char doc[] = "Math test suite: " TEST_MSG ;
12366 /* Prototype for option handler.  */
12367 static error_t parse_opt (int key, char *arg, struct argp_state *state);
12369 /* Data structure to communicate with argp functions.  */
12370 static struct argp argp =
12372   options, parse_opt, NULL, doc,
12376 /* Handle program arguments.  */
12377 static error_t
12378 parse_opt (int key, char *arg, struct argp_state *state)
12380   switch (key)
12381     {
12382     case 'f':
12383       output_max_error = 0;
12384       break;
12385     case 'i':
12386       if (strcmp (arg, "yes") == 0)
12387         ignore_max_ulp = 1;
12388       else if (strcmp (arg, "no") == 0)
12389         ignore_max_ulp = 0;
12390       break;
12391     case 'p':
12392       output_points = 0;
12393       break;
12394     case 'u':
12395       output_ulps = 1;
12396       break;
12397     case 'v':
12398       if (optarg)
12399         verbose = (unsigned int) strtoul (optarg, NULL, 0);
12400       else
12401         verbose = 3;
12402       break;
12403     default:
12404       return ARGP_ERR_UNKNOWN;
12405     }
12406   return 0;
12409 #if 0
12410 /* function to check our ulp calculation.  */
12411 void
12412 check_ulp (void)
12414   int i;
12416   FLOAT u, diff, ulp;
12417   /* This gives one ulp.  */
12418   u = FUNC(nextafter) (10, 20);
12419   check_equal (10.0, u, 1, &diff, &ulp);
12420   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
12422   /* This gives one more ulp.  */
12423   u = FUNC(nextafter) (u, 20);
12424   check_equal (10.0, u, 2, &diff, &ulp);
12425   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
12427   /* And now calculate 100 ulp.  */
12428   for (i = 2; i < 100; i++)
12429     u = FUNC(nextafter) (u, 20);
12430   check_equal (10.0, u, 100, &diff, &ulp);
12431   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
12433 #endif
12436 main (int argc, char **argv)
12439   int remaining;
12441   verbose = 1;
12442   output_ulps = 0;
12443   output_max_error = 1;
12444   output_points = 1;
12445   /* XXX set to 0 for releases.  */
12446   ignore_max_ulp = 0;
12448   /* Parse and process arguments.  */
12449   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
12451   if (remaining != argc)
12452     {
12453       fprintf (stderr, "wrong number of arguments");
12454       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
12455       exit (EXIT_FAILURE);
12456     }
12458   if (output_ulps)
12459     {
12460       ulps_file = fopen ("ULPs", "a");
12461       if (ulps_file == NULL)
12462         {
12463           perror ("can't open file `ULPs' for writing: ");
12464           exit (1);
12465         }
12466     }
12469   initialize ();
12470   printf (TEST_MSG);
12472 #if 0
12473   check_ulp ();
12474 #endif
12476   /* Keep the tests a wee bit ordered (according to ISO C99).  */
12477   /* Classification macros:  */
12478   finite_test ();
12479   fpclassify_test ();
12480   isfinite_test ();
12481   isinf_test ();
12482   isnan_test ();
12483   isnormal_test ();
12484   issignaling_test ();
12485   signbit_test ();
12487   /* Trigonometric functions:  */
12488   acos_test ();
12489   acos_test_tonearest ();
12490   acos_test_towardzero ();
12491   acos_test_downward ();
12492   acos_test_upward ();
12493   asin_test ();
12494   asin_test_tonearest ();
12495   asin_test_towardzero ();
12496   asin_test_downward ();
12497   asin_test_upward ();
12498   atan_test ();
12499   atan2_test ();
12500   cos_test ();
12501   cos_test_tonearest ();
12502   cos_test_towardzero ();
12503   cos_test_downward ();
12504   cos_test_upward ();
12505   sin_test ();
12506   sin_test_tonearest ();
12507   sin_test_towardzero ();
12508   sin_test_downward ();
12509   sin_test_upward ();
12510   sincos_test ();
12511   tan_test ();
12512   tan_test_tonearest ();
12513   tan_test_towardzero ();
12514   tan_test_downward ();
12515   tan_test_upward ();
12517   /* Hyperbolic functions:  */
12518   acosh_test ();
12519   asinh_test ();
12520   atanh_test ();
12521   cosh_test ();
12522   cosh_test_tonearest ();
12523   cosh_test_towardzero ();
12524   cosh_test_downward ();
12525   cosh_test_upward ();
12526   sinh_test ();
12527   sinh_test_tonearest ();
12528   sinh_test_towardzero ();
12529   sinh_test_downward ();
12530   sinh_test_upward ();
12531   tanh_test ();
12533   /* Exponential and logarithmic functions:  */
12534   exp_test ();
12535   exp_test_tonearest ();
12536   exp_test_towardzero ();
12537   exp_test_downward ();
12538   exp_test_upward ();
12539   exp10_test ();
12540   exp2_test ();
12541   expm1_test ();
12542   frexp_test ();
12543   ldexp_test ();
12544   log_test ();
12545   log10_test ();
12546   log1p_test ();
12547   log2_test ();
12548   logb_test ();
12549   logb_test_downward ();
12550   modf_test ();
12551   ilogb_test ();
12552   scalb_test ();
12553   scalbn_test ();
12554   scalbln_test ();
12555   significand_test ();
12557   /* Power and absolute value functions:  */
12558   cbrt_test ();
12559   fabs_test ();
12560   hypot_test ();
12561   pow_test ();
12562   pow_test_tonearest ();
12563   pow_test_towardzero ();
12564   pow_test_downward ();
12565   pow_test_upward ();
12566   sqrt_test ();
12568   /* Error and gamma functions:  */
12569   erf_test ();
12570   erfc_test ();
12571   gamma_test ();
12572   lgamma_test ();
12573   tgamma_test ();
12575   /* Nearest integer functions:  */
12576   ceil_test ();
12577   floor_test ();
12578   nearbyint_test ();
12579   rint_test ();
12580   rint_test_tonearest ();
12581   rint_test_towardzero ();
12582   rint_test_downward ();
12583   rint_test_upward ();
12584   lrint_test ();
12585   lrint_test_tonearest ();
12586   lrint_test_towardzero ();
12587   lrint_test_downward ();
12588   lrint_test_upward ();
12589   llrint_test ();
12590   llrint_test_tonearest ();
12591   llrint_test_towardzero ();
12592   llrint_test_downward ();
12593   llrint_test_upward ();
12594   round_test ();
12595   lround_test ();
12596   llround_test ();
12597   trunc_test ();
12599   /* Remainder functions:  */
12600   fmod_test ();
12601   remainder_test ();
12602   remquo_test ();
12604   /* Manipulation functions:  */
12605   copysign_test ();
12606   nextafter_test ();
12607   nexttoward_test ();
12609   /* maximum, minimum and positive difference functions */
12610   fdim_test ();
12611   fmax_test ();
12612   fmin_test ();
12614   /* Multiply and add:  */
12615   fma_test ();
12616   fma_test_towardzero ();
12617   fma_test_downward ();
12618   fma_test_upward ();
12620   /* Comparison macros:  */
12621   isgreater_test ();
12622   isgreaterequal_test ();
12623   isless_test ();
12624   islessequal_test ();
12625   islessgreater_test ();
12626   isunordered_test ();
12628   /* Complex functions:  */
12629   cabs_test ();
12630   cacos_test ();
12631   cacosh_test ();
12632   carg_test ();
12633   casin_test ();
12634   casinh_test ();
12635   catan_test ();
12636   catanh_test ();
12637   ccos_test ();
12638   ccosh_test ();
12639   cexp_test ();
12640   cimag_test ();
12641   clog10_test ();
12642   clog_test ();
12643   conj_test ();
12644   cpow_test ();
12645   cproj_test ();
12646   creal_test ();
12647   csin_test ();
12648   csinh_test ();
12649   csqrt_test ();
12650   ctan_test ();
12651   ctan_test_tonearest ();
12652   ctan_test_towardzero ();
12653   ctan_test_downward ();
12654   ctan_test_upward ();
12655   ctanh_test ();
12656   ctanh_test_tonearest ();
12657   ctanh_test_towardzero ();
12658   ctanh_test_downward ();
12659   ctanh_test_upward ();
12661   /* Bessel functions:  */
12662   j0_test ();
12663   j1_test ();
12664   jn_test ();
12665   y0_test ();
12666   y1_test ();
12667   yn_test ();
12669   if (output_ulps)
12670     fclose (ulps_file);
12672   printf ("\nTest suite completed:\n");
12673   printf ("  %d test cases plus %d tests for exception flags executed.\n",
12674           noTests, noExcTests);
12675   if (noXFails)
12676     printf ("  %d expected failures occurred.\n", noXFails);
12677   if (noXPasses)
12678     printf ("  %d unexpected passes occurred.\n", noXPasses);
12679   if (noErrors)
12680     {
12681       printf ("  %d errors occurred.\n", noErrors);
12682       return 1;
12683     }
12684   printf ("  All tests passed successfully.\n");
12686   return 0;
12690  * Local Variables:
12691  * mode:c
12692  * End:
12693  */