a3d773153128135c486c1977303761a34fe756b9
[platform/upstream/glibc.git] / math / libm-test.inc
1 /* Copyright (C) 1997-2013 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Andreas Jaeger <aj@suse.de>, 1997.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 /* Part of testsuite for libm.
20
21    This file is processed by a perl script.  The resulting file has to
22    be included by a master file that defines:
23
24    Macros:
25    FUNC(function): converts general function name (like cos) to
26    name with correct suffix (e.g. cosl or cosf)
27    MATHCONST(x):   like FUNC but for constants (e.g convert 0.0 to 0.0L)
28    FLOAT:          floating point type to test
29    - TEST_MSG:     informal message to be displayed
30    CHOOSE(Clongdouble,Cdouble,Cfloat,Cinlinelongdouble,Cinlinedouble,Cinlinefloat):
31    chooses one of the parameters as delta for testing
32    equality
33    PRINTF_EXPR     Floating point conversion specification to print a variable
34    of type FLOAT with printf.  PRINTF_EXPR just contains
35    the specifier, not the percent and width arguments,
36    e.g. "f".
37    PRINTF_XEXPR    Like PRINTF_EXPR, but print in hexadecimal format.
38    PRINTF_NEXPR Like PRINTF_EXPR, but print nice.  */
39
40 /* This testsuite has currently tests for:
41    acos, acosh, asin, asinh, atan, atan2, atanh,
42    cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
43    fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify,
44    frexp, gamma, hypot,
45    ilogb, isfinite, isinf, isnan, isnormal, issignaling,
46    isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
47    j0, j1, jn,
48    ldexp, lgamma, log, log10, log1p, log2, logb,
49    modf, nearbyint, nextafter, nexttoward,
50    pow, remainder, remquo, rint, lrint, llrint,
51    round, lround, llround,
52    scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
53    y0, y1, yn, significand
54
55    and for the following complex math functions:
56    cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
57    ccos, ccosh, cexp, cimag, clog, clog10, conj, cpow, cproj, creal,
58    csin, csinh, csqrt, ctan, ctanh.
59
60    At the moment the following functions and macros aren't tested:
61    drem (alias for remainder),
62    lgamma_r,
63    nan,
64    pow10 (alias for exp10).
65
66    Parameter handling is primitive in the moment:
67    --verbose=[0..3] for different levels of output:
68    0: only error count
69    1: basic report on failed tests (default)
70    2: full report on all tests
71    -v for full output (equals --verbose=3)
72    -u for generation of an ULPs file
73  */
74
75 /* "Philosophy":
76
77    This suite tests some aspects of the correct implementation of
78    mathematical functions in libm.  Some simple, specific parameters
79    are tested for correctness but there's no exhaustive
80    testing.  Handling of specific inputs (e.g. infinity, not-a-number)
81    is also tested.  Correct handling of exceptions is checked
82    against.  These implemented tests should check all cases that are
83    specified in ISO C99.
84
85    Exception testing: At the moment only divide-by-zero, invalid,
86    overflow and underflow exceptions are tested.  Inexact exceptions
87    aren't checked at the moment.
88
89    NaN values: There exist signalling and quiet NaNs.  This implementation
90    only uses quiet NaN as parameter.  Where the sign of a NaN is
91    significant, this is not tested.  The payload of NaNs is not examined.
92
93    Inline functions: Inlining functions should give an improvement in
94    speed - but not in precission.  The inlined functions return
95    reasonable values for a reasonable range of input values.  The
96    result is not necessarily correct for all values and exceptions are
97    not correctly raised in all cases.  Problematic input and return
98    values are infinity, not-a-number and minus zero.  This suite
99    therefore does not check these specific inputs and the exception
100    handling for inlined mathematical functions - just the "reasonable"
101    values are checked.
102
103    Beware: The tests might fail for any of the following reasons:
104    - Tests are wrong
105    - Functions are wrong
106    - Floating Point Unit not working properly
107    - Compiler has errors
108
109    With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
110
111
112    To Do: All parameter should be numbers that can be represented as
113    exact floating point values.  Currently some values cannot be
114    represented exactly and therefore the result is not the expected
115    result.  For this we will use 36 digits so that numbers can be
116    represented exactly.  */
117
118 #ifndef _GNU_SOURCE
119 # define _GNU_SOURCE
120 #endif
121
122 #include "libm-test-ulps.h"
123 #include <complex.h>
124 #include <math.h>
125 #include <float.h>
126 #include <fenv.h>
127 #include <limits.h>
128
129 #include <errno.h>
130 #include <stdlib.h>
131 #include <stdio.h>
132 #include <string.h>
133 #include <argp.h>
134 #include <tininess.h>
135
136 /* Allow platforms without all rounding modes to test properly,
137    assuming they provide an __FE_UNDEFINED in <bits/fenv.h> which
138    causes fesetround() to return failure.  */
139 #ifndef FE_TONEAREST
140 # define FE_TONEAREST   __FE_UNDEFINED
141 #endif
142 #ifndef FE_TOWARDZERO
143 # define FE_TOWARDZERO  __FE_UNDEFINED
144 #endif
145 #ifndef FE_UPWARD
146 # define FE_UPWARD      __FE_UNDEFINED
147 #endif
148 #ifndef FE_DOWNWARD
149 # define FE_DOWNWARD    __FE_UNDEFINED
150 #endif
151
152 /* Possible exceptions */
153 #define NO_EXCEPTION                    0x0
154 #define INVALID_EXCEPTION               0x1
155 #define DIVIDE_BY_ZERO_EXCEPTION        0x2
156 #define OVERFLOW_EXCEPTION              0x4
157 #define UNDERFLOW_EXCEPTION             0x8
158 /* The next flags signals that those exceptions are allowed but not required.   */
159 #define INVALID_EXCEPTION_OK            0x10
160 #define DIVIDE_BY_ZERO_EXCEPTION_OK     0x20
161 #define OVERFLOW_EXCEPTION_OK           0x40
162 #define UNDERFLOW_EXCEPTION_OK          0x80
163 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
164 /* Some special test flags, passed together with exceptions.  */
165 #define IGNORE_ZERO_INF_SIGN            0x100
166
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)
197
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 */
212
213 #define ulps_file_name "ULPs"   /* Name of the ULPs file.  */
214 static FILE *ulps_file;         /* File to document difference.  */
215 static int output_ulps;         /* Should ulps printed?  */
216 static char *output_dir;        /* Directory where generated files will be written.  */
217
218 static int noErrors;    /* number of errors */
219 static int noTests;     /* number of tests (without testing exceptions) */
220 static int noExcTests;  /* number of tests for exception flags */
221 static int noXFails;    /* number of expected failures.  */
222 static int noXPasses;   /* number of unexpected passes.  */
223
224 static int verbose;
225 static int output_max_error;    /* Should the maximal errors printed?  */
226 static int output_points;       /* Should the single function results printed?  */
227 static int ignore_max_ulp;      /* Should we ignore max_ulp?  */
228
229 static FLOAT minus_zero, plus_zero;
230 static FLOAT plus_infty, minus_infty, qnan_value, max_value, min_value;
231 static FLOAT min_subnorm_value;
232
233 static FLOAT max_error, real_max_error, imag_max_error;
234
235
236 #define BUILD_COMPLEX(real, imag) \
237   ({ __complex__ FLOAT __retval;                                              \
238      __real__ __retval = (real);                                              \
239      __imag__ __retval = (imag);                                              \
240      __retval; })
241
242 #define BUILD_COMPLEX_INT(real, imag) \
243   ({ __complex__ int __retval;                                                \
244      __real__ __retval = (real);                                              \
245      __imag__ __retval = (imag);                                              \
246      __retval; })
247
248
249 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1),  \
250                          (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
251
252 static void
253 init_max_error (void)
254 {
255   max_error = 0;
256   real_max_error = 0;
257   imag_max_error = 0;
258   feclearexcept (FE_ALL_EXCEPT);
259 }
260
261 static void
262 set_max_error (FLOAT current, FLOAT *curr_max_error)
263 {
264   if (current > *curr_max_error)
265     *curr_max_error = current;
266 }
267
268
269 /* Print a FLOAT.  */
270 static void
271 print_float (FLOAT f)
272 {
273   /* As printf doesn't differ between a sNaN and a qNaN, do this manually.  */
274   if (issignaling (f))
275     printf ("sNaN\n");
276   else if (isnan (f))
277     printf ("qNaN\n");
278   else
279     printf ("% .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR "\n", f, f);
280 }
281
282 /* Should the message print to screen?  This depends on the verbose flag,
283    and the test status.  */
284 static int
285 print_screen (int ok, int xfail)
286 {
287   if (output_points
288       && (verbose > 1
289           || (verbose == 1 && ok == xfail)))
290     return 1;
291   return 0;
292 }
293
294
295 /* Should the message print to screen?  This depends on the verbose flag,
296    and the test status.  */
297 static int
298 print_screen_max_error (int ok, int xfail)
299 {
300   if (output_max_error
301       && (verbose > 1
302           || ((verbose == 1) && (ok == xfail))))
303     return 1;
304   return 0;
305 }
306
307 /* Update statistic counters.  */
308 static void
309 update_stats (int ok, int xfail)
310 {
311   ++noTests;
312   if (ok && xfail)
313     ++noXPasses;
314   else if (!ok && xfail)
315     ++noXFails;
316   else if (!ok && !xfail)
317     ++noErrors;
318 }
319
320 static void
321 print_ulps (const char *test_name, FLOAT ulp)
322 {
323   if (output_ulps)
324     {
325       fprintf (ulps_file, "Test \"%s\":\n", test_name);
326       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
327                CHOOSE("ldouble", "double", "float",
328                       "ildouble", "idouble", "ifloat"),
329                FUNC(ceil) (ulp));
330     }
331 }
332
333 static void
334 print_function_ulps (const char *function_name, FLOAT ulp)
335 {
336   if (output_ulps)
337     {
338       fprintf (ulps_file, "Function: \"%s\":\n", function_name);
339       fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
340                CHOOSE("ldouble", "double", "float",
341                       "ildouble", "idouble", "ifloat"),
342                FUNC(ceil) (ulp));
343     }
344 }
345
346
347 static void
348 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
349                              FLOAT imag_ulp)
350 {
351   if (output_ulps)
352     {
353       if (real_ulp != 0.0)
354         {
355           fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
356           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
357                    CHOOSE("ldouble", "double", "float",
358                           "ildouble", "idouble", "ifloat"),
359                    FUNC(ceil) (real_ulp));
360         }
361       if (imag_ulp != 0.0)
362         {
363           fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
364           fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
365                    CHOOSE("ldouble", "double", "float",
366                           "ildouble", "idouble", "ifloat"),
367                    FUNC(ceil) (imag_ulp));
368         }
369
370
371     }
372 }
373
374
375
376 /* Test if Floating-Point stack hasn't changed */
377 static void
378 fpstack_test (const char *test_name)
379 {
380 #if defined (__i386__) || defined (__x86_64__)
381   static int old_stack;
382   int sw;
383
384   asm ("fnstsw" : "=a" (sw));
385   sw >>= 11;
386   sw &= 7;
387
388   if (sw != old_stack)
389     {
390       printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
391               test_name, sw, old_stack);
392       ++noErrors;
393       old_stack = sw;
394     }
395 #endif
396 }
397
398
399 static void
400 print_max_error (const char *func_name, FLOAT allowed, int xfail)
401 {
402   int ok = 0;
403
404   if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
405     {
406       ok = 1;
407     }
408
409   if (!ok)
410     print_function_ulps (func_name, max_error);
411
412
413   if (print_screen_max_error (ok, xfail))
414     {
415       printf ("Maximal error of `%s'\n", func_name);
416       printf (" is      : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
417       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
418     }
419
420   update_stats (ok, xfail);
421 }
422
423
424 static void
425 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
426                          __complex__ int xfail)
427 {
428   int ok = 0;
429
430   if ((real_max_error == 0 && imag_max_error == 0)
431       || (real_max_error <= __real__ allowed
432           && imag_max_error <= __imag__ allowed
433           && !ignore_max_ulp))
434     {
435       ok = 1;
436     }
437
438   if (!ok)
439     print_complex_function_ulps (func_name, real_max_error, imag_max_error);
440
441
442   if (print_screen_max_error (ok, xfail))
443     {
444       printf ("Maximal error of real part of: %s\n", func_name);
445       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
446               FUNC(ceil) (real_max_error));
447       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
448               FUNC(ceil) (__real__ allowed));
449       printf ("Maximal error of imaginary part of: %s\n", func_name);
450       printf (" is      : %.0" PRINTF_NEXPR " ulp\n",
451               FUNC(ceil) (imag_max_error));
452       printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
453               FUNC(ceil) (__imag__ allowed));
454     }
455
456   update_stats (ok, xfail);
457 }
458
459
460 /* Test whether a given exception was raised.  */
461 static void
462 test_single_exception (const char *test_name,
463                        int exception,
464                        int exc_flag,
465                        int fe_flag,
466                        const char *flag_name)
467 {
468 #ifndef TEST_INLINE
469   int ok = 1;
470   if (exception & exc_flag)
471     {
472       if (fetestexcept (fe_flag))
473         {
474           if (print_screen (1, 0))
475             printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
476         }
477       else
478         {
479           ok = 0;
480           if (print_screen (0, 0))
481             printf ("Failure: %s: Exception \"%s\" not set\n",
482                     test_name, flag_name);
483         }
484     }
485   else
486     {
487       if (fetestexcept (fe_flag))
488         {
489           ok = 0;
490           if (print_screen (0, 0))
491             printf ("Failure: %s: Exception \"%s\" set\n",
492                     test_name, flag_name);
493         }
494       else
495         {
496           if (print_screen (1, 0))
497             printf ("%s: Exception \"%s\" not set\n", test_name,
498                     flag_name);
499         }
500     }
501   if (!ok)
502     ++noErrors;
503
504 #endif
505 }
506
507
508 /* Test whether exceptions given by EXCEPTION are raised.  Ignore thereby
509    allowed but not required exceptions.
510 */
511 static void
512 test_exceptions (const char *test_name, int exception)
513 {
514   ++noExcTests;
515 #ifdef FE_DIVBYZERO
516   if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
517     test_single_exception (test_name, exception,
518                            DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
519                            "Divide by zero");
520 #endif
521 #ifdef FE_INVALID
522   if ((exception & INVALID_EXCEPTION_OK) == 0)
523     test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
524                          "Invalid operation");
525 #endif
526 #ifdef FE_OVERFLOW
527   if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
528     test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
529                            FE_OVERFLOW, "Overflow");
530 #endif
531 #ifdef FE_UNDERFLOW
532   if ((exception & UNDERFLOW_EXCEPTION_OK) == 0)
533     test_single_exception (test_name, exception, UNDERFLOW_EXCEPTION,
534                            FE_UNDERFLOW, "Underflow");
535 #endif
536   feclearexcept (FE_ALL_EXCEPT);
537 }
538
539
540 static void
541 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
542                       FLOAT max_ulp, int xfail, int exceptions,
543                       FLOAT *curr_max_error)
544 {
545   int ok = 0;
546   int print_diff = 0;
547   FLOAT diff = 0;
548   FLOAT ulp = 0;
549
550   test_exceptions (test_name, exceptions);
551   if (issignaling (computed) && issignaling (expected))
552     ok = 1;
553   else if (issignaling (computed) || issignaling (expected))
554     ok = 0;
555   else if (isnan (computed) && isnan (expected))
556     ok = 1;
557   else if (isinf (computed) && isinf (expected))
558     {
559       /* Test for sign of infinities.  */
560       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
561           && signbit (computed) != signbit (expected))
562         {
563           ok = 0;
564           printf ("infinity has wrong sign.\n");
565         }
566       else
567         ok = 1;
568     }
569   /* Don't calculate ULPs for infinities or any kind of NaNs.  */
570   else if (isinf (computed) || isnan (computed)
571            || isinf (expected) || isnan (expected))
572     ok = 0;
573   else
574     {
575       diff = FUNC(fabs) (computed - expected);
576       switch (fpclassify (expected))
577         {
578         case FP_ZERO:
579           /* ilogb (0) isn't allowed. */
580           ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
581           break;
582         case FP_NORMAL:
583           ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
584           break;
585         case FP_SUBNORMAL:
586           /* 1ulp for a subnormal value, shifted by MANT_DIG, is the
587              least normal value.  */
588           ulp = (FUNC(ldexp) (diff, MANT_DIG) / min_value);
589           break;
590         default:
591           /* It should never happen. */
592           abort ();
593           break;
594         }
595       set_max_error (ulp, curr_max_error);
596       print_diff = 1;
597       if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
598           && computed == 0.0 && expected == 0.0
599           && signbit(computed) != signbit (expected))
600         ok = 0;
601       else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
602         ok = 1;
603       else
604         {
605           ok = 0;
606           print_ulps (test_name, ulp);
607         }
608
609     }
610   if (print_screen (ok, xfail))
611     {
612       if (!ok)
613         printf ("Failure: ");
614       printf ("Test: %s\n", test_name);
615       printf ("Result:\n");
616       printf (" is:         ");
617       print_float (computed);
618       printf (" should be:  ");
619       print_float (expected);
620       if (print_diff)
621         {
622           printf (" difference: % .20" PRINTF_EXPR "  % .20" PRINTF_XEXPR
623                   "\n", diff, diff);
624           printf (" ulp       : % .4" PRINTF_NEXPR "\n", ulp);
625           printf (" max.ulp   : % .4" PRINTF_NEXPR "\n", max_ulp);
626         }
627     }
628   update_stats (ok, xfail);
629
630   fpstack_test (test_name);
631 }
632
633
634 static void
635 check_float (const char *test_name, FLOAT computed, FLOAT expected,
636              FLOAT max_ulp, int xfail, int exceptions)
637 {
638   check_float_internal (test_name, computed, expected, max_ulp, xfail,
639                         exceptions, &max_error);
640 }
641
642
643 static void
644 check_complex (const char *test_name, __complex__ FLOAT computed,
645                __complex__ FLOAT expected,
646                __complex__ FLOAT max_ulp, __complex__ int xfail,
647                int exception)
648 {
649   FLOAT part_comp, part_exp, part_max_ulp;
650   int part_xfail;
651   char *str;
652
653   if (asprintf (&str, "Real part of: %s", test_name) == -1)
654     abort ();
655
656   part_comp = __real__ computed;
657   part_exp = __real__ expected;
658   part_max_ulp = __real__ max_ulp;
659   part_xfail = __real__ xfail;
660
661   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
662                         exception, &real_max_error);
663   free (str);
664
665   if (asprintf (&str, "Imaginary part of: %s", test_name) == -1)
666     abort ();
667
668   part_comp = __imag__ computed;
669   part_exp = __imag__ expected;
670   part_max_ulp = __imag__ max_ulp;
671   part_xfail = __imag__ xfail;
672
673   /* Don't check again for exceptions, just pass through the
674      zero/inf sign test.  */
675   check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
676                         exception & IGNORE_ZERO_INF_SIGN,
677                         &imag_max_error);
678   free (str);
679 }
680
681
682 /* Check that computed and expected values are equal (int values).  */
683 static void
684 check_int (const char *test_name, int computed, int expected, int max_ulp,
685            int xfail, int exceptions)
686 {
687   int diff = computed - expected;
688   int ok = 0;
689
690   test_exceptions (test_name, exceptions);
691   noTests++;
692   if (abs (diff) <= max_ulp)
693     ok = 1;
694
695   if (!ok)
696     print_ulps (test_name, diff);
697
698   if (print_screen (ok, xfail))
699     {
700       if (!ok)
701         printf ("Failure: ");
702       printf ("Test: %s\n", test_name);
703       printf ("Result:\n");
704       printf (" is:         %d\n", computed);
705       printf (" should be:  %d\n", expected);
706     }
707
708   update_stats (ok, xfail);
709   fpstack_test (test_name);
710 }
711
712
713 /* Check that computed and expected values are equal (long int values).  */
714 static void
715 check_long (const char *test_name, long int computed, long int expected,
716             long int max_ulp, int xfail, int exceptions)
717 {
718   long int diff = computed - expected;
719   int ok = 0;
720
721   test_exceptions (test_name, exceptions);
722   noTests++;
723   if (labs (diff) <= max_ulp)
724     ok = 1;
725
726   if (!ok)
727     print_ulps (test_name, diff);
728
729   if (print_screen (ok, xfail))
730     {
731       if (!ok)
732         printf ("Failure: ");
733       printf ("Test: %s\n", test_name);
734       printf ("Result:\n");
735       printf (" is:         %ld\n", computed);
736       printf (" should be:  %ld\n", expected);
737     }
738
739   update_stats (ok, xfail);
740   fpstack_test (test_name);
741 }
742
743
744 /* Check that computed value is true/false.  */
745 static void
746 check_bool (const char *test_name, int computed, int expected,
747             long int max_ulp, int xfail, int exceptions)
748 {
749   int ok = 0;
750
751   test_exceptions (test_name, exceptions);
752   noTests++;
753   if ((computed == 0) == (expected == 0))
754     ok = 1;
755
756   if (print_screen (ok, xfail))
757     {
758       if (!ok)
759         printf ("Failure: ");
760       printf ("Test: %s\n", test_name);
761       printf ("Result:\n");
762       printf (" is:         %d\n", computed);
763       printf (" should be:  %d\n", expected);
764     }
765
766   update_stats (ok, xfail);
767   fpstack_test (test_name);
768 }
769
770
771 /* check that computed and expected values are equal (long int values) */
772 static void
773 check_longlong (const char *test_name, long long int computed,
774                 long long int expected,
775                 long long int max_ulp, int xfail,
776                 int exceptions)
777 {
778   long long int diff = computed - expected;
779   int ok = 0;
780
781   test_exceptions (test_name, exceptions);
782   noTests++;
783   if (llabs (diff) <= max_ulp)
784     ok = 1;
785
786   if (!ok)
787     print_ulps (test_name, diff);
788
789   if (print_screen (ok, xfail))
790     {
791       if (!ok)
792         printf ("Failure:");
793       printf ("Test: %s\n", test_name);
794       printf ("Result:\n");
795       printf (" is:         %lld\n", computed);
796       printf (" should be:  %lld\n", expected);
797     }
798
799   update_stats (ok, xfail);
800   fpstack_test (test_name);
801 }
802
803
804
805 /* This is to prevent messages from the SVID libm emulation.  */
806 int
807 matherr (struct exception *x __attribute__ ((unused)))
808 {
809   return 1;
810 }
811
812
813 /****************************************************************************
814   Tests for single functions of libm.
815   Please keep them alphabetically sorted!
816 ****************************************************************************/
817
818 static void
819 acos_test (void)
820 {
821   errno = 0;
822   FUNC(acos) (0);
823   if (errno == ENOSYS)
824     /* Function not implemented.  */
825     return;
826
827   START (acos);
828
829   TEST_f_f (acos, plus_infty, qnan_value, INVALID_EXCEPTION);
830   TEST_f_f (acos, minus_infty, qnan_value, INVALID_EXCEPTION);
831   TEST_f_f (acos, qnan_value, qnan_value);
832
833   /* |x| > 1: */
834   TEST_f_f (acos, 1.125L, qnan_value, INVALID_EXCEPTION);
835   TEST_f_f (acos, -1.125L, qnan_value, INVALID_EXCEPTION);
836   TEST_f_f (acos, max_value, qnan_value, INVALID_EXCEPTION);
837   TEST_f_f (acos, -max_value, qnan_value, INVALID_EXCEPTION);
838
839   TEST_f_f (acos, 0, M_PI_2l);
840   TEST_f_f (acos, minus_zero, M_PI_2l);
841   TEST_f_f (acos, 1, 0);
842   TEST_f_f (acos, -1, M_PIl);
843   TEST_f_f (acos, 0.5, M_PI_6l*2.0);
844   TEST_f_f (acos, -0.5, M_PI_6l*4.0);
845   TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
846   TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
847   TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
848   TEST_f_f (acos, 0x0.ffffffp0L, 3.4526698471620358760324948263873649728491e-4L);
849   TEST_f_f (acos, -0x0.ffffffp0L, 3.1412473866050770348750401337968641476999L);
850 #ifndef TEST_FLOAT
851   TEST_f_f (acos, 0x0.ffffffff8p0L, 1.5258789062648029736620564947844627548516e-5L);
852   TEST_f_f (acos, -0x0.ffffffff8p0L, 3.1415773948007305904329067627145550395696L);
853   TEST_f_f (acos, 0x0.ffffffffffffp0L, 8.4293697021788088529885473244391795127130e-8L);
854   TEST_f_f (acos, -0x0.ffffffffffffp0L, 3.1415925692960962166745548533940296398054L);
855 #endif
856 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
857   TEST_f_f (acos, 0x0.ffffffffffffffffp0L, 3.2927225399135962333718255320079907245059e-10L);
858   TEST_f_f (acos, -0x0.ffffffffffffffffp0L, 3.1415926532605209844712837599423203309964L);
859 #endif
860   END (acos);
861 }
862
863
864 static void
865 acos_test_tonearest (void)
866 {
867   int save_round_mode;
868   errno = 0;
869   FUNC(acos) (0);
870   if (errno == ENOSYS)
871     /* Function not implemented.  */
872     return;
873
874   START (acos_tonearest);
875
876   save_round_mode = fegetround ();
877
878   if (!fesetround (FE_TONEAREST))
879     {
880       TEST_f_f (acos, 0, M_PI_2l);
881       TEST_f_f (acos, minus_zero, M_PI_2l);
882       TEST_f_f (acos, 1, 0);
883       TEST_f_f (acos, -1, M_PIl);
884       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
885       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
886     }
887
888   fesetround (save_round_mode);
889
890   END (acos_tonearest);
891 }
892
893
894 static void
895 acos_test_towardzero (void)
896 {
897   int save_round_mode;
898   errno = 0;
899   FUNC(acos) (0);
900   if (errno == ENOSYS)
901     /* Function not implemented.  */
902     return;
903
904   START (acos_towardzero);
905
906   save_round_mode = fegetround ();
907
908   if (!fesetround (FE_TOWARDZERO))
909     {
910       TEST_f_f (acos, 0, M_PI_2l);
911       TEST_f_f (acos, minus_zero, M_PI_2l);
912       TEST_f_f (acos, 1, 0);
913       TEST_f_f (acos, -1, M_PIl);
914       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
915       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
916     }
917
918   fesetround (save_round_mode);
919
920   END (acos_towardzero);
921 }
922
923
924 static void
925 acos_test_downward (void)
926 {
927   int save_round_mode;
928   errno = 0;
929   FUNC(acos) (0);
930   if (errno == ENOSYS)
931     /* Function not implemented.  */
932     return;
933
934   START (acos_downward);
935
936   save_round_mode = fegetround ();
937
938   if (!fesetround (FE_DOWNWARD))
939     {
940       TEST_f_f (acos, 0, M_PI_2l);
941       TEST_f_f (acos, minus_zero, M_PI_2l);
942       TEST_f_f (acos, 1, 0);
943       TEST_f_f (acos, -1, M_PIl);
944       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
945       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
946     }
947
948   fesetround (save_round_mode);
949
950   END (acos_downward);
951 }
952
953
954 static void
955 acos_test_upward (void)
956 {
957   int save_round_mode;
958   errno = 0;
959   FUNC(acos) (0);
960   if (errno == ENOSYS)
961     /* Function not implemented.  */
962     return;
963
964   START (acos_upward);
965
966   save_round_mode = fegetround ();
967
968   if (!fesetround (FE_UPWARD))
969     {
970       TEST_f_f (acos, 0, M_PI_2l);
971       TEST_f_f (acos, minus_zero, M_PI_2l);
972       TEST_f_f (acos, 1, 0);
973       TEST_f_f (acos, -1, M_PIl);
974       TEST_f_f (acos, 0.5, M_PI_6l*2.0);
975       TEST_f_f (acos, -0.5, M_PI_6l*4.0);
976     }
977
978   fesetround (save_round_mode);
979
980   END (acos_upward);
981 }
982
983 static void
984 acosh_test (void)
985 {
986   errno = 0;
987   FUNC(acosh) (7);
988   if (errno == ENOSYS)
989     /* Function not implemented.  */
990     return;
991
992   START (acosh);
993
994   TEST_f_f (acosh, plus_infty, plus_infty);
995   TEST_f_f (acosh, minus_infty, qnan_value, INVALID_EXCEPTION);
996   TEST_f_f (acosh, qnan_value, qnan_value);
997
998   /* x < 1:  */
999   TEST_f_f (acosh, -1.125L, qnan_value, INVALID_EXCEPTION);
1000   TEST_f_f (acosh, -max_value, qnan_value, INVALID_EXCEPTION);
1001
1002   TEST_f_f (acosh, 1, 0);
1003   TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
1004
1005   END (acosh);
1006 }
1007
1008 static void
1009 asin_test (void)
1010 {
1011   errno = 0;
1012   FUNC(asin) (0);
1013   if (errno == ENOSYS)
1014     /* Function not implemented.  */
1015     return;
1016
1017   START (asin);
1018
1019   TEST_f_f (asin, plus_infty, qnan_value, INVALID_EXCEPTION);
1020   TEST_f_f (asin, minus_infty, qnan_value, INVALID_EXCEPTION);
1021   TEST_f_f (asin, qnan_value, qnan_value);
1022
1023   /* asin x == qNaN plus invalid exception for |x| > 1.  */
1024   TEST_f_f (asin, 1.125L, qnan_value, INVALID_EXCEPTION);
1025   TEST_f_f (asin, -1.125L, qnan_value, INVALID_EXCEPTION);
1026   TEST_f_f (asin, max_value, qnan_value, INVALID_EXCEPTION);
1027   TEST_f_f (asin, -max_value, qnan_value, INVALID_EXCEPTION);
1028
1029   TEST_f_f (asin, 0, 0);
1030   TEST_f_f (asin, minus_zero, minus_zero);
1031   TEST_f_f (asin, 0.5, M_PI_6l);
1032   TEST_f_f (asin, -0.5, -M_PI_6l);
1033   TEST_f_f (asin, 1.0, M_PI_2l);
1034   TEST_f_f (asin, -1.0, -M_PI_2l);
1035   TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
1036   TEST_f_f (asin, 0x0.ffffffp0L, 1.5704510598101804156437184421571127056013L);
1037   TEST_f_f (asin, -0x0.ffffffp0L, -1.5704510598101804156437184421571127056013L);
1038 #ifndef TEST_FLOAT
1039   TEST_f_f (asin, 0x0.ffffffff8p0L, 1.5707810680058339712015850710748035974710L);
1040   TEST_f_f (asin, -0x0.ffffffff8p0L, -1.5707810680058339712015850710748035974710L);
1041   TEST_f_f (asin, 0x0.ffffffffffffp0L, 1.5707962425011995974432331617542781977068L);
1042   TEST_f_f (asin, -0x0.ffffffffffffp0L, -1.5707962425011995974432331617542781977068L);
1043 #endif
1044 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1045   TEST_f_f (asin, 0x0.ffffffffffffffffp0L, 1.5707963264656243652399620683025688888978L);
1046   TEST_f_f (asin, -0x0.ffffffffffffffffp0L, -1.5707963264656243652399620683025688888978L);
1047 #endif
1048
1049   END (asin);
1050 }
1051
1052
1053 static void
1054 asin_test_tonearest (void)
1055 {
1056   int save_round_mode;
1057   errno = 0;
1058   FUNC(asin) (0);
1059   if (errno == ENOSYS)
1060     /* Function not implemented.  */
1061     return;
1062
1063   START (asin_tonearest);
1064
1065   save_round_mode = fegetround ();
1066
1067   if (!fesetround (FE_TONEAREST))
1068     {
1069       TEST_f_f (asin, 0, 0);
1070       TEST_f_f (asin, minus_zero, minus_zero);
1071       TEST_f_f (asin, 0.5, M_PI_6l);
1072       TEST_f_f (asin, -0.5, -M_PI_6l);
1073       TEST_f_f (asin, 1.0, M_PI_2l);
1074       TEST_f_f (asin, -1.0, -M_PI_2l);
1075     }
1076
1077   fesetround (save_round_mode);
1078
1079   END (asin_tonearest);
1080 }
1081
1082
1083 static void
1084 asin_test_towardzero (void)
1085 {
1086   int save_round_mode;
1087   errno = 0;
1088   FUNC(asin) (0);
1089   if (errno == ENOSYS)
1090     /* Function not implemented.  */
1091     return;
1092
1093   START (asin_towardzero);
1094
1095   save_round_mode = fegetround ();
1096
1097   if (!fesetround (FE_TOWARDZERO))
1098     {
1099       TEST_f_f (asin, 0, 0);
1100       TEST_f_f (asin, minus_zero, minus_zero);
1101       TEST_f_f (asin, 0.5, M_PI_6l);
1102       TEST_f_f (asin, -0.5, -M_PI_6l);
1103       TEST_f_f (asin, 1.0, M_PI_2l);
1104       TEST_f_f (asin, -1.0, -M_PI_2l);
1105     }
1106
1107   fesetround (save_round_mode);
1108
1109   END (asin_towardzero);
1110 }
1111
1112
1113 static void
1114 asin_test_downward (void)
1115 {
1116   int save_round_mode;
1117   errno = 0;
1118   FUNC(asin) (0);
1119   if (errno == ENOSYS)
1120     /* Function not implemented.  */
1121     return;
1122
1123   START (asin_downward);
1124
1125   save_round_mode = fegetround ();
1126
1127   if (!fesetround (FE_DOWNWARD))
1128     {
1129       TEST_f_f (asin, 0, 0);
1130       TEST_f_f (asin, minus_zero, minus_zero);
1131       TEST_f_f (asin, 0.5, M_PI_6l);
1132       TEST_f_f (asin, -0.5, -M_PI_6l);
1133       TEST_f_f (asin, 1.0, M_PI_2l);
1134       TEST_f_f (asin, -1.0, -M_PI_2l);
1135     }
1136
1137   fesetround (save_round_mode);
1138
1139   END (asin_downward);
1140 }
1141
1142
1143 static void
1144 asin_test_upward (void)
1145 {
1146   int save_round_mode;
1147   errno = 0;
1148   FUNC(asin) (0);
1149   if (errno == ENOSYS)
1150     /* Function not implemented.  */
1151     return;
1152
1153   START (asin_upward);
1154
1155   save_round_mode = fegetround ();
1156
1157   if (!fesetround (FE_UPWARD))
1158     {
1159       TEST_f_f (asin, 0, 0);
1160       TEST_f_f (asin, minus_zero, minus_zero);
1161       TEST_f_f (asin, 0.5, M_PI_6l);
1162       TEST_f_f (asin, -0.5, -M_PI_6l);
1163       TEST_f_f (asin, 1.0, M_PI_2l);
1164       TEST_f_f (asin, -1.0, -M_PI_2l);
1165     }
1166
1167   fesetround (save_round_mode);
1168
1169   END (asin_upward);
1170 }
1171
1172 static void
1173 asinh_test (void)
1174 {
1175   errno = 0;
1176   FUNC(asinh) (0.7L);
1177   if (errno == ENOSYS)
1178     /* Function not implemented.  */
1179     return;
1180
1181   START (asinh);
1182
1183   TEST_f_f (asinh, 0, 0);
1184   TEST_f_f (asinh, minus_zero, minus_zero);
1185 #ifndef TEST_INLINE
1186   TEST_f_f (asinh, plus_infty, plus_infty);
1187   TEST_f_f (asinh, minus_infty, minus_infty);
1188 #endif
1189   TEST_f_f (asinh, qnan_value, qnan_value);
1190   TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
1191
1192   END (asinh);
1193 }
1194
1195 static void
1196 atan_test (void)
1197 {
1198   errno = 0;
1199   FUNC(atan) (0);
1200   if (errno == ENOSYS)
1201     /* Function not implemented.  */
1202     return;
1203
1204   START (atan);
1205
1206   TEST_f_f (atan, 0, 0);
1207   TEST_f_f (atan, minus_zero, minus_zero);
1208
1209   TEST_f_f (atan, plus_infty, M_PI_2l);
1210   TEST_f_f (atan, minus_infty, -M_PI_2l);
1211   TEST_f_f (atan, qnan_value, qnan_value);
1212   TEST_f_f (atan, max_value, M_PI_2l);
1213   TEST_f_f (atan, -max_value, -M_PI_2l);
1214
1215   TEST_f_f (atan, 1, M_PI_4l);
1216   TEST_f_f (atan, -1, -M_PI_4l);
1217
1218   TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
1219
1220   TEST_f_f (atan, 0x1p-100L, 0x1p-100L);
1221 #ifndef TEST_FLOAT
1222   TEST_f_f (atan, 0x1p-600L, 0x1p-600L);
1223 #endif
1224 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1225   TEST_f_f (atan, 0x1p-10000L, 0x1p-10000L);
1226 #endif
1227
1228   END (atan);
1229 }
1230
1231
1232
1233 static void
1234 atanh_test (void)
1235 {
1236   errno = 0;
1237   FUNC(atanh) (0.7L);
1238   if (errno == ENOSYS)
1239     /* Function not implemented.  */
1240     return;
1241
1242   START (atanh);
1243
1244
1245   TEST_f_f (atanh, 0, 0);
1246   TEST_f_f (atanh, minus_zero, minus_zero);
1247
1248   TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1249   TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
1250   TEST_f_f (atanh, qnan_value, qnan_value);
1251
1252   /* atanh (x) == qNaN plus invalid exception if |x| > 1.  */
1253   TEST_f_f (atanh, 1.125L, qnan_value, INVALID_EXCEPTION);
1254   TEST_f_f (atanh, -1.125L, qnan_value, INVALID_EXCEPTION);
1255   TEST_f_f (atanh, max_value, qnan_value, INVALID_EXCEPTION);
1256   TEST_f_f (atanh, -max_value, qnan_value, INVALID_EXCEPTION);
1257
1258   TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
1259
1260   END (atanh);
1261 }
1262
1263 static void
1264 atan2_test (void)
1265 {
1266   errno = 0;
1267   FUNC(atan2) (-0, 1);
1268   if (errno == ENOSYS)
1269     /* Function not implemented.  */
1270     return;
1271
1272   START (atan2);
1273
1274   /* atan2 (0,x) == 0 for x > 0.  */
1275   TEST_ff_f (atan2, 0, 1, 0);
1276
1277   /* atan2 (-0,x) == -0 for x > 0.  */
1278   TEST_ff_f (atan2, minus_zero, 1, minus_zero);
1279
1280   TEST_ff_f (atan2, 0, 0, 0);
1281   TEST_ff_f (atan2, minus_zero, 0, minus_zero);
1282
1283   /* atan2 (+0,x) == +pi for x < 0.  */
1284   TEST_ff_f (atan2, 0, -1, M_PIl);
1285
1286   /* atan2 (-0,x) == -pi for x < 0.  */
1287   TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
1288
1289   TEST_ff_f (atan2, 0, minus_zero, M_PIl);
1290   TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
1291
1292   /* atan2 (y,+0) == pi/2 for y > 0.  */
1293   TEST_ff_f (atan2, 1, 0, M_PI_2l);
1294
1295   /* atan2 (y,-0) == pi/2 for y > 0.  */
1296   TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
1297
1298   /* atan2 (y,+0) == -pi/2 for y < 0.  */
1299   TEST_ff_f (atan2, -1, 0, -M_PI_2l);
1300
1301   /* atan2 (y,-0) == -pi/2 for y < 0.  */
1302   TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
1303
1304   /* atan2 (y,inf) == +0 for finite y > 0.  */
1305   TEST_ff_f (atan2, 1, plus_infty, 0);
1306
1307   /* atan2 (y,inf) == -0 for finite y < 0.  */
1308   TEST_ff_f (atan2, -1, plus_infty, minus_zero);
1309
1310   /* atan2(+inf, x) == pi/2 for finite x.  */
1311   TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
1312
1313   /* atan2(-inf, x) == -pi/2 for finite x.  */
1314   TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
1315
1316   /* atan2 (y,-inf) == +pi for finite y > 0.  */
1317   TEST_ff_f (atan2, 1, minus_infty, M_PIl);
1318
1319   /* atan2 (y,-inf) == -pi for finite y < 0.  */
1320   TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
1321
1322   TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
1323   TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
1324   TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
1325   TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
1326   TEST_ff_f (atan2, qnan_value, qnan_value, qnan_value);
1327
1328   TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
1329
1330   TEST_ff_f (atan2, max_value, min_value, M_PI_2l);
1331   TEST_ff_f (atan2, -max_value, -min_value, -M_PI_2l);
1332
1333   TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
1334   TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
1335   TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
1336   TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
1337   TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
1338   TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
1339
1340   TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
1341 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1342   TEST_ff_f (atan2, 0x1.00000000000001p0L, 0x1.00000000000001p0L, M_PI_4l);
1343 #endif
1344
1345   END (atan2);
1346 }
1347
1348 static void
1349 cabs_test (void)
1350 {
1351   errno = 0;
1352   FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
1353   if (errno == ENOSYS)
1354     /* Function not implemented.  */
1355     return;
1356
1357   START (cabs);
1358
1359   /* cabs (x + iy) is specified as hypot (x,y) */
1360
1361   /* cabs (+inf + i x) == +inf.  */
1362   TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
1363   /* cabs (-inf + i x) == +inf.  */
1364   TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
1365
1366   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1367   TEST_c_f (cabs, minus_infty, qnan_value, plus_infty);
1368
1369   TEST_c_f (cabs, qnan_value, qnan_value, qnan_value);
1370
1371   /* cabs (x,y) == cabs (y,x).  */
1372   TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1373   /* cabs (x,y) == cabs (-x,y).  */
1374   TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1375   /* cabs (x,y) == cabs (-y,x).  */
1376   TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1377   /* cabs (x,y) == cabs (-x,-y).  */
1378   TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1379   /* cabs (x,y) == cabs (-y,-x).  */
1380   TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1381   /* cabs (x,0) == fabs (x).  */
1382   TEST_c_f (cabs, -0.75L, 0, 0.75L);
1383   TEST_c_f (cabs, 0.75L, 0, 0.75L);
1384   TEST_c_f (cabs, -1.0L, 0, 1.0L);
1385   TEST_c_f (cabs, 1.0L, 0, 1.0L);
1386   TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1387   TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1388
1389   TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1390
1391   END (cabs);
1392 }
1393
1394
1395 static void
1396 cacos_test (void)
1397 {
1398   errno = 0;
1399   FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1400   if (errno == ENOSYS)
1401     /* Function not implemented.  */
1402     return;
1403
1404   START (cacos);
1405
1406
1407   TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1408   TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1409   TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1410   TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1411
1412   TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1413   TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1414
1415   TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1416   TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1417
1418   TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1419   TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1420   TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1421   TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1422   TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1423   TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1424
1425   TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1426   TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1427   TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1428   TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1429
1430   TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1431   TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1432   TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1433   TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1434
1435   TEST_c_c (cacos, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1436   TEST_c_c (cacos, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1437
1438   TEST_c_c (cacos, 0, qnan_value, M_PI_2l, qnan_value);
1439   TEST_c_c (cacos, minus_zero, qnan_value, M_PI_2l, qnan_value);
1440
1441   TEST_c_c (cacos, qnan_value, plus_infty, qnan_value, minus_infty);
1442   TEST_c_c (cacos, qnan_value, minus_infty, qnan_value, plus_infty);
1443
1444   TEST_c_c (cacos, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1445   TEST_c_c (cacos, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1446
1447   TEST_c_c (cacos, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1448   TEST_c_c (cacos, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
1449
1450   TEST_c_c (cacos, qnan_value, qnan_value, qnan_value, qnan_value);
1451
1452   TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1453   TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1454   TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1455   TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1456   TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1457   TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1458   TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1459   TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1460   TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1461   TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1462   TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1463   TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1464
1465   TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1466   TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1467   TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1468   TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1469   TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1470   TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1471   TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1472   TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1473   TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1474   TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1475   TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1476   TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1477
1478   TEST_c_c (cacos, 0x1p50L, 1.0L, 8.881784197001252323389053344727730248720e-16L, -3.535050620855721078027883819436720218708e1L);
1479   TEST_c_c (cacos, 0x1p50L, -1.0L, 8.881784197001252323389053344727730248720e-16L, 3.535050620855721078027883819436720218708e1L);
1480   TEST_c_c (cacos, -0x1p50L, 1.0L, 3.141592653589792350284223683154270545292L, -3.535050620855721078027883819436720218708e1L);
1481   TEST_c_c (cacos, -0x1p50L, -1.0L, 3.141592653589792350284223683154270545292L, 3.535050620855721078027883819436720218708e1L);
1482   TEST_c_c (cacos, 1.0L, 0x1p50L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436759661753e1L);
1483   TEST_c_c (cacos, -1.0L, 0x1p50L, 1.570796326794897507409741391764983781004L, -3.535050620855721078027883819436759661753e1L);
1484   TEST_c_c (cacos, 1.0L, -0x1p50L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436759661753e1L);
1485   TEST_c_c (cacos, -1.0L, -0x1p50L, 1.570796326794897507409741391764983781004L, 3.535050620855721078027883819436759661753e1L);
1486 #ifndef TEST_FLOAT
1487   TEST_c_c (cacos, 0x1p500L, 1.0L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
1488   TEST_c_c (cacos, 0x1p500L, -1.0L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
1489   TEST_c_c (cacos, -0x1p500L, 1.0L, 3.141592653589793238462643383279502884197L, -3.472667374605326000180332928505464606058e2L);
1490   TEST_c_c (cacos, -0x1p500L, -1.0L, 3.141592653589793238462643383279502884197L, 3.472667374605326000180332928505464606058e2L);
1491   TEST_c_c (cacos, 1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1492   TEST_c_c (cacos, -1.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
1493   TEST_c_c (cacos, 1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1494   TEST_c_c (cacos, -1.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
1495 #endif
1496 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1497   TEST_c_c (cacos, 0x1p5000L, 1.0L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
1498   TEST_c_c (cacos, 0x1p5000L, -1.0L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
1499   TEST_c_c (cacos, -0x1p5000L, 1.0L, 3.141592653589793238462643383279502884197L, -3.466429049980286492395577839412341016946e3L);
1500   TEST_c_c (cacos, -0x1p5000L, -1.0L, 3.141592653589793238462643383279502884197L, 3.466429049980286492395577839412341016946e3L);
1501   TEST_c_c (cacos, 1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1502   TEST_c_c (cacos, -1.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
1503   TEST_c_c (cacos, 1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1504   TEST_c_c (cacos, -1.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
1505 #endif
1506
1507   TEST_c_c (cacos, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, -8.973081118419833726837456344608533993585e1L);
1508 #ifndef TEST_FLOAT
1509   TEST_c_c (cacos, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, -7.107906849659093345062145442726115449315e2L);
1510 #endif
1511 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1512   TEST_c_c (cacos, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, -1.135753137836666928715489992987020363057e4L);
1513 #endif
1514
1515   TEST_c_c (cacos, 0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442097L, -1.194763217287109304111930828519090523536L);
1516   TEST_c_c (cacos, 0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442097L, 1.194763217287109304111930828519090523536L);
1517   TEST_c_c (cacos, -0x1.fp-129L, 1.5L, 1.570796326794896619231321691639751442100L, -1.194763217287109304111930828519090523536L);
1518   TEST_c_c (cacos, -0x1.fp-129L, -1.5L, 1.570796326794896619231321691639751442100L, 1.194763217287109304111930828519090523536L);
1519   TEST_c_c (cacos, 1.5L, 0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1520   TEST_c_c (cacos, -1.5L, 0x1.fp-129L, 3.141592653589793238462643383279502884195L, -9.624236501192068949955178268487368462704e-1L);
1521   TEST_c_c (cacos, 1.5L, -0x1.fp-129L, 2.546345110742945032959687790021055102355e-39L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_FLOAT);
1522   TEST_c_c (cacos, -1.5L, -0x1.fp-129L, 3.141592653589793238462643383279502884195L, 9.624236501192068949955178268487368462704e-1L);
1523 #ifndef TEST_FLOAT
1524   TEST_c_c (cacos, 0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1525   TEST_c_c (cacos, 0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1526   TEST_c_c (cacos, -0x1.fp-1025L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1527   TEST_c_c (cacos, -0x1.fp-1025L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1528   TEST_c_c (cacos, 1.5L, 0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1529   TEST_c_c (cacos, -1.5L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1530   TEST_c_c (cacos, 1.5L, -0x1.fp-1025L, 4.819934639999230680322935210539402497827e-309L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
1531   TEST_c_c (cacos, -1.5L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1532 #endif
1533 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1534   TEST_c_c (cacos, 0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1535   TEST_c_c (cacos, 0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1536   TEST_c_c (cacos, -0x1.fp-16385L, 1.5L, 1.570796326794896619231321691639751442099L, -1.194763217287109304111930828519090523536L);
1537   TEST_c_c (cacos, -0x1.fp-16385L, -1.5L, 1.570796326794896619231321691639751442099L, 1.194763217287109304111930828519090523536L);
1538   TEST_c_c (cacos, 1.5L, 0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, -9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1539   TEST_c_c (cacos, -1.5L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.624236501192068949955178268487368462704e-1L);
1540   TEST_c_c (cacos, 1.5L, -0x1.fp-16385L, 7.282957076134209141226696333885150260319e-4933L, 9.624236501192068949955178268487368462704e-1L, UNDERFLOW_EXCEPTION);
1541   TEST_c_c (cacos, -1.5L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.624236501192068949955178268487368462704e-1L);
1542 #endif
1543
1544   TEST_c_c (cacos, 0.5L, 1.0L, 1.221357263937683325603909865564381489366L, -9.261330313501824245501244453057873152694e-1L);
1545   TEST_c_c (cacos, 0.5L, -1.0L, 1.221357263937683325603909865564381489366L, 9.261330313501824245501244453057873152694e-1L);
1546   TEST_c_c (cacos, -0.5L, 1.0L, 1.920235389652109912858733517715121394831L, -9.261330313501824245501244453057873152694e-1L);
1547   TEST_c_c (cacos, -0.5L, -1.0L, 1.920235389652109912858733517715121394831L, 9.261330313501824245501244453057873152694e-1L);
1548   TEST_c_c (cacos, 1.0L, 0.5L, 6.748888455860063801646649673121744318756e-1L, -7.328576759736452608886724437653071523305e-1L);
1549   TEST_c_c (cacos, -1.0L, 0.5L, 2.466703808003786858297978415967328452322L, -7.328576759736452608886724437653071523305e-1L);
1550   TEST_c_c (cacos, 1.0L, -0.5L, 6.748888455860063801646649673121744318756e-1L, 7.328576759736452608886724437653071523305e-1L);
1551   TEST_c_c (cacos, -1.0L, -0.5L, 2.466703808003786858297978415967328452322L, 7.328576759736452608886724437653071523305e-1L);
1552   TEST_c_c (cacos, 0.25L, 1.0L, 1.394493894017929688812643125003661339452L, -8.924633639033482359562124741744951972772e-1L);
1553   TEST_c_c (cacos, 0.25L, -1.0L, 1.394493894017929688812643125003661339452L, 8.924633639033482359562124741744951972772e-1L);
1554   TEST_c_c (cacos, -0.25L, 1.0L, 1.747098759571863549650000258275841544745L, -8.924633639033482359562124741744951972772e-1L);
1555   TEST_c_c (cacos, -0.25L, -1.0L, 1.747098759571863549650000258275841544745L, 8.924633639033482359562124741744951972772e-1L);
1556   TEST_c_c (cacos, 1.0L, 0.25L, 4.890443302710802929202843732146540079124e-1L, -5.097911466811016354623559941115413499164e-1L);
1557   TEST_c_c (cacos, -1.0L, 0.25L, 2.652548323318712945542359010064848876285L, -5.097911466811016354623559941115413499164e-1L);
1558   TEST_c_c (cacos, 1.0L, -0.25L, 4.890443302710802929202843732146540079124e-1L, 5.097911466811016354623559941115413499164e-1L);
1559   TEST_c_c (cacos, -1.0L, -0.25L, 2.652548323318712945542359010064848876285L, 5.097911466811016354623559941115413499164e-1L);
1560   TEST_c_c (cacos, 0x1.fp-10L, 1.0L, 1.569458417435338878318763342108699202986L, -8.813742198809567991336704287826445879025e-1L);
1561   TEST_c_c (cacos, 0x1.fp-10L, -1.0L, 1.569458417435338878318763342108699202986L, 8.813742198809567991336704287826445879025e-1L);
1562   TEST_c_c (cacos, -0x1.fp-10L, 1.0L, 1.572134236154454360143880041170803681211L, -8.813742198809567991336704287826445879025e-1L);
1563   TEST_c_c (cacos, -0x1.fp-10L, -1.0L, 1.572134236154454360143880041170803681211L, 8.813742198809567991336704287826445879025e-1L);
1564   TEST_c_c (cacos, 1.0L, 0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, -4.350501469856803800217957402220976497152e-2L);
1565   TEST_c_c (cacos, -1.0L, 0x1.fp-10L, 3.098101355958774410750062883737683164607L, -4.350501469856803800217957402220976497152e-2L);
1566   TEST_c_c (cacos, 1.0L, -0x1.fp-10L, 4.349129763101882771258049954181971959031e-2L, 4.350501469856803800217957402220976497152e-2L);
1567   TEST_c_c (cacos, -1.0L, -0x1.fp-10L, 3.098101355958774410750062883737683164607L, 4.350501469856803800217957402220976497152e-2L);
1568   TEST_c_c (cacos, 0x1.fp-30L, 1.0L, 1.570796325518966635014803151387033957091L, -8.813735870195430258081932989769495326854e-1L);
1569   TEST_c_c (cacos, 0x1.fp-30L, -1.0L, 1.570796325518966635014803151387033957091L, 8.813735870195430258081932989769495326854e-1L);
1570   TEST_c_c (cacos, -0x1.fp-30L, 1.0L, 1.570796328070826603447840231892468927106L, -8.813735870195430258081932989769495326854e-1L);
1571   TEST_c_c (cacos, -0x1.fp-30L, -1.0L, 1.570796328070826603447840231892468927106L, 8.813735870195430258081932989769495326854e-1L);
1572   TEST_c_c (cacos, 1.0L, 0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, -4.247867098745151888768727039216644758847e-5L);
1573   TEST_c_c (cacos, -1.0L, 0x1.fp-30L, 3.141550174918818561961484385371624132331L, -4.247867098745151888768727039216644758847e-5L);
1574   TEST_c_c (cacos, 1.0L, -0x1.fp-30L, 4.247867097467650115899790787875186617316e-5L, 4.247867098745151888768727039216644758847e-5L);
1575   TEST_c_c (cacos, -1.0L, -0x1.fp-30L, 3.141550174918818561961484385371624132331L, 4.247867098745151888768727039216644758847e-5L);
1576   TEST_c_c (cacos, 0x1.fp-100L, 1.0L, 1.570796326794896619231321691638670687364L, -8.813735870195430252326093249797923090282e-1L);
1577   TEST_c_c (cacos, 0x1.fp-100L, -1.0L, 1.570796326794896619231321691638670687364L, 8.813735870195430252326093249797923090282e-1L);
1578   TEST_c_c (cacos, -0x1.fp-100L, 1.0L, 1.570796326794896619231321691640832196834L, -8.813735870195430252326093249797923090282e-1L);
1579   TEST_c_c (cacos, -0x1.fp-100L, -1.0L, 1.570796326794896619231321691640832196834L, 8.813735870195430252326093249797923090282e-1L);
1580   TEST_c_c (cacos, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, -1.236292038260260888664514866457202186027e-15L);
1581   TEST_c_c (cacos, -1.0L, 0x1.fp-100L, 3.141592653589792002170605123018614219682L, -1.236292038260260888664514866457202186027e-15L);
1582   TEST_c_c (cacos, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866456887257525e-15L, 1.236292038260260888664514866457202186027e-15L);
1583   TEST_c_c (cacos, -1.0L, -0x1.fp-100L, 3.141592653589792002170605123018614219682L, 1.236292038260260888664514866457202186027e-15L);
1584   TEST_c_c (cacos, 0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442097L, -8.813735870195430252326093249797923090282e-1L);
1585   TEST_c_c (cacos, 0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442097L, 8.813735870195430252326093249797923090282e-1L);
1586   TEST_c_c (cacos, -0x1.fp-129L, 1.0L, 1.570796326794896619231321691639751442101L, -8.813735870195430252326093249797923090282e-1L);
1587   TEST_c_c (cacos, -0x1.fp-129L, -1.0L, 1.570796326794896619231321691639751442101L, 8.813735870195430252326093249797923090282e-1L);
1588   TEST_c_c (cacos, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, -5.335635276982233498398987585285818977933e-20L);
1589   TEST_c_c (cacos, -1.0L, 0x1.fp-129L, 3.141592653589793238409287030509680549213L, -5.335635276982233498398987585285818977933e-20L);
1590   TEST_c_c (cacos, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977930e-20L, 5.335635276982233498398987585285818977933e-20L);
1591   TEST_c_c (cacos, -1.0L, -0x1.fp-129L, 3.141592653589793238409287030509680549213L, 5.335635276982233498398987585285818977933e-20L);
1592 #ifndef TEST_FLOAT
1593   TEST_c_c (cacos, 0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1594   TEST_c_c (cacos, 0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1595   TEST_c_c (cacos, -0x1.fp-1000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1596   TEST_c_c (cacos, -0x1.fp-1000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1597   TEST_c_c (cacos, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
1598   TEST_c_c (cacos, -1.0L, 0x1.fp-1000L, 3.141592653589793238462643383279502884197L, -4.252291453851660175550490409247739011867e-151L);
1599   TEST_c_c (cacos, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
1600   TEST_c_c (cacos, -1.0L, -0x1.fp-1000L, 3.141592653589793238462643383279502884197L, 4.252291453851660175550490409247739011867e-151L);
1601   TEST_c_c (cacos, 0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1602   TEST_c_c (cacos, 0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1603   TEST_c_c (cacos, -0x1.fp-1025L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1604   TEST_c_c (cacos, -0x1.fp-1025L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1605   TEST_c_c (cacos, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
1606   TEST_c_c (cacos, -1.0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -7.340879205566679497036857179189356754017e-155L);
1607   TEST_c_c (cacos, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
1608   TEST_c_c (cacos, -1.0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 7.340879205566679497036857179189356754017e-155L);
1609 #endif
1610 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1611   TEST_c_c (cacos, 0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1612   TEST_c_c (cacos, 0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1613   TEST_c_c (cacos, -0x1.fp-10000L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1614   TEST_c_c (cacos, -0x1.fp-10000L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1615   TEST_c_c (cacos, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
1616   TEST_c_c (cacos, -1.0L, 0x1.fp-10000L, 3.141592653589793238462643383279502884197L, -9.854680208706673586644342922051388714633e-1506L);
1617   TEST_c_c (cacos, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
1618   TEST_c_c (cacos, -1.0L, -0x1.fp-10000L, 3.141592653589793238462643383279502884197L, 9.854680208706673586644342922051388714633e-1506L);
1619   TEST_c_c (cacos, 0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1620   TEST_c_c (cacos, 0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1621   TEST_c_c (cacos, -0x1.fp-16385L, 1.0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797923090282e-1L);
1622   TEST_c_c (cacos, -0x1.fp-16385L, -1.0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797923090282e-1L);
1623   TEST_c_c (cacos, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
1624   TEST_c_c (cacos, -1.0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -9.023632056840860275214893047597614177639e-2467L);
1625   TEST_c_c (cacos, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
1626   TEST_c_c (cacos, -1.0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 9.023632056840860275214893047597614177639e-2467L);
1627 #endif
1628
1629   TEST_c_c (cacos, 0x1p-23L, 0x1.000002p0L, 1.570796242501204621739026081991856762292L, -8.813736713132400470205730751186547909968e-1L)
1630   TEST_c_c (cacos, 0x1p-23L, -0x1.000002p0L, 1.570796242501204621739026081991856762292L, 8.813736713132400470205730751186547909968e-1L)
1631   TEST_c_c (cacos, -0x1p-23L, 0x1.000002p0L, 1.570796411088588616723617301287646121905L, -8.813736713132400470205730751186547909968e-1L)
1632   TEST_c_c (cacos, -0x1p-23L, -0x1.000002p0L, 1.570796411088588616723617301287646121905L, 8.813736713132400470205730751186547909968e-1L)
1633   TEST_c_c (cacos, 0x1.000002p0L, 0x1p-23L, 2.222118384408546368406374049167636760903e-4L, -5.364668491573609633134147164031476452679e-4L)
1634   TEST_c_c (cacos, -0x1.000002p0L, 0x1p-23L, 3.141370441751352383825802745874586120521L, -5.364668491573609633134147164031476452679e-4L)
1635   TEST_c_c (cacos, 0x1.000002p0L, -0x1p-23L, 2.222118384408546368406374049167636760903e-4L, 5.364668491573609633134147164031476452679e-4L)
1636   TEST_c_c (cacos, -0x1.000002p0L, -0x1p-23L, 3.141370441751352383825802745874586120521L, 5.364668491573609633134147164031476452679e-4L)
1637   TEST_c_c (cacos, 0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442097L, -8.813736713132375348727889167749389235161e-1L)
1638   TEST_c_c (cacos, 0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442097L, 8.813736713132375348727889167749389235161e-1L)
1639   TEST_c_c (cacos, -0x1.fp-129L, 0x1.000002p0L, 1.570796326794896619231321691639751442101L, -8.813736713132375348727889167749389235161e-1L)
1640   TEST_c_c (cacos, -0x1.fp-129L, -0x1.000002p0L, 1.570796326794896619231321691639751442101L, 8.813736713132375348727889167749389235161e-1L)
1641   TEST_c_c (cacos, 0x1.000002p0L, 0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, -4.882812451493617206486388134172712975070e-4L)
1642   TEST_c_c (cacos, -0x1.000002p0L, 0x1.fp-129L, 3.141592653589793238462643383279502878367L, -4.882812451493617206486388134172712975070e-4L)
1643   TEST_c_c (cacos, 0x1.000002p0L, -0x1.fp-129L, 5.830451806317544230969669308596361881467e-36L, 4.882812451493617206486388134172712975070e-4L)
1644   TEST_c_c (cacos, -0x1.000002p0L, -0x1.fp-129L, 3.141592653589793238462643383279502878367L, 4.882812451493617206486388134172712975070e-4L)
1645   TEST_c_c (cacos, 0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L)
1646   TEST_c_c (cacos, 0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L)
1647   TEST_c_c (cacos, -0.0L, 0x1.000002p0L, 1.570796326794896619231321691639751442099L, -8.813736713132375348727889167749389235161e-1L)
1648   TEST_c_c (cacos, -0.0L, -0x1.000002p0L, 1.570796326794896619231321691639751442099L, 8.813736713132375348727889167749389235161e-1L)
1649   TEST_c_c (cacos, 0x1.000002p0L, 0.0L, 0.0L, -4.882812451493617206486388134172712975070e-4L)
1650   TEST_c_c (cacos, -0x1.000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.882812451493617206486388134172712975070e-4L)
1651   TEST_c_c (cacos, 0x1.000002p0L, -0.0L, 0.0L, 4.882812451493617206486388134172712975070e-4L)
1652   TEST_c_c (cacos, -0x1.000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.882812451493617206486388134172712975070e-4L)
1653 #ifndef TEST_FLOAT
1654   TEST_c_c (cacos, 0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, -8.813735870195431822418551933572982483664e-1L)
1655   TEST_c_c (cacos, 0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896462222075823262262934288L, 8.813735870195431822418551933572982483664e-1L)
1656   TEST_c_c (cacos, -0x1p-52L, 0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, -8.813735870195431822418551933572982483664e-1L)
1657   TEST_c_c (cacos, -0x1p-52L, -0x1.0000000000001p0L, 1.570796326794896776240567560017239949909L, 8.813735870195431822418551933572982483664e-1L)
1658   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1p-52L, 9.590301705980041385828904092662391018164e-9L, -2.315303644582684770975188768022139415020e-8L)
1659   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1p-52L, 3.141592643999491532482601997450598791535L, -2.315303644582684770975188768022139415020e-8L)
1660   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1p-52L, 9.590301705980041385828904092662391018164e-9L, 2.315303644582684770975188768022139415020e-8L)
1661   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1p-52L, 3.141592643999491532482601997450598791535L, 2.315303644582684770975188768022139415020e-8L)
1662   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1663   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1664   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1665   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1666   TEST_c_c (cacos, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, -2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM)
1667   TEST_c_c (cacos, -0x1.0000000000001p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
1668   TEST_c_c (cacos, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.557178503953494342609835913586108008322e-301L, 2.107342425544701550354780375182800088393e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM)
1669   TEST_c_c (cacos, -0x1.0000000000001p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L)
1670   TEST_c_c (cacos, 0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1671   TEST_c_c (cacos, 0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1672   TEST_c_c (cacos, -0.0L, 0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195431822418551933572895326024e-1L)
1673   TEST_c_c (cacos, -0.0L, -0x1.0000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195431822418551933572895326024e-1L)
1674   TEST_c_c (cacos, 0x1.0000000000001p0L, 0.0L, 0.0L, -2.107342425544701550354780375182800088393e-8L)
1675   TEST_c_c (cacos, -0x1.0000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.107342425544701550354780375182800088393e-8L)
1676   TEST_c_c (cacos, 0x1.0000000000001p0L, -0.0L, 0.0L, 2.107342425544701550354780375182800088393e-8L)
1677   TEST_c_c (cacos, -0x1.0000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.107342425544701550354780375182800088393e-8L)
1678 #endif
1679 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1680   TEST_c_c (cacos, 0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, -8.813735870195430253092739958139610131001e-1L)
1681   TEST_c_c (cacos, 0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619154657020805582738031L, 8.813735870195430253092739958139610131001e-1L)
1682   TEST_c_c (cacos, -0x1p-63L, 0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, -8.813735870195430253092739958139610131001e-1L)
1683   TEST_c_c (cacos, -0x1p-63L, -0x1.0000000000000002p0L, 1.570796326794896619307986362473920146166L, 8.813735870195430253092739958139610131001e-1L)
1684   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1p-63L, 2.119177303101063432592523199680782317447e-10L, -5.116146586219826555037807251857670783420e-10L)
1685   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1p-63L, 3.141592653377875508152537040020250564229L, -5.116146586219826555037807251857670783420e-10L)
1686   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1p-63L, 2.119177303101063432592523199680782317447e-10L, 5.116146586219826555037807251857670783420e-10L)
1687   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1p-63L, 3.141592653377875508152537040020250564229L, 5.116146586219826555037807251857670783420e-10L)
1688 # if LDBL_MIN_EXP <= -16381
1689   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1690   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1691   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1692   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1693   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, -4.656612873077392578082927418388212703712e-10L)
1694   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
1695   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.748608650034385653922359120438227480943e-4923L, 4.656612873077392578082927418388212703712e-10L)
1696   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L)
1697 # endif
1698   TEST_c_c (cacos, 0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1699   TEST_c_c (cacos, 0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1700   TEST_c_c (cacos, -0.0L, 0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430253092739958139610130980e-1L)
1701   TEST_c_c (cacos, -0.0L, -0x1.0000000000000002p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430253092739958139610130980e-1L)
1702   TEST_c_c (cacos, 0x1.0000000000000002p0L, 0.0L, 0.0L, -4.656612873077392578082927418388212703712e-10L)
1703   TEST_c_c (cacos, -0x1.0000000000000002p0L, 0.0L, 3.141592653589793238462643383279502884197L, -4.656612873077392578082927418388212703712e-10L)
1704   TEST_c_c (cacos, 0x1.0000000000000002p0L, -0.0L, 0.0L, 4.656612873077392578082927418388212703712e-10L)
1705   TEST_c_c (cacos, -0x1.0000000000000002p0L, -0.0L, 3.141592653589793238462643383279502884197L, 4.656612873077392578082927418388212703712e-10L)
1706 #endif
1707 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1708   TEST_c_c (cacos, 0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, -8.813735870195430252326093249798097405561e-1L)
1709   TEST_c_c (cacos, 0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639742726335L, 8.813735870195430252326093249798097405561e-1L)
1710   TEST_c_c (cacos, -0x1p-106L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, -8.813735870195430252326093249798097405561e-1L)
1711   TEST_c_c (cacos, -0x1p-106L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639760157863L, 8.813735870195430252326093249798097405561e-1L)
1712   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1p-106L, 5.394221422390606848017034778914096659726e-17L, -2.285028863093221674154232933662774454211e-16L)
1713   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1p-106L, 3.141592653589793184520429159373434404027L, -2.285028863093221674154232933662774454211e-16L)
1714   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1p-106L, 5.394221422390606848017034778914096659726e-17L, 2.285028863093221674154232933662774454211e-16L)
1715   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1p-106L, 3.141592653589793184520429159373434404027L, 2.285028863093221674154232933662774454211e-16L)
1716   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1717   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1718   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1719   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1720   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, -2.220446049250313080847263336181636063482e-16L)
1721   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
1722   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.426922623448365473354662093431821897807e-293L, 2.220446049250313080847263336181636063482e-16L)
1723   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L)
1724   TEST_c_c (cacos, 0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1725   TEST_c_c (cacos, 0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1726   TEST_c_c (cacos, -0.0L, 0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249798097405561e-1L)
1727   TEST_c_c (cacos, -0.0L, -0x1.000000000000000000000000008p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249798097405561e-1L)
1728   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, 0.0L, 0.0L, -2.220446049250313080847263336181636063482e-16L)
1729   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, 0.0L, 3.141592653589793238462643383279502884197L, -2.220446049250313080847263336181636063482e-16L)
1730   TEST_c_c (cacos, 0x1.000000000000000000000000008p0L, -0.0L, 0.0L, 2.220446049250313080847263336181636063482e-16L)
1731   TEST_c_c (cacos, -0x1.000000000000000000000000008p0L, -0.0L, 3.141592653589793238462643383279502884197L, 2.220446049250313080847263336181636063482e-16L)
1732 #endif
1733 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
1734   TEST_c_c (cacos, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, -8.813735870195430252326093249797924452120e-1L)
1735   TEST_c_c (cacos, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751374007L, 8.813735870195430252326093249797924452120e-1L)
1736   TEST_c_c (cacos, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, -8.813735870195430252326093249797924452120e-1L)
1737   TEST_c_c (cacos, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751510190L, 8.813735870195430252326093249797924452120e-1L)
1738   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 4.767863183742677481693563511435642755521e-18L, -2.019699255375255198156433710951064632386e-17L)
1739   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 3.141592653589793233694780199536825402504L, -2.019699255375255198156433710951064632386e-17L)
1740   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 4.767863183742677481693563511435642755521e-18L, 2.019699255375255198156433710951064632386e-17L)
1741   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 3.141592653589793233694780199536825402504L, 2.019699255375255198156433710951064632386e-17L)
1742   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1743   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1744   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1745   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1746   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, -1.962615573354718824241727964954454332780e-17L)
1747   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
1748   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 4.148847925325683229178506116378864361396e-4916L, 1.962615573354718824241727964954454332780e-17L)
1749   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L)
1750   TEST_c_c (cacos, 0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1751   TEST_c_c (cacos, 0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1752   TEST_c_c (cacos, -0.0L, 0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797924452120e-1L)
1753   TEST_c_c (cacos, -0.0L, -0x1.0000000000000000000000000001p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797924452120e-1L)
1754   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, 0.0L, 0.0L, -1.962615573354718824241727964954454332780e-17L)
1755   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, 0.0L, 3.141592653589793238462643383279502884197L, -1.962615573354718824241727964954454332780e-17L)
1756   TEST_c_c (cacos, 0x1.0000000000000000000000000001p0L, -0.0L, 0.0L, 1.962615573354718824241727964954454332780e-17L)
1757   TEST_c_c (cacos, -0x1.0000000000000000000000000001p0L, -0.0L, 3.141592653589793238462643383279502884197L, 1.962615573354718824241727964954454332780e-17L)
1758 #endif
1759
1760   TEST_c_c (cacos, 0x1p-23L, 0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, -8.813735448726963984495965873956465777250e-1L);
1761   TEST_c_c (cacos, 0x1p-23L, -0x0.ffffffp0L, 1.570796242501197085295336701632142060969L, 8.813735448726963984495965873956465777250e-1L);
1762   TEST_c_c (cacos, -0x1p-23L, 0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, -8.813735448726963984495965873956465777250e-1L);
1763   TEST_c_c (cacos, -0x1p-23L, -0x0.ffffffp0L, 1.570796411088596153167306681647360823228L, 8.813735448726963984495965873956465777250e-1L);
1764   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1p-23L, 4.391863861910487109445187743978204002614e-4L, -2.714321200917194650737217746780928423385e-4L);
1765   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1p-23L, 3.141153467203602189751698864505105063797L, -2.714321200917194650737217746780928423385e-4L);
1766   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1p-23L, 4.391863861910487109445187743978204002614e-4L, 2.714321200917194650737217746780928423385e-4L);
1767   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1p-23L, 3.141153467203602189751698864505105063797L, 2.714321200917194650737217746780928423385e-4L);
1768   TEST_c_c (cacos, 0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, -8.813735448726938863015878255140556727969e-1L);
1769   TEST_c_c (cacos, 0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442097L, 8.813735448726938863015878255140556727969e-1L);
1770   TEST_c_c (cacos, -0x1.fp-129L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, -8.813735448726938863015878255140556727969e-1L);
1771   TEST_c_c (cacos, -0x1.fp-129L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442101L, 8.813735448726938863015878255140556727969e-1L);
1772   TEST_c_c (cacos, 0x0.ffffffp0L, 0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, -8.245504387859737323891843603996428534945e-36L);
1773   TEST_c_c (cacos, -0x0.ffffffp0L, 0x1.fp-129L, 3.141247386605077034875040133796864147700L, -8.245504387859737323891843603996428534945e-36L);
1774   TEST_c_c (cacos, 0x0.ffffffp0L, -0x1.fp-129L, 3.452669847162035876032494826387364972849e-4L, 8.245504387859737323891843603996428534945e-36L);
1775   TEST_c_c (cacos, -0x0.ffffffp0L, -0x1.fp-129L, 3.141247386605077034875040133796864147700L, 8.245504387859737323891843603996428534945e-36L);
1776   TEST_c_c (cacos, 0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1777   TEST_c_c (cacos, 0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1778   TEST_c_c (cacos, -0.0L, 0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735448726938863015878255140556727969e-1L);
1779   TEST_c_c (cacos, -0.0L, -0x0.ffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735448726938863015878255140556727969e-1L);
1780   TEST_c_c (cacos, 0x0.ffffffp0L, 0.0L, 3.452669847162035876032494826387364972849e-4L, -0.0L);
1781   TEST_c_c (cacos, -0x0.ffffffp0L, 0.0L, 3.141247386605077034875040133796864147700L, -0.0L);
1782   TEST_c_c (cacos, 0x0.ffffffp0L, -0.0L, 3.452669847162035876032494826387364972849e-4L, 0.0L);
1783   TEST_c_c (cacos, -0x0.ffffffp0L, -0.0L, 3.141247386605077034875040133796864147700L, 0.0L);
1784   TEST_c_c (cacos, 0x1p-23L, 0.5L, 1.570796220170866625230343643673321150378L, -4.812118250596059896127318386463676808798e-1L);
1785   TEST_c_c (cacos, 0x1p-23L, -0.5L, 1.570796220170866625230343643673321150378L, 4.812118250596059896127318386463676808798e-1L);
1786   TEST_c_c (cacos, -0x1p-23L, 0.5L, 1.570796433418926613232299739606181733819L, -4.812118250596059896127318386463676808798e-1L);
1787   TEST_c_c (cacos, -0x1p-23L, -0.5L, 1.570796433418926613232299739606181733819L, 4.812118250596059896127318386463676808798e-1L);
1788   TEST_c_c (cacos, 0.5L, 0x1p-23L, 1.047197551196603215914744618665204532273L, -1.376510308240943236356088341381173571841e-7L);
1789   TEST_c_c (cacos, -0.5L, 0x1p-23L, 2.094395102393190022547898764614298351924L, -1.376510308240943236356088341381173571841e-7L);
1790   TEST_c_c (cacos, 0.5L, -0x1p-23L, 1.047197551196603215914744618665204532273L, 1.376510308240943236356088341381173571841e-7L);
1791   TEST_c_c (cacos, -0.5L, -0x1p-23L, 2.094395102393190022547898764614298351924L, 1.376510308240943236356088341381173571841e-7L);
1792   TEST_c_c (cacos, 0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442096L, -4.812118250596034474977589134243684231352e-1L);
1793   TEST_c_c (cacos, 0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442096L, 4.812118250596034474977589134243684231352e-1L);
1794   TEST_c_c (cacos, -0x1.fp-129L, 0.5L, 1.570796326794896619231321691639751442101L, -4.812118250596034474977589134243684231352e-1L);
1795   TEST_c_c (cacos, -0x1.fp-129L, -0.5L, 1.570796326794896619231321691639751442101L, 4.812118250596034474977589134243684231352e-1L);
1796   TEST_c_c (cacos, 0.5L, 0x1.fp-129L, 1.047197551196597746154214461093167628066L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1797   TEST_c_c (cacos, -0.5L, 0x1.fp-129L, 2.094395102393195492308428922186335256131L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1798   TEST_c_c (cacos, 0.5L, -0x1.fp-129L, 1.047197551196597746154214461093167628066L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1799   TEST_c_c (cacos, -0.5L, -0x1.fp-129L, 2.094395102393195492308428922186335256131L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1800   TEST_c_c (cacos, 0x1p-23L, 0x1p-23L, 1.570796207585607068450636380271254316214L, -1.192092895507818146886315028596704749235e-7L);
1801   TEST_c_c (cacos, 0x1p-23L, -0x1p-23L, 1.570796207585607068450636380271254316214L, 1.192092895507818146886315028596704749235e-7L);
1802   TEST_c_c (cacos, -0x1p-23L, 0x1p-23L, 1.570796446004186170012007003008248567984L, -1.192092895507818146886315028596704749235e-7L);
1803   TEST_c_c (cacos, -0x1p-23L, -0x1p-23L, 1.570796446004186170012007003008248567984L, 1.192092895507818146886315028596704749235e-7L);
1804   TEST_c_c (cacos, 0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442096L, -1.192092895507809676556842485683592032154e-7L);
1805   TEST_c_c (cacos, 0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442096L, 1.192092895507809676556842485683592032154e-7L);
1806   TEST_c_c (cacos, -0x1.fp-129L, 0x1p-23L, 1.570796326794896619231321691639751442101L, -1.192092895507809676556842485683592032154e-7L);
1807   TEST_c_c (cacos, -0x1.fp-129L, -0x1p-23L, 1.570796326794896619231321691639751442101L, 1.192092895507809676556842485683592032154e-7L);
1808   TEST_c_c (cacos, 0x1p-23L, 0x1.fp-129L, 1.570796207585607068449789347324000006847L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1809   TEST_c_c (cacos, -0x1p-23L, 0x1.fp-129L, 1.570796446004186170012854035955502877351L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1810   TEST_c_c (cacos, 0x1p-23L, -0x1.fp-129L, 1.570796207585607068449789347324000006847L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1811   TEST_c_c (cacos, -0x1p-23L, -0x1.fp-129L, 1.570796446004186170012854035955502877351L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1812   TEST_c_c (cacos, 0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1813   TEST_c_c (cacos, 0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1814   TEST_c_c (cacos, -0.0L, 0x1p-23L, 1.570796326794896619231321691639751442099L, -1.192092895507809676556842485683592032154e-7L);
1815   TEST_c_c (cacos, -0.0L, -0x1p-23L, 1.570796326794896619231321691639751442099L, 1.192092895507809676556842485683592032154e-7L);
1816   TEST_c_c (cacos, 0x1p-23L, 0.0L, 1.570796207585607068449789347324000006847L, -0.0L);
1817   TEST_c_c (cacos, -0x1p-23L, 0.0L, 1.570796446004186170012854035955502877351L, -0.0L);
1818   TEST_c_c (cacos, 0x1p-23L, -0.0L, 1.570796207585607068449789347324000006847L, 0.0L);
1819   TEST_c_c (cacos, -0x1p-23L, -0.0L, 1.570796446004186170012854035955502877351L, 0.0L);
1820   TEST_c_c (cacos, 0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1821   TEST_c_c (cacos, 0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1822   TEST_c_c (cacos, -0x1.fp-129L, 0x1.fp-129L, 1.570796326794896619231321691639751442101L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1823   TEST_c_c (cacos, -0x1.fp-129L, -0x1.fp-129L, 1.570796326794896619231321691639751442101L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
1824 #ifndef TEST_FLOAT
1825   TEST_c_c (cacos, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, -8.813735870195429467279863907910458761820e-1L);
1826   TEST_c_c (cacos, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896462222075823262236786996L, 8.813735870195429467279863907910458761820e-1L);
1827   TEST_c_c (cacos, -0x1p-52L, 0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, -8.813735870195429467279863907910458761820e-1L);
1828   TEST_c_c (cacos, -0x1p-52L, -0x0.fffffffffffff8p0L, 1.570796326794896776240567560017266097201L, 8.813735870195429467279863907910458761820e-1L);
1829   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.895456983915074112227925127005564372844e-8L, -1.171456840272878582596796205397918831268e-8L);
1830   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1p-52L, 3.141592634635223399311902261000251614142L, -1.171456840272878582596796205397918831268e-8L);
1831   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.895456983915074112227925127005564372844e-8L, 1.171456840272878582596796205397918831268e-8L);
1832   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1p-52L, 3.141592634635223399311902261000251614142L, 1.171456840272878582596796205397918831268e-8L);
1833   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1834   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1835   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1836   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1837   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1838   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.141592638688632044614986995416067458693L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1839   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.490116119384765638786343542550461592240e-8L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1840   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.141592638688632044614986995416067458693L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1841   TEST_c_c (cacos, 0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1842   TEST_c_c (cacos, 0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1843   TEST_c_c (cacos, -0.0L, 0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195429467279863907910371604180e-1L);
1844   TEST_c_c (cacos, -0.0L, -0x0.fffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195429467279863907910371604180e-1L);
1845   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, 0.0L, 1.490116119384765638786343542550461592240e-8L, -0.0L);
1846   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, 0.0L, 3.141592638688632044614986995416067458693L, -0.0L);
1847   TEST_c_c (cacos, 0x0.fffffffffffff8p0L, -0.0L, 1.490116119384765638786343542550461592240e-8L, 0.0L);
1848   TEST_c_c (cacos, -0x0.fffffffffffff8p0L, -0.0L, 3.141592638688632044614986995416067458693L, 0.0L);
1849 #endif
1850   TEST_c_c (cacos, 0x1p-52L, 0.5L, 1.570796326794896420628589431857911675917L, -4.812118250596034474977589134243772428682e-1L);
1851   TEST_c_c (cacos, 0x1p-52L, -0.5L, 1.570796326794896420628589431857911675917L, 4.812118250596034474977589134243772428682e-1L);
1852   TEST_c_c (cacos, -0x1p-52L, 0.5L, 1.570796326794896817834053951421591208280L, -4.812118250596034474977589134243772428682e-1L);
1853   TEST_c_c (cacos, -0x1p-52L, -0.5L, 1.570796326794896817834053951421591208280L, 4.812118250596034474977589134243772428682e-1L);
1854   TEST_c_c (cacos, 0.5L, 0x1p-52L, 1.047197551196597746154214461093186605110L, -2.563950248511418570403591756798643804971e-16L);
1855   TEST_c_c (cacos, -0.5L, 0x1p-52L, 2.094395102393195492308428922186316279087L, -2.563950248511418570403591756798643804971e-16L);
1856   TEST_c_c (cacos, 0.5L, -0x1p-52L, 1.047197551196597746154214461093186605110L, 2.563950248511418570403591756798643804971e-16L);
1857   TEST_c_c (cacos, -0.5L, -0x1p-52L, 2.094395102393195492308428922186316279087L, 2.563950248511418570403591756798643804971e-16L);
1858 #ifndef TEST_FLOAT
1859   TEST_c_c (cacos, 0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1860   TEST_c_c (cacos, 0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1861   TEST_c_c (cacos, -0x1.fp-1025L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1862   TEST_c_c (cacos, -0x1.fp-1025L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1863   TEST_c_c (cacos, 0.5L, 0x1.fp-1025L, 1.047197551196597746154214461093167628066L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1864   TEST_c_c (cacos, -0.5L, 0x1.fp-1025L, 2.094395102393195492308428922186335256131L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1865   TEST_c_c (cacos, 0.5L, -0x1.fp-1025L, 1.047197551196597746154214461093167628066L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1866   TEST_c_c (cacos, -0.5L, -0x1.fp-1025L, 2.094395102393195492308428922186335256131L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1867 #endif
1868   TEST_c_c (cacos, 0x1p-52L, 0x1p-52L, 1.570796326794896397186716766608443357372L, -2.220446049250313080847263336181677117148e-16L);
1869   TEST_c_c (cacos, 0x1p-52L, -0x1p-52L, 1.570796326794896397186716766608443357372L, 2.220446049250313080847263336181677117148e-16L);
1870   TEST_c_c (cacos, -0x1p-52L, 0x1p-52L, 1.570796326794896841275926616671059526825L, -2.220446049250313080847263336181677117148e-16L);
1871   TEST_c_c (cacos, -0x1p-52L, -0x1p-52L, 1.570796326794896841275926616671059526825L, 2.220446049250313080847263336181677117148e-16L);
1872 #ifndef TEST_FLOAT
1873   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1874   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1875   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1876   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1877   TEST_c_c (cacos, 0x1p-52L, 0x1.fp-1025L, 1.570796326794896397186716766608443357372L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1878   TEST_c_c (cacos, -0x1p-52L, 0x1.fp-1025L, 1.570796326794896841275926616671059526825L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1879   TEST_c_c (cacos, 0x1p-52L, -0x1.fp-1025L, 1.570796326794896397186716766608443357372L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1880   TEST_c_c (cacos, -0x1p-52L, -0x1.fp-1025L, 1.570796326794896841275926616671059526825L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1881 #endif
1882   TEST_c_c (cacos, 0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1883   TEST_c_c (cacos, 0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1884   TEST_c_c (cacos, -0.0L, 0x1p-52L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181622378926e-16L);
1885   TEST_c_c (cacos, -0.0L, -0x1p-52L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181622378926e-16L);
1886   TEST_c_c (cacos, 0x1p-52L, 0.0L, 1.570796326794896397186716766608443357372L, -0.0L);
1887   TEST_c_c (cacos, -0x1p-52L, 0.0L, 1.570796326794896841275926616671059526825L, -0.0L);
1888   TEST_c_c (cacos, 0x1p-52L, -0.0L, 1.570796326794896397186716766608443357372L, 0.0L);
1889   TEST_c_c (cacos, -0x1p-52L, -0.0L, 1.570796326794896841275926616671059526825L, 0.0L);
1890 #ifndef TEST_FLOAT
1891   TEST_c_c (cacos, 0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1892   TEST_c_c (cacos, 0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1893   TEST_c_c (cacos, -0x1.fp-1025L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1894   TEST_c_c (cacos, -0x1.fp-1025L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
1895 #endif
1896 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
1897   TEST_c_c (cacos, 0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, -8.813735870195430251942769895627079569937e-1L);
1898   TEST_c_c (cacos, 0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619154657020805582738025L, 8.813735870195430251942769895627079569937e-1L);
1899   TEST_c_c (cacos, -0x1p-63L, 0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, -8.813735870195430251942769895627079569937e-1L);
1900   TEST_c_c (cacos, -0x1p-63L, -0x0.ffffffffffffffffp0L, 1.570796326794896619307986362473920146173L, 8.813735870195430251942769895627079569937e-1L);
1901   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1p-63L, 4.188407771167967636741951941902992986043e-10L, -2.588578361325995866221775673638805081337e-10L);
1902   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1p-63L, 3.141592653170952461345846619605307690007L, -2.588578361325995866221775673638805081337e-10L);
1903   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1p-63L, 4.188407771167967636741951941902992986043e-10L, 2.588578361325995866221775673638805081337e-10L);
1904   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1p-63L, 3.141592653170952461345846619605307690007L, 2.588578361325995866221775673638805081337e-10L);
1905 # if LDBL_MIN_EXP <= -16381
1906   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1907   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1908   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1909   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1910   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, -2.472906068161537187835415298076415423459e-4923L);
1911   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 3.141592653260520984471283759942320330996L, -2.472906068161537187835415298076415423459e-4923L);
1912   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.292722539913596233371825532007990724506e-10L, 2.472906068161537187835415298076415423459e-4923L);
1913   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 3.141592653260520984471283759942320330996L, 2.472906068161537187835415298076415423459e-4923L);
1914 # endif
1915   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1916   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1917   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430251942769895627079569917e-1L);
1918   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430251942769895627079569917e-1L);
1919   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, 0.0L, 3.292722539913596233371825532007990724506e-10L, -0.0L);
1920   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, 0.0L, 3.141592653260520984471283759942320330996L, -0.0L);
1921   TEST_c_c (cacos, 0x0.ffffffffffffffffp0L, -0.0L, 3.292722539913596233371825532007990724506e-10L, 0.0L);
1922   TEST_c_c (cacos, -0x0.ffffffffffffffffp0L, -0.0L, 3.141592653260520984471283759942320330996L, 0.0L);
1923 #endif
1924   TEST_c_c (cacos, 0x1p-63L, 0.5L, 1.570796326794896619134347701278529840650L, -4.812118250596034474977589134243684231373e-1L);
1925   TEST_c_c (cacos, 0x1p-63L, -0.5L, 1.570796326794896619134347701278529840650L, 4.812118250596034474977589134243684231373e-1L);
1926   TEST_c_c (cacos, -0x1p-63L, 0.5L, 1.570796326794896619328295682000973043547L, -4.812118250596034474977589134243684231373e-1L);
1927   TEST_c_c (cacos, -0x1p-63L, -0.5L, 1.570796326794896619328295682000973043547L, 4.812118250596034474977589134243684231373e-1L);
1928   TEST_c_c (cacos, 0.5L, 0x1p-63L, 1.047197551196597746154214461093167628070L, -1.251928832280966098829878787499365228659e-19L);
1929   TEST_c_c (cacos, -0.5L, 0x1p-63L, 2.094395102393195492308428922186335256127L, -1.251928832280966098829878787499365228659e-19L);
1930   TEST_c_c (cacos, 0.5L, -0x1p-63L, 1.047197551196597746154214461093167628070L, 1.251928832280966098829878787499365228659e-19L);
1931   TEST_c_c (cacos, -0.5L, -0x1p-63L, 2.094395102393195492308428922186335256127L, 1.251928832280966098829878787499365228659e-19L);
1932 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1933   TEST_c_c (cacos, 0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1934   TEST_c_c (cacos, 0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1935   TEST_c_c (cacos, -0x1.fp-16385L, 0.5L, 1.570796326794896619231321691639751442099L, -4.812118250596034474977589134243684231352e-1L);
1936   TEST_c_c (cacos, -0x1.fp-16385L, -0.5L, 1.570796326794896619231321691639751442099L, 4.812118250596034474977589134243684231352e-1L);
1937   TEST_c_c (cacos, 0.5L, 0x1.fp-16385L, 1.047197551196597746154214461093167628066L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1938   TEST_c_c (cacos, -0.5L, 0x1.fp-16385L, 2.094395102393195492308428922186335256131L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1939   TEST_c_c (cacos, 0.5L, -0x1.fp-16385L, 1.047197551196597746154214461093167628066L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1940   TEST_c_c (cacos, -0.5L, -0x1.fp-16385L, 2.094395102393195492308428922186335256131L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
1941 #endif
1942   TEST_c_c (cacos, 0x1p-63L, 0x1p-63L, 1.570796326794896619122901474391200998698L, -1.084202172485504434007452800869941711430e-19L);
1943   TEST_c_c (cacos, 0x1p-63L, -0x1p-63L, 1.570796326794896619122901474391200998698L, 1.084202172485504434007452800869941711430e-19L);
1944   TEST_c_c (cacos, -0x1p-63L, 0x1p-63L, 1.570796326794896619339741908888301885499L, -1.084202172485504434007452800869941711430e-19L);
1945   TEST_c_c (cacos, -0x1p-63L, -0x1p-63L, 1.570796326794896619339741908888301885499L, 1.084202172485504434007452800869941711430e-19L);
1946 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1947   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1948   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1949   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1950   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1951   TEST_c_c (cacos, 0x1p-63L, 0x1.fp-16385L, 1.570796326794896619122901474391200998698L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1952   TEST_c_c (cacos, -0x1p-63L, 0x1.fp-16385L, 1.570796326794896619339741908888301885499L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1953   TEST_c_c (cacos, 0x1p-63L, -0x1.fp-16385L, 1.570796326794896619122901474391200998698L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1954   TEST_c_c (cacos, -0x1p-63L, -0x1.fp-16385L, 1.570796326794896619339741908888301885499L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
1955 #endif
1956   TEST_c_c (cacos, 0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1957   TEST_c_c (cacos, 0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1958   TEST_c_c (cacos, -0.0L, 0x1p-63L, 1.570796326794896619231321691639751442099L, -1.084202172485504434007452800869941711424e-19L);
1959   TEST_c_c (cacos, -0.0L, -0x1p-63L, 1.570796326794896619231321691639751442099L, 1.084202172485504434007452800869941711424e-19L);
1960   TEST_c_c (cacos, 0x1p-63L, 0.0L, 1.570796326794896619122901474391200998698L, -0.0L);
1961   TEST_c_c (cacos, -0x1p-63L, 0.0L, 1.570796326794896619339741908888301885499L, -0.0L);
1962   TEST_c_c (cacos, 0x1p-63L, -0.0L, 1.570796326794896619122901474391200998698L, 0.0L);
1963   TEST_c_c (cacos, -0x1p-63L, -0.0L, 1.570796326794896619339741908888301885499L, 0.0L);
1964 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
1965   TEST_c_c (cacos, 0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1966   TEST_c_c (cacos, 0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1967   TEST_c_c (cacos, -0x1.fp-16385L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1968   TEST_c_c (cacos, -0x1.fp-16385L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
1969 #endif
1970 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
1971   TEST_c_c (cacos, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, -8.813735870195430252326093249797835932642e-1L);
1972   TEST_c_c (cacos, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639734010571L, 8.813735870195430252326093249797835932642e-1L);
1973   TEST_c_c (cacos, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, -8.813735870195430252326093249797835932642e-1L);
1974   TEST_c_c (cacos, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639768873627L, 8.813735870195430252326093249797835932642e-1L);
1975   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.997188458999618357060632049675702684031e-16L, -1.234330349600789959989661887846005659983e-16L);
1976   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 3.141592653589793038743797483317667178134L, -1.234330349600789959989661887846005659983e-16L);
1977   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.997188458999618357060632049675702684031e-16L, 1.234330349600789959989661887846005659983e-16L);
1978   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 3.141592653589793038743797483317667178134L, 1.234330349600789959989661887846005659983e-16L);
1979   TEST_c_c (cacos, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1980   TEST_c_c (cacos, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1981   TEST_c_c (cacos, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1982   TEST_c_c (cacos, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1983   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1984   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.141592653589793081453397514901996944859L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1985   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570092458683775059393382371963565104164e-16L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1986   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.141592653589793081453397514901996944859L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
1987   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1988   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1989   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797835932642e-1L);
1990   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797835932642e-1L);
1991   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570092458683775059393382371963565104164e-16L, -0.0L);
1992   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 3.141592653589793081453397514901996944859L, -0.0L);
1993   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570092458683775059393382371963565104164e-16L, 0.0L);
1994   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 3.141592653589793081453397514901996944859L, 0.0L);
1995 #endif
1996   TEST_c_c (cacos, 0x1p-105L, 0.5L, 1.570796326794896619231321691639729392766L, -4.812118250596034474977589134243684231352e-1L);
1997   TEST_c_c (cacos, 0x1p-105L, -0.5L, 1.570796326794896619231321691639729392766L, 4.812118250596034474977589134243684231352e-1L);
1998   TEST_c_c (cacos, -0x1p-105L, 0.5L, 1.570796326794896619231321691639773491431L, -4.812118250596034474977589134243684231352e-1L);
1999   TEST_c_c (cacos, -0x1p-105L, -0.5L, 1.570796326794896619231321691639773491431L, 4.812118250596034474977589134243684231352e-1L);
2000   TEST_c_c (cacos, 0.5L, 0x1p-105L, 1.047197551196597746154214461093167628066L, -2.846556599890768890940941645338546615370e-32L);
2001   TEST_c_c (cacos, -0.5L, 0x1p-105L, 2.094395102393195492308428922186335256131L, -2.846556599890768890940941645338546615370e-32L);
2002   TEST_c_c (cacos, 0.5L, -0x1p-105L, 1.047197551196597746154214461093167628066L, 2.846556599890768890940941645338546615370e-32L);
2003   TEST_c_c (cacos, -0.5L, -0x1p-105L, 2.094395102393195492308428922186335256131L, 2.846556599890768890940941645338546615370e-32L);
2004   TEST_c_c (cacos, 0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639726790195L, -2.465190328815661891911651766508706967729e-32L);
2005   TEST_c_c (cacos, 0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639726790195L, 2.465190328815661891911651766508706967729e-32L);
2006   TEST_c_c (cacos, -0x1p-105L, 0x1p-105L, 1.570796326794896619231321691639776094002L, -2.465190328815661891911651766508706967729e-32L);
2007   TEST_c_c (cacos, -0x1p-105L, -0x1p-105L, 1.570796326794896619231321691639776094002L, 2.465190328815661891911651766508706967729e-32L);
2008 #ifndef TEST_FLOAT
2009   TEST_c_c (cacos, 0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2010   TEST_c_c (cacos, 0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2011   TEST_c_c (cacos, -0x1.fp-1025L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2012   TEST_c_c (cacos, -0x1.fp-1025L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2013   TEST_c_c (cacos, 0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639726790195L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2014   TEST_c_c (cacos, -0x1p-105L, 0x1.fp-1025L, 1.570796326794896619231321691639776094002L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2015   TEST_c_c (cacos, 0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639726790195L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2016   TEST_c_c (cacos, -0x1p-105L, -0x1.fp-1025L, 1.570796326794896619231321691639776094002L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2017 #endif
2018   TEST_c_c (cacos, 0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2019   TEST_c_c (cacos, 0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2020   TEST_c_c (cacos, -0.0L, 0x1p-105L, 1.570796326794896619231321691639751442099L, -2.465190328815661891911651766508706967729e-32L);
2021   TEST_c_c (cacos, -0.0L, -0x1p-105L, 1.570796326794896619231321691639751442099L, 2.465190328815661891911651766508706967729e-32L);
2022   TEST_c_c (cacos, 0x1p-105L, 0.0L, 1.570796326794896619231321691639726790195L, -0.0L);
2023   TEST_c_c (cacos, -0x1p-105L, 0.0L, 1.570796326794896619231321691639776094002L, -0.0L);
2024   TEST_c_c (cacos, 0x1p-105L, -0.0L, 1.570796326794896619231321691639726790195L, 0.0L);
2025   TEST_c_c (cacos, -0x1p-105L, -0.0L, 1.570796326794896619231321691639776094002L, 0.0L);
2026 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2027   TEST_c_c (cacos, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, -8.813735870195430252326093249797922409363e-1L);
2028   TEST_c_c (cacos, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751305915L, 8.813735870195430252326093249797922409363e-1L);
2029   TEST_c_c (cacos, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, -8.813735870195430252326093249797922409363e-1L);
2030   TEST_c_c (cacos, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751578282L, 8.813735870195430252326093249797922409363e-1L);
2031   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.765281878332676474347460257221369818872e-17L, -1.091004200533850618345330909857103457781e-17L);
2032   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 3.141592653589793220809824599952738140723L, -1.091004200533850618345330909857103457781e-17L);
2033   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.765281878332676474347460257221369818872e-17L, 1.091004200533850618345330909857103457781e-17L);
2034   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 3.141592653589793220809824599952738140723L, 1.091004200533850618345330909857103457781e-17L);
2035   TEST_c_c (cacos, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2036   TEST_c_c (cacos, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2037   TEST_c_c (cacos, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2038   TEST_c_c (cacos, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2039   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, -5.867357004219059108790368268900490184505e-4916L);
2040   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 3.141592653589793224584855575465046128902L, -5.867357004219059108790368268900490184505e-4916L);
2041   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.387778780781445675529539585113525401762e-17L, 5.867357004219059108790368268900490184505e-4916L);
2042   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 3.141592653589793224584855575465046128902L, 5.867357004219059108790368268900490184505e-4916L);
2043   TEST_c_c (cacos, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2044   TEST_c_c (cacos, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2045   TEST_c_c (cacos, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, -8.813735870195430252326093249797922409363e-1L);
2046   TEST_c_c (cacos, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.570796326794896619231321691639751442099L, 8.813735870195430252326093249797922409363e-1L);
2047   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.387778780781445675529539585113525401762e-17L, -0.0L);
2048   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 3.141592653589793224584855575465046128902L, -0.0L);
2049   TEST_c_c (cacos, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.387778780781445675529539585113525401762e-17L, 0.0L);
2050   TEST_c_c (cacos, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 3.141592653589793224584855575465046128902L, 0.0L);
2051 #endif
2052   TEST_c_c (cacos, 0x1p-112L, 0.5L, 1.570796326794896619231321691639751269838L, -4.812118250596034474977589134243684231352e-1L);
2053   TEST_c_c (cacos, 0x1p-112L, -0.5L, 1.570796326794896619231321691639751269838L, 4.812118250596034474977589134243684231352e-1L);
2054   TEST_c_c (cacos, -0x1p-112L, 0.5L, 1.570796326794896619231321691639751614359L, -4.812118250596034474977589134243684231352e-1L);
2055   TEST_c_c (cacos, -0x1p-112L, -0.5L, 1.570796326794896619231321691639751614359L, 4.812118250596034474977589134243684231352e-1L);
2056   TEST_c_c (cacos, 0.5L, 0x1p-112L, 1.047197551196597746154214461093167628066L, -2.223872343664663196047610660420739543258e-34L);
2057   TEST_c_c (cacos, -0.5L, 0x1p-112L, 2.094395102393195492308428922186335256131L, -2.223872343664663196047610660420739543258e-34L);
2058   TEST_c_c (cacos, 0.5L, -0x1p-112L, 1.047197551196597746154214461093167628066L, 2.223872343664663196047610660420739543258e-34L);
2059   TEST_c_c (cacos, -0.5L, -0x1p-112L, 2.094395102393195492308428922186335256131L, 2.223872343664663196047610660420739543258e-34L);
2060   TEST_c_c (cacos, 0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751249506L, -1.925929944387235853055977942584927318538e-34L);
2061   TEST_c_c (cacos, 0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751249506L, 1.925929944387235853055977942584927318538e-34L);
2062   TEST_c_c (cacos, -0x1p-112L, 0x1p-112L, 1.570796326794896619231321691639751634692L, -1.925929944387235853055977942584927318538e-34L);
2063   TEST_c_c (cacos, -0x1p-112L, -0x1p-112L, 1.570796326794896619231321691639751634692L, 1.925929944387235853055977942584927318538e-34L);
2064 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2065   TEST_c_c (cacos, 0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2066   TEST_c_c (cacos, 0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2067   TEST_c_c (cacos, -0x1.fp-16385L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2068   TEST_c_c (cacos, -0x1.fp-16385L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2069   TEST_c_c (cacos, 0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751249506L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2070   TEST_c_c (cacos, -0x1p-112L, 0x1.fp-16385L, 1.570796326794896619231321691639751634692L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2071   TEST_c_c (cacos, 0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751249506L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2072   TEST_c_c (cacos, -0x1p-112L, -0x1.fp-16385L, 1.570796326794896619231321691639751634692L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
2073 #endif
2074   TEST_c_c (cacos, 0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2075   TEST_c_c (cacos, 0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2076   TEST_c_c (cacos, -0.0L, 0x1p-112L, 1.570796326794896619231321691639751442099L, -1.925929944387235853055977942584927318538e-34L);
2077   TEST_c_c (cacos, -0.0L, -0x1p-112L, 1.570796326794896619231321691639751442099L, 1.925929944387235853055977942584927318538e-34L);
2078   TEST_c_c (cacos, 0x1p-112L, 0.0L, 1.570796326794896619231321691639751249506L, -0.0L);
2079   TEST_c_c (cacos, -0x1p-112L, 0.0L, 1.570796326794896619231321691639751634692L, -0.0L);
2080   TEST_c_c (cacos, 0x1p-112L, -0.0L, 1.570796326794896619231321691639751249506L, 0.0L);
2081   TEST_c_c (cacos, -0x1p-112L, -0.0L, 1.570796326794896619231321691639751634692L, 0.0L);
2082
2083   TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
2084   TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
2085
2086   END (cacos, complex);
2087 }
2088
2089 static void
2090 cacosh_test (void)
2091 {
2092   errno = 0;
2093   FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
2094   if (errno == ENOSYS)
2095     /* Function not implemented.  */
2096     return;
2097
2098   START (cacosh);
2099
2100
2101   TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
2102   TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
2103   TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
2104   TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
2105   TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
2106   TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
2107
2108   TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
2109   TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
2110
2111   TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
2112   TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
2113   TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
2114   TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
2115   TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
2116   TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
2117
2118   TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
2119   TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
2120   TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
2121   TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
2122
2123   TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
2124   TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
2125   TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
2126   TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
2127
2128   TEST_c_c (cacosh, plus_infty, qnan_value, plus_infty, qnan_value);
2129   TEST_c_c (cacosh, minus_infty, qnan_value, plus_infty, qnan_value);
2130
2131   TEST_c_c (cacosh, 0, qnan_value, qnan_value, qnan_value);
2132   TEST_c_c (cacosh, minus_zero, qnan_value, qnan_value, qnan_value);
2133
2134   TEST_c_c (cacosh, qnan_value, plus_infty, plus_infty, qnan_value);
2135   TEST_c_c (cacosh, qnan_value, minus_infty, plus_infty, qnan_value);
2136
2137   TEST_c_c (cacosh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2138   TEST_c_c (cacosh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2139
2140   TEST_c_c (cacosh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2141   TEST_c_c (cacosh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2142
2143   TEST_c_c (cacosh, qnan_value, qnan_value, qnan_value, qnan_value);
2144
2145   TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2146   TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
2147   TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2148   TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
2149   TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2150   TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
2151   TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2152   TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
2153   TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2154   TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
2155   TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2156   TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
2157
2158   TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
2159   TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
2160   TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
2161   TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
2162   TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
2163   TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
2164   TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
2165   TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
2166   TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
2167   TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
2168   TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
2169   TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
2170
2171   TEST_c_c (cacosh, 0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 8.881784197001252323389053344727730248720e-16L);
2172   TEST_c_c (cacosh, 0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -8.881784197001252323389053344727730248720e-16L);
2173   TEST_c_c (cacosh, -0x1p50L, 1.0L, 3.535050620855721078027883819436720218708e1L, 3.141592653589792350284223683154270545292L);
2174   TEST_c_c (cacosh, -0x1p50L, -1.0L, 3.535050620855721078027883819436720218708e1L, -3.141592653589792350284223683154270545292L);
2175   TEST_c_c (cacosh, 1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794895731052901991514519103193L);
2176   TEST_c_c (cacosh, -1.0L, 0x1p50L, 3.535050620855721078027883819436759661753e1L, 1.570796326794897507409741391764983781004L);
2177   TEST_c_c (cacosh, 1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794895731052901991514519103193L);
2178   TEST_c_c (cacosh, -1.0L, -0x1p50L, 3.535050620855721078027883819436759661753e1L, -1.570796326794897507409741391764983781004L);
2179 #ifndef TEST_FLOAT
2180   TEST_c_c (cacosh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
2181   TEST_c_c (cacosh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
2182   TEST_c_c (cacosh, -0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.141592653589793238462643383279502884197L);
2183   TEST_c_c (cacosh, -0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.141592653589793238462643383279502884197L);
2184   TEST_c_c (cacosh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2185   TEST_c_c (cacosh, -1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
2186   TEST_c_c (cacosh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2187   TEST_c_c (cacosh, -1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
2188 #endif
2189 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2190   TEST_c_c (cacosh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
2191   TEST_c_c (cacosh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
2192   TEST_c_c (cacosh, -0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 3.141592653589793238462643383279502884197L);
2193   TEST_c_c (cacosh, -0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -3.141592653589793238462643383279502884197L);
2194   TEST_c_c (cacosh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2195   TEST_c_c (cacosh, -1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
2196   TEST_c_c (cacosh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2197   TEST_c_c (cacosh, -1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
2198 #endif
2199   TEST_c_c (cacosh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
2200 #ifndef TEST_FLOAT
2201   TEST_c_c (cacosh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
2202 #endif
2203 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2204   TEST_c_c (cacosh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
2205 #endif
2206   TEST_c_c (cacosh, 0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442097L);
2207   TEST_c_c (cacosh, 0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442097L);
2208   TEST_c_c (cacosh, -0x1.fp-129L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442100L);
2209   TEST_c_c (cacosh, -0x1.fp-129L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442100L);
2210   TEST_c_c (cacosh, 1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2211   TEST_c_c (cacosh, -1.5L, 0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884195L);
2212   TEST_c_c (cacosh, 1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
2213   TEST_c_c (cacosh, -1.5L, -0x1.fp-129L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884195L);
2214 #ifndef TEST_FLOAT
2215   TEST_c_c (cacosh, 0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2216   TEST_c_c (cacosh, 0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2217   TEST_c_c (cacosh, -0x1.fp-1025L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2218   TEST_c_c (cacosh, -0x1.fp-1025L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2219   TEST_c_c (cacosh, 1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2220   TEST_c_c (cacosh, -1.5L, 0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2221   TEST_c_c (cacosh, 1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
2222   TEST_c_c (cacosh, -1.5L, -0x1.fp-1025L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2223 #endif
2224 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2225   TEST_c_c (cacosh, 0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2226   TEST_c_c (cacosh, 0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2227   TEST_c_c (cacosh, -0x1.fp-16385L, 1.5L, 1.194763217287109304111930828519090523536L, 1.570796326794896619231321691639751442099L);
2228   TEST_c_c (cacosh, -0x1.fp-16385L, -1.5L, 1.194763217287109304111930828519090523536L, -1.570796326794896619231321691639751442099L);
2229   TEST_c_c (cacosh, 1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2230   TEST_c_c (cacosh, -1.5L, 0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, 3.141592653589793238462643383279502884197L);
2231   TEST_c_c (cacosh, 1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
2232   TEST_c_c (cacosh, -1.5L, -0x1.fp-16385L, 9.624236501192068949955178268487368462704e-1L, -3.141592653589793238462643383279502884197L);
2233 #endif
2234   TEST_c_c (cacosh, 0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.221357263937683325603909865564381489366L);
2235   TEST_c_c (cacosh, 0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.221357263937683325603909865564381489366L);
2236   TEST_c_c (cacosh, -0.5L, 1.0L, 9.261330313501824245501244453057873152694e-1L, 1.920235389652109912858733517715121394831L);
2237   TEST_c_c (cacosh, -0.5L, -1.0L, 9.261330313501824245501244453057873152694e-1L, -1.920235389652109912858733517715121394831L);
2238   TEST_c_c (cacosh, 1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 6.748888455860063801646649673121744318756e-1L);
2239   TEST_c_c (cacosh, -1.0L, 0.5L, 7.328576759736452608886724437653071523305e-1L, 2.466703808003786858297978415967328452322L);
2240   TEST_c_c (cacosh, 1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -6.748888455860063801646649673121744318756e-1L);
2241   TEST_c_c (cacosh, -1.0L, -0.5L, 7.328576759736452608886724437653071523305e-1L, -2.466703808003786858297978415967328452322L);
2242   TEST_c_c (cacosh, 0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.394493894017929688812643125003661339452L);
2243   TEST_c_c (cacosh, 0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.394493894017929688812643125003661339452L);
2244   TEST_c_c (cacosh, -0.25L, 1.0L, 8.924633639033482359562124741744951972772e-1L, 1.747098759571863549650000258275841544745L);
2245   TEST_c_c (cacosh, -0.25L, -1.0L, 8.924633639033482359562124741744951972772e-1L, -1.747098759571863549650000258275841544745L);
2246   TEST_c_c (cacosh, 1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 4.890443302710802929202843732146540079124e-1L);
2247   TEST_c_c (cacosh, -1.0L, 0.25L, 5.097911466811016354623559941115413499164e-1L, 2.652548323318712945542359010064848876285L);
2248   TEST_c_c (cacosh, 1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -4.890443302710802929202843732146540079124e-1L);
2249   TEST_c_c (cacosh, -1.0L, -0.25L, 5.097911466811016354623559941115413499164e-1L, -2.652548323318712945542359010064848876285L);
2250   TEST_c_c (cacosh, 0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.569458417435338878318763342108699202986L);
2251   TEST_c_c (cacosh, 0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.569458417435338878318763342108699202986L);
2252   TEST_c_c (cacosh, -0x1.fp-10L, 1.0L, 8.813742198809567991336704287826445879025e-1L, 1.572134236154454360143880041170803681211L);
2253   TEST_c_c (cacosh, -0x1.fp-10L, -1.0L, 8.813742198809567991336704287826445879025e-1L, -1.572134236154454360143880041170803681211L);
2254   TEST_c_c (cacosh, 1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 4.349129763101882771258049954181971959031e-2L);
2255   TEST_c_c (cacosh, -1.0L, 0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, 3.098101355958774410750062883737683164607L);
2256   TEST_c_c (cacosh, 1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -4.349129763101882771258049954181971959031e-2L);
2257   TEST_c_c (cacosh, -1.0L, -0x1.fp-10L, 4.350501469856803800217957402220976497152e-2L, -3.098101355958774410750062883737683164607L);
2258   TEST_c_c (cacosh, 0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796325518966635014803151387033957091L);
2259   TEST_c_c (cacosh, 0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796325518966635014803151387033957091L);
2260   TEST_c_c (cacosh, -0x1.fp-30L, 1.0L, 8.813735870195430258081932989769495326854e-1L, 1.570796328070826603447840231892468927106L);
2261   TEST_c_c (cacosh, -0x1.fp-30L, -1.0L, 8.813735870195430258081932989769495326854e-1L, -1.570796328070826603447840231892468927106L);
2262   TEST_c_c (cacosh, 1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 4.247867097467650115899790787875186617316e-5L);
2263   TEST_c_c (cacosh, -1.0L, 0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, 3.141550174918818561961484385371624132331L);
2264   TEST_c_c (cacosh, 1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -4.247867097467650115899790787875186617316e-5L);
2265   TEST_c_c (cacosh, -1.0L, -0x1.fp-30L, 4.247867098745151888768727039216644758847e-5L, -3.141550174918818561961484385371624132331L);
2266   TEST_c_c (cacosh, 0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691638670687364L);
2267   TEST_c_c (cacosh, 0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691638670687364L);
2268   TEST_c_c (cacosh, -0x1.fp-100L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691640832196834L);
2269   TEST_c_c (cacosh, -0x1.fp-100L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691640832196834L);
2270   TEST_c_c (cacosh, 1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 1.236292038260260888664514866456887257525e-15L);
2271   TEST_c_c (cacosh, -1.0L, 0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, 3.141592653589792002170605123018614219682L);
2272   TEST_c_c (cacosh, 1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -1.236292038260260888664514866456887257525e-15L);
2273   TEST_c_c (cacosh, -1.0L, -0x1.fp-100L, 1.236292038260260888664514866457202186027e-15L, -3.141592653589792002170605123018614219682L);
2274   TEST_c_c (cacosh, 0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442097L);
2275   TEST_c_c (cacosh, 0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442097L);
2276   TEST_c_c (cacosh, -0x1.fp-129L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442101L);
2277   TEST_c_c (cacosh, -0x1.fp-129L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442101L);
2278   TEST_c_c (cacosh, 1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 5.335635276982233498398987585285818977930e-20L);
2279   TEST_c_c (cacosh, -1.0L, 0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, 3.141592653589793238409287030509680549213L);
2280   TEST_c_c (cacosh, 1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -5.335635276982233498398987585285818977930e-20L);
2281   TEST_c_c (cacosh, -1.0L, -0x1.fp-129L, 5.335635276982233498398987585285818977933e-20L, -3.141592653589793238409287030509680549213L);
2282 #ifndef TEST_FLOAT
2283   TEST_c_c (cacosh, 0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2284   TEST_c_c (cacosh, 0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2285   TEST_c_c (cacosh, -0x1.fp-1000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2286   TEST_c_c (cacosh, -0x1.fp-1000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2287   TEST_c_c (cacosh, 1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 4.252291453851660175550490409247739011867e-151L);
2288   TEST_c_c (cacosh, -1.0L, 0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, 3.141592653589793238462643383279502884197L);
2289   TEST_c_c (cacosh, 1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -4.252291453851660175550490409247739011867e-151L);
2290   TEST_c_c (cacosh, -1.0L, -0x1.fp-1000L, 4.252291453851660175550490409247739011867e-151L, -3.141592653589793238462643383279502884197L);
2291   TEST_c_c (cacosh, 0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2292   TEST_c_c (cacosh, 0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2293   TEST_c_c (cacosh, -0x1.fp-1025L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2294   TEST_c_c (cacosh, -0x1.fp-1025L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2295   TEST_c_c (cacosh, 1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 7.340879205566679497036857179189356754017e-155L);
2296   TEST_c_c (cacosh, -1.0L, 0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, 3.141592653589793238462643383279502884197L);
2297   TEST_c_c (cacosh, 1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -7.340879205566679497036857179189356754017e-155L);
2298   TEST_c_c (cacosh, -1.0L, -0x1.fp-1025L, 7.340879205566679497036857179189356754017e-155L, -3.141592653589793238462643383279502884197L);
2299 #endif
2300 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2301   TEST_c_c (cacosh, 0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2302   TEST_c_c (cacosh, 0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2303   TEST_c_c (cacosh, -0x1.fp-10000L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2304   TEST_c_c (cacosh, -0x1.fp-10000L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2305   TEST_c_c (cacosh, 1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 9.854680208706673586644342922051388714633e-1506L);
2306   TEST_c_c (cacosh, -1.0L, 0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, 3.141592653589793238462643383279502884197L);
2307   TEST_c_c (cacosh, 1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -9.854680208706673586644342922051388714633e-1506L);
2308   TEST_c_c (cacosh, -1.0L, -0x1.fp-10000L, 9.854680208706673586644342922051388714633e-1506L, -3.141592653589793238462643383279502884197L);
2309   TEST_c_c (cacosh, 0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2310   TEST_c_c (cacosh, 0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2311   TEST_c_c (cacosh, -0x1.fp-16385L, 1.0L, 8.813735870195430252326093249797923090282e-1L, 1.570796326794896619231321691639751442099L);
2312   TEST_c_c (cacosh, -0x1.fp-16385L, -1.0L, 8.813735870195430252326093249797923090282e-1L, -1.570796326794896619231321691639751442099L);
2313   TEST_c_c (cacosh, 1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 9.023632056840860275214893047597614177639e-2467L);
2314   TEST_c_c (cacosh, -1.0L, 0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, 3.141592653589793238462643383279502884197L);
2315   TEST_c_c (cacosh, 1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -9.023632056840860275214893047597614177639e-2467L);
2316   TEST_c_c (cacosh, -1.0L, -0x1.fp-16385L, 9.023632056840860275214893047597614177639e-2467L, -3.141592653589793238462643383279502884197L);
2317 #endif
2318   TEST_c_c (cacosh, 0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796242501204621739026081991856762292L);
2319   TEST_c_c (cacosh, 0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796242501204621739026081991856762292L);
2320   TEST_c_c (cacosh, -0x1p-23L, 0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, 1.570796411088588616723617301287646121905L);
2321   TEST_c_c (cacosh, -0x1p-23L, -0x1.000002p0L, 8.813736713132400470205730751186547909968e-1L, -1.570796411088588616723617301287646121905L);
2322   TEST_c_c (cacosh, 0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 2.222118384408546368406374049167636760903e-4L);
2323   TEST_c_c (cacosh, -0x1.000002p0L, 0x1p-23L, 5.364668491573609633134147164031476452679e-4L, 3.141370441751352383825802745874586120521L);
2324   TEST_c_c (cacosh, 0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -2.222118384408546368406374049167636760903e-4L);
2325   TEST_c_c (cacosh, -0x1.000002p0L, -0x1p-23L, 5.364668491573609633134147164031476452679e-4L, -3.141370441751352383825802745874586120521L);
2326   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442097L);
2327   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442097L);
2328   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442101L);
2329   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442101L);
2330   TEST_c_c (cacosh, 0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 5.830451806317544230969669308596361881467e-36L);
2331   TEST_c_c (cacosh, -0x1.000002p0L, 0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502878367L);
2332   TEST_c_c (cacosh, 0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -5.830451806317544230969669308596361881467e-36L);
2333   TEST_c_c (cacosh, -0x1.000002p0L, -0x1.fp-129L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502878367L);
2334   TEST_c_c (cacosh, 0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2335   TEST_c_c (cacosh, 0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2336   TEST_c_c (cacosh, -0.0L, 0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, 1.570796326794896619231321691639751442099L);
2337   TEST_c_c (cacosh, -0.0L, -0x1.000002p0L, 8.813736713132375348727889167749389235161e-1L, -1.570796326794896619231321691639751442099L);
2338   TEST_c_c (cacosh, 0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 0.0L);
2339   TEST_c_c (cacosh, -0x1.000002p0L, 0.0L, 4.882812451493617206486388134172712975070e-4L, 3.141592653589793238462643383279502884197L);
2340   TEST_c_c (cacosh, 0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -0.0L);
2341   TEST_c_c (cacosh, -0x1.000002p0L, -0.0L, 4.882812451493617206486388134172712975070e-4L, -3.141592653589793238462643383279502884197L);
2342 #ifndef TEST_FLOAT
2343   TEST_c_c (cacosh, 0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896462222075823262262934288L);
2344   TEST_c_c (cacosh, 0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896462222075823262262934288L);
2345   TEST_c_c (cacosh, -0x1p-52L, 0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, 1.570796326794896776240567560017239949909L);
2346   TEST_c_c (cacosh, -0x1p-52L, -0x1.0000000000001p0L, 8.813735870195431822418551933572982483664e-1L, -1.570796326794896776240567560017239949909L);
2347   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 9.590301705980041385828904092662391018164e-9L);
2348   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1p-52L, 2.315303644582684770975188768022139415020e-8L, 3.141592643999491532482601997450598791535L);
2349   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -9.590301705980041385828904092662391018164e-9L);
2350   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1p-52L, 2.315303644582684770975188768022139415020e-8L, -3.141592643999491532482601997450598791535L);
2351   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2352   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2353   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2354   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2355   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2356   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2357   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -2.557178503953494342609835913586108008322e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2358   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0x1.fp-1025L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2359   TEST_c_c (cacosh, 0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2360   TEST_c_c (cacosh, 0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2361   TEST_c_c (cacosh, -0.0L, 0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, 1.570796326794896619231321691639751442099L);
2362   TEST_c_c (cacosh, -0.0L, -0x1.0000000000001p0L, 8.813735870195431822418551933572895326024e-1L, -1.570796326794896619231321691639751442099L);
2363   TEST_c_c (cacosh, 0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 0.0L);
2364   TEST_c_c (cacosh, -0x1.0000000000001p0L, 0.0L, 2.107342425544701550354780375182800088393e-8L, 3.141592653589793238462643383279502884197L);
2365   TEST_c_c (cacosh, 0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -0.0L);
2366   TEST_c_c (cacosh, -0x1.0000000000001p0L, -0.0L, 2.107342425544701550354780375182800088393e-8L, -3.141592653589793238462643383279502884197L);
2367 #endif
2368 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2369   TEST_c_c (cacosh, 0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619154657020805582738031L);
2370   TEST_c_c (cacosh, 0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619154657020805582738031L);
2371   TEST_c_c (cacosh, -0x1p-63L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, 1.570796326794896619307986362473920146166L);
2372   TEST_c_c (cacosh, -0x1p-63L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610131001e-1L, -1.570796326794896619307986362473920146166L);
2373   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 2.119177303101063432592523199680782317447e-10L);
2374   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1p-63L, 5.116146586219826555037807251857670783420e-10L, 3.141592653377875508152537040020250564229L);
2375   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -2.119177303101063432592523199680782317447e-10L);
2376   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1p-63L, 5.116146586219826555037807251857670783420e-10L, -3.141592653377875508152537040020250564229L);
2377 # if LDBL_MIN_EXP <= -16381
2378   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2379   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2380   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2381   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2382   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 1.748608650034385653922359120438227480943e-4923L);
2383   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2384   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -1.748608650034385653922359120438227480943e-4923L);
2385   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0x1.fp-16385L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2386 # endif
2387   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2388   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2389   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, 1.570796326794896619231321691639751442099L);
2390   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000002p0L, 8.813735870195430253092739958139610130980e-1L, -1.570796326794896619231321691639751442099L);
2391   TEST_c_c (cacosh, 0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 0.0L);
2392   TEST_c_c (cacosh, -0x1.0000000000000002p0L, 0.0L, 4.656612873077392578082927418388212703712e-10L, 3.141592653589793238462643383279502884197L);
2393   TEST_c_c (cacosh, 0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -0.0L);
2394   TEST_c_c (cacosh, -0x1.0000000000000002p0L, -0.0L, 4.656612873077392578082927418388212703712e-10L, -3.141592653589793238462643383279502884197L);
2395 #endif
2396 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2397   TEST_c_c (cacosh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639742726335L);
2398   TEST_c_c (cacosh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639742726335L);
2399   TEST_c_c (cacosh, -0x1p-106L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639760157863L);
2400   TEST_c_c (cacosh, -0x1p-106L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639760157863L);
2401   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 5.394221422390606848017034778914096659726e-17L);
2402   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1p-106L, 2.285028863093221674154232933662774454211e-16L, 3.141592653589793184520429159373434404027L);
2403   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -5.394221422390606848017034778914096659726e-17L);
2404   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1p-106L, 2.285028863093221674154232933662774454211e-16L, -3.141592653589793184520429159373434404027L);
2405   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2406   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2407   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2408   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2409   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2410   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2411   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -2.426922623448365473354662093431821897807e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2412   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2413   TEST_c_c (cacosh, 0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2414   TEST_c_c (cacosh, 0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2415   TEST_c_c (cacosh, -0.0L, 0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, 1.570796326794896619231321691639751442099L);
2416   TEST_c_c (cacosh, -0.0L, -0x1.000000000000000000000000008p0L, 8.813735870195430252326093249798097405561e-1L, -1.570796326794896619231321691639751442099L);
2417   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 0.0L);
2418   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, 0.0L, 2.220446049250313080847263336181636063482e-16L, 3.141592653589793238462643383279502884197L);
2419   TEST_c_c (cacosh, 0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -0.0L);
2420   TEST_c_c (cacosh, -0x1.000000000000000000000000008p0L, -0.0L, 2.220446049250313080847263336181636063482e-16L, -3.141592653589793238462643383279502884197L);
2421 #endif
2422 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2423   TEST_c_c (cacosh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751374007L);
2424   TEST_c_c (cacosh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751374007L);
2425   TEST_c_c (cacosh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751510190L);
2426   TEST_c_c (cacosh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751510190L);
2427   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 4.767863183742677481693563511435642755521e-18L);
2428   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, 2.019699255375255198156433710951064632386e-17L, 3.141592653589793233694780199536825402504L);
2429   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -4.767863183742677481693563511435642755521e-18L);
2430   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, 2.019699255375255198156433710951064632386e-17L, -3.141592653589793233694780199536825402504L);
2431   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2432   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2433   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2434   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2435   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 4.148847925325683229178506116378864361396e-4916L);
2436   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2437   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -4.148847925325683229178506116378864361396e-4916L);
2438   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2439   TEST_c_c (cacosh, 0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2440   TEST_c_c (cacosh, 0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2441   TEST_c_c (cacosh, -0.0L, 0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, 1.570796326794896619231321691639751442099L);
2442   TEST_c_c (cacosh, -0.0L, -0x1.0000000000000000000000000001p0L, 8.813735870195430252326093249797924452120e-1L, -1.570796326794896619231321691639751442099L);
2443   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 0.0L);
2444   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, 0.0L, 1.962615573354718824241727964954454332780e-17L, 3.141592653589793238462643383279502884197L);
2445   TEST_c_c (cacosh, 0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -0.0L);
2446   TEST_c_c (cacosh, -0x1.0000000000000000000000000001p0L, -0.0L, 1.962615573354718824241727964954454332780e-17L, -3.141592653589793238462643383279502884197L);
2447 #endif
2448   TEST_c_c (cacosh, 0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796242501197085295336701632142060969L);
2449   TEST_c_c (cacosh, 0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796242501197085295336701632142060969L);
2450   TEST_c_c (cacosh, -0x1p-23L, 0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, 1.570796411088596153167306681647360823228L);
2451   TEST_c_c (cacosh, -0x1p-23L, -0x0.ffffffp0L, 8.813735448726963984495965873956465777250e-1L, -1.570796411088596153167306681647360823228L);
2452   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 4.391863861910487109445187743978204002614e-4L);
2453   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1p-23L, 2.714321200917194650737217746780928423385e-4L, 3.141153467203602189751698864505105063797L);
2454   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -4.391863861910487109445187743978204002614e-4L);
2455   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1p-23L, 2.714321200917194650737217746780928423385e-4L, -3.141153467203602189751698864505105063797L);
2456   TEST_c_c (cacosh, 0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442097L);
2457   TEST_c_c (cacosh, 0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442097L);
2458   TEST_c_c (cacosh, -0x1.fp-129L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442101L);
2459   TEST_c_c (cacosh, -0x1.fp-129L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442101L);
2460   TEST_c_c (cacosh, 0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.452669847162035876032494826387364972849e-4L);
2461   TEST_c_c (cacosh, -0x0.ffffffp0L, 0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, 3.141247386605077034875040133796864147700L);
2462   TEST_c_c (cacosh, 0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.452669847162035876032494826387364972849e-4L);
2463   TEST_c_c (cacosh, -0x0.ffffffp0L, -0x1.fp-129L, 8.245504387859737323891843603996428534945e-36L, -3.141247386605077034875040133796864147700L);
2464   TEST_c_c (cacosh, 0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2465   TEST_c_c (cacosh, 0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2466   TEST_c_c (cacosh, -0.0L, 0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, 1.570796326794896619231321691639751442099L);
2467   TEST_c_c (cacosh, -0.0L, -0x0.ffffffp0L, 8.813735448726938863015878255140556727969e-1L, -1.570796326794896619231321691639751442099L);
2468   TEST_c_c (cacosh, 0x0.ffffffp0L, 0.0L, 0.0L, 3.452669847162035876032494826387364972849e-4L);
2469   TEST_c_c (cacosh, -0x0.ffffffp0L, 0.0L, 0.0L, 3.141247386605077034875040133796864147700L);
2470   TEST_c_c (cacosh, 0x0.ffffffp0L, -0.0L, 0.0L, -3.452669847162035876032494826387364972849e-4L);
2471   TEST_c_c (cacosh, -0x0.ffffffp0L, -0.0L, 0.0L, -3.141247386605077034875040133796864147700L);
2472   TEST_c_c (cacosh, 0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796220170866625230343643673321150378L);
2473   TEST_c_c (cacosh, 0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796220170866625230343643673321150378L);
2474   TEST_c_c (cacosh, -0x1p-23L, 0.5L, 4.812118250596059896127318386463676808798e-1L, 1.570796433418926613232299739606181733819L);
2475   TEST_c_c (cacosh, -0x1p-23L, -0.5L, 4.812118250596059896127318386463676808798e-1L, -1.570796433418926613232299739606181733819L);
2476   TEST_c_c (cacosh, 0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 1.047197551196603215914744618665204532273L);
2477   TEST_c_c (cacosh, -0.5L, 0x1p-23L, 1.376510308240943236356088341381173571841e-7L, 2.094395102393190022547898764614298351924L);
2478   TEST_c_c (cacosh, 0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -1.047197551196603215914744618665204532273L);
2479   TEST_c_c (cacosh, -0.5L, -0x1p-23L, 1.376510308240943236356088341381173571841e-7L, -2.094395102393190022547898764614298351924L);
2480   TEST_c_c (cacosh, 0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442096L);
2481   TEST_c_c (cacosh, 0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442096L);
2482   TEST_c_c (cacosh, -0x1.fp-129L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442101L);
2483   TEST_c_c (cacosh, -0x1.fp-129L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442101L);
2484   TEST_c_c (cacosh, 0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2485   TEST_c_c (cacosh, -0.5L, 0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2486   TEST_c_c (cacosh, 0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_FLOAT);
2487   TEST_c_c (cacosh, -0.5L, -0x1.fp-129L, 3.287317402534702257036015056278368274737e-39L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_FLOAT);
2488   TEST_c_c (cacosh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796207585607068450636380271254316214L);
2489   TEST_c_c (cacosh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796207585607068450636380271254316214L);
2490   TEST_c_c (cacosh, -0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.570796446004186170012007003008248567984L);
2491   TEST_c_c (cacosh, -0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.570796446004186170012007003008248567984L);
2492   TEST_c_c (cacosh, 0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442096L);
2493   TEST_c_c (cacosh, 0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442096L);
2494   TEST_c_c (cacosh, -0x1.fp-129L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442101L);
2495   TEST_c_c (cacosh, -0x1.fp-129L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442101L);
2496   TEST_c_c (cacosh, 0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2497   TEST_c_c (cacosh, -0x1p-23L, 0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, 1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2498   TEST_c_c (cacosh, 0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796207585607068449789347324000006847L, UNDERFLOW_EXCEPTION_FLOAT);
2499   TEST_c_c (cacosh, -0x1p-23L, -0x1.fp-129L, 2.846900380897747786805634596726756660388e-39L, -1.570796446004186170012854035955502877351L, UNDERFLOW_EXCEPTION_FLOAT);
2500   TEST_c_c (cacosh, 0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2501   TEST_c_c (cacosh, 0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2502   TEST_c_c (cacosh, -0.0L, 0x1p-23L, 1.192092895507809676556842485683592032154e-7L, 1.570796326794896619231321691639751442099L);
2503   TEST_c_c (cacosh, -0.0L, -0x1p-23L, 1.192092895507809676556842485683592032154e-7L, -1.570796326794896619231321691639751442099L);
2504   TEST_c_c (cacosh, 0x1p-23L, 0.0L, 0.0L, 1.570796207585607068449789347324000006847L);
2505   TEST_c_c (cacosh, -0x1p-23L, 0.0L, 0.0L, 1.570796446004186170012854035955502877351L);
2506   TEST_c_c (cacosh, 0x1p-23L, -0.0L, 0.0L, -1.570796207585607068449789347324000006847L);
2507   TEST_c_c (cacosh, -0x1p-23L, -0.0L, 0.0L, -1.570796446004186170012854035955502877351L);
2508   TEST_c_c (cacosh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2509   TEST_c_c (cacosh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442096L, UNDERFLOW_EXCEPTION_FLOAT);
2510   TEST_c_c (cacosh, -0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2511   TEST_c_c (cacosh, -0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -1.570796326794896619231321691639751442101L, UNDERFLOW_EXCEPTION_FLOAT);
2512 #ifndef TEST_FLOAT
2513   TEST_c_c (cacosh, 0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896462222075823262236786996L);
2514   TEST_c_c (cacosh, 0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896462222075823262236786996L);
2515   TEST_c_c (cacosh, -0x1p-52L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, 1.570796326794896776240567560017266097201L);
2516   TEST_c_c (cacosh, -0x1p-52L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910458761820e-1L, -1.570796326794896776240567560017266097201L);
2517   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 1.895456983915074112227925127005564372844e-8L);
2518   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1p-52L, 1.171456840272878582596796205397918831268e-8L, 3.141592634635223399311902261000251614142L);
2519   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -1.895456983915074112227925127005564372844e-8L);
2520   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1p-52L, 1.171456840272878582596796205397918831268e-8L, -3.141592634635223399311902261000251614142L);
2521   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2522   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2523   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2524   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2525   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2526   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, 3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2527   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -1.490116119384765638786343542550461592240e-8L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2528   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, 3.616396521699973256461764099945789620604e-301L, -3.141592638688632044614986995416067458693L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2529   TEST_c_c (cacosh, 0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2530   TEST_c_c (cacosh, 0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2531   TEST_c_c (cacosh, -0.0L, 0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, 1.570796326794896619231321691639751442099L);
2532   TEST_c_c (cacosh, -0.0L, -0x0.fffffffffffff8p0L, 8.813735870195429467279863907910371604180e-1L, -1.570796326794896619231321691639751442099L);
2533   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, 0.0L, 0.0L, 1.490116119384765638786343542550461592240e-8L);
2534   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, 0.0L, 0.0L, 3.141592638688632044614986995416067458693L);
2535   TEST_c_c (cacosh, 0x0.fffffffffffff8p0L, -0.0L, 0.0L, -1.490116119384765638786343542550461592240e-8L);
2536   TEST_c_c (cacosh, -0x0.fffffffffffff8p0L, -0.0L, 0.0L, -3.141592638688632044614986995416067458693L);
2537 #endif
2538   TEST_c_c (cacosh, 0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896420628589431857911675917L);
2539   TEST_c_c (cacosh, 0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896420628589431857911675917L);
2540   TEST_c_c (cacosh, -0x1p-52L, 0.5L, 4.812118250596034474977589134243772428682e-1L, 1.570796326794896817834053951421591208280L);
2541   TEST_c_c (cacosh, -0x1p-52L, -0.5L, 4.812118250596034474977589134243772428682e-1L, -1.570796326794896817834053951421591208280L);
2542   TEST_c_c (cacosh, 0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 1.047197551196597746154214461093186605110L);
2543   TEST_c_c (cacosh, -0.5L, 0x1p-52L, 2.563950248511418570403591756798643804971e-16L, 2.094395102393195492308428922186316279087L);
2544   TEST_c_c (cacosh, 0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -1.047197551196597746154214461093186605110L);
2545   TEST_c_c (cacosh, -0.5L, -0x1p-52L, 2.563950248511418570403591756798643804971e-16L, -2.094395102393195492308428922186316279087L);
2546 #ifndef TEST_FLOAT
2547   TEST_c_c (cacosh, 0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2548   TEST_c_c (cacosh, 0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2549   TEST_c_c (cacosh, -0x1.fp-1025L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2550   TEST_c_c (cacosh, -0x1.fp-1025L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2551   TEST_c_c (cacosh, 0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2552   TEST_c_c (cacosh, -0.5L, 0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2553   TEST_c_c (cacosh, 0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION_DOUBLE);
2554   TEST_c_c (cacosh, -0.5L, -0x1.fp-1025L, 6.222508863508420569166420770843207333493e-309L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION_DOUBLE);
2555 #endif
2556   TEST_c_c (cacosh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896397186716766608443357372L);
2557   TEST_c_c (cacosh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896397186716766608443357372L);
2558   TEST_c_c (cacosh, -0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 1.570796326794896841275926616671059526825L);
2559   TEST_c_c (cacosh, -0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -1.570796326794896841275926616671059526825L);
2560 #ifndef TEST_FLOAT
2561   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2562   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2563   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2564   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2565   TEST_c_c (cacosh, 0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2566   TEST_c_c (cacosh, -0x1p-52L, 0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, 1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2567   TEST_c_c (cacosh, 0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896397186716766608443357372L, UNDERFLOW_EXCEPTION_DOUBLE);
2568   TEST_c_c (cacosh, -0x1p-52L, -0x1.fp-1025L, 5.388850751072128349671657362289548938458e-309L, -1.570796326794896841275926616671059526825L, UNDERFLOW_EXCEPTION_DOUBLE);
2569 #endif
2570   TEST_c_c (cacosh, 0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2571   TEST_c_c (cacosh, 0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2572   TEST_c_c (cacosh, -0.0L, 0x1p-52L, 2.220446049250313080847263336181622378926e-16L, 1.570796326794896619231321691639751442099L);
2573   TEST_c_c (cacosh, -0.0L, -0x1p-52L, 2.220446049250313080847263336181622378926e-16L, -1.570796326794896619231321691639751442099L);
2574   TEST_c_c (cacosh, 0x1p-52L, 0.0L, 0.0L, 1.570796326794896397186716766608443357372L);
2575   TEST_c_c (cacosh, -0x1p-52L, 0.0L, 0.0L, 1.570796326794896841275926616671059526825L);
2576   TEST_c_c (cacosh, 0x1p-52L, -0.0L, 0.0L, -1.570796326794896397186716766608443357372L);
2577   TEST_c_c (cacosh, -0x1p-52L, -0.0L, 0.0L, -1.570796326794896841275926616671059526825L);
2578 #ifndef TEST_FLOAT
2579   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2580   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2581   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2582   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
2583 #endif
2584 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
2585   TEST_c_c (cacosh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619154657020805582738025L);
2586   TEST_c_c (cacosh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619154657020805582738025L);
2587   TEST_c_c (cacosh, -0x1p-63L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, 1.570796326794896619307986362473920146173L);
2588   TEST_c_c (cacosh, -0x1p-63L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569937e-1L, -1.570796326794896619307986362473920146173L);
2589   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 4.188407771167967636741951941902992986043e-10L);
2590   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1p-63L, 2.588578361325995866221775673638805081337e-10L, 3.141592653170952461345846619605307690007L);
2591   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -4.188407771167967636741951941902992986043e-10L);
2592   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1p-63L, 2.588578361325995866221775673638805081337e-10L, -3.141592653170952461345846619605307690007L);
2593 # if LDBL_MIN_EXP <= -16381
2594   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2595   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2596   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2597   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2598   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.292722539913596233371825532007990724506e-10L);
2599   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, 3.141592653260520984471283759942320330996L);
2600   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.292722539913596233371825532007990724506e-10L);
2601   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 2.472906068161537187835415298076415423459e-4923L, -3.141592653260520984471283759942320330996L);
2602 # endif
2603   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2604   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2605   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, 1.570796326794896619231321691639751442099L);
2606   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffp0L, 8.813735870195430251942769895627079569917e-1L, -1.570796326794896619231321691639751442099L);
2607   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.292722539913596233371825532007990724506e-10L);
2608   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, 0.0L, 0.0L, 3.141592653260520984471283759942320330996L);
2609   TEST_c_c (cacosh, 0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.292722539913596233371825532007990724506e-10L);
2610   TEST_c_c (cacosh, -0x0.ffffffffffffffffp0L, -0.0L, 0.0L, -3.141592653260520984471283759942320330996L);
2611 #endif
2612   TEST_c_c (cacosh, 0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619134347701278529840650L);
2613   TEST_c_c (cacosh, 0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619134347701278529840650L);
2614   TEST_c_c (cacosh, -0x1p-63L, 0.5L, 4.812118250596034474977589134243684231373e-1L, 1.570796326794896619328295682000973043547L);
2615   TEST_c_c (cacosh, -0x1p-63L, -0.5L, 4.812118250596034474977589134243684231373e-1L, -1.570796326794896619328295682000973043547L);
2616   TEST_c_c (cacosh, 0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 1.047197551196597746154214461093167628070L);
2617   TEST_c_c (cacosh, -0.5L, 0x1p-63L, 1.251928832280966098829878787499365228659e-19L, 2.094395102393195492308428922186335256127L);
2618   TEST_c_c (cacosh, 0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -1.047197551196597746154214461093167628070L);
2619   TEST_c_c (cacosh, -0.5L, -0x1p-63L, 1.251928832280966098829878787499365228659e-19L, -2.094395102393195492308428922186335256127L);
2620 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2621   TEST_c_c (cacosh, 0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2622   TEST_c_c (cacosh, 0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2623   TEST_c_c (cacosh, -0x1.fp-16385L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751442099L);
2624   TEST_c_c (cacosh, -0x1.fp-16385L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751442099L);
2625   TEST_c_c (cacosh, 0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2626   TEST_c_c (cacosh, -0.5L, 0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, 2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2627   TEST_c_c (cacosh, 0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -1.047197551196597746154214461093167628066L, UNDERFLOW_EXCEPTION);
2628   TEST_c_c (cacosh, -0.5L, -0x1.fp-16385L, 9.402257155670418112159334875199821342890e-4933L, -2.094395102393195492308428922186335256131L, UNDERFLOW_EXCEPTION);
2629 #endif
2630   TEST_c_c (cacosh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619122901474391200998698L);
2631   TEST_c_c (cacosh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619122901474391200998698L);
2632   TEST_c_c (cacosh, -0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.570796326794896619339741908888301885499L);
2633   TEST_c_c (cacosh, -0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.570796326794896619339741908888301885499L);
2634 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2635   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2636   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2637   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2638   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2639   TEST_c_c (cacosh, 0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2640   TEST_c_c (cacosh, -0x1p-63L, 0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, 1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2641   TEST_c_c (cacosh, 0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION);
2642   TEST_c_c (cacosh, -0x1p-63L, -0x1.fp-16385L, 8.142593549724601460479922838826119584465e-4933L, -1.570796326794896619339741908888301885499L, UNDERFLOW_EXCEPTION);
2643 #endif
2644   TEST_c_c (cacosh, 0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2645   TEST_c_c (cacosh, 0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2646   TEST_c_c (cacosh, -0.0L, 0x1p-63L, 1.084202172485504434007452800869941711424e-19L, 1.570796326794896619231321691639751442099L);
2647   TEST_c_c (cacosh, -0.0L, -0x1p-63L, 1.084202172485504434007452800869941711424e-19L, -1.570796326794896619231321691639751442099L);
2648   TEST_c_c (cacosh, 0x1p-63L, 0.0L, 0.0L, 1.570796326794896619122901474391200998698L);
2649   TEST_c_c (cacosh, -0x1p-63L, 0.0L, 0.0L, 1.570796326794896619339741908888301885499L);
2650   TEST_c_c (cacosh, 0x1p-63L, -0.0L, 0.0L, -1.570796326794896619122901474391200998698L);
2651   TEST_c_c (cacosh, -0x1p-63L, -0.0L, 0.0L, -1.570796326794896619339741908888301885499L);
2652 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2653   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2654   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2655   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2656   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
2657 #endif
2658 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
2659   TEST_c_c (cacosh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639734010571L);
2660   TEST_c_c (cacosh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639734010571L);
2661   TEST_c_c (cacosh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639768873627L);
2662   TEST_c_c (cacosh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639768873627L);
2663   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 1.997188458999618357060632049675702684031e-16L);
2664   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.234330349600789959989661887846005659983e-16L, 3.141592653589793038743797483317667178134L);
2665   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -1.997188458999618357060632049675702684031e-16L);
2666   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.234330349600789959989661887846005659983e-16L, -3.141592653589793038743797483317667178134L);
2667   TEST_c_c (cacosh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2668   TEST_c_c (cacosh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2669   TEST_c_c (cacosh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2670   TEST_c_c (cacosh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2671   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2672   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, 3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2673   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -1.570092458683775059393382371963565104164e-16L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2674   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 3.432186888910770473784103112009399360940e-293L, -3.141592653589793081453397514901996944859L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
2675   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2676   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2677   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, 1.570796326794896619231321691639751442099L);
2678   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 8.813735870195430252326093249797835932642e-1L, -1.570796326794896619231321691639751442099L);
2679   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 1.570092458683775059393382371963565104164e-16L);
2680   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 0.0L, 3.141592653589793081453397514901996944859L);
2681   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -1.570092458683775059393382371963565104164e-16L);
2682   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 0.0L, -3.141592653589793081453397514901996944859L);
2683 #endif
2684   TEST_c_c (cacosh, 0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639729392766L);
2685   TEST_c_c (cacosh, 0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639729392766L);
2686   TEST_c_c (cacosh, -0x1p-105L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639773491431L);
2687   TEST_c_c (cacosh, -0x1p-105L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639773491431L);
2688   TEST_c_c (cacosh, 0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 1.047197551196597746154214461093167628066L);
2689   TEST_c_c (cacosh, -0.5L, 0x1p-105L, 2.846556599890768890940941645338546615370e-32L, 2.094395102393195492308428922186335256131L);
2690   TEST_c_c (cacosh, 0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -1.047197551196597746154214461093167628066L);
2691   TEST_c_c (cacosh, -0.5L, -0x1p-105L, 2.846556599890768890940941645338546615370e-32L, -2.094395102393195492308428922186335256131L);
2692   TEST_c_c (cacosh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639726790195L);
2693   TEST_c_c (cacosh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639726790195L);
2694   TEST_c_c (cacosh, -0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639776094002L);
2695   TEST_c_c (cacosh, -0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639776094002L);
2696 #ifndef TEST_FLOAT
2697   TEST_c_c (cacosh, 0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2698   TEST_c_c (cacosh, 0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2699   TEST_c_c (cacosh, -0x1.fp-1025L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2700   TEST_c_c (cacosh, -0x1.fp-1025L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2701   TEST_c_c (cacosh, 0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2702   TEST_c_c (cacosh, -0x1p-105L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2703   TEST_c_c (cacosh, 0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639726790195L, UNDERFLOW_EXCEPTION_DOUBLE);
2704   TEST_c_c (cacosh, -0x1p-105L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -1.570796326794896619231321691639776094002L, UNDERFLOW_EXCEPTION_DOUBLE);
2705 #endif
2706   TEST_c_c (cacosh, 0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2707   TEST_c_c (cacosh, 0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2708   TEST_c_c (cacosh, -0.0L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 1.570796326794896619231321691639751442099L);
2709   TEST_c_c (cacosh, -0.0L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -1.570796326794896619231321691639751442099L);
2710   TEST_c_c (cacosh, 0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639726790195L);
2711   TEST_c_c (cacosh, -0x1p-105L, 0.0L, 0.0L, 1.570796326794896619231321691639776094002L);
2712   TEST_c_c (cacosh, 0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639726790195L);
2713   TEST_c_c (cacosh, -0x1p-105L, -0.0L, 0.0L, -1.570796326794896619231321691639776094002L);
2714 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
2715   TEST_c_c (cacosh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751305915L);
2716   TEST_c_c (cacosh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751305915L);
2717   TEST_c_c (cacosh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751578282L);
2718   TEST_c_c (cacosh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751578282L);
2719   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 1.765281878332676474347460257221369818872e-17L);
2720   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.091004200533850618345330909857103457781e-17L, 3.141592653589793220809824599952738140723L);
2721   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -1.765281878332676474347460257221369818872e-17L);
2722   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.091004200533850618345330909857103457781e-17L, -3.141592653589793220809824599952738140723L);
2723   TEST_c_c (cacosh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2724   TEST_c_c (cacosh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2725   TEST_c_c (cacosh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2726   TEST_c_c (cacosh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2727   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 1.387778780781445675529539585113525401762e-17L);
2728   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, 3.141592653589793224584855575465046128902L);
2729   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -1.387778780781445675529539585113525401762e-17L);
2730   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 5.867357004219059108790368268900490184505e-4916L, -3.141592653589793224584855575465046128902L);
2731   TEST_c_c (cacosh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2732   TEST_c_c (cacosh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2733   TEST_c_c (cacosh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, 1.570796326794896619231321691639751442099L);
2734   TEST_c_c (cacosh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 8.813735870195430252326093249797922409363e-1L, -1.570796326794896619231321691639751442099L);
2735   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 1.387778780781445675529539585113525401762e-17L);
2736   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 0.0L, 3.141592653589793224584855575465046128902L);
2737   TEST_c_c (cacosh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -1.387778780781445675529539585113525401762e-17L);
2738   TEST_c_c (cacosh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 0.0L, -3.141592653589793224584855575465046128902L);
2739 #endif
2740   TEST_c_c (cacosh, 0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751269838L);
2741   TEST_c_c (cacosh, 0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751269838L);
2742   TEST_c_c (cacosh, -0x1p-112L, 0.5L, 4.812118250596034474977589134243684231352e-1L, 1.570796326794896619231321691639751614359L);
2743   TEST_c_c (cacosh, -0x1p-112L, -0.5L, 4.812118250596034474977589134243684231352e-1L, -1.570796326794896619231321691639751614359L);
2744   TEST_c_c (cacosh, 0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 1.047197551196597746154214461093167628066L);
2745   TEST_c_c (cacosh, -0.5L, 0x1p-112L, 2.223872343664663196047610660420739543258e-34L, 2.094395102393195492308428922186335256131L);
2746   TEST_c_c (cacosh, 0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -1.047197551196597746154214461093167628066L);
2747   TEST_c_c (cacosh, -0.5L, -0x1p-112L, 2.223872343664663196047610660420739543258e-34L, -2.094395102393195492308428922186335256131L);
2748   TEST_c_c (cacosh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751249506L);
2749   TEST_c_c (cacosh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751249506L);
2750   TEST_c_c (cacosh, -0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751634692L);
2751   TEST_c_c (cacosh, -0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751634692L);
2752 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2753   TEST_c_c (cacosh, 0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2754   TEST_c_c (cacosh, 0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2755   TEST_c_c (cacosh, -0x1.fp-16385L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2756   TEST_c_c (cacosh, -0x1.fp-16385L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2757   TEST_c_c (cacosh, 0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2758   TEST_c_c (cacosh, -0x1p-112L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2759   TEST_c_c (cacosh, 0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751249506L, UNDERFLOW_EXCEPTION);
2760   TEST_c_c (cacosh, -0x1p-112L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -1.570796326794896619231321691639751634692L, UNDERFLOW_EXCEPTION);
2761 #endif
2762   TEST_c_c (cacosh, 0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2763   TEST_c_c (cacosh, 0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2764   TEST_c_c (cacosh, -0.0L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.570796326794896619231321691639751442099L);
2765   TEST_c_c (cacosh, -0.0L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.570796326794896619231321691639751442099L);
2766   TEST_c_c (cacosh, 0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751249506L);
2767   TEST_c_c (cacosh, -0x1p-112L, 0.0L, 0.0L, 1.570796326794896619231321691639751634692L);
2768   TEST_c_c (cacosh, 0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751249506L);
2769   TEST_c_c (cacosh, -0x1p-112L, -0.0L, 0.0L, -1.570796326794896619231321691639751634692L);
2770
2771   TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
2772   TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
2773
2774   END (cacosh, complex);
2775 }
2776
2777
2778 static void
2779 carg_test (void)
2780 {
2781   START (carg);
2782
2783   /* carg (x + iy) is specified as atan2 (y, x) */
2784
2785   /* carg (x + i 0) == 0 for x > 0.  */
2786   TEST_c_f (carg, 2.0, 0, 0);
2787   /* carg (x - i 0) == -0 for x > 0.  */
2788   TEST_c_f (carg, 2.0, minus_zero, minus_zero);
2789
2790   TEST_c_f (carg, 0, 0, 0);
2791   TEST_c_f (carg, 0, minus_zero, minus_zero);
2792
2793   /* carg (x + i 0) == +pi for x < 0.  */
2794   TEST_c_f (carg, -2.0, 0, M_PIl);
2795
2796   /* carg (x - i 0) == -pi for x < 0.  */
2797   TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
2798
2799   TEST_c_f (carg, minus_zero, 0, M_PIl);
2800   TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
2801
2802   /* carg (+0 + i y) == pi/2 for y > 0.  */
2803   TEST_c_f (carg, 0, 2.0, M_PI_2l);
2804
2805   /* carg (-0 + i y) == pi/2 for y > 0.  */
2806   TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
2807
2808   /* carg (+0 + i y) == -pi/2 for y < 0.  */
2809   TEST_c_f (carg, 0, -2.0, -M_PI_2l);
2810
2811   /* carg (-0 + i y) == -pi/2 for y < 0.  */
2812   TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
2813
2814   /* carg (inf + i y) == +0 for finite y > 0.  */
2815   TEST_c_f (carg, plus_infty, 2.0, 0);
2816
2817   /* carg (inf + i y) == -0 for finite y < 0.  */
2818   TEST_c_f (carg, plus_infty, -2.0, minus_zero);
2819
2820   /* carg(x + i inf) == pi/2 for finite x.  */
2821   TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
2822
2823   /* carg(x - i inf) == -pi/2 for finite x.  */
2824   TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
2825
2826   /* carg (-inf + i y) == +pi for finite y > 0.  */
2827   TEST_c_f (carg, minus_infty, 10.0, M_PIl);
2828
2829   /* carg (-inf + i y) == -pi for finite y < 0.  */
2830   TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
2831
2832   TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
2833
2834   TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
2835
2836   TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
2837
2838   TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
2839
2840   TEST_c_f (carg, qnan_value, qnan_value, qnan_value);
2841
2842   END (carg);
2843 }
2844
2845 static void
2846 casin_test (void)
2847 {
2848   errno = 0;
2849   FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
2850   if (errno == ENOSYS)
2851     /* Function not implemented.  */
2852     return;
2853
2854   START (casin);
2855
2856   TEST_c_c (casin, 0, 0, 0.0, 0.0);
2857   TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
2858   TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
2859   TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
2860
2861   TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
2862   TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
2863   TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
2864   TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
2865
2866   TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
2867   TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
2868   TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
2869   TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
2870   TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
2871   TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
2872   TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
2873   TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
2874
2875   TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
2876   TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
2877   TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
2878   TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
2879
2880   TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
2881   TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
2882   TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
2883   TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
2884
2885   TEST_c_c (casin, qnan_value, plus_infty, qnan_value, plus_infty);
2886   TEST_c_c (casin, qnan_value, minus_infty, qnan_value, minus_infty);
2887
2888   TEST_c_c (casin, 0.0, qnan_value, 0.0, qnan_value);
2889   TEST_c_c (casin, minus_zero, qnan_value, minus_zero, qnan_value);
2890
2891   TEST_c_c (casin, plus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2892   TEST_c_c (casin, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2893
2894   TEST_c_c (casin, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2895   TEST_c_c (casin, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2896
2897   TEST_c_c (casin, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2898   TEST_c_c (casin, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
2899
2900   TEST_c_c (casin, qnan_value, qnan_value, qnan_value, qnan_value);
2901
2902   TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
2903   TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
2904   TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
2905   TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
2906   TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
2907   TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
2908   TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
2909   TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
2910   TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
2911   TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
2912   TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
2913   TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
2914
2915   TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
2916   TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
2917   TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
2918   TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
2919   TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
2920   TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
2921   TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
2922   TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
2923   TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
2924   TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
2925   TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
2926   TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
2927
2928   TEST_c_c (casin, 0x1p50L, 1.0L, 1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2929   TEST_c_c (casin, 0x1p50L, -1.0L, 1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2930   TEST_c_c (casin, -0x1p50L, 1.0L, -1.570796326794895731052901991514519103193L, 3.535050620855721078027883819436720218708e1L);
2931   TEST_c_c (casin, -0x1p50L, -1.0L, -1.570796326794895731052901991514519103193L, -3.535050620855721078027883819436720218708e1L);
2932   TEST_c_c (casin, 1.0L, 0x1p50L, 8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2933   TEST_c_c (casin, -1.0L, 0x1p50L, -8.881784197001252323389053344720723756399e-16L, 3.535050620855721078027883819436759661753e1L);
2934   TEST_c_c (casin, 1.0L, -0x1p50L, 8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2935   TEST_c_c (casin, -1.0L, -0x1p50L, -8.881784197001252323389053344720723756399e-16L, -3.535050620855721078027883819436759661753e1L);
2936 #ifndef TEST_FLOAT
2937   TEST_c_c (casin, 0x1p500L, 1.0L, 1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2938   TEST_c_c (casin, 0x1p500L, -1.0L, 1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2939   TEST_c_c (casin, -0x1p500L, 1.0L, -1.570796326794896619231321691639751442099L, 3.472667374605326000180332928505464606058e2L);
2940   TEST_c_c (casin, -0x1p500L, -1.0L, -1.570796326794896619231321691639751442099L, -3.472667374605326000180332928505464606058e2L);
2941   TEST_c_c (casin, 1.0L, 0x1p500L, 3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2942   TEST_c_c (casin, -1.0L, 0x1p500L, -3.054936363499604682051979393213617699789e-151L, 3.472667374605326000180332928505464606058e2L);
2943   TEST_c_c (casin, 1.0L, -0x1p500L, 3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2944   TEST_c_c (casin, -1.0L, -0x1p500L, -3.054936363499604682051979393213617699789e-151L, -3.472667374605326000180332928505464606058e2L);
2945 #endif
2946 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2947   TEST_c_c (casin, 0x1p5000L, 1.0L, 1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2948   TEST_c_c (casin, 0x1p5000L, -1.0L, 1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2949   TEST_c_c (casin, -0x1p5000L, 1.0L, -1.570796326794896619231321691639751442099L, 3.466429049980286492395577839412341016946e3L);
2950   TEST_c_c (casin, -0x1p5000L, -1.0L, -1.570796326794896619231321691639751442099L, -3.466429049980286492395577839412341016946e3L);
2951   TEST_c_c (casin, 1.0L, 0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2952   TEST_c_c (casin, -1.0L, 0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, 3.466429049980286492395577839412341016946e3L);
2953   TEST_c_c (casin, 1.0L, -0x1p5000L, 7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2954   TEST_c_c (casin, -1.0L, -0x1p5000L, -7.079811261048172892385615158694057552948e-1506L, -3.466429049980286492395577839412341016946e3L);
2955 #endif
2956
2957   TEST_c_c (casin, 0x1.fp127L, 0x1.fp127L, 7.853981633974483096156608458198757210493e-1L, 8.973081118419833726837456344608533993585e1L);
2958 #ifndef TEST_FLOAT
2959   TEST_c_c (casin, 0x1.fp1023L, 0x1.fp1023L, 7.853981633974483096156608458198757210493e-1L, 7.107906849659093345062145442726115449315e2L);
2960 #endif
2961 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2962   TEST_c_c (casin, 0x1.fp16383L, 0x1.fp16383L, 7.853981633974483096156608458198757210493e-1L, 1.135753137836666928715489992987020363057e4L);
2963 #endif
2964
2965   TEST_c_c (casin, 0x1.fp-129L, 1.5L, 1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2966   TEST_c_c (casin, 0x1.fp-129L, -1.5L, 1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2967   TEST_c_c (casin, -0x1.fp-129L, 1.5L, -1.579176199917649005841160751101628985741e-39L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2968   TEST_c_c (casin, -0x1.fp-129L, -1.5L, -1.579176199917649005841160751101628985741e-39L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_FLOAT);
2969   TEST_c_c (casin, 1.5L, 0x1.fp-129L, 1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2970   TEST_c_c (casin, -1.5L, 0x1.fp-129L, -1.570796326794896619231321691639751442096L, 9.624236501192068949955178268487368462704e-1L);
2971   TEST_c_c (casin, 1.5L, -0x1.fp-129L, 1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2972   TEST_c_c (casin, -1.5L, -0x1.fp-129L, -1.570796326794896619231321691639751442096L, -9.624236501192068949955178268487368462704e-1L);
2973 #ifndef TEST_FLOAT
2974   TEST_c_c (casin, 0x1.fp-1025L, 1.5L, 2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2975   TEST_c_c (casin, 0x1.fp-1025L, -1.5L, 2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2976   TEST_c_c (casin, -0x1.fp-1025L, 1.5L, -2.989196569048182929051881765490354365918e-309L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2977   TEST_c_c (casin, -0x1.fp-1025L, -1.5L, -2.989196569048182929051881765490354365918e-309L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION_DOUBLE);
2978   TEST_c_c (casin, 1.5L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2979   TEST_c_c (casin, -1.5L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2980   TEST_c_c (casin, 1.5L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2981   TEST_c_c (casin, -1.5L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2982 #endif
2983 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
2984   TEST_c_c (casin, 0x1.fp-16385L, 1.5L, 4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2985   TEST_c_c (casin, 0x1.fp-16385L, -1.5L, 4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2986   TEST_c_c (casin, -0x1.fp-16385L, 1.5L, -4.516698239814521372306784062043266700598e-4933L, 1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2987   TEST_c_c (casin, -0x1.fp-16385L, -1.5L, -4.516698239814521372306784062043266700598e-4933L, -1.194763217287109304111930828519090523536L, UNDERFLOW_EXCEPTION);
2988   TEST_c_c (casin, 1.5L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2989   TEST_c_c (casin, -1.5L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.624236501192068949955178268487368462704e-1L);
2990   TEST_c_c (casin, 1.5L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2991   TEST_c_c (casin, -1.5L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.624236501192068949955178268487368462704e-1L);
2992 #endif
2993
2994   TEST_c_c (casin, 0.5L, 1.0L, 3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2995   TEST_c_c (casin, 0.5L, -1.0L, 3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2996   TEST_c_c (casin, -0.5L, 1.0L, -3.494390628572132936274118260753699527325e-1L, 9.261330313501824245501244453057873152694e-1L);
2997   TEST_c_c (casin, -0.5L, -1.0L, -3.494390628572132936274118260753699527325e-1L, -9.261330313501824245501244453057873152694e-1L);
2998   TEST_c_c (casin, 1.0L, 0.5L, 8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
2999   TEST_c_c (casin, -1.0L, 0.5L, -8.959074812088902390666567243275770102229e-1L, 7.328576759736452608886724437653071523305e-1L);
3000   TEST_c_c (casin, 1.0L, -0.5L, 8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3001   TEST_c_c (casin, -1.0L, -0.5L, -8.959074812088902390666567243275770102229e-1L, -7.328576759736452608886724437653071523305e-1L);
3002   TEST_c_c (casin, 0.25L, 1.0L, 1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3003   TEST_c_c (casin, 0.25L, -1.0L, 1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3004   TEST_c_c (casin, -0.25L, 1.0L, -1.763024327769669304186785666360901026468e-1L, 8.924633639033482359562124741744951972772e-1L);
3005   TEST_c_c (casin, -0.25L, -1.0L, -1.763024327769669304186785666360901026468e-1L, -8.924633639033482359562124741744951972772e-1L);
3006   TEST_c_c (casin, 1.0L, 0.25L, 1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3007   TEST_c_c (casin, -1.0L, 0.25L, -1.081751996523816326311037318425097434186L, 5.097911466811016354623559941115413499164e-1L);
3008   TEST_c_c (casin, 1.0L, -0.25L, 1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3009   TEST_c_c (casin, -1.0L, -0.25L, -1.081751996523816326311037318425097434186L, -5.097911466811016354623559941115413499164e-1L);
3010   TEST_c_c (casin, 0x1.fp-10L, 1.0L, 1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3011   TEST_c_c (casin, 0x1.fp-10L, -1.0L, 1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3012   TEST_c_c (casin, -0x1.fp-10L, 1.0L, -1.337909359557740912558349531052239112857e-3L, 8.813742198809567991336704287826445879025e-1L);
3013   TEST_c_c (casin, -0x1.fp-10L, -1.0L, -1.337909359557740912558349531052239112857e-3L, -8.813742198809567991336704287826445879025e-1L);
3014   TEST_c_c (casin, 1.0L, 0x1.fp-10L, 1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3015   TEST_c_c (casin, -1.0L, 0x1.fp-10L, -1.527305029163877791518741192097931722508L, 4.350501469856803800217957402220976497152e-2L);
3016   TEST_c_c (casin, 1.0L, -0x1.fp-10L, 1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3017   TEST_c_c (casin, -1.0L, -0x1.fp-10L, -1.527305029163877791518741192097931722508L, -4.350501469856803800217957402220976497152e-2L);
3018   TEST_c_c (casin, 0x1.fp-30L, 1.0L, 1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3019   TEST_c_c (casin, 0x1.fp-30L, -1.0L, 1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3020   TEST_c_c (casin, -0x1.fp-30L, 1.0L, -1.275929984216518540252717485007112529021e-9L, 8.813735870195430258081932989769495326854e-1L);
3021   TEST_c_c (casin, -0x1.fp-30L, -1.0L, -1.275929984216518540252717485007112529021e-9L, -8.813735870195430258081932989769495326854e-1L);
3022   TEST_c_c (casin, 1.0L, 0x1.fp-30L, 1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3023   TEST_c_c (casin, -1.0L, 0x1.fp-30L, -1.570753848123921942730162693731872690232L, 4.247867098745151888768727039216644758847e-5L);
3024   TEST_c_c (casin, 1.0L, -0x1.fp-30L, 1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3025   TEST_c_c (casin, -1.0L, -0x1.fp-30L, -1.570753848123921942730162693731872690232L, -4.247867098745151888768727039216644758847e-5L);
3026   TEST_c_c (casin, 0x1.fp-100L, 1.0L, 1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3027   TEST_c_c (casin, 0x1.fp-100L, -1.0L, 1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3028   TEST_c_c (casin, -0x1.fp-100L, 1.0L, -1.080754735021050612990719608916167354321e-30L, 8.813735870195430252326093249797923090282e-1L);
3029   TEST_c_c (casin, -0x1.fp-100L, -1.0L, -1.080754735021050612990719608916167354321e-30L, -8.813735870195430252326093249797923090282e-1L);
3030   TEST_c_c (casin, 1.0L, 0x1.fp-100L, 1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3031   TEST_c_c (casin, -1.0L, 0x1.fp-100L, -1.570796326794895382939283431378862777584L, 1.236292038260260888664514866457202186027e-15L);
3032   TEST_c_c (casin, 1.0L, -0x1.fp-100L, 1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3033   TEST_c_c (casin, -1.0L, -0x1.fp-100L, -1.570796326794895382939283431378862777584L, -1.236292038260260888664514866457202186027e-15L);
3034   TEST_c_c (casin, 0x1.fp-129L, 1.0L, 2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3035   TEST_c_c (casin, 0x1.fp-129L, -1.0L, 2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3036   TEST_c_c (casin, -0x1.fp-129L, 1.0L, -2.013062564695348242280482517399205554874e-39L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3037   TEST_c_c (casin, -0x1.fp-129L, -1.0L, -2.013062564695348242280482517399205554874e-39L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3038   TEST_c_c (casin, 1.0L, 0x1.fp-129L, 1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3039   TEST_c_c (casin, -1.0L, 0x1.fp-129L, -1.570796326794896619177965338869929107115L, 5.335635276982233498398987585285818977933e-20L);
3040   TEST_c_c (casin, 1.0L, -0x1.fp-129L, 1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3041   TEST_c_c (casin, -1.0L, -0x1.fp-129L, -1.570796326794896619177965338869929107115L, -5.335635276982233498398987585285818977933e-20L);
3042 #ifndef TEST_FLOAT
3043   TEST_c_c (casin, 0x1.fp-1000L, 1.0L, 1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3044   TEST_c_c (casin, 0x1.fp-1000L, -1.0L, 1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3045   TEST_c_c (casin, -0x1.fp-1000L, 1.0L, -1.278589251976747242280879285935084814093e-301L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3046   TEST_c_c (casin, -0x1.fp-1000L, -1.0L, -1.278589251976747242280879285935084814093e-301L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3047   TEST_c_c (casin, 1.0L, 0x1.fp-1000L, 1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3048   TEST_c_c (casin, -1.0L, 0x1.fp-1000L, -1.570796326794896619231321691639751442099L, 4.252291453851660175550490409247739011867e-151L);
3049   TEST_c_c (casin, 1.0L, -0x1.fp-1000L, 1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3050   TEST_c_c (casin, -1.0L, -0x1.fp-1000L, -1.570796326794896619231321691639751442099L, -4.252291453851660175550490409247739011867e-151L);
3051   TEST_c_c (casin, 0x1.fp-1025L, 1.0L, 3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3052   TEST_c_c (casin, 0x1.fp-1025L, -1.0L, 3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3053   TEST_c_c (casin, -0x1.fp-1025L, 1.0L, -3.810492908885321743133304375216617626230e-309L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3054   TEST_c_c (casin, -0x1.fp-1025L, -1.0L, -3.810492908885321743133304375216617626230e-309L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3055   TEST_c_c (casin, 1.0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3056   TEST_c_c (casin, -1.0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 7.340879205566679497036857179189356754017e-155L);
3057   TEST_c_c (casin, 1.0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3058   TEST_c_c (casin, -1.0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -7.340879205566679497036857179189356754017e-155L);
3059 #endif
3060 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3061   TEST_c_c (casin, 0x1.fp-10000L, 1.0L, 6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3062   TEST_c_c (casin, 0x1.fp-10000L, -1.0L, 6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3063   TEST_c_c (casin, -0x1.fp-10000L, 1.0L, -6.867047849047171855399183659351043150871e-3011L, 8.813735870195430252326093249797923090282e-1L);
3064   TEST_c_c (casin, -0x1.fp-10000L, -1.0L, -6.867047849047171855399183659351043150871e-3011L, -8.813735870195430252326093249797923090282e-1L);
3065   TEST_c_c (casin, 1.0L, 0x1.fp-10000L, 1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3066   TEST_c_c (casin, -1.0L, 0x1.fp-10000L, -1.570796326794896619231321691639751442099L, 9.854680208706673586644342922051388714633e-1506L);
3067   TEST_c_c (casin, 1.0L, -0x1.fp-10000L, 1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3068   TEST_c_c (casin, -1.0L, -0x1.fp-10000L, -1.570796326794896619231321691639751442099L, -9.854680208706673586644342922051388714633e-1506L);
3069   TEST_c_c (casin, 0x1.fp-16385L, 1.0L, 5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3070   TEST_c_c (casin, 0x1.fp-16385L, -1.0L, 5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3071   TEST_c_c (casin, -0x1.fp-16385L, 1.0L, -5.757683115456107044131264955348448954458e-4933L, 8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3072   TEST_c_c (casin, -0x1.fp-16385L, -1.0L, -5.757683115456107044131264955348448954458e-4933L, -8.813735870195430252326093249797923090282e-1L, UNDERFLOW_EXCEPTION);
3073   TEST_c_c (casin, 1.0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3074   TEST_c_c (casin, -1.0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 9.023632056840860275214893047597614177639e-2467L);
3075   TEST_c_c (casin, 1.0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3076   TEST_c_c (casin, -1.0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -9.023632056840860275214893047597614177639e-2467L);
3077 #endif
3078
3079   TEST_c_c (casin, 0x1p-23L, 0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
3080   TEST_c_c (casin, 0x1p-23L, -0x1.000002p0L, 8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
3081   TEST_c_c (casin, -0x1p-23L, 0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, 8.813736713132400470205730751186547909968e-1L)
3082   TEST_c_c (casin, -0x1p-23L, -0x1.000002p0L, -8.429369199749229560964789467980644296420e-8L, -8.813736713132400470205730751186547909968e-1L)
3083   TEST_c_c (casin, 0x1.000002p0L, 0x1p-23L, 1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
3084   TEST_c_c (casin, -0x1.000002p0L, 0x1p-23L, -1.570574114956455764594481054234834678422L, 5.364668491573609633134147164031476452679e-4L)
3085   TEST_c_c (casin, 0x1.000002p0L, -0x1p-23L, 1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
3086   TEST_c_c (casin, -0x1.000002p0L, -0x1p-23L, -1.570574114956455764594481054234834678422L, -5.364668491573609633134147164031476452679e-4L)
3087   TEST_c_c (casin, 0x1.fp-129L, 0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3088   TEST_c_c (casin, 0x1.fp-129L, -0x1.000002p0L, 2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3089   TEST_c_c (casin, -0x1.fp-129L, 0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, 8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3090   TEST_c_c (casin, -0x1.fp-129L, -0x1.000002p0L, -2.013062444707472738895109955455676357057e-39L, -8.813736713132375348727889167749389235161e-1L, UNDERFLOW_EXCEPTION_FLOAT)
3091   TEST_c_c (casin, 0x1.000002p0L, 0x1.fp-129L, 1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
3092   TEST_c_c (casin, -0x1.000002p0L, 0x1.fp-129L, -1.570796326794896619231321691639751436268L, 4.882812451493617206486388134172712975070e-4L)
3093   TEST_c_c (casin, 0x1.000002p0L, -0x1.fp-129L, 1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
3094   TEST_c_c (casin, -0x1.000002p0L, -0x1.fp-129L, -1.570796326794896619231321691639751436268L, -4.882812451493617206486388134172712975070e-4L)
3095   TEST_c_c (casin, 0.0L, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L)
3096   TEST_c_c (casin, 0.0L, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L)
3097   TEST_c_c (casin, -0.0L, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L)
3098   TEST_c_c (casin, -0.0L, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L)
3099   TEST_c_c (casin, 0x1.000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
3100   TEST_c_c (casin, -0x1.000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.882812451493617206486388134172712975070e-4L)
3101   TEST_c_c (casin, 0x1.000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
3102   TEST_c_c (casin, -0x1.000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.882812451493617206486388134172712975070e-4L)
3103 #ifndef TEST_FLOAT
3104   TEST_c_c (casin, 0x1p-52L, 0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
3105   TEST_c_c (casin, 0x1p-52L, -0x1.0000000000001p0L, 1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
3106   TEST_c_c (casin, -0x1p-52L, 0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, 8.813735870195431822418551933572982483664e-1L)
3107   TEST_c_c (casin, -0x1p-52L, -0x1.0000000000001p0L, -1.570092458683774885078102529858632363236e-16L, -8.813735870195431822418551933572982483664e-1L)
3108   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1p-52L, 1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
3109   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1p-52L, -1.570796317204594913251280305810847349436L, 2.315303644582684770975188768022139415020e-8L)
3110   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1p-52L, 1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
3111   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1p-52L, -1.570796317204594913251280305810847349436L, -2.315303644582684770975188768022139415020e-8L)
3112   TEST_c_c (casin, 0x1.fp-1025L, 0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3113   TEST_c_c (casin, 0x1.fp-1025L, -0x1.0000000000001p0L, 3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3114   TEST_c_c (casin, -0x1.fp-1025L, 0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, 8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3115   TEST_c_c (casin, -0x1.fp-1025L, -0x1.0000000000001p0L, -3.810492908885321320083608113679347200012e-309L, -8.813735870195431822418551933572895326024e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3116   TEST_c_c (casin, 0x1.0000000000001p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3117   TEST_c_c (casin, -0x1.0000000000001p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3118   TEST_c_c (casin, 0x1.0000000000001p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3119   TEST_c_c (casin, -0x1.0000000000001p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3120   TEST_c_c (casin, 0.0L, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L)
3121   TEST_c_c (casin, 0.0L, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L)
3122   TEST_c_c (casin, -0.0L, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L)
3123   TEST_c_c (casin, -0.0L, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L)
3124   TEST_c_c (casin, 0x1.0000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3125   TEST_c_c (casin, -0x1.0000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.107342425544701550354780375182800088393e-8L)
3126   TEST_c_c (casin, 0x1.0000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3127   TEST_c_c (casin, -0x1.0000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.107342425544701550354780375182800088393e-8L)
3128 #endif
3129 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3130   TEST_c_c (casin, 0x1p-63L, 0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
3131   TEST_c_c (casin, 0x1p-63L, -0x1.0000000000000002p0L, 7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
3132   TEST_c_c (casin, -0x1p-63L, 0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, 8.813735870195430253092739958139610131001e-1L)
3133   TEST_c_c (casin, -0x1p-63L, -0x1.0000000000000002p0L, -7.666467083416870406778649849746878368519e-20L, -8.813735870195430253092739958139610131001e-1L)
3134   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1p-63L, 1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
3135   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1p-63L, -1.570796326582978888921215348380499122131L, 5.116146586219826555037807251857670783420e-10L)
3136   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1p-63L, 1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
3137   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1p-63L, -1.570796326582978888921215348380499122131L, -5.116146586219826555037807251857670783420e-10L)
3138 # if LDBL_MIN_EXP <= -16381
3139   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3140   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000002p0L, 5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3141   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, 8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3142   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000002p0L, -5.757683115456107043819140328235418018963e-4933L, -8.813735870195430253092739958139610130980e-1L, UNDERFLOW_EXCEPTION)
3143   TEST_c_c (casin, 0x1.0000000000000002p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3144   TEST_c_c (casin, -0x1.0000000000000002p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3145   TEST_c_c (casin, 0x1.0000000000000002p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3146   TEST_c_c (casin, -0x1.0000000000000002p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3147 # endif
3148   TEST_c_c (casin, 0.0L, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L)
3149   TEST_c_c (casin, 0.0L, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L)
3150   TEST_c_c (casin, -0.0L, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L)
3151   TEST_c_c (casin, -0.0L, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L)
3152   TEST_c_c (casin, 0x1.0000000000000002p0L, 0.0L, 1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3153   TEST_c_c (casin, -0x1.0000000000000002p0L, 0.0L, -1.570796326794896619231321691639751442099L, 4.656612873077392578082927418388212703712e-10L)
3154   TEST_c_c (casin, 0x1.0000000000000002p0L, -0.0L, 1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3155   TEST_c_c (casin, -0x1.0000000000000002p0L, -0.0L, -1.570796326794896619231321691639751442099L, -4.656612873077392578082927418388212703712e-10L)
3156 #endif
3157 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3158   TEST_c_c (casin, 0x1p-106L, 0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
3159   TEST_c_c (casin, 0x1p-106L, -0x1.000000000000000000000000008p0L, 8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
3160   TEST_c_c (casin, -0x1p-106L, 0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, 8.813735870195430252326093249798097405561e-1L)
3161   TEST_c_c (casin, -0x1p-106L, -0x1.000000000000000000000000008p0L, -8.715763992105246878957416200936726072500e-33L, -8.813735870195430252326093249798097405561e-1L)
3162   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1p-106L, 1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
3163   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1p-106L, -1.570796326794896565289107467733682961928L, 2.285028863093221674154232933662774454211e-16L)
3164   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1p-106L, 1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
3165   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1p-106L, -1.570796326794896565289107467733682961928L, -2.285028863093221674154232933662774454211e-16L)
3166   TEST_c_c (casin, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3167   TEST_c_c (casin, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3168   TEST_c_c (casin, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, 8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3169   TEST_c_c (casin, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -3.810492908885321743133304375216570658278e-309L, -8.813735870195430252326093249798097405561e-1L, UNDERFLOW_EXCEPTION_DOUBLE)
3170   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3171   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3172   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3173   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3174   TEST_c_c (casin, 0.0L, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L)
3175   TEST_c_c (casin, 0.0L, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L)
3176   TEST_c_c (casin, -0.0L, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L)
3177   TEST_c_c (casin, -0.0L, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L)
3178   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, 0.0L, 1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3179   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, 0.0L, -1.570796326794896619231321691639751442099L, 2.220446049250313080847263336181636063482e-16L)
3180   TEST_c_c (casin, 0x1.000000000000000000000000008p0L, -0.0L, 1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3181   TEST_c_c (casin, -0x1.000000000000000000000000008p0L, -0.0L, -1.570796326794896619231321691639751442099L, -2.220446049250313080847263336181636063482e-16L)
3182 #endif
3183 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3184   TEST_c_c (casin, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
3185   TEST_c_c (casin, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
3186   TEST_c_c (casin, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, 8.813735870195430252326093249797924452120e-1L)
3187   TEST_c_c (casin, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -6.809190618832224124185481406981900518193e-35L, -8.813735870195430252326093249797924452120e-1L)
3188   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
3189   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -1.570796326794896614463458507897073960405L, 2.019699255375255198156433710951064632386e-17L)
3190   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
3191   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -1.570796326794896614463458507897073960405L, -2.019699255375255198156433710951064632386e-17L)
3192   TEST_c_c (casin, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3193   TEST_c_c (casin, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3194   TEST_c_c (casin, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, 8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3195   TEST_c_c (casin, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -5.757683115456107044131264955348448400014e-4933L, -8.813735870195430252326093249797924452120e-1L, UNDERFLOW_EXCEPTION)
3196   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3197   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3198   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3199   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3200   TEST_c_c (casin, 0.0L, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L)
3201   TEST_c_c (casin, 0.0L, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L)
3202   TEST_c_c (casin, -0.0L, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L)
3203   TEST_c_c (casin, -0.0L, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L)
3204   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, 0.0L, 1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3205   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, 0.0L, -1.570796326794896619231321691639751442099L, 1.962615573354718824241727964954454332780e-17L)
3206   TEST_c_c (casin, 0x1.0000000000000000000000000001p0L, -0.0L, 1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3207   TEST_c_c (casin, -0x1.0000000000000000000000000001p0L, -0.0L, -1.570796326794896619231321691639751442099L, -1.962615573354718824241727964954454332780e-17L)
3208 #endif
3209
3210   TEST_c_c (casin, 0x1p-23L, 0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3211   TEST_c_c (casin, 0x1p-23L, -0x0.ffffffp0L, 8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3212   TEST_c_c (casin, -0x1p-23L, 0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, 8.813735448726963984495965873956465777250e-1L);
3213   TEST_c_c (casin, -0x1p-23L, -0x0.ffffffp0L, -8.429369953393598499000760938112968755257e-8L, -8.813735448726963984495965873956465777250e-1L);
3214   TEST_c_c (casin, 0x0.ffffffp0L, 0x1p-23L, 1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3215   TEST_c_c (casin, -0x0.ffffffp0L, 0x1p-23L, -1.570357140408705570520377172865353621698L, 2.714321200917194650737217746780928423385e-4L);
3216   TEST_c_c (casin, 0x0.ffffffp0L, -0x1p-23L, 1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3217   TEST_c_c (casin, -0x0.ffffffp0L, -0x1p-23L, -1.570357140408705570520377172865353621698L, -2.714321200917194650737217746780928423385e-4L);
3218   TEST_c_c (casin, 0x1.fp-129L, 0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3219   TEST_c_c (casin, 0x1.fp-129L, -0x0.ffffffp0L, 2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3220   TEST_c_c (casin, -0x1.fp-129L, 0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, 8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3221   TEST_c_c (casin, -0x1.fp-129L, -0x0.ffffffp0L, -2.013062624689288675911339929224634593425e-39L, -8.813735448726938863015878255140556727969e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3222   TEST_c_c (casin, 0x0.ffffffp0L, 0x1.fp-129L, 1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3223   TEST_c_c (casin, -0x0.ffffffp0L, 0x1.fp-129L, -1.570451059810180415643718442157112705601L, 8.245504387859737323891843603996428534945e-36L);
3224   TEST_c_c (casin, 0x0.ffffffp0L, -0x1.fp-129L, 1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3225   TEST_c_c (casin, -0x0.ffffffp0L, -0x1.fp-129L, -1.570451059810180415643718442157112705601L, -8.245504387859737323891843603996428534945e-36L);
3226   TEST_c_c (casin, 0.0L, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L);
3227   TEST_c_c (casin, 0.0L, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L);
3228   TEST_c_c (casin, -0.0L, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L);
3229   TEST_c_c (casin, -0.0L, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L);
3230   TEST_c_c (casin, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L, 0.0L);
3231   TEST_c_c (casin, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L, 0.0L);
3232   TEST_c_c (casin, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L, -0.0L);
3233   TEST_c_c (casin, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L, -0.0L);
3234   TEST_c_c (casin, 0x1p-23L, 0.5L, 1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3235   TEST_c_c (casin, 0x1p-23L, -0.5L, 1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3236   TEST_c_c (casin, -0x1p-23L, 0.5L, -1.066240299940009780479664302917201696886e-7L, 4.812118250596059896127318386463676808798e-1L);
3237   TEST_c_c (casin, -0x1p-23L, -0.5L, -1.066240299940009780479664302917201696886e-7L, -4.812118250596059896127318386463676808798e-1L);
3238   TEST_c_c (casin, 0.5L, 0x1p-23L, 5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3239   TEST_c_c (casin, -0.5L, 0x1p-23L, -5.235987755982934033165770729745469098254e-1L, 1.376510308240943236356088341381173571841e-7L);
3240   TEST_c_c (casin, 0.5L, -0x1p-23L, 5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3241   TEST_c_c (casin, -0.5L, -0x1p-23L, -5.235987755982934033165770729745469098254e-1L, -1.376510308240943236356088341381173571841e-7L);
3242   TEST_c_c (casin, 0x1.fp-129L, 0.5L, 2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3243   TEST_c_c (casin, 0x1.fp-129L, -0.5L, 2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3244   TEST_c_c (casin, -0x1.fp-129L, 0.5L, -2.546345110742945032959687790021055102355e-39L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3245   TEST_c_c (casin, -0x1.fp-129L, -0.5L, -2.546345110742945032959687790021055102355e-39L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3246   TEST_c_c (casin, 0.5L, 0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3247   TEST_c_c (casin, -0.5L, 0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, 3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3248   TEST_c_c (casin, 0.5L, -0x1.fp-129L, 5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3249   TEST_c_c (casin, -0.5L, -0x1.fp-129L, -5.235987755982988730771072305465838140329e-1L, -3.287317402534702257036015056278368274737e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3250   TEST_c_c (casin, 0x1p-23L, 0x1p-23L, 1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3251   TEST_c_c (casin, 0x1p-23L, -0x1p-23L, 1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3252   TEST_c_c (casin, -0x1p-23L, 0x1p-23L, -1.192092895507806853113684971258850504935e-7L, 1.192092895507818146886315028596704749235e-7L);
3253   TEST_c_c (casin, -0x1p-23L, -0x1p-23L, -1.192092895507806853113684971258850504935e-7L, -1.192092895507818146886315028596704749235e-7L);
3254   /* Bug 15319: underflow exception may be missing.  */
3255   TEST_c_c (casin, 0x1.fp-129L, 0x1p-23L, 2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3256   TEST_c_c (casin, 0x1.fp-129L, -0x1p-23L, 2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3257   TEST_c_c (casin, -0x1.fp-129L, 0x1p-23L, -2.846900380897707329917933005874691056564e-39L, 1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3258   TEST_c_c (casin, -0x1.fp-129L, -0x1p-23L, -2.846900380897707329917933005874691056564e-39L, -1.192092895507809676556842485683592032154e-7L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3259   TEST_c_c (casin, 0x1p-23L, 0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3260   TEST_c_c (casin, -0x1p-23L, 0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, 2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3261   TEST_c_c (casin, 0x1p-23L, -0x1.fp-129L, 1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3262   TEST_c_c (casin, -0x1p-23L, -0x1.fp-129L, -1.192092895507815323443157514352519154304e-7L, -2.846900380897747786805634596726756660388e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3263   TEST_c_c (casin, 0.0L, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L);
3264   TEST_c_c (casin, 0.0L, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L);
3265   TEST_c_c (casin, -0.0L, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L);
3266   TEST_c_c (casin, -0.0L, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L);
3267   TEST_c_c (casin, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L, 0.0L);
3268   TEST_c_c (casin, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L, 0.0L);
3269   TEST_c_c (casin, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L, -0.0L);
3270   TEST_c_c (casin, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L, -0.0L);
3271   TEST_c_c (casin, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3272   TEST_c_c (casin, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3273   TEST_c_c (casin, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3274   TEST_c_c (casin, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3275 #ifndef TEST_FLOAT
3276   TEST_c_c (casin, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3277   TEST_c_c (casin, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3278   TEST_c_c (casin, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, 8.813735870195429467279863907910458761820e-1L);
3279   TEST_c_c (casin, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.570092458683775146551022293016031474627e-16L, -8.813735870195429467279863907910458761820e-1L);
3280   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1p-52L, 1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3281   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1p-52L, -1.570796307840326780080580569360500172043L, 1.171456840272878582596796205397918831268e-8L);
3282   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1p-52L, 1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3283   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1p-52L, -1.570796307840326780080580569360500172043L, -1.171456840272878582596796205397918831268e-8L);
3284   TEST_c_c (casin, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3285   TEST_c_c (casin, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3286   TEST_c_c (casin, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, 8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3287   TEST_c_c (casin, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.810492908885321954658152505985270452320e-309L, -8.813735870195429467279863907910371604180e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3288   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3289   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -1.570796311893735425383665303776316016594L, 3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3290   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3291   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -1.570796311893735425383665303776316016594L, -3.616396521699973256461764099945789620604e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3292   TEST_c_c (casin, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L);
3293   TEST_c_c (casin, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L);
3294   TEST_c_c (casin, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L);
3295   TEST_c_c (casin, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L);
3296   TEST_c_c (casin, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L, 0.0L);
3297   TEST_c_c (casin, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L, 0.0L);
3298   TEST_c_c (casin, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L, -0.0L);
3299   TEST_c_c (casin, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L, -0.0L);
3300 #endif
3301   TEST_c_c (casin, 0x1p-52L, 0.5L, 1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3302   TEST_c_c (casin, 0x1p-52L, -0.5L, 1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3303   TEST_c_c (casin, -0x1p-52L, 0.5L, -1.986027322597818397661816253158024383707e-16L, 4.812118250596034474977589134243772428682e-1L);
3304   TEST_c_c (casin, -0x1p-52L, -0.5L, -1.986027322597818397661816253158024383707e-16L, -4.812118250596034474977589134243772428682e-1L);
3305   TEST_c_c (casin, 0.5L, 0x1p-52L, 5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3306   TEST_c_c (casin, -0.5L, 0x1p-52L, -5.235987755982988730771072305465648369889e-1L, 2.563950248511418570403591756798643804971e-16L);
3307   TEST_c_c (casin, 0.5L, -0x1p-52L, 5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3308   TEST_c_c (casin, -0.5L, -0x1p-52L, -5.235987755982988730771072305465648369889e-1L, -2.563950248511418570403591756798643804971e-16L);
3309 #ifndef TEST_FLOAT
3310   TEST_c_c (casin, 0x1.fp-1025L, 0.5L, 4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3311   TEST_c_c (casin, 0x1.fp-1025L, -0.5L, 4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3312   TEST_c_c (casin, -0x1.fp-1025L, 0.5L, -4.819934639999230680322935210539402497827e-309L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3313   TEST_c_c (casin, -0x1.fp-1025L, -0.5L, -4.819934639999230680322935210539402497827e-309L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3314   TEST_c_c (casin, 0.5L, 0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3315   TEST_c_c (casin, -0.5L, 0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, 6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3316   TEST_c_c (casin, 0.5L, -0x1.fp-1025L, 5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3317   TEST_c_c (casin, -0.5L, -0x1.fp-1025L, -5.235987755982988730771072305465838140329e-1L, -6.222508863508420569166420770843207333493e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3318 #endif
3319   TEST_c_c (casin, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3320   TEST_c_c (casin, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3321   TEST_c_c (casin, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181604132852e-16L, 2.220446049250313080847263336181677117148e-16L);
3322   TEST_c_c (casin, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181604132852e-16L, -2.220446049250313080847263336181677117148e-16L);
3323 #ifndef TEST_FLOAT
3324   /* Bug 15319: underflow exception may be missing.  */
3325   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3326   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3327   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289283247603e-309L, 2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3328   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289283247603e-309L, -2.220446049250313080847263336181622378926e-16L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3329   TEST_c_c (casin, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3330   TEST_c_c (casin, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, 5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3331   TEST_c_c (casin, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3332   TEST_c_c (casin, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181658871074e-16L, -5.388850751072128349671657362289548938458e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3333 #endif
3334   TEST_c_c (casin, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L);
3335   TEST_c_c (casin, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L);
3336   TEST_c_c (casin, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L);
3337   TEST_c_c (casin, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L);
3338   TEST_c_c (casin, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L, 0.0L);
3339   TEST_c_c (casin, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L, 0.0L);
3340   TEST_c_c (casin, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L, -0.0L);
3341   TEST_c_c (casin, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L, -0.0L);
3342 #ifndef TEST_FLOAT
3343   TEST_c_c (casin, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3344   TEST_c_c (casin, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3345   TEST_c_c (casin, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3346   TEST_c_c (casin, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3347 #endif
3348 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3349   TEST_c_c (casin, 0x1p-63L, 0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3350   TEST_c_c (casin, 0x1p-63L, -0x0.ffffffffffffffffp0L, 7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3351   TEST_c_c (casin, -0x1p-63L, 0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, 8.813735870195430251942769895627079569937e-1L);
3352   TEST_c_c (casin, -0x1p-63L, -0x0.ffffffffffffffffp0L, -7.666467083416870407402049869781566856442e-20L, -8.813735870195430251942769895627079569937e-1L);
3353   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1p-63L, 1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3354   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1p-63L, -1.570796326376055842114524927965556247908L, 2.588578361325995866221775673638805081337e-10L);
3355   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1p-63L, 1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3356   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1p-63L, -1.570796326376055842114524927965556247908L, -2.588578361325995866221775673638805081337e-10L);
3357 # if LDBL_MIN_EXP <= -16381
3358   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3359   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3360   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, 8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3361   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -5.757683115456107044287327268904964422212e-4933L, -8.813735870195430251942769895627079569917e-1L, UNDERFLOW_EXCEPTION);
3362   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3363   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -1.570796326465624365239962068302568888898L, 2.472906068161537187835415298076415423459e-4923L);
3364   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3365   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -1.570796326465624365239962068302568888898L, -2.472906068161537187835415298076415423459e-4923L);
3366 # endif
3367   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L);
3368   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L);
3369   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L);
3370   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L);
3371   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L, 0.0L);
3372   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L, 0.0L);
3373   TEST_c_c (casin, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L, -0.0L);
3374   TEST_c_c (casin, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L, -0.0L);
3375 #endif
3376   TEST_c_c (casin, 0x1p-63L, 0.5L, 9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3377   TEST_c_c (casin, 0x1p-63L, -0.5L, 9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3378   TEST_c_c (casin, -0x1p-63L, 0.5L, -9.697399036122160144833087173623140436413e-20L, 4.812118250596034474977589134243684231373e-1L);
3379   TEST_c_c (casin, -0x1p-63L, -0.5L, -9.697399036122160144833087173623140436413e-20L, -4.812118250596034474977589134243684231373e-1L);
3380   TEST_c_c (casin, 0.5L, 0x1p-63L, 5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3381   TEST_c_c (casin, -0.5L, 0x1p-63L, -5.235987755982988730771072305465838140283e-1L, 1.251928832280966098829878787499365228659e-19L);
3382   TEST_c_c (casin, 0.5L, -0x1p-63L, 5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3383   TEST_c_c (casin, -0.5L, -0x1p-63L, -5.235987755982988730771072305465838140283e-1L, -1.251928832280966098829878787499365228659e-19L);
3384 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3385   TEST_c_c (casin, 0x1.fp-16385L, 0.5L, 7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3386   TEST_c_c (casin, 0x1.fp-16385L, -0.5L, 7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3387   TEST_c_c (casin, -0x1.fp-16385L, 0.5L, -7.282957076134209141226696333885150260319e-4933L, 4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3388   TEST_c_c (casin, -0x1.fp-16385L, -0.5L, -7.282957076134209141226696333885150260319e-4933L, -4.812118250596034474977589134243684231352e-1L, UNDERFLOW_EXCEPTION);
3389   TEST_c_c (casin, 0.5L, 0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3390   TEST_c_c (casin, -0.5L, 0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, 9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3391   TEST_c_c (casin, 0.5L, -0x1.fp-16385L, 5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3392   TEST_c_c (casin, -0.5L, -0x1.fp-16385L, -5.235987755982988730771072305465838140329e-1L, -9.402257155670418112159334875199821342890e-4933L, UNDERFLOW_EXCEPTION);
3393 #endif
3394   TEST_c_c (casin, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3395   TEST_c_c (casin, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3396   TEST_c_c (casin, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711422e-19L, 1.084202172485504434007452800869941711430e-19L);
3397   TEST_c_c (casin, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711422e-19L, -1.084202172485504434007452800869941711430e-19L);
3398 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3399   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3400   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3401   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, 1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3402   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584369e-4933L, -1.084202172485504434007452800869941711424e-19L, UNDERFLOW_EXCEPTION);
3403   TEST_c_c (casin, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3404   TEST_c_c (casin, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, 8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3405   TEST_c_c (casin, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3406   TEST_c_c (casin, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711428e-19L, -8.142593549724601460479922838826119584465e-4933L, UNDERFLOW_EXCEPTION);
3407 #endif
3408   TEST_c_c (casin, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L);
3409   TEST_c_c (casin, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L);
3410   TEST_c_c (casin, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L);
3411   TEST_c_c (casin, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L);
3412   TEST_c_c (casin, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L, 0.0L);
3413   TEST_c_c (casin, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L, 0.0L);
3414   TEST_c_c (casin, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L, -0.0L);
3415   TEST_c_c (casin, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L, -0.0L);
3416 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3417   TEST_c_c (casin, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3418   TEST_c_c (casin, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3419   TEST_c_c (casin, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3420   TEST_c_c (casin, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3421 #endif
3422 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3423   TEST_c_c (casin, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3424   TEST_c_c (casin, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3425   TEST_c_c (casin, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, 8.813735870195430252326093249797835932642e-1L);
3426   TEST_c_c (casin, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.743152798421049375791483240187377443526e-32L, -8.813735870195430252326093249797835932642e-1L);
3427   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3428   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -1.570796326794896419512475791677915736035L, 1.234330349600789959989661887846005659983e-16L);
3429   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3430   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -1.570796326794896419512475791677915736035L, -1.234330349600789959989661887846005659983e-16L);
3431   TEST_c_c (casin, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3432   TEST_c_c (casin, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3433   TEST_c_c (casin, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, 8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3434   TEST_c_c (casin, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.810492908885321743133304375216641110205e-309L, -8.813735870195430252326093249797835932642e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
3435   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3436   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -1.570796326794896462222075823262245502760L, 3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3437   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3438   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -1.570796326794896462222075823262245502760L, -3.432186888910770473784103112009399360940e-293L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3439   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L);
3440   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L);
3441   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L);
3442   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L);
3443   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L, 0.0L);
3444   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L, 0.0L);
3445   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L, -0.0L);
3446   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L, -0.0L);
3447 #endif
3448   TEST_c_c (casin, 0x1p-105L, 0.5L, 2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3449   TEST_c_c (casin, 0x1p-105L, -0.5L, 2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3450   TEST_c_c (casin, -0x1p-105L, 0.5L, -2.204933261082751447436996198490110245167e-32L, 4.812118250596034474977589134243684231352e-1L);
3451   TEST_c_c (casin, -0x1p-105L, -0.5L, -2.204933261082751447436996198490110245167e-32L, -4.812118250596034474977589134243684231352e-1L);
3452   TEST_c_c (casin, 0.5L, 0x1p-105L, 5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3453   TEST_c_c (casin, -0.5L, 0x1p-105L, -5.235987755982988730771072305465838140329e-1L, 2.846556599890768890940941645338546615370e-32L);
3454   TEST_c_c (casin, 0.5L, -0x1p-105L, 5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3455   TEST_c_c (casin, -0.5L, -0x1p-105L, -5.235987755982988730771072305465838140329e-1L, -2.846556599890768890940941645338546615370e-32L);
3456   TEST_c_c (casin, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3457   TEST_c_c (casin, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3458   TEST_c_c (casin, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
3459   TEST_c_c (casin, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
3460 #ifndef TEST_FLOAT
3461   /* Bug 15319: underflow exception may be missing.  */
3462   TEST_c_c (casin, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3463   TEST_c_c (casin, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3464   TEST_c_c (casin, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3465   TEST_c_c (casin, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
3466   TEST_c_c (casin, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3467   TEST_c_c (casin, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3468   TEST_c_c (casin, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3469   TEST_c_c (casin, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3470 #endif
3471   TEST_c_c (casin, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
3472   TEST_c_c (casin, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
3473   TEST_c_c (casin, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
3474   TEST_c_c (casin, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
3475   TEST_c_c (casin, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
3476   TEST_c_c (casin, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
3477   TEST_c_c (casin, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
3478   TEST_c_c (casin, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
3479 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3480   TEST_c_c (casin, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3481   TEST_c_c (casin, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3482   TEST_c_c (casin, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, 8.813735870195430252326093249797922409363e-1L);
3483   TEST_c_c (casin, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.361838123766444824837096281396380300349e-34L, -8.813735870195430252326093249797922409363e-1L);
3484   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3485   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -1.570796326794896601578502908312986698624L, 1.091004200533850618345330909857103457781e-17L);
3486   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3487   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -1.570796326794896601578502908312986698624L, -1.091004200533850618345330909857103457781e-17L);
3488   TEST_c_c (casin, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3489   TEST_c_c (casin, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3490   TEST_c_c (casin, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, 8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3491   TEST_c_c (casin, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.757683115456107044131264955348449231681e-4933L, -8.813735870195430252326093249797922409363e-1L, UNDERFLOW_EXCEPTION);
3492   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3493   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -1.570796326794896605353533883825294686803L, 5.867357004219059108790368268900490184505e-4916L);
3494   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3495   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -1.570796326794896605353533883825294686803L, -5.867357004219059108790368268900490184505e-4916L);
3496   TEST_c_c (casin, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L);
3497   TEST_c_c (casin, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L);
3498   TEST_c_c (casin, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L);
3499   TEST_c_c (casin, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L);
3500   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L, 0.0L);
3501   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L, 0.0L);
3502   TEST_c_c (casin, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L, -0.0L);
3503   TEST_c_c (casin, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L, -0.0L);
3504 #endif
3505   TEST_c_c (casin, 0x1p-112L, 0.5L, 1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3506   TEST_c_c (casin, 0x1p-112L, -0.5L, 1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3507   TEST_c_c (casin, -0x1p-112L, 0.5L, -1.722604110220899568310153280070398629037e-34L, 4.812118250596034474977589134243684231352e-1L);
3508   TEST_c_c (casin, -0x1p-112L, -0.5L, -1.722604110220899568310153280070398629037e-34L, -4.812118250596034474977589134243684231352e-1L);
3509   TEST_c_c (casin, 0.5L, 0x1p-112L, 5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3510   TEST_c_c (casin, -0.5L, 0x1p-112L, -5.235987755982988730771072305465838140329e-1L, 2.223872343664663196047610660420739543258e-34L);
3511   TEST_c_c (casin, 0.5L, -0x1p-112L, 5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3512   TEST_c_c (casin, -0.5L, -0x1p-112L, -5.235987755982988730771072305465838140329e-1L, -2.223872343664663196047610660420739543258e-34L);
3513   TEST_c_c (casin, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3514   TEST_c_c (casin, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3515   TEST_c_c (casin, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
3516   TEST_c_c (casin, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
3517 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3518   TEST_c_c (casin, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3519   TEST_c_c (casin, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3520   TEST_c_c (casin, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3521   TEST_c_c (casin, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
3522   TEST_c_c (casin, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3523   TEST_c_c (casin, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3524   TEST_c_c (casin, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3525   TEST_c_c (casin, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
3526 #endif
3527   TEST_c_c (casin, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
3528   TEST_c_c (casin, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
3529   TEST_c_c (casin, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
3530   TEST_c_c (casin, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
3531   TEST_c_c (casin, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
3532   TEST_c_c (casin, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
3533   TEST_c_c (casin, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
3534   TEST_c_c (casin, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
3535
3536   TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
3537   TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
3538
3539   END (casin, complex);
3540 }
3541
3542
3543 static void
3544 casinh_test (void)
3545 {
3546   errno = 0;
3547   FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
3548   if (errno == ENOSYS)
3549     /* Function not implemented.  */
3550     return;
3551
3552   START (casinh);
3553
3554   TEST_c_c (casinh, 0, 0, 0.0, 0.0);
3555   TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
3556   TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
3557   TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
3558
3559   TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
3560   TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
3561   TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
3562   TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
3563
3564   TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
3565   TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
3566   TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
3567   TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
3568   TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
3569   TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
3570   TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
3571   TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
3572
3573   TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
3574   TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
3575   TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
3576   TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
3577
3578   TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
3579   TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
3580   TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
3581   TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
3582
3583   TEST_c_c (casinh, plus_infty, qnan_value, plus_infty, qnan_value);
3584   TEST_c_c (casinh, minus_infty, qnan_value, minus_infty, qnan_value);
3585
3586   TEST_c_c (casinh, qnan_value, 0, qnan_value, 0.0);
3587   TEST_c_c (casinh, qnan_value, minus_zero, qnan_value, minus_zero);
3588
3589   TEST_c_c (casinh, qnan_value, plus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3590   TEST_c_c (casinh, qnan_value, minus_infty, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
3591
3592   TEST_c_c (casinh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3593   TEST_c_c (casinh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3594
3595   TEST_c_c (casinh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3596   TEST_c_c (casinh, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
3597
3598   TEST_c_c (casinh, qnan_value, qnan_value, qnan_value, qnan_value);
3599
3600   TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
3601   TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
3602   TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
3603   TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
3604   TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
3605   TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
3606   TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
3607   TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
3608   TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
3609   TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
3610   TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
3611   TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
3612
3613   TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
3614   TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
3615   TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
3616   TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
3617   TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
3618   TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
3619   TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
3620   TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
3621   TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
3622   TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
3623   TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
3624   TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
3625
3626   TEST_c_c (casinh, 0x1p50L, 1.0L, 3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3627   TEST_c_c (casinh, 0x1p50L, -1.0L, 3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3628   TEST_c_c (casinh, -0x1p50L, 1.0L, -3.535050620855721078027883819436759661753e1L, 8.881784197001252323389053344720723756399e-16L);
3629   TEST_c_c (casinh, -0x1p50L, -1.0L, -3.535050620855721078027883819436759661753e1L, -8.881784197001252323389053344720723756399e-16L);
3630   TEST_c_c (casinh, 1.0L, 0x1p50L, 3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3631   TEST_c_c (casinh, -1.0L, 0x1p50L, -3.535050620855721078027883819436720218708e1L, 1.570796326794895731052901991514519103193L);
3632   TEST_c_c (casinh, 1.0L, -0x1p50L, 3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3633   TEST_c_c (casinh, -1.0L, -0x1p50L, -3.535050620855721078027883819436720218708e1L, -1.570796326794895731052901991514519103193L);
3634 #ifndef TEST_FLOAT
3635   TEST_c_c (casinh, 0x1p500L, 1.0L, 3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3636   TEST_c_c (casinh, 0x1p500L, -1.0L, 3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3637   TEST_c_c (casinh, -0x1p500L, 1.0L, -3.472667374605326000180332928505464606058e2L, 3.054936363499604682051979393213617699789e-151L);
3638   TEST_c_c (casinh, -0x1p500L, -1.0L, -3.472667374605326000180332928505464606058e2L, -3.054936363499604682051979393213617699789e-151L);
3639   TEST_c_c (casinh, 1.0L, 0x1p500L, 3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3640   TEST_c_c (casinh, -1.0L, 0x1p500L, -3.472667374605326000180332928505464606058e2L, 1.570796326794896619231321691639751442099L);
3641   TEST_c_c (casinh, 1.0L, -0x1p500L, 3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3642   TEST_c_c (casinh, -1.0L, -0x1p500L, -3.472667374605326000180332928505464606058e2L, -1.570796326794896619231321691639751442099L);
3643 #endif
3644 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3645   TEST_c_c (casinh, 0x1p5000L, 1.0L, 3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3646   TEST_c_c (casinh, 0x1p5000L, -1.0L, 3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3647   TEST_c_c (casinh, -0x1p5000L, 1.0L, -3.466429049980286492395577839412341016946e3L, 7.079811261048172892385615158694057552948e-1506L);
3648   TEST_c_c (casinh, -0x1p5000L, -1.0L, -3.466429049980286492395577839412341016946e3L, -7.079811261048172892385615158694057552948e-1506L);
3649   TEST_c_c (casinh, 1.0L, 0x1p5000L, 3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3650   TEST_c_c (casinh, -1.0L, 0x1p5000L, -3.466429049980286492395577839412341016946e3L, 1.570796326794896619231321691639751442099L);
3651   TEST_c_c (casinh, 1.0L, -0x1p5000L, 3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3652   TEST_c_c (casinh, -1.0L, -0x1p5000L, -3.466429049980286492395577839412341016946e3L, -1.570796326794896619231321691639751442099L);
3653 #endif
3654
3655   TEST_c_c (casinh, 0x1.fp127L, 0x1.fp127L, 8.973081118419833726837456344608533993585e1L, 7.853981633974483096156608458198757210493e-1L);
3656 #ifndef TEST_FLOAT
3657   TEST_c_c (casinh, 0x1.fp1023L, 0x1.fp1023L, 7.107906849659093345062145442726115449315e2L, 7.853981633974483096156608458198757210493e-1L);
3658 #endif
3659 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3660   TEST_c_c (casinh, 0x1.fp16383L, 0x1.fp16383L, 1.135753137836666928715489992987020363057e4L, 7.853981633974483096156608458198757210493e-1L);
3661 #endif
3662
3663   TEST_c_c (casinh, 0x1.fp-129L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3664   TEST_c_c (casinh, 0x1.fp-129L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3665   TEST_c_c (casinh, -0x1.fp-129L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442096L);
3666   TEST_c_c (casinh, -0x1.fp-129L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442096L);
3667   TEST_c_c (casinh, 1.5L, 0x1.fp-129L, 1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3668   TEST_c_c (casinh, -1.5L, 0x1.fp-129L, -1.194763217287109304111930828519090523536L, 1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3669   TEST_c_c (casinh, 1.5L, -0x1.fp-129L, 1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3670   TEST_c_c (casinh, -1.5L, -0x1.fp-129L, -1.194763217287109304111930828519090523536L, -1.579176199917649005841160751101628985741e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3671 #ifndef TEST_FLOAT
3672   TEST_c_c (casinh, 0x1.fp-1025L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3673   TEST_c_c (casinh, 0x1.fp-1025L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3674   TEST_c_c (casinh, -0x1.fp-1025L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3675   TEST_c_c (casinh, -0x1.fp-1025L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3676   TEST_c_c (casinh, 1.5L, 0x1.fp-1025L, 1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3677   TEST_c_c (casinh, -1.5L, 0x1.fp-1025L, -1.194763217287109304111930828519090523536L, 2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3678   TEST_c_c (casinh, 1.5L, -0x1.fp-1025L, 1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3679   TEST_c_c (casinh, -1.5L, -0x1.fp-1025L, -1.194763217287109304111930828519090523536L, -2.989196569048182929051881765490354365918e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3680 #endif
3681 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3682   TEST_c_c (casinh, 0x1.fp-16385L, 1.5L, 9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3683   TEST_c_c (casinh, 0x1.fp-16385L, -1.5L, 9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3684   TEST_c_c (casinh, -0x1.fp-16385L, 1.5L, -9.624236501192068949955178268487368462704e-1L, 1.570796326794896619231321691639751442099L);
3685   TEST_c_c (casinh, -0x1.fp-16385L, -1.5L, -9.624236501192068949955178268487368462704e-1L, -1.570796326794896619231321691639751442099L);
3686   TEST_c_c (casinh, 1.5L, 0x1.fp-16385L, 1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3687   TEST_c_c (casinh, -1.5L, 0x1.fp-16385L, -1.194763217287109304111930828519090523536L, 4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3688   TEST_c_c (casinh, 1.5L, -0x1.fp-16385L, 1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3689   TEST_c_c (casinh, -1.5L, -0x1.fp-16385L, -1.194763217287109304111930828519090523536L, -4.516698239814521372306784062043266700598e-4933L, UNDERFLOW_EXCEPTION);
3690 #endif
3691
3692   TEST_c_c (casinh, 0.5L, 1.0L, 7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3693   TEST_c_c (casinh, 0.5L, -1.0L, 7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3694   TEST_c_c (casinh, -0.5L, 1.0L, -7.328576759736452608886724437653071523305e-1L, 8.959074812088902390666567243275770102229e-1L);
3695   TEST_c_c (casinh, -0.5L, -1.0L, -7.328576759736452608886724437653071523305e-1L, -8.959074812088902390666567243275770102229e-1L);
3696   TEST_c_c (casinh, 1.0L, 0.5L, 9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3697   TEST_c_c (casinh, -1.0L, 0.5L, -9.261330313501824245501244453057873152694e-1L, 3.494390628572132936274118260753699527325e-1L);
3698   TEST_c_c (casinh, 1.0L, -0.5L, 9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3699   TEST_c_c (casinh, -1.0L, -0.5L, -9.261330313501824245501244453057873152694e-1L, -3.494390628572132936274118260753699527325e-1L);
3700   TEST_c_c (casinh, 0.25L, 1.0L, 5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3701   TEST_c_c (casinh, 0.25L, -1.0L, 5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3702   TEST_c_c (casinh, -0.25L, 1.0L, -5.097911466811016354623559941115413499164e-1L, 1.081751996523816326311037318425097434186L);
3703   TEST_c_c (casinh, -0.25L, -1.0L, -5.097911466811016354623559941115413499164e-1L, -1.081751996523816326311037318425097434186L);
3704   TEST_c_c (casinh, 1.0L, 0.25L, 8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3705   TEST_c_c (casinh, -1.0L, 0.25L, -8.924633639033482359562124741744951972772e-1L, 1.763024327769669304186785666360901026468e-1L);
3706   TEST_c_c (casinh, 1.0L, -0.25L, 8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3707   TEST_c_c (casinh, -1.0L, -0.25L, -8.924633639033482359562124741744951972772e-1L, -1.763024327769669304186785666360901026468e-1L);
3708   TEST_c_c (casinh, 0x1.fp-10L, 1.0L, 4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3709   TEST_c_c (casinh, 0x1.fp-10L, -1.0L, 4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3710   TEST_c_c (casinh, -0x1.fp-10L, 1.0L, -4.350501469856803800217957402220976497152e-2L, 1.527305029163877791518741192097931722508L);
3711   TEST_c_c (casinh, -0x1.fp-10L, -1.0L, -4.350501469856803800217957402220976497152e-2L, -1.527305029163877791518741192097931722508L);
3712   TEST_c_c (casinh, 1.0L, 0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3713   TEST_c_c (casinh, -1.0L, 0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, 1.337909359557740912558349531052239112857e-3L);
3714   TEST_c_c (casinh, 1.0L, -0x1.fp-10L, 8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3715   TEST_c_c (casinh, -1.0L, -0x1.fp-10L, -8.813742198809567991336704287826445879025e-1L, -1.337909359557740912558349531052239112857e-3L);
3716   TEST_c_c (casinh, 0x1.fp-30L, 1.0L, 4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3717   TEST_c_c (casinh, 0x1.fp-30L, -1.0L, 4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3718   TEST_c_c (casinh, -0x1.fp-30L, 1.0L, -4.247867098745151888768727039216644758847e-5L, 1.570753848123921942730162693731872690232L);
3719   TEST_c_c (casinh, -0x1.fp-30L, -1.0L, -4.247867098745151888768727039216644758847e-5L, -1.570753848123921942730162693731872690232L);
3720   TEST_c_c (casinh, 1.0L, 0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3721   TEST_c_c (casinh, -1.0L, 0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, 1.275929984216518540252717485007112529021e-9L);
3722   TEST_c_c (casinh, 1.0L, -0x1.fp-30L, 8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3723   TEST_c_c (casinh, -1.0L, -0x1.fp-30L, -8.813735870195430258081932989769495326854e-1L, -1.275929984216518540252717485007112529021e-9L);
3724   TEST_c_c (casinh, 0x1.fp-100L, 1.0L, 1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3725   TEST_c_c (casinh, 0x1.fp-100L, -1.0L, 1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3726   TEST_c_c (casinh, -0x1.fp-100L, 1.0L, -1.236292038260260888664514866457202186027e-15L, 1.570796326794895382939283431378862777584L);
3727   TEST_c_c (casinh, -0x1.fp-100L, -1.0L, -1.236292038260260888664514866457202186027e-15L, -1.570796326794895382939283431378862777584L);
3728   TEST_c_c (casinh, 1.0L, 0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3729   TEST_c_c (casinh, -1.0L, 0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, 1.080754735021050612990719608916167354321e-30L);
3730   TEST_c_c (casinh, 1.0L, -0x1.fp-100L, 8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3731   TEST_c_c (casinh, -1.0L, -0x1.fp-100L, -8.813735870195430252326093249797923090282e-1L, -1.080754735021050612990719608916167354321e-30L);
3732   TEST_c_c (casinh, 0x1.fp-129L, 1.0L, 5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3733   TEST_c_c (casinh, 0x1.fp-129L, -1.0L, 5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3734   TEST_c_c (casinh, -0x1.fp-129L, 1.0L, -5.335635276982233498398987585285818977933e-20L, 1.570796326794896619177965338869929107115L);
3735   TEST_c_c (casinh, -0x1.fp-129L, -1.0L, -5.335635276982233498398987585285818977933e-20L, -1.570796326794896619177965338869929107115L);
3736   TEST_c_c (casinh, 1.0L, 0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3737   TEST_c_c (casinh, -1.0L, 0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, 2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3738   TEST_c_c (casinh, 1.0L, -0x1.fp-129L, 8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3739   TEST_c_c (casinh, -1.0L, -0x1.fp-129L, -8.813735870195430252326093249797923090282e-1L, -2.013062564695348242280482517399205554874e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3740 #ifndef TEST_FLOAT
3741   TEST_c_c (casinh, 0x1.fp-1000L, 1.0L, 4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3742   TEST_c_c (casinh, 0x1.fp-1000L, -1.0L, 4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3743   TEST_c_c (casinh, -0x1.fp-1000L, 1.0L, -4.252291453851660175550490409247739011867e-151L, 1.570796326794896619231321691639751442099L);
3744   TEST_c_c (casinh, -0x1.fp-1000L, -1.0L, -4.252291453851660175550490409247739011867e-151L, -1.570796326794896619231321691639751442099L);
3745   TEST_c_c (casinh, 1.0L, 0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3746   TEST_c_c (casinh, -1.0L, 0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, 1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3747   TEST_c_c (casinh, 1.0L, -0x1.fp-1000L, 8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3748   TEST_c_c (casinh, -1.0L, -0x1.fp-1000L, -8.813735870195430252326093249797923090282e-1L, -1.278589251976747242280879285935084814093e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3749   TEST_c_c (casinh, 0x1.fp-1025L, 1.0L, 7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3750   TEST_c_c (casinh, 0x1.fp-1025L, -1.0L, 7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3751   TEST_c_c (casinh, -0x1.fp-1025L, 1.0L, -7.340879205566679497036857179189356754017e-155L, 1.570796326794896619231321691639751442099L);
3752   TEST_c_c (casinh, -0x1.fp-1025L, -1.0L, -7.340879205566679497036857179189356754017e-155L, -1.570796326794896619231321691639751442099L);
3753   TEST_c_c (casinh, 1.0L, 0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3754   TEST_c_c (casinh, -1.0L, 0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, 3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3755   TEST_c_c (casinh, 1.0L, -0x1.fp-1025L, 8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3756   TEST_c_c (casinh, -1.0L, -0x1.fp-1025L, -8.813735870195430252326093249797923090282e-1L, -3.810492908885321743133304375216617626230e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3757 #endif
3758 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
3759   TEST_c_c (casinh, 0x1.fp-10000L, 1.0L, 9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3760   TEST_c_c (casinh, 0x1.fp-10000L, -1.0L, 9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3761   TEST_c_c (casinh, -0x1.fp-10000L, 1.0L, -9.854680208706673586644342922051388714633e-1506L, 1.570796326794896619231321691639751442099L);
3762   TEST_c_c (casinh, -0x1.fp-10000L, -1.0L, -9.854680208706673586644342922051388714633e-1506L, -1.570796326794896619231321691639751442099L);
3763   TEST_c_c (casinh, 1.0L, 0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3764   TEST_c_c (casinh, -1.0L, 0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, 6.867047849047171855399183659351043150871e-3011L);
3765   TEST_c_c (casinh, 1.0L, -0x1.fp-10000L, 8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3766   TEST_c_c (casinh, -1.0L, -0x1.fp-10000L, -8.813735870195430252326093249797923090282e-1L, -6.867047849047171855399183659351043150871e-3011L);
3767   TEST_c_c (casinh, 0x1.fp-16385L, 1.0L, 9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3768   TEST_c_c (casinh, 0x1.fp-16385L, -1.0L, 9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3769   TEST_c_c (casinh, -0x1.fp-16385L, 1.0L, -9.023632056840860275214893047597614177639e-2467L, 1.570796326794896619231321691639751442099L);
3770   TEST_c_c (casinh, -0x1.fp-16385L, -1.0L, -9.023632056840860275214893047597614177639e-2467L, -1.570796326794896619231321691639751442099L);
3771   TEST_c_c (casinh, 1.0L, 0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3772   TEST_c_c (casinh, -1.0L, 0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, 5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3773   TEST_c_c (casinh, 1.0L, -0x1.fp-16385L, 8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3774   TEST_c_c (casinh, -1.0L, -0x1.fp-16385L, -8.813735870195430252326093249797923090282e-1L, -5.757683115456107044131264955348448954458e-4933L, UNDERFLOW_EXCEPTION);
3775 #endif
3776
3777   TEST_c_c (casinh, 0x1p-23L, 0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3778   TEST_c_c (casinh, 0x1p-23L, -0x1.000002p0L, 5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3779   TEST_c_c (casinh, -0x1p-23L, 0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, 1.570574114956455764594481054234834678422L)
3780   TEST_c_c (casinh, -0x1p-23L, -0x1.000002p0L, -5.364668491573609633134147164031476452679e-4L, -1.570574114956455764594481054234834678422L)
3781   TEST_c_c (casinh, 0x1.000002p0L, 0x1p-23L, 8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3782   TEST_c_c (casinh, -0x1.000002p0L, 0x1p-23L, -8.813736713132400470205730751186547909968e-1L, 8.429369199749229560964789467980644296420e-8L)
3783   TEST_c_c (casinh, 0x1.000002p0L, -0x1p-23L, 8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3784   TEST_c_c (casinh, -0x1.000002p0L, -0x1p-23L, -8.813736713132400470205730751186547909968e-1L, -8.429369199749229560964789467980644296420e-8L)
3785   TEST_c_c (casinh, 0x1.fp-129L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3786   TEST_c_c (casinh, 0x1.fp-129L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3787   TEST_c_c (casinh, -0x1.fp-129L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751436268L)
3788   TEST_c_c (casinh, -0x1.fp-129L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751436268L)
3789   TEST_c_c (casinh, 0x1.000002p0L, 0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3790   TEST_c_c (casinh, -0x1.000002p0L, 0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, 2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3791   TEST_c_c (casinh, 0x1.000002p0L, -0x1.fp-129L, 8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3792   TEST_c_c (casinh, -0x1.000002p0L, -0x1.fp-129L, -8.813736713132375348727889167749389235161e-1L, -2.013062444707472738895109955455676357057e-39L, UNDERFLOW_EXCEPTION_FLOAT)
3793   TEST_c_c (casinh, 0.0L, 0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3794   TEST_c_c (casinh, 0.0L, -0x1.000002p0L, 4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3795   TEST_c_c (casinh, -0.0L, 0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, 1.570796326794896619231321691639751442099L)
3796   TEST_c_c (casinh, -0.0L, -0x1.000002p0L, -4.882812451493617206486388134172712975070e-4L, -1.570796326794896619231321691639751442099L)
3797   TEST_c_c (casinh, 0x1.000002p0L, 0.0L, 8.813736713132375348727889167749389235161e-1L, 0.0L)
3798   TEST_c_c (casinh, -0x1.000002p0L, 0.0L, -8.813736713132375348727889167749389235161e-1L, 0.0L)
3799   TEST_c_c (casinh, 0x1.000002p0L, -0.0L, 8.813736713132375348727889167749389235161e-1L, -0.0L)
3800   TEST_c_c (casinh, -0x1.000002p0L, -0.0L, -8.813736713132375348727889167749389235161e-1L, -0.0L)
3801 #ifndef TEST_FLOAT
3802   TEST_c_c (casinh, 0x1p-52L, 0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3803   TEST_c_c (casinh, 0x1p-52L, -0x1.0000000000001p0L, 2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3804   TEST_c_c (casinh, -0x1p-52L, 0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, 1.570796317204594913251280305810847349436L)
3805   TEST_c_c (casinh, -0x1p-52L, -0x1.0000000000001p0L, -2.315303644582684770975188768022139415020e-8L, -1.570796317204594913251280305810847349436L)
3806   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1p-52L, 8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3807   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1p-52L, -8.813735870195431822418551933572982483664e-1L, 1.570092458683774885078102529858632363236e-16L)
3808   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1p-52L, 8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3809   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1p-52L, -8.813735870195431822418551933572982483664e-1L, -1.570092458683774885078102529858632363236e-16L)
3810   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3811   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3812   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3813   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3814   TEST_c_c (casinh, 0x1.0000000000001p0L, 0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3815   TEST_c_c (casinh, -0x1.0000000000001p0L, 0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, 3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3816   TEST_c_c (casinh, 0x1.0000000000001p0L, -0x1.fp-1025L, 8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3817   TEST_c_c (casinh, -0x1.0000000000001p0L, -0x1.fp-1025L, -8.813735870195431822418551933572895326024e-1L, -3.810492908885321320083608113679347200012e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3818   TEST_c_c (casinh, 0.0L, 0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3819   TEST_c_c (casinh, 0.0L, -0x1.0000000000001p0L, 2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3820   TEST_c_c (casinh, -0.0L, 0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, 1.570796326794896619231321691639751442099L)
3821   TEST_c_c (casinh, -0.0L, -0x1.0000000000001p0L, -2.107342425544701550354780375182800088393e-8L, -1.570796326794896619231321691639751442099L)
3822   TEST_c_c (casinh, 0x1.0000000000001p0L, 0.0L, 8.813735870195431822418551933572895326024e-1L, 0.0L)
3823   TEST_c_c (casinh, -0x1.0000000000001p0L, 0.0L, -8.813735870195431822418551933572895326024e-1L, 0.0L)
3824   TEST_c_c (casinh, 0x1.0000000000001p0L, -0.0L, 8.813735870195431822418551933572895326024e-1L, -0.0L)
3825   TEST_c_c (casinh, -0x1.0000000000001p0L, -0.0L, -8.813735870195431822418551933572895326024e-1L, -0.0L)
3826 #endif
3827 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
3828   TEST_c_c (casinh, 0x1p-63L, 0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3829   TEST_c_c (casinh, 0x1p-63L, -0x1.0000000000000002p0L, 5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3830   TEST_c_c (casinh, -0x1p-63L, 0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, 1.570796326582978888921215348380499122131L)
3831   TEST_c_c (casinh, -0x1p-63L, -0x1.0000000000000002p0L, -5.116146586219826555037807251857670783420e-10L, -1.570796326582978888921215348380499122131L)
3832   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1p-63L, 8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3833   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1p-63L, -8.813735870195430253092739958139610131001e-1L, 7.666467083416870406778649849746878368519e-20L)
3834   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1p-63L, 8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3835   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1p-63L, -8.813735870195430253092739958139610131001e-1L, -7.666467083416870406778649849746878368519e-20L)
3836 # if LDBL_MIN_EXP <= -16381
3837   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3838   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3839   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3840   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3841   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3842   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, 5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3843   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0x1.fp-16385L, 8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3844   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0x1.fp-16385L, -8.813735870195430253092739958139610130980e-1L, -5.757683115456107043819140328235418018963e-4933L, UNDERFLOW_EXCEPTION)
3845 # endif
3846   TEST_c_c (casinh, 0.0L, 0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3847   TEST_c_c (casinh, 0.0L, -0x1.0000000000000002p0L, 4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3848   TEST_c_c (casinh, -0.0L, 0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, 1.570796326794896619231321691639751442099L)
3849   TEST_c_c (casinh, -0.0L, -0x1.0000000000000002p0L, -4.656612873077392578082927418388212703712e-10L, -1.570796326794896619231321691639751442099L)
3850   TEST_c_c (casinh, 0x1.0000000000000002p0L, 0.0L, 8.813735870195430253092739958139610130980e-1L, 0.0L)
3851   TEST_c_c (casinh, -0x1.0000000000000002p0L, 0.0L, -8.813735870195430253092739958139610130980e-1L, 0.0L)
3852   TEST_c_c (casinh, 0x1.0000000000000002p0L, -0.0L, 8.813735870195430253092739958139610130980e-1L, -0.0L)
3853   TEST_c_c (casinh, -0x1.0000000000000002p0L, -0.0L, -8.813735870195430253092739958139610130980e-1L, -0.0L)
3854 #endif
3855 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
3856   TEST_c_c (casinh, 0x1p-106L, 0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3857   TEST_c_c (casinh, 0x1p-106L, -0x1.000000000000000000000000008p0L, 2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3858   TEST_c_c (casinh, -0x1p-106L, 0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, 1.570796326794896565289107467733682961928L)
3859   TEST_c_c (casinh, -0x1p-106L, -0x1.000000000000000000000000008p0L, -2.285028863093221674154232933662774454211e-16L, -1.570796326794896565289107467733682961928L)
3860   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1p-106L, 8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3861   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1p-106L, -8.813735870195430252326093249798097405561e-1L, 8.715763992105246878957416200936726072500e-33L)
3862   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1p-106L, 8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3863   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1p-106L, -8.813735870195430252326093249798097405561e-1L, -8.715763992105246878957416200936726072500e-33L)
3864   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3865   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3866   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3867   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3868   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3869   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, 3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3870   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0x1.fp-1025L, 8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3871   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0x1.fp-1025L, -8.813735870195430252326093249798097405561e-1L, -3.810492908885321743133304375216570658278e-309L, UNDERFLOW_EXCEPTION_DOUBLE)
3872   TEST_c_c (casinh, 0.0L, 0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3873   TEST_c_c (casinh, 0.0L, -0x1.000000000000000000000000008p0L, 2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3874   TEST_c_c (casinh, -0.0L, 0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, 1.570796326794896619231321691639751442099L)
3875   TEST_c_c (casinh, -0.0L, -0x1.000000000000000000000000008p0L, -2.220446049250313080847263336181636063482e-16L, -1.570796326794896619231321691639751442099L)
3876   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, 0.0L, 8.813735870195430252326093249798097405561e-1L, 0.0L)
3877   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, 0.0L, -8.813735870195430252326093249798097405561e-1L, 0.0L)
3878   TEST_c_c (casinh, 0x1.000000000000000000000000008p0L, -0.0L, 8.813735870195430252326093249798097405561e-1L, -0.0L)
3879   TEST_c_c (casinh, -0x1.000000000000000000000000008p0L, -0.0L, -8.813735870195430252326093249798097405561e-1L, -0.0L)
3880 #endif
3881 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
3882   TEST_c_c (casinh, 0x1p-113L, 0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3883   TEST_c_c (casinh, 0x1p-113L, -0x1.0000000000000000000000000001p0L, 2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3884   TEST_c_c (casinh, -0x1p-113L, 0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, 1.570796326794896614463458507897073960405L)
3885   TEST_c_c (casinh, -0x1p-113L, -0x1.0000000000000000000000000001p0L, -2.019699255375255198156433710951064632386e-17L, -1.570796326794896614463458507897073960405L)
3886   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1p-113L, 8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3887   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1p-113L, -8.813735870195430252326093249797924452120e-1L, 6.809190618832224124185481406981900518193e-35L)
3888   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1p-113L, 8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3889   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1p-113L, -8.813735870195430252326093249797924452120e-1L, -6.809190618832224124185481406981900518193e-35L)
3890   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3891   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3892   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3893   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3894   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3895   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, 5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3896   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, 8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3897   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0x1.fp-16385L, -8.813735870195430252326093249797924452120e-1L, -5.757683115456107044131264955348448400014e-4933L, UNDERFLOW_EXCEPTION)
3898   TEST_c_c (casinh, 0.0L, 0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3899   TEST_c_c (casinh, 0.0L, -0x1.0000000000000000000000000001p0L, 1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3900   TEST_c_c (casinh, -0.0L, 0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, 1.570796326794896619231321691639751442099L)
3901   TEST_c_c (casinh, -0.0L, -0x1.0000000000000000000000000001p0L, -1.962615573354718824241727964954454332780e-17L, -1.570796326794896619231321691639751442099L)
3902   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, 0.0L, 8.813735870195430252326093249797924452120e-1L, 0.0L)
3903   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, 0.0L, -8.813735870195430252326093249797924452120e-1L, 0.0L)
3904   TEST_c_c (casinh, 0x1.0000000000000000000000000001p0L, -0.0L, 8.813735870195430252326093249797924452120e-1L, -0.0L)
3905   TEST_c_c (casinh, -0x1.0000000000000000000000000001p0L, -0.0L, -8.813735870195430252326093249797924452120e-1L, -0.0L)
3906 #endif
3907
3908   TEST_c_c (casinh, 0x1p-23L, 0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3909   TEST_c_c (casinh, 0x1p-23L, -0x0.ffffffp0L, 2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3910   TEST_c_c (casinh, -0x1p-23L, 0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, 1.570357140408705570520377172865353621698L);
3911   TEST_c_c (casinh, -0x1p-23L, -0x0.ffffffp0L, -2.714321200917194650737217746780928423385e-4L, -1.570357140408705570520377172865353621698L);
3912   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1p-23L, 8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3913   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1p-23L, -8.813735448726963984495965873956465777250e-1L, 8.429369953393598499000760938112968755257e-8L);
3914   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1p-23L, 8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3915   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1p-23L, -8.813735448726963984495965873956465777250e-1L, -8.429369953393598499000760938112968755257e-8L);
3916   TEST_c_c (casinh, 0x1.fp-129L, 0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3917   TEST_c_c (casinh, 0x1.fp-129L, -0x0.ffffffp0L, 8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3918   TEST_c_c (casinh, -0x1.fp-129L, 0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, 1.570451059810180415643718442157112705601L);
3919   TEST_c_c (casinh, -0x1.fp-129L, -0x0.ffffffp0L, -8.245504387859737323891843603996428534945e-36L, -1.570451059810180415643718442157112705601L);
3920   TEST_c_c (casinh, 0x0.ffffffp0L, 0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3921   TEST_c_c (casinh, -0x0.ffffffp0L, 0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, 2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3922   TEST_c_c (casinh, 0x0.ffffffp0L, -0x1.fp-129L, 8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3923   TEST_c_c (casinh, -0x0.ffffffp0L, -0x1.fp-129L, -8.813735448726938863015878255140556727969e-1L, -2.013062624689288675911339929224634593425e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3924   TEST_c_c (casinh, 0.0L, 0x0.ffffffp0L, 0.0L, 1.570451059810180415643718442157112705601L);
3925   TEST_c_c (casinh, 0.0L, -0x0.ffffffp0L, 0.0L, -1.570451059810180415643718442157112705601L);
3926   TEST_c_c (casinh, -0.0L, 0x0.ffffffp0L, -0.0L, 1.570451059810180415643718442157112705601L);
3927   TEST_c_c (casinh, -0.0L, -0x0.ffffffp0L, -0.0L, -1.570451059810180415643718442157112705601L);
3928   TEST_c_c (casinh, 0x0.ffffffp0L, 0.0L, 8.813735448726938863015878255140556727969e-1L, 0.0L);
3929   TEST_c_c (casinh, -0x0.ffffffp0L, 0.0L, -8.813735448726938863015878255140556727969e-1L, 0.0L);
3930   TEST_c_c (casinh, 0x0.ffffffp0L, -0.0L, 8.813735448726938863015878255140556727969e-1L, -0.0L);
3931   TEST_c_c (casinh, -0x0.ffffffp0L, -0.0L, -8.813735448726938863015878255140556727969e-1L, -0.0L);
3932   TEST_c_c (casinh, 0x1p-23L, 0.5L, 1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3933   TEST_c_c (casinh, 0x1p-23L, -0.5L, 1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3934   TEST_c_c (casinh, -0x1p-23L, 0.5L, -1.376510308240943236356088341381173571841e-7L, 5.235987755982934033165770729745469098254e-1L);
3935   TEST_c_c (casinh, -0x1p-23L, -0.5L, -1.376510308240943236356088341381173571841e-7L, -5.235987755982934033165770729745469098254e-1L);
3936   TEST_c_c (casinh, 0.5L, 0x1p-23L, 4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3937   TEST_c_c (casinh, -0.5L, 0x1p-23L, -4.812118250596059896127318386463676808798e-1L, 1.066240299940009780479664302917201696886e-7L);
3938   TEST_c_c (casinh, 0.5L, -0x1p-23L, 4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3939   TEST_c_c (casinh, -0.5L, -0x1p-23L, -4.812118250596059896127318386463676808798e-1L, -1.066240299940009780479664302917201696886e-7L);
3940   TEST_c_c (casinh, 0x1.fp-129L, 0.5L, 3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3941   TEST_c_c (casinh, 0x1.fp-129L, -0.5L, 3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3942   TEST_c_c (casinh, -0x1.fp-129L, 0.5L, -3.287317402534702257036015056278368274737e-39L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3943   TEST_c_c (casinh, -0x1.fp-129L, -0.5L, -3.287317402534702257036015056278368274737e-39L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_FLOAT);
3944   TEST_c_c (casinh, 0.5L, 0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3945   TEST_c_c (casinh, -0.5L, 0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, 2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3946   TEST_c_c (casinh, 0.5L, -0x1.fp-129L, 4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3947   TEST_c_c (casinh, -0.5L, -0x1.fp-129L, -4.812118250596034474977589134243684231352e-1L, -2.546345110742945032959687790021055102355e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3948   TEST_c_c (casinh, 0x1p-23L, 0x1p-23L, 1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3949   TEST_c_c (casinh, 0x1p-23L, -0x1p-23L, 1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3950   TEST_c_c (casinh, -0x1p-23L, 0x1p-23L, -1.192092895507818146886315028596704749235e-7L, 1.192092895507806853113684971258850504935e-7L);
3951   TEST_c_c (casinh, -0x1p-23L, -0x1p-23L, -1.192092895507818146886315028596704749235e-7L, -1.192092895507806853113684971258850504935e-7L);
3952   TEST_c_c (casinh, 0x1.fp-129L, 0x1p-23L, 2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3953   TEST_c_c (casinh, 0x1.fp-129L, -0x1p-23L, 2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3954   TEST_c_c (casinh, -0x1.fp-129L, 0x1p-23L, -2.846900380897747786805634596726756660388e-39L, 1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3955   TEST_c_c (casinh, -0x1.fp-129L, -0x1p-23L, -2.846900380897747786805634596726756660388e-39L, -1.192092895507815323443157514352519154304e-7L, UNDERFLOW_EXCEPTION_FLOAT);
3956   /* Bug 15319: underflow exception may be missing.  */
3957   TEST_c_c (casinh, 0x1p-23L, 0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3958   TEST_c_c (casinh, -0x1p-23L, 0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, 2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3959   TEST_c_c (casinh, 0x1p-23L, -0x1.fp-129L, 1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3960   TEST_c_c (casinh, -0x1p-23L, -0x1.fp-129L, -1.192092895507809676556842485683592032154e-7L, -2.846900380897707329917933005874691056564e-39L, UNDERFLOW_EXCEPTION_OK_FLOAT);
3961   TEST_c_c (casinh, 0.0L, 0x1p-23L, 0.0L, 1.192092895507815323443157514352519154304e-7L);
3962   TEST_c_c (casinh, 0.0L, -0x1p-23L, 0.0L, -1.192092895507815323443157514352519154304e-7L);
3963   TEST_c_c (casinh, -0.0L, 0x1p-23L, -0.0L, 1.192092895507815323443157514352519154304e-7L);
3964   TEST_c_c (casinh, -0.0L, -0x1p-23L, -0.0L, -1.192092895507815323443157514352519154304e-7L);
3965   TEST_c_c (casinh, 0x1p-23L, 0.0L, 1.192092895507809676556842485683592032154e-7L, 0.0L);
3966   TEST_c_c (casinh, -0x1p-23L, 0.0L, -1.192092895507809676556842485683592032154e-7L, 0.0L);
3967   TEST_c_c (casinh, 0x1p-23L, -0.0L, 1.192092895507809676556842485683592032154e-7L, -0.0L);
3968   TEST_c_c (casinh, -0x1p-23L, -0.0L, -1.192092895507809676556842485683592032154e-7L, -0.0L);
3969   TEST_c_c (casinh, 0x1.fp-129L, 0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3970   TEST_c_c (casinh, 0x1.fp-129L, -0x1.fp-129L, 2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3971   TEST_c_c (casinh, -0x1.fp-129L, 0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, 2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3972   TEST_c_c (casinh, -0x1.fp-129L, -0x1.fp-129L, -2.846900380897727558361783801085126250967e-39L, -2.846900380897727558361783801085126250967e-39L, UNDERFLOW_EXCEPTION_FLOAT);
3973 #ifndef TEST_FLOAT
3974   TEST_c_c (casinh, 0x1p-52L, 0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3975   TEST_c_c (casinh, 0x1p-52L, -0x0.fffffffffffff8p0L, 1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3976   TEST_c_c (casinh, -0x1p-52L, 0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, 1.570796307840326780080580569360500172043L);
3977   TEST_c_c (casinh, -0x1p-52L, -0x0.fffffffffffff8p0L, -1.171456840272878582596796205397918831268e-8L, -1.570796307840326780080580569360500172043L);
3978   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1p-52L, 8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3979   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1p-52L, -8.813735870195429467279863907910458761820e-1L, 1.570092458683775146551022293016031474627e-16L);
3980   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1p-52L, 8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3981   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1p-52L, -8.813735870195429467279863907910458761820e-1L, -1.570092458683775146551022293016031474627e-16L);
3982   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3983   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.fffffffffffff8p0L, 3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3984   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, 1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3985   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.fffffffffffff8p0L, -3.616396521699973256461764099945789620604e-301L, -1.570796311893735425383665303776316016594L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
3986   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3987   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, 3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3988   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0x1.fp-1025L, 8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3989   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0x1.fp-1025L, -8.813735870195429467279863907910371604180e-1L, -3.810492908885321954658152505985270452320e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
3990   TEST_c_c (casinh, 0.0L, 0x0.fffffffffffff8p0L, 0.0L, 1.570796311893735425383665303776316016594L);
3991   TEST_c_c (casinh, 0.0L, -0x0.fffffffffffff8p0L, 0.0L, -1.570796311893735425383665303776316016594L);
3992   TEST_c_c (casinh, -0.0L, 0x0.fffffffffffff8p0L, -0.0L, 1.570796311893735425383665303776316016594L);
3993   TEST_c_c (casinh, -0.0L, -0x0.fffffffffffff8p0L, -0.0L, -1.570796311893735425383665303776316016594L);
3994   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, 0.0L, 8.813735870195429467279863907910371604180e-1L, 0.0L);
3995   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, 0.0L, -8.813735870195429467279863907910371604180e-1L, 0.0L);
3996   TEST_c_c (casinh, 0x0.fffffffffffff8p0L, -0.0L, 8.813735870195429467279863907910371604180e-1L, -0.0L);
3997   TEST_c_c (casinh, -0x0.fffffffffffff8p0L, -0.0L, -8.813735870195429467279863907910371604180e-1L, -0.0L);
3998 #endif
3999   TEST_c_c (casinh, 0x1p-52L, 0.5L, 2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4000   TEST_c_c (casinh, 0x1p-52L, -0.5L, 2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4001   TEST_c_c (casinh, -0x1p-52L, 0.5L, -2.563950248511418570403591756798643804971e-16L, 5.235987755982988730771072305465648369889e-1L);
4002   TEST_c_c (casinh, -0x1p-52L, -0.5L, -2.563950248511418570403591756798643804971e-16L, -5.235987755982988730771072305465648369889e-1L);
4003   TEST_c_c (casinh, 0.5L, 0x1p-52L, 4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4004   TEST_c_c (casinh, -0.5L, 0x1p-52L, -4.812118250596034474977589134243772428682e-1L, 1.986027322597818397661816253158024383707e-16L);
4005   TEST_c_c (casinh, 0.5L, -0x1p-52L, 4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4006   TEST_c_c (casinh, -0.5L, -0x1p-52L, -4.812118250596034474977589134243772428682e-1L, -1.986027322597818397661816253158024383707e-16L);
4007 #ifndef TEST_FLOAT
4008   TEST_c_c (casinh, 0x1.fp-1025L, 0.5L, 6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4009   TEST_c_c (casinh, 0x1.fp-1025L, -0.5L, 6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4010   TEST_c_c (casinh, -0x1.fp-1025L, 0.5L, -6.222508863508420569166420770843207333493e-309L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4011   TEST_c_c (casinh, -0x1.fp-1025L, -0.5L, -6.222508863508420569166420770843207333493e-309L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
4012   TEST_c_c (casinh, 0.5L, 0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4013   TEST_c_c (casinh, -0.5L, 0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, 4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4014   TEST_c_c (casinh, 0.5L, -0x1.fp-1025L, 4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4015   TEST_c_c (casinh, -0.5L, -0x1.fp-1025L, -4.812118250596034474977589134243684231352e-1L, -4.819934639999230680322935210539402497827e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4016 #endif
4017   TEST_c_c (casinh, 0x1p-52L, 0x1p-52L, 2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4018   TEST_c_c (casinh, 0x1p-52L, -0x1p-52L, 2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4019   TEST_c_c (casinh, -0x1p-52L, 0x1p-52L, -2.220446049250313080847263336181677117148e-16L, 2.220446049250313080847263336181604132852e-16L);
4020   TEST_c_c (casinh, -0x1p-52L, -0x1p-52L, -2.220446049250313080847263336181677117148e-16L, -2.220446049250313080847263336181604132852e-16L);
4021 #ifndef TEST_FLOAT
4022   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-52L, 5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4023   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-52L, 5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4024   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-52L, -5.388850751072128349671657362289548938458e-309L, 2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4025   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-52L, -5.388850751072128349671657362289548938458e-309L, -2.220446049250313080847263336181658871074e-16L, UNDERFLOW_EXCEPTION_DOUBLE);
4026   /* Bug 15319: underflow exception may be missing.  */
4027   TEST_c_c (casinh, 0x1p-52L, 0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4028   TEST_c_c (casinh, -0x1p-52L, 0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, 5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4029   TEST_c_c (casinh, 0x1p-52L, -0x1.fp-1025L, 2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4030   TEST_c_c (casinh, -0x1p-52L, -0x1.fp-1025L, -2.220446049250313080847263336181622378926e-16L, -5.388850751072128349671657362289283247603e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4031 #endif
4032   TEST_c_c (casinh, 0.0L, 0x1p-52L, 0.0L, 2.220446049250313080847263336181658871074e-16L);
4033   TEST_c_c (casinh, 0.0L, -0x1p-52L, 0.0L, -2.220446049250313080847263336181658871074e-16L);
4034   TEST_c_c (casinh, -0.0L, 0x1p-52L, -0.0L, 2.220446049250313080847263336181658871074e-16L);
4035   TEST_c_c (casinh, -0.0L, -0x1p-52L, -0.0L, -2.220446049250313080847263336181658871074e-16L);
4036   TEST_c_c (casinh, 0x1p-52L, 0.0L, 2.220446049250313080847263336181622378926e-16L, 0.0L);
4037   TEST_c_c (casinh, -0x1p-52L, 0.0L, -2.220446049250313080847263336181622378926e-16L, 0.0L);
4038   TEST_c_c (casinh, 0x1p-52L, -0.0L, 2.220446049250313080847263336181622378926e-16L, -0.0L);
4039   TEST_c_c (casinh, -0x1p-52L, -0.0L, -2.220446049250313080847263336181622378926e-16L, -0.0L);
4040 #ifndef TEST_FLOAT
4041   TEST_c_c (casinh, 0x1.fp-1025L, 0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4042   TEST_c_c (casinh, 0x1.fp-1025L, -0x1.fp-1025L, 5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4043   TEST_c_c (casinh, -0x1.fp-1025L, 0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4044   TEST_c_c (casinh, -0x1.fp-1025L, -0x1.fp-1025L, -5.388850751072128349671657362289416093031e-309L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4045 #endif
4046 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
4047   TEST_c_c (casinh, 0x1p-63L, 0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4048   TEST_c_c (casinh, 0x1p-63L, -0x0.ffffffffffffffffp0L, 2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4049   TEST_c_c (casinh, -0x1p-63L, 0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, 1.570796326376055842114524927965556247908L);
4050   TEST_c_c (casinh, -0x1p-63L, -0x0.ffffffffffffffffp0L, -2.588578361325995866221775673638805081337e-10L, -1.570796326376055842114524927965556247908L);
4051   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1p-63L, 8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4052   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1p-63L, -8.813735870195430251942769895627079569937e-1L, 7.666467083416870407402049869781566856442e-20L);
4053   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1p-63L, 8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4054   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1p-63L, -8.813735870195430251942769895627079569937e-1L, -7.666467083416870407402049869781566856442e-20L);
4055 # if LDBL_MIN_EXP <= -16381
4056   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4057   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffp0L, 2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4058   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, 1.570796326465624365239962068302568888898L);
4059   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffp0L, -2.472906068161537187835415298076415423459e-4923L, -1.570796326465624365239962068302568888898L);
4060   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4061   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, 5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4062   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0x1.fp-16385L, 8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4063   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0x1.fp-16385L, -8.813735870195430251942769895627079569917e-1L, -5.757683115456107044287327268904964422212e-4933L, UNDERFLOW_EXCEPTION);
4064 # endif
4065   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffp0L, 0.0L, 1.570796326465624365239962068302568888898L);
4066   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffp0L, 0.0L, -1.570796326465624365239962068302568888898L);
4067   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffp0L, -0.0L, 1.570796326465624365239962068302568888898L);
4068   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffp0L, -0.0L, -1.570796326465624365239962068302568888898L);
4069   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, 0.0L, 8.813735870195430251942769895627079569917e-1L, 0.0L);
4070   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, 0.0L, -8.813735870195430251942769895627079569917e-1L, 0.0L);
4071   TEST_c_c (casinh, 0x0.ffffffffffffffffp0L, -0.0L, 8.813735870195430251942769895627079569917e-1L, -0.0L);
4072   TEST_c_c (casinh, -0x0.ffffffffffffffffp0L, -0.0L, -8.813735870195430251942769895627079569917e-1L, -0.0L);
4073 #endif
4074   TEST_c_c (casinh, 0x1p-63L, 0.5L, 1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4075   TEST_c_c (casinh, 0x1p-63L, -0.5L, 1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4076   TEST_c_c (casinh, -0x1p-63L, 0.5L, -1.251928832280966098829878787499365228659e-19L, 5.235987755982988730771072305465838140283e-1L);
4077   TEST_c_c (casinh, -0x1p-63L, -0.5L, -1.251928832280966098829878787499365228659e-19L, -5.235987755982988730771072305465838140283e-1L);
4078   TEST_c_c (casinh, 0.5L, 0x1p-63L, 4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4079   TEST_c_c (casinh, -0.5L, 0x1p-63L, -4.812118250596034474977589134243684231373e-1L, 9.697399036122160144833087173623140436413e-20L);
4080   TEST_c_c (casinh, 0.5L, -0x1p-63L, 4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4081   TEST_c_c (casinh, -0.5L, -0x1p-63L, -4.812118250596034474977589134243684231373e-1L, -9.697399036122160144833087173623140436413e-20L);
4082 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4083   TEST_c_c (casinh, 0x1.fp-16385L, 0.5L, 9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4084   TEST_c_c (casinh, 0x1.fp-16385L, -0.5L, 9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4085   TEST_c_c (casinh, -0x1.fp-16385L, 0.5L, -9.402257155670418112159334875199821342890e-4933L, 5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4086   TEST_c_c (casinh, -0x1.fp-16385L, -0.5L, -9.402257155670418112159334875199821342890e-4933L, -5.235987755982988730771072305465838140329e-1L, UNDERFLOW_EXCEPTION);
4087   TEST_c_c (casinh, 0.5L, 0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4088   TEST_c_c (casinh, -0.5L, 0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, 7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4089   TEST_c_c (casinh, 0.5L, -0x1.fp-16385L, 4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4090   TEST_c_c (casinh, -0.5L, -0x1.fp-16385L, -4.812118250596034474977589134243684231352e-1L, -7.282957076134209141226696333885150260319e-4933L, UNDERFLOW_EXCEPTION);
4091 #endif
4092   TEST_c_c (casinh, 0x1p-63L, 0x1p-63L, 1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4093   TEST_c_c (casinh, 0x1p-63L, -0x1p-63L, 1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4094   TEST_c_c (casinh, -0x1p-63L, 0x1p-63L, -1.084202172485504434007452800869941711430e-19L, 1.084202172485504434007452800869941711422e-19L);
4095   TEST_c_c (casinh, -0x1p-63L, -0x1p-63L, -1.084202172485504434007452800869941711430e-19L, -1.084202172485504434007452800869941711422e-19L);
4096 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4097   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4098   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-63L, 8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4099   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, 1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4100   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-63L, -8.142593549724601460479922838826119584465e-4933L, -1.084202172485504434007452800869941711428e-19L, UNDERFLOW_EXCEPTION);
4101   TEST_c_c (casinh, 0x1p-63L, 0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4102   TEST_c_c (casinh, -0x1p-63L, 0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, 8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4103   TEST_c_c (casinh, 0x1p-63L, -0x1.fp-16385L, 1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4104   TEST_c_c (casinh, -0x1p-63L, -0x1.fp-16385L, -1.084202172485504434007452800869941711424e-19L, -8.142593549724601460479922838826119584369e-4933L, UNDERFLOW_EXCEPTION);
4105 #endif
4106   TEST_c_c (casinh, 0.0L, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711428e-19L);
4107   TEST_c_c (casinh, 0.0L, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711428e-19L);
4108   TEST_c_c (casinh, -0.0L, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711428e-19L);
4109   TEST_c_c (casinh, -0.0L, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711428e-19L);
4110   TEST_c_c (casinh, 0x1p-63L, 0.0L, 1.084202172485504434007452800869941711424e-19L, 0.0L);
4111   TEST_c_c (casinh, -0x1p-63L, 0.0L, -1.084202172485504434007452800869941711424e-19L, 0.0L);
4112   TEST_c_c (casinh, 0x1p-63L, -0.0L, 1.084202172485504434007452800869941711424e-19L, -0.0L);
4113   TEST_c_c (casinh, -0x1p-63L, -0.0L, -1.084202172485504434007452800869941711424e-19L, -0.0L);
4114 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4115   TEST_c_c (casinh, 0x1.fp-16385L, 0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4116   TEST_c_c (casinh, 0x1.fp-16385L, -0x1.fp-16385L, 8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4117   TEST_c_c (casinh, -0x1.fp-16385L, 0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4118   TEST_c_c (casinh, -0x1.fp-16385L, -0x1.fp-16385L, -8.142593549724601460479922838826119584417e-4933L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4119 #endif
4120 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
4121   TEST_c_c (casinh, 0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4122   TEST_c_c (casinh, 0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, 1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4123   TEST_c_c (casinh, -0x1p-105L, 0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, 1.570796326794896419512475791677915736035L);
4124   TEST_c_c (casinh, -0x1p-105L, -0x0.ffffffffffffffffffffffffffcp0L, -1.234330349600789959989661887846005659983e-16L, -1.570796326794896419512475791677915736035L);
4125   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, 8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4126   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1p-105L, -8.813735870195430252326093249797835932642e-1L, 1.743152798421049375791483240187377443526e-32L);
4127   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, 8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4128   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1p-105L, -8.813735870195430252326093249797835932642e-1L, -1.743152798421049375791483240187377443526e-32L);
4129   TEST_c_c (casinh, 0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4130   TEST_c_c (casinh, 0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, 3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4131   TEST_c_c (casinh, -0x1.fp-1025L, 0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, 1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4132   TEST_c_c (casinh, -0x1.fp-1025L, -0x0.ffffffffffffffffffffffffffcp0L, -3.432186888910770473784103112009399360940e-293L, -1.570796326794896462222075823262245502760L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
4133   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4134   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, 3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4135   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, 8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4136   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0x1.fp-1025L, -8.813735870195430252326093249797835932642e-1L, -3.810492908885321743133304375216641110205e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
4137   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 1.570796326794896462222075823262245502760L);
4138   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -1.570796326794896462222075823262245502760L);
4139   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 1.570796326794896462222075823262245502760L);
4140   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -1.570796326794896462222075823262245502760L);
4141   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, 0.0L, 8.813735870195430252326093249797835932642e-1L, 0.0L);
4142   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, 0.0L, -8.813735870195430252326093249797835932642e-1L, 0.0L);
4143   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffcp0L, -0.0L, 8.813735870195430252326093249797835932642e-1L, -0.0L);
4144   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffcp0L, -0.0L, -8.813735870195430252326093249797835932642e-1L, -0.0L);
4145 #endif
4146   TEST_c_c (casinh, 0x1p-105L, 0.5L, 2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4147   TEST_c_c (casinh, 0x1p-105L, -0.5L, 2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4148   TEST_c_c (casinh, -0x1p-105L, 0.5L, -2.846556599890768890940941645338546615370e-32L, 5.235987755982988730771072305465838140329e-1L);
4149   TEST_c_c (casinh, -0x1p-105L, -0.5L, -2.846556599890768890940941645338546615370e-32L, -5.235987755982988730771072305465838140329e-1L);
4150   TEST_c_c (casinh, 0.5L, 0x1p-105L, 4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4151   TEST_c_c (casinh, -0.5L, 0x1p-105L, -4.812118250596034474977589134243684231352e-1L, 2.204933261082751447436996198490110245167e-32L);
4152   TEST_c_c (casinh, 0.5L, -0x1p-105L, 4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4153   TEST_c_c (casinh, -0.5L, -0x1p-105L, -4.812118250596034474977589134243684231352e-1L, -2.204933261082751447436996198490110245167e-32L);
4154   TEST_c_c (casinh, 0x1p-105L, 0x1p-105L, 2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4155   TEST_c_c (casinh, 0x1p-105L, -0x1p-105L, 2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4156   TEST_c_c (casinh, -0x1p-105L, 0x1p-105L, -2.465190328815661891911651766508706967729e-32L, 2.465190328815661891911651766508706967729e-32L);
4157   TEST_c_c (casinh, -0x1p-105L, -0x1p-105L, -2.465190328815661891911651766508706967729e-32L, -2.465190328815661891911651766508706967729e-32L);
4158 #ifndef TEST_FLOAT
4159   TEST_c_c (casinh, 0x1.fp-1025L, 0x1p-105L, 5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4160   TEST_c_c (casinh, 0x1.fp-1025L, -0x1p-105L, 5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4161   TEST_c_c (casinh, -0x1.fp-1025L, 0x1p-105L, -5.388850751072128349671657362289416093031e-309L, 2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4162   TEST_c_c (casinh, -0x1.fp-1025L, -0x1p-105L, -5.388850751072128349671657362289416093031e-309L, -2.465190328815661891911651766508706967729e-32L, UNDERFLOW_EXCEPTION_DOUBLE);
4163   /* Bug 15319: underflow exception may be missing.  */
4164   TEST_c_c (casinh, 0x1p-105L, 0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4165   TEST_c_c (casinh, -0x1p-105L, 0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, 5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4166   TEST_c_c (casinh, 0x1p-105L, -0x1.fp-1025L, 2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4167   TEST_c_c (casinh, -0x1p-105L, -0x1.fp-1025L, -2.465190328815661891911651766508706967729e-32L, -5.388850751072128349671657362289416093031e-309L, UNDERFLOW_EXCEPTION_OK_DOUBLE);
4168 #endif
4169   TEST_c_c (casinh, 0.0L, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L);
4170   TEST_c_c (casinh, 0.0L, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L);
4171   TEST_c_c (casinh, -0.0L, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L);
4172   TEST_c_c (casinh, -0.0L, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L);
4173   TEST_c_c (casinh, 0x1p-105L, 0.0L, 2.465190328815661891911651766508706967729e-32L, 0.0L);
4174   TEST_c_c (casinh, -0x1p-105L, 0.0L, -2.465190328815661891911651766508706967729e-32L, 0.0L);
4175   TEST_c_c (casinh, 0x1p-105L, -0.0L, 2.465190328815661891911651766508706967729e-32L, -0.0L);
4176   TEST_c_c (casinh, -0x1p-105L, -0.0L, -2.465190328815661891911651766508706967729e-32L, -0.0L);
4177 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
4178   TEST_c_c (casinh, 0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4179   TEST_c_c (casinh, 0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, 1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4180   TEST_c_c (casinh, -0x1p-112L, 0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, 1.570796326794896601578502908312986698624L);
4181   TEST_c_c (casinh, -0x1p-112L, -0x0.ffffffffffffffffffffffffffff8p0L, -1.091004200533850618345330909857103457781e-17L, -1.570796326794896601578502908312986698624L);
4182   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, 8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4183   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1p-112L, -8.813735870195430252326093249797922409363e-1L, 1.361838123766444824837096281396380300349e-34L);
4184   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, 8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4185   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1p-112L, -8.813735870195430252326093249797922409363e-1L, -1.361838123766444824837096281396380300349e-34L);
4186   TEST_c_c (casinh, 0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4187   TEST_c_c (casinh, 0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, 5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4188   TEST_c_c (casinh, -0x1.fp-16385L, 0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, 1.570796326794896605353533883825294686803L);
4189   TEST_c_c (casinh, -0x1.fp-16385L, -0x0.ffffffffffffffffffffffffffff8p0L, -5.867357004219059108790368268900490184505e-4916L, -1.570796326794896605353533883825294686803L);
4190   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4191   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, 5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4192   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, 8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4193   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0x1.fp-16385L, -8.813735870195430252326093249797922409363e-1L, -5.757683115456107044131264955348449231681e-4933L, UNDERFLOW_EXCEPTION);
4194   TEST_c_c (casinh, 0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 1.570796326794896605353533883825294686803L);
4195   TEST_c_c (casinh, 0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -1.570796326794896605353533883825294686803L);
4196   TEST_c_c (casinh, -0.0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 1.570796326794896605353533883825294686803L);
4197   TEST_c_c (casinh, -0.0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -1.570796326794896605353533883825294686803L);
4198   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, 8.813735870195430252326093249797922409363e-1L, 0.0L);
4199   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, 0.0L, -8.813735870195430252326093249797922409363e-1L, 0.0L);
4200   TEST_c_c (casinh, 0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, 8.813735870195430252326093249797922409363e-1L, -0.0L);
4201   TEST_c_c (casinh, -0x0.ffffffffffffffffffffffffffff8p0L, -0.0L, -8.813735870195430252326093249797922409363e-1L, -0.0L);
4202 #endif
4203   TEST_c_c (casinh, 0x1p-112L, 0.5L, 2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4204   TEST_c_c (casinh, 0x1p-112L, -0.5L, 2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4205   TEST_c_c (casinh, -0x1p-112L, 0.5L, -2.223872343664663196047610660420739543258e-34L, 5.235987755982988730771072305465838140329e-1L);
4206   TEST_c_c (casinh, -0x1p-112L, -0.5L, -2.223872343664663196047610660420739543258e-34L, -5.235987755982988730771072305465838140329e-1L);
4207   TEST_c_c (casinh, 0.5L, 0x1p-112L, 4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4208   TEST_c_c (casinh, -0.5L, 0x1p-112L, -4.812118250596034474977589134243684231352e-1L, 1.722604110220899568310153280070398629037e-34L);
4209   TEST_c_c (casinh, 0.5L, -0x1p-112L, 4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4210   TEST_c_c (casinh, -0.5L, -0x1p-112L, -4.812118250596034474977589134243684231352e-1L, -1.722604110220899568310153280070398629037e-34L);
4211   TEST_c_c (casinh, 0x1p-112L, 0x1p-112L, 1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4212   TEST_c_c (casinh, 0x1p-112L, -0x1p-112L, 1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4213   TEST_c_c (casinh, -0x1p-112L, 0x1p-112L, -1.925929944387235853055977942584927318538e-34L, 1.925929944387235853055977942584927318538e-34L);
4214   TEST_c_c (casinh, -0x1p-112L, -0x1p-112L, -1.925929944387235853055977942584927318538e-34L, -1.925929944387235853055977942584927318538e-34L);
4215 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
4216   TEST_c_c (casinh, 0x1.fp-16385L, 0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4217   TEST_c_c (casinh, 0x1.fp-16385L, -0x1p-112L, 8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4218   TEST_c_c (casinh, -0x1.fp-16385L, 0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, 1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4219   TEST_c_c (casinh, -0x1.fp-16385L, -0x1p-112L, -8.142593549724601460479922838826119584417e-4933L, -1.925929944387235853055977942584927318538e-34L, UNDERFLOW_EXCEPTION);
4220   TEST_c_c (casinh, 0x1p-112L, 0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4221   TEST_c_c (casinh, -0x1p-112L, 0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, 8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4222   TEST_c_c (casinh, 0x1p-112L, -0x1.fp-16385L, 1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4223   TEST_c_c (casinh, -0x1p-112L, -0x1.fp-16385L, -1.925929944387235853055977942584927318538e-34L, -8.142593549724601460479922838826119584417e-4933L, UNDERFLOW_EXCEPTION);
4224 #endif
4225   TEST_c_c (casinh, 0.0L, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L);
4226   TEST_c_c (casinh, 0.0L, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L);
4227   TEST_c_c (casinh, -0.0L, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L);
4228   TEST_c_c (casinh, -0.0L, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L);
4229   TEST_c_c (casinh, 0x1p-112L, 0.0L, 1.925929944387235853055977942584927318538e-34L, 0.0L);
4230   TEST_c_c (casinh, -0x1p-112L, 0.0L, -1.925929944387235853055977942584927318538e-34L, 0.0L);
4231   TEST_c_c (casinh, 0x1p-112L, -0.0L, 1.925929944387235853055977942584927318538e-34L, -0.0L);
4232   TEST_c_c (casinh, -0x1p-112L, -0.0L, -1.925929944387235853055977942584927318538e-34L, -0.0L);
4233
4234   TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
4235   TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
4236
4237   END (casinh, complex);
4238 }
4239
4240
4241 static void
4242 catan_test (void)
4243 {
4244   errno = 0;
4245   FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
4246   if (errno == ENOSYS)
4247     /* Function not implemented.  */
4248     return;
4249
4250   START (catan);
4251
4252   TEST_c_c (catan, 0, 0, 0, 0);
4253   TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
4254   TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
4255   TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
4256
4257   TEST_c_c (catan, 1.0L, plus_zero, M_PI_4l, plus_zero);
4258   TEST_c_c (catan, 1.0L, minus_zero, M_PI_4l, minus_zero);
4259   TEST_c_c (catan, -1.0L, plus_zero, -M_PI_4l, plus_zero);
4260   TEST_c_c (catan, -1.0L, minus_zero, -M_PI_4l, minus_zero);
4261   TEST_c_c (catan, plus_zero, 1.0L, plus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4262   TEST_c_c (catan, minus_zero, 1.0L, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4263   TEST_c_c (catan, plus_zero, -1.0L, plus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4264   TEST_c_c (catan, minus_zero, -1.0L, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4265
4266   TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
4267   TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
4268   TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
4269   TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
4270
4271
4272   TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
4273   TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
4274   TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
4275   TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
4276   TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
4277   TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
4278   TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
4279   TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
4280
4281   TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
4282   TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
4283   TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
4284   TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
4285
4286   TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
4287   TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
4288   TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
4289   TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
4290
4291   TEST_c_c (catan, qnan_value, 0.0, qnan_value, 0);
4292   TEST_c_c (catan, qnan_value, minus_zero, qnan_value, minus_zero);
4293
4294   TEST_c_c (catan, qnan_value, plus_infty, qnan_value, 0);
4295   TEST_c_c (catan, qnan_value, minus_infty, qnan_value, minus_zero);
4296
4297   TEST_c_c (catan, 0.0, qnan_value, qnan_value, qnan_value);
4298   TEST_c_c (catan, minus_zero, qnan_value, qnan_value, qnan_value);
4299
4300   TEST_c_c (catan, plus_infty, qnan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4301   TEST_c_c (catan, minus_infty, qnan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
4302
4303   TEST_c_c (catan, qnan_value, 10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4304   TEST_c_c (catan, qnan_value, -10.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4305
4306   TEST_c_c (catan, 0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4307   TEST_c_c (catan, -0.75, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4308
4309   TEST_c_c (catan, qnan_value, qnan_value, qnan_value, qnan_value);
4310
4311   TEST_c_c (catan, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L, 0.0L);
4312   TEST_c_c (catan, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L, -0.0L);
4313   TEST_c_c (catan, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L, 0.0L);
4314   TEST_c_c (catan, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L, -0.0L);
4315   TEST_c_c (catan, 0.0L, 0x1p50L, 1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4316   TEST_c_c (catan, -0.0L, 0x1p50L, -1.570796326794896619231321691639751442099L, 8.881784197001252323389053344728897997441e-16L);
4317   TEST_c_c (catan, 0.0L, -0x1p50L, 1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4318   TEST_c_c (catan, -0.0L, -0x1p50L, -1.570796326794896619231321691639751442099L, -8.881784197001252323389053344728897997441e-16L);
4319 #ifndef TEST_FLOAT
4320   TEST_c_c (catan, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4321   TEST_c_c (catan, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4322   TEST_c_c (catan, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4323   TEST_c_c (catan, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4324   TEST_c_c (catan, 0.0L, 0x1p500L, 1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4325   TEST_c_c (catan, -0.0L, 0x1p500L, -1.570796326794896619231321691639751442099L, 3.054936363499604682051979393213617699789e-151L);
4326   TEST_c_c (catan, 0.0L, -0x1p500L, 1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4327   TEST_c_c (catan, -0.0L, -0x1p500L, -1.570796326794896619231321691639751442099L, -3.054936363499604682051979393213617699789e-151L);
4328 #endif
4329 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4330   TEST_c_c (catan, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L, 0.0L);
4331   TEST_c_c (catan, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L, -0.0L);
4332   TEST_c_c (catan, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L, 0.0L);
4333   TEST_c_c (catan, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L, -0.0L);
4334   TEST_c_c (catan, 0.0L, 0x1p5000L, 1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4335   TEST_c_c (catan, -0.0L, 0x1p5000L, -1.570796326794896619231321691639751442099L, 7.079811261048172892385615158694057552948e-1506L);
4336   TEST_c_c (catan, 0.0L, -0x1p5000L, 1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4337   TEST_c_c (catan, -0.0L, -0x1p5000L, -1.570796326794896619231321691639751442099L, -7.079811261048172892385615158694057552948e-1506L);
4338 #endif
4339
4340   TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
4341   TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
4342
4343   END (catan, complex);
4344 }
4345
4346 static void
4347 catanh_test (void)
4348 {
4349   errno = 0;
4350   FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
4351   if (errno == ENOSYS)
4352     /* Function not implemented.  */
4353     return;
4354
4355   START (catanh);
4356
4357   TEST_c_c (catanh, 0, 0, 0.0, 0.0);
4358   TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
4359   TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
4360   TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
4361
4362   TEST_c_c (catanh, 1.0L, plus_zero, plus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4363   TEST_c_c (catanh, 1.0L, minus_zero, plus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4364   TEST_c_c (catanh, -1.0L, plus_zero, minus_infty, plus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4365   TEST_c_c (catanh, -1.0L, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4366   TEST_c_c (catanh, plus_zero, 1.0L, plus_zero, M_PI_4l);
4367   TEST_c_c (catanh, minus_zero, 1.0L, minus_zero, M_PI_4l);
4368   TEST_c_c (catanh, plus_zero, -1.0L, plus_zero, -M_PI_4l);
4369   TEST_c_c (catanh, minus_zero, -1.0L, minus_zero, -M_PI_4l);
4370
4371   TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
4372   TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
4373   TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
4374   TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
4375
4376   TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
4377   TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
4378   TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
4379   TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
4380   TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
4381   TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
4382   TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
4383   TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
4384
4385   TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
4386   TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
4387   TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
4388   TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
4389
4390   TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
4391   TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
4392   TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
4393   TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
4394
4395   TEST_c_c (catanh, 0, qnan_value, 0.0, qnan_value);
4396   TEST_c_c (catanh, minus_zero, qnan_value, minus_zero, qnan_value);
4397
4398   TEST_c_c (catanh, plus_infty, qnan_value, 0.0, qnan_value);
4399   TEST_c_c (catanh, minus_infty, qnan_value, minus_zero, qnan_value);
4400
4401   TEST_c_c (catanh, qnan_value, 0, qnan_value, qnan_value);
4402   TEST_c_c (catanh, qnan_value, minus_zero, qnan_value, qnan_value);
4403
4404   TEST_c_c (catanh, qnan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
4405   TEST_c_c (catanh, qnan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
4406
4407   TEST_c_c (catanh, 10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4408   TEST_c_c (catanh, -10.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4409
4410   TEST_c_c (catanh, qnan_value, 0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4411   TEST_c_c (catanh, qnan_value, -0.75, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4412
4413   TEST_c_c (catanh, qnan_value, qnan_value, qnan_value, qnan_value);
4414
4415   TEST_c_c (catanh, 0x1p50L, 0.0L, 8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4416   TEST_c_c (catanh, 0x1p50L, -0.0L, 8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4417   TEST_c_c (catanh, -0x1p50L, 0.0L, -8.881784197001252323389053344728897997441e-16L, 1.570796326794896619231321691639751442099L);
4418   TEST_c_c (catanh, -0x1p50L, -0.0L, -8.881784197001252323389053344728897997441e-16L, -1.570796326794896619231321691639751442099L);
4419   TEST_c_c (catanh, 0.0L, 0x1p50L, 0.0L, 1.570796326794895731052901991514519103193L);
4420   TEST_c_c (catanh, -0.0L, 0x1p50L, -0.0L, 1.570796326794895731052901991514519103193L);
4421   TEST_c_c (catanh, 0.0L, -0x1p50L, 0.0L, -1.570796326794895731052901991514519103193L);
4422   TEST_c_c (catanh, -0.0L, -0x1p50L, -0.0L, -1.570796326794895731052901991514519103193L);
4423 #ifndef TEST_FLOAT
4424   TEST_c_c (catanh, 0x1p500L, 0.0L, 3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4425   TEST_c_c (catanh, 0x1p500L, -0.0L, 3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4426   TEST_c_c (catanh, -0x1p500L, 0.0L, -3.054936363499604682051979393213617699789e-151L, 1.570796326794896619231321691639751442099L);
4427   TEST_c_c (catanh, -0x1p500L, -0.0L, -3.054936363499604682051979393213617699789e-151L, -1.570796326794896619231321691639751442099L);
4428   TEST_c_c (catanh, 0.0L, 0x1p500L, 0.0L, 1.570796326794896619231321691639751442099L);
4429   TEST_c_c (catanh, -0.0L, 0x1p500L, -0.0L, 1.570796326794896619231321691639751442099L);
4430   TEST_c_c (catanh, 0.0L, -0x1p500L, 0.0L, -1.570796326794896619231321691639751442099L);
4431   TEST_c_c (catanh, -0.0L, -0x1p500L, -0.0L, -1.570796326794896619231321691639751442099L);
4432 #endif
4433 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4434   TEST_c_c (catanh, 0x1p5000L, 0.0L, 7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4435   TEST_c_c (catanh, 0x1p5000L, -0.0L, 7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4436   TEST_c_c (catanh, -0x1p5000L, 0.0L, -7.079811261048172892385615158694057552948e-1506L, 1.570796326794896619231321691639751442099L);
4437   TEST_c_c (catanh, -0x1p5000L, -0.0L, -7.079811261048172892385615158694057552948e-1506L, -1.570796326794896619231321691639751442099L);
4438   TEST_c_c (catanh, 0.0L, 0x1p5000L, 0.0L, 1.570796326794896619231321691639751442099L);
4439   TEST_c_c (catanh, -0.0L, 0x1p5000L, -0.0L, 1.570796326794896619231321691639751442099L);
4440   TEST_c_c (catanh, 0.0L, -0x1p5000L, 0.0L, -1.570796326794896619231321691639751442099L);
4441   TEST_c_c (catanh, -0.0L, -0x1p5000L, -0.0L, -1.570796326794896619231321691639751442099L);
4442 #endif
4443
4444   TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
4445   TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
4446
4447   END (catanh, complex);
4448 }
4449
4450 static void
4451 cbrt_test (void)
4452 {
4453   errno = 0;
4454   FUNC(cbrt) (8);
4455   if (errno == ENOSYS)
4456     /* Function not implemented.  */
4457     return;
4458
4459   START (cbrt);
4460
4461   TEST_f_f (cbrt, 0.0, 0.0);
4462   TEST_f_f (cbrt, minus_zero, minus_zero);
4463
4464   TEST_f_f (cbrt, plus_infty, plus_infty);
4465   TEST_f_f (cbrt, minus_infty, minus_infty);
4466   TEST_f_f (cbrt, qnan_value, qnan_value);
4467
4468   TEST_f_f (cbrt, -0.001L, -0.1L);
4469   TEST_f_f (cbrt, 8, 2);
4470   TEST_f_f (cbrt, -27.0, -3.0);
4471   TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
4472   TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
4473
4474   END (cbrt);
4475 }
4476
4477
4478 static void
4479 ccos_test (void)
4480 {
4481   errno = 0;
4482   FUNC(ccos) (BUILD_COMPLEX (0, 0));
4483   if (errno == ENOSYS)
4484     /* Function not implemented.  */
4485     return;
4486
4487   START (ccos);
4488
4489   TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
4490   TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
4491   TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
4492   TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
4493
4494   TEST_c_c (ccos, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4495   TEST_c_c (ccos, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4496   TEST_c_c (ccos, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4497   TEST_c_c (ccos, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4498
4499   TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
4500   TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
4501   TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
4502   TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
4503
4504   TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4505   TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4506   TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4507   TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4508
4509   TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
4510   TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
4511   TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
4512   TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
4513
4514   TEST_c_c (ccos, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4515   TEST_c_c (ccos, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4516   TEST_c_c (ccos, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4517   TEST_c_c (ccos, minus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
4518
4519   TEST_c_c (ccos, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4520   TEST_c_c (ccos, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4521
4522   TEST_c_c (ccos, qnan_value, plus_infty, plus_infty, qnan_value);
4523   TEST_c_c (ccos, qnan_value, minus_infty, plus_infty, qnan_value);
4524
4525   TEST_c_c (ccos, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4526   TEST_c_c (ccos, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4527
4528   TEST_c_c (ccos, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4529   TEST_c_c (ccos, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4530
4531   TEST_c_c (ccos, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4532   TEST_c_c (ccos, -10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4533
4534   TEST_c_c (ccos, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4535   TEST_c_c (ccos, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4536
4537   TEST_c_c (ccos, qnan_value, qnan_value, qnan_value, qnan_value);
4538
4539   TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
4540   TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
4541
4542   TEST_c_c (ccos, 0.75, 89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4543   TEST_c_c (ccos, 0.75, -89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4544   TEST_c_c (ccos, -0.75, 89.5, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4545   TEST_c_c (ccos, -0.75, -89.5, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4546
4547 #ifndef TEST_FLOAT
4548   TEST_c_c (ccos, 0.75, 710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4549   TEST_c_c (ccos, 0.75, -710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4550   TEST_c_c (ccos, -0.75, 710.5, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4551   TEST_c_c (ccos, -0.75, -710.5, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4552 #endif
4553
4554 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4555   TEST_c_c (ccos, 0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4556   TEST_c_c (ccos, 0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4557   TEST_c_c (ccos, -0.75, 11357.25, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4558   TEST_c_c (ccos, -0.75, -11357.25, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4559 #endif
4560
4561 #ifdef TEST_FLOAT
4562   TEST_c_c (ccos, 0x1p-149, 180, plus_infty, -1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
4563 #endif
4564
4565 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4566   TEST_c_c (ccos, 0x1p-1074, 1440, plus_infty, -5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
4567 #endif
4568
4569 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4570   TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
4571 #endif
4572
4573   TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4574   TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4575
4576   END (ccos, complex);
4577 }
4578
4579
4580 static void
4581 ccosh_test (void)
4582 {
4583   errno = 0;
4584   FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
4585   if (errno == ENOSYS)
4586     /* Function not implemented.  */
4587     return;
4588
4589   START (ccosh);
4590
4591   TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
4592   TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
4593   TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
4594   TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
4595
4596   TEST_c_c (ccosh, 0.0, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4597   TEST_c_c (ccosh, minus_zero, plus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4598   TEST_c_c (ccosh, 0.0, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4599   TEST_c_c (ccosh, minus_zero, minus_infty, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4600
4601   TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
4602   TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
4603   TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
4604   TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
4605
4606   TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4607   TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4608   TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4609   TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
4610
4611   TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
4612   TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
4613   TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
4614   TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
4615
4616   TEST_c_c (ccosh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4617   TEST_c_c (ccosh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4618   TEST_c_c (ccosh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4619   TEST_c_c (ccosh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4620
4621   TEST_c_c (ccosh, 0.0, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4622   TEST_c_c (ccosh, minus_zero, qnan_value, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4623
4624   TEST_c_c (ccosh, plus_infty, qnan_value, plus_infty, qnan_value);
4625   TEST_c_c (ccosh, minus_infty, qnan_value, plus_infty, qnan_value);
4626
4627   TEST_c_c (ccosh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4628   TEST_c_c (ccosh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4629
4630   TEST_c_c (ccosh, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4631   TEST_c_c (ccosh, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
4632
4633   TEST_c_c (ccosh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4634   TEST_c_c (ccosh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4635
4636   TEST_c_c (ccosh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4637   TEST_c_c (ccosh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4638
4639   TEST_c_c (ccosh, qnan_value, qnan_value, qnan_value, qnan_value);
4640
4641   TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
4642
4643   TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
4644
4645   TEST_c_c (ccosh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4646   TEST_c_c (ccosh, -89.5, 0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4647   TEST_c_c (ccosh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
4648   TEST_c_c (ccosh, -89.5, -0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
4649
4650 #ifndef TEST_FLOAT
4651   TEST_c_c (ccosh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4652   TEST_c_c (ccosh, -710.5, 0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4653   TEST_c_c (ccosh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
4654   TEST_c_c (ccosh, -710.5, -0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
4655 #endif
4656
4657 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4658   TEST_c_c (ccosh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4659   TEST_c_c (ccosh, -11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4660   TEST_c_c (ccosh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
4661   TEST_c_c (ccosh, -11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
4662 #endif
4663
4664 #ifdef TEST_FLOAT
4665   TEST_c_c (ccosh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
4666 #endif
4667
4668 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4669   TEST_c_c (ccosh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
4670 #endif
4671
4672 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4673   TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
4674 #endif
4675
4676   TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
4677   TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
4678
4679   END (ccosh, complex);
4680 }
4681
4682
4683 static void
4684 ceil_test (void)
4685 {
4686   START (ceil);
4687
4688   TEST_f_f (ceil, 0.0, 0.0);
4689   TEST_f_f (ceil, minus_zero, minus_zero);
4690   TEST_f_f (ceil, plus_infty, plus_infty);
4691   TEST_f_f (ceil, minus_infty, minus_infty);
4692   TEST_f_f (ceil, qnan_value, qnan_value);
4693
4694   TEST_f_f (ceil, M_PIl, 4.0);
4695   TEST_f_f (ceil, -M_PIl, -3.0);
4696   TEST_f_f (ceil, 0.1, 1.0);
4697   TEST_f_f (ceil, 0.25, 1.0);
4698   TEST_f_f (ceil, 0.625, 1.0);
4699   TEST_f_f (ceil, -0.1, minus_zero);
4700   TEST_f_f (ceil, -0.25, minus_zero);
4701   TEST_f_f (ceil, -0.625, minus_zero);
4702
4703 #ifdef TEST_LDOUBLE
4704   /* The result can only be represented in long double.  */
4705   TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
4706   TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
4707   TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
4708   TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
4709   TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
4710
4711   TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
4712   TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
4713   TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
4714   TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
4715   TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
4716
4717 # if LDBL_MANT_DIG > 100
4718   TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
4719   TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
4720   TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
4721   TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
4722   TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
4723   TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
4724 # endif
4725
4726   TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
4727   TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
4728   TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
4729   TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
4730   TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
4731
4732   TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
4733   TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
4734   TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
4735   TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
4736   TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
4737
4738 # if LDBL_MANT_DIG > 100
4739   TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
4740   TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
4741   TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
4742   TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
4743   TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
4744   TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
4745
4746   TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
4747   TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
4748   TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
4749   TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
4750   TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
4751   TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
4752 # endif
4753
4754   TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
4755   TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
4756   TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
4757   TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
4758   TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
4759
4760   TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
4761   TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
4762   TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
4763   TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
4764   TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
4765
4766   TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
4767   TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
4768   TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
4769   TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
4770   TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
4771 #endif
4772
4773   END (ceil);
4774 }
4775
4776
4777 static void
4778 cexp_test (void)
4779 {
4780   errno = 0;
4781   FUNC(cexp) (BUILD_COMPLEX (0, 0));
4782   if (errno == ENOSYS)
4783     /* Function not implemented.  */
4784     return;
4785
4786   START (cexp);
4787
4788   TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
4789   TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
4790   TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
4791   TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
4792
4793   TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
4794   TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
4795
4796   TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
4797   TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
4798
4799   TEST_c_c (cexp, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4800   TEST_c_c (cexp, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4801
4802   TEST_c_c (cexp, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4803   TEST_c_c (cexp, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4804
4805   TEST_c_c (cexp, 100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4806   TEST_c_c (cexp, -100.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4807
4808   TEST_c_c (cexp, 100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4809   TEST_c_c (cexp, -100.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
4810
4811   TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
4812   TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
4813   TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
4814   TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
4815
4816   TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4817   TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
4818
4819   TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
4820   TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
4821
4822   TEST_c_c (cexp, minus_infty, qnan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
4823
4824   TEST_c_c (cexp, plus_infty, qnan_value, plus_infty, qnan_value);
4825
4826   TEST_c_c (cexp, qnan_value, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4827   TEST_c_c (cexp, qnan_value, 1.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4828
4829   TEST_c_c (cexp, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4830   TEST_c_c (cexp, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4831   TEST_c_c (cexp, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4832   TEST_c_c (cexp, qnan_value, qnan_value, qnan_value, qnan_value);
4833
4834   TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
4835   TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
4836
4837   TEST_c_c (cexp, 0, 0x1p65, 0.99888622066058013610642172179340364209972L, -0.047183876212354673805106149805700013943218L);
4838   TEST_c_c (cexp, 0, -0x1p65, 0.99888622066058013610642172179340364209972L, 0.047183876212354673805106149805700013943218L);
4839   TEST_c_c (cexp, 50, 0x1p127, 4.053997150228616856622417636046265337193e21L, 3.232070315463388524466674772633810238819e21L);
4840
4841 #ifndef TEST_FLOAT
4842   TEST_c_c (cexp, 0, 1e22, 0.5232147853951389454975944733847094921409L, -0.8522008497671888017727058937530293682618L);
4843   TEST_c_c (cexp, 0, 0x1p1023, -0.826369834614147994500785680811743734805L, 0.5631277798508840134529434079444683477104L);
4844   TEST_c_c (cexp, 500, 0x1p1023, -1.159886268932754433233243794561351783426e217L, 7.904017694554466595359379965081774849708e216L);
4845 #endif
4846
4847 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4848   TEST_c_c (cexp, 0, 0x1p16383L, 0.9210843909921906206874509522505756251609L, 0.3893629985894208126948115852610595405563L);
4849   TEST_c_c (cexp, -10000, 0x1p16383L, 1.045876464564882298442774542991176546722e-4343L, 4.421154026488516836023811173959413420548e-4344L);
4850 #endif
4851
4852   TEST_c_c (cexp, 88.75, 0.75, 2.558360358486542817001900410314204322891e38L, 2.383359453227311447654736314679677655100e38L);
4853   TEST_c_c (cexp, -95, 0.75, 4.039714446238306526889476684000081624047e-42L, 3.763383677300535390271646960780570275931e-42L, UNDERFLOW_EXCEPTION_FLOAT);
4854
4855 #ifndef TEST_FLOAT
4856   TEST_c_c (cexp, 709.8125, 0.75, 1.355121963080879535248452862759108365762e308L, 1.262426823598609432507811340856186873507e308L);
4857   TEST_c_c (cexp, -720, 0.75, 1.486960657116368433685753325516638551722e-313L, 1.385247284245720590980701226843815229385e-313L, UNDERFLOW_EXCEPTION_DOUBLE);
4858 #endif
4859
4860 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4861   TEST_c_c (cexp, 11356.5625, 0.75, 9.052188470850960144814815984311663764287e4931L, 8.432986734191301036267148978260970230200e4931L);
4862   TEST_c_c (cexp, -11370, 0.75, 8.631121063182211587489310508568170739592e-4939L, 8.040721827809267291427062346918413482824e-4939L, UNDERFLOW_EXCEPTION);
4863 #endif
4864
4865 #ifdef TEST_FLOAT
4866   TEST_c_c (cexp, 180, 0x1p-149, plus_infty, 2.087071793345235105931967606907855310664e33L, OVERFLOW_EXCEPTION);
4867 #endif
4868
4869 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
4870   TEST_c_c (cexp, 1440, 0x1p-1074, plus_infty, 1.196295853897226111293303155636183216483e302L, OVERFLOW_EXCEPTION);
4871 #endif
4872
4873 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4874   TEST_c_c (cexp, 22730, 0x1p-16434L, plus_infty, 2.435706297811211974162115164702304105374e4924L, OVERFLOW_EXCEPTION);
4875 #endif
4876
4877   TEST_c_c (cexp, 1e6, 0, plus_infty, 0, OVERFLOW_EXCEPTION);
4878   TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
4879   TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
4880
4881   TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
4882   TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
4883
4884   END (cexp, complex);
4885 }
4886
4887
4888 static void
4889 cimag_test (void)
4890 {
4891   START (cimag);
4892   TEST_c_f (cimag, 1.0, 0.0, 0.0);
4893   TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
4894   TEST_c_f (cimag, 1.0, qnan_value, qnan_value);
4895   TEST_c_f (cimag, qnan_value, qnan_value, qnan_value);
4896   TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
4897   TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
4898   TEST_c_f (cimag, 2.0, 3.0, 3.0);
4899
4900   END (cimag);
4901 }
4902
4903 static void
4904 clog_test (void)
4905 {
4906   errno = 0;
4907   FUNC(clog) (BUILD_COMPLEX (-2, -3));
4908   if (errno == ENOSYS)
4909     /* Function not implemented.  */
4910     return;
4911
4912   START (clog);
4913
4914   TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4915   TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
4916
4917   TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
4918   TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
4919
4920   TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
4921   TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
4922
4923   TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
4924   TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
4925
4926   TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
4927   TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
4928   TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
4929   TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
4930   TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
4931   TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
4932   TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
4933   TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
4934
4935   TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
4936   TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
4937   TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
4938   TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
4939
4940   TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
4941   TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
4942   TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
4943   TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
4944
4945   TEST_c_c (clog, plus_infty, qnan_value, plus_infty, qnan_value);
4946   TEST_c_c (clog, minus_infty, qnan_value, plus_infty, qnan_value);
4947
4948   TEST_c_c (clog, qnan_value, plus_infty, plus_infty, qnan_value);
4949   TEST_c_c (clog, qnan_value, minus_infty, plus_infty, qnan_value);
4950
4951   TEST_c_c (clog, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4952   TEST_c_c (clog, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4953   TEST_c_c (clog, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4954   TEST_c_c (clog, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4955
4956   TEST_c_c (clog, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4957   TEST_c_c (clog, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4958   TEST_c_c (clog, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4959   TEST_c_c (clog, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
4960
4961   TEST_c_c (clog, qnan_value, qnan_value, qnan_value, qnan_value);
4962
4963   TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
4964   TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
4965
4966   TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
4967   TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L, UNDERFLOW_EXCEPTION_FLOAT);
4968   TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
4969   TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
4970
4971 #ifndef TEST_FLOAT
4972   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
4973   TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
4974   TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
4975   TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
4976 #endif
4977
4978 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
4979   TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
4980   TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
4981   TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
4982 #endif
4983
4984   TEST_c_c (clog, 0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4985   TEST_c_c (clog, -0x1p-149L, 0x1.fp+127L, 88.69109041335841930424871526389807508374L, M_PI_2l);
4986   TEST_c_c (clog, 0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4987   TEST_c_c (clog, -0x1p-149L, -0x1.fp+127L, 88.69109041335841930424871526389807508374L, -M_PI_2l);
4988   TEST_c_c (clog, -0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, M_PIl);
4989   TEST_c_c (clog, -0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, -M_PIl);
4990 #ifdef TEST_FLOAT
4991   TEST_c_c (clog, 0x1.fp+127L, 0x1p-149L, 88.69109041335841930424871526389807508374L, plus_zero, UNDERFLOW_EXCEPTION);
4992   TEST_c_c (clog, 0x1.fp+127L, -0x1p-149L, 88.69109041335841930424871526389807508374L, minus_zero, UNDERFLOW_EXCEPTION);
4993 #endif
4994
4995 #ifndef TEST_FLOAT
4996   TEST_c_c (clog, 0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4997   TEST_c_c (clog, -0x1p-1074L, 0x1.fp+1023L, 709.7509641950694165420886960904242800794L, M_PI_2l);
4998   TEST_c_c (clog, 0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
4999   TEST_c_c (clog, -0x1p-1074L, -0x1.fp+1023L, 709.7509641950694165420886960904242800794L, -M_PI_2l);
5000   TEST_c_c (clog, -0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, M_PIl);
5001   TEST_c_c (clog, -0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, -M_PIl);
5002 #endif
5003 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5004   TEST_c_c (clog, 0x1.fp+1023L, 0x1p-1074L, 709.7509641950694165420886960904242800794L, plus_zero, UNDERFLOW_EXCEPTION);
5005   TEST_c_c (clog, 0x1.fp+1023L, -0x1p-1074L, 709.7509641950694165420886960904242800794L, minus_zero, UNDERFLOW_EXCEPTION);
5006 #endif
5007
5008 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5009   TEST_c_c (clog, 0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5010   TEST_c_c (clog, -0x1p-16445L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5011   TEST_c_c (clog, 0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5012   TEST_c_c (clog, -0x1p-16445L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5013   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, M_PIl);
5014   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, -M_PIl);
5015   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16445L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5016   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16445L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5017 # if LDBL_MANT_DIG >= 113
5018   TEST_c_c (clog, 0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5019   TEST_c_c (clog, -0x1p-16494L, 0x1.fp+16383L, 11356.49165759582936919077408168801636572L, M_PI_2l);
5020   TEST_c_c (clog, 0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5021   TEST_c_c (clog, -0x1p-16494L, -0x1.fp+16383L, 11356.49165759582936919077408168801636572L, -M_PI_2l);
5022   TEST_c_c (clog, -0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, M_PIl);
5023   TEST_c_c (clog, -0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, -M_PIl);
5024   TEST_c_c (clog, 0x1.fp+16383L, 0x1p-16494L, 11356.49165759582936919077408168801636572L, plus_zero, UNDERFLOW_EXCEPTION);
5025   TEST_c_c (clog, 0x1.fp+16383L, -0x1p-16494L, 11356.49165759582936919077408168801636572L, minus_zero, UNDERFLOW_EXCEPTION);
5026 # endif
5027 #endif
5028
5029   TEST_c_c (clog, 1.0L, 0x1.234566p-10L, 6.172834701221959432440126967147726538097e-7L, 1.111110564353742042376451655136933182201e-3L);
5030   TEST_c_c (clog, -1.0L, 0x1.234566p-20L, 5.886877547844618300918562490463748605537e-13L, 3.141591568520436206990380699322226378452L);
5031   TEST_c_c (clog, 0x1.234566p-30L, 1.0L, 5.614163921211322622623353961365728040115e-19L, 1.570796325735258575254858696548386439740L);
5032   TEST_c_c (clog, -0x1.234566p-40L, -1.0L, 5.354083939753840089583620652120903838944e-25L, -1.570796326795931422008642456283782656359L);
5033   TEST_c_c (clog, 0x1.234566p-50L, 1.0L, 5.106052341226425256332038420428899201070e-31L, 1.570796326794895608681734464330528755366L);
5034   TEST_c_c (clog, 0x1.234566p-60L, 1.0L, 4.869510976053643471080816669875627875933e-37L, 1.570796326794896618244456860363082279319L);
5035   TEST_c_c (clog, 0x1p-62L, 1.0L, 2.350988701644575015937473074444491355582e-38L, 1.570796326794896619014481257142650555297L);
5036   TEST_c_c (clog, 0x1p-63L, 1.0L, 5.877471754111437539843682686111228389059e-39L, 1.570796326794896619122901474391200998698L, UNDERFLOW_EXCEPTION_FLOAT);
5037   TEST_c_c (clog, 0x1p-64L, 1.0L, 1.469367938527859384960920671527807097271e-39L, 1.570796326794896619177111583015476220398L, UNDERFLOW_EXCEPTION_FLOAT);
5038 #ifndef TEST_FLOAT
5039   TEST_c_c (clog, 0x1p-510L, 1.0L, 4.450147717014402766180465434664808128438e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5040   TEST_c_c (clog, 0x1p-511L, 1.0L, 1.112536929253600691545116358666202032110e-308L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5041   TEST_c_c (clog, 0x1p-512L, 1.0L, 2.781342323134001728862790896665505080274e-309L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION_DOUBLE);
5042 #endif
5043 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5044   TEST_c_c (clog, 0x1p-8190L, 1.0L, 6.724206286224187012525355634643505205196e-4932L, 1.570796326794896619231321691639751442099L);
5045   TEST_c_c (clog, 0x1p-8191L, 1.0L, 1.681051571556046753131338908660876301299e-4932L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5046   TEST_c_c (clog, 0x1p-8192L, 1.0L, 4.202628928890116882828347271652190753248e-4933L, 1.570796326794896619231321691639751442099L, UNDERFLOW_EXCEPTION);
5047 #endif
5048
5049   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-10L, 8.298731898331237038231468223024422855654e-5L, 1.110938609507128729312743251313024793990e-3L);
5050   TEST_c_c (clog, 0x1.000566p0L, 0x1.234p-100L, 8.237022655933121125560939513260027133767e-5L, 8.974094312218060110948251664314290484113e-31L);
5051 #ifndef TEST_FLOAT
5052   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-30L, 2.649094282537168795982991778475646793277e-10L, 3.141592652530155111500161671113150737892L);
5053   TEST_c_c (clog, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 2.649094276923003995420209214900915462737e-10L, 3.141592653589793238462643383279502884197L);
5054 #endif
5055 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5056   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 9.868649107778739757272772275265050767867e-19L, 9.868649106423871142816660980898339912137e-19L);
5057   TEST_c_c (clog, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 9.868649107778739752403260515979017248596e-19L, 1.061846605795612822522063052130030717368e-301L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5058 #endif
5059
5060   TEST_c_c (clog, 0x0.ffffffp0L, 0x0.ffffffp-100L, -5.960464655174753498633255797994360530379e-8L, 7.888609052210118054117285652827862296732e-31L);
5061 #ifndef TEST_FLOAT
5062   TEST_c_c (clog, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -1.110223024625156602053389888482372171810e-16L, 9.332636185032188789900895447238171696171e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5063 #endif
5064 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5065   TEST_c_c (clog, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -5.421010862427522170184200798202494495630e-20L, 3.548665303440282824232502561095699343814e-4516L);
5066 #endif
5067
5068   TEST_c_c (clog, 0x1a6p-10L, 0x3a5p-10L, -1.4305135209763571252847059962654228661815e-06L, 1.1460277178115757370775644871674016684074L);
5069   TEST_c_c (clog, 0xf2p-10L, 0x3e3p-10L, 6.1988446308070710970664736815277450078106e-06L, 1.3322126499153926210226335249558203898460L);
5070   TEST_c_c (clog, 0x4d4ep-15L, 0x6605p-15L, -1.6298145321400412054744424587143483169412e-08L, 0.9223574537155056772124552172295398141249L);
5071   TEST_c_c (clog, 0x2818p-15L, 0x798fp-15L, 1.5366822245016167178749091974664853785194e-08L, 1.2522014929038946066987318471922169174157L);
5072   TEST_c_c (clog, 0x9b57bp-20L, 0xcb7b4p-20L, -3.9563019528687610863490232935890272740908e-11L, 0.9187593477446338910857133065497364950682L);
5073   TEST_c_c (clog, 0x2731p-20L, 0xfffd0p-20L, 4.4110493034041283943115971658295280288115e-11L, 1.5612279663766352262688735061954290528838L);
5074   TEST_c_c (clog, 0x2ede88p-23L, 0x771c3fp-23L, -4.4764192352906350039050902870893173560494e-13L, 1.1959106857549200806818600493552847793381L);
5075   TEST_c_c (clog, 0x11682p-23L, 0x7ffed1p-23L, 1.1723955140027907954461000991619077811832e-12L, 1.5622968405332756349813737986164832897108L);
5076   TEST_c_c (clog, 0xa1f2c1p-24L, 0xc643aep-24L, -1.0480505352462576151523512837107080269981e-13L, 0.8858771987699967480545613322309315260313L);
5077   TEST_c_c (clog, 0x659feap-24L, 0xeaf6f9p-24L, 3.7303493627403868207597214252239749960738e-14L, 1.1625816408046866464773042283673653469061L);
5078 #ifndef TEST_FLOAT
5079   TEST_c_c (clog, 0x4447d7175p-35L, 0x6c445e00ap-35L, -1.4823076576950255933915367361099865652625e-20L, 1.0081311552703893116404606212158840190615L);
5080   TEST_c_c (clog, 0x2dd46725bp-35L, 0x7783a1284p-35L, 4.4469229730850767799109418892826021157328e-20L, 1.2046235979300843056806465045930070146351L);
5081   TEST_c_c (clog, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -3.0292258760486853327810377824479932031744e-26L, 0.7998237934177411746093524982030330293980L);
5082   TEST_c_c (clog, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 5.3718272201930019901317065495843842735179e-26L, 1.0503831592447830576186444373011142397404L);
5083   TEST_c_c (clog, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -6.2122796286154679676173624516405339768606e-30L, 1.4904138780720095276446375492434049214172L);
5084   TEST_c_c (clog, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 3.2047474274603604594851472963586149973093e-29L, 1.4422922682185099608731642353544207976604L);
5085   TEST_c_c (clog, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -9.7375017988218644730510244778042114638107e-30L, 0.9790637929494922564724108399524154766631L);
5086   TEST_c_c (clog, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 8.3076914081087805757422664530653247447136e-30L, 1.2072712126771536614482822173033535043206L);
5087   TEST_c_c (clog, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -2.5083311595699359750201056724289010648701e-30L, 1.3710185432462268491534742969536240564640L);
5088   TEST_c_c (clog, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 1.0168910106364605304135563536838075568606e-30L, 0.8208373755522359859870890246475340086663L);
5089   TEST_c_c (clog, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 5.0844550531823026520677817684239496041087e-32L, 1.2627468605458094918919206628466016525397L);
5090   TEST_c_c (clog, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -5.2000108498455368032511404449795741611813e-32L, 1.5288921536982513453421343495466824420259L);
5091 #endif
5092 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5093   TEST_c_c (clog, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -1.1931267660846218205882675852805793644095e-36L, 1.2402109774337032400594953899784058127412L);
5094   TEST_c_c (clog, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 6.4064442119814669184296141278612389400075e-37L, 0.9193591364645830864185131402313014890145L);
5095   TEST_c_c (clog, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -2.3362950222592964220878638677292132852104e-37L, 1.1856121127236268105413184264288408265852L);
5096   TEST_c_c (clog, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 2.4244570985709679851855191080208817099132e-37L, 1.1393074519572050614551047548718495655972L);
5097   TEST_c_c (clog, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -9.9182335850630508484862145328126979066934e-39L, 1.3146479888794807046338799047003947008804L);
5098 #endif
5099 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5100   TEST_c_c (clog, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -1.0509738482436128031927971874674370984602e-45L, 1.0509191467640012308402149909370784281448L);
5101   TEST_c_c (clog, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 1.3487497719126364307640897239165442763573e-43L, 1.1750493008528425228929764149024375035382L);
5102   TEST_c_c (clog, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -4.7775669192897997174762089350332738583822e-50L, 0.8393953487996880419413728440067635213372L);
5103   TEST_c_c (clog, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 2.8398125044729578740243199963484494962411e-50L, 0.9149964976334130461795060758257083099706L);
5104   TEST_c_c (clog, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -3.5048022044913950094635368750889659723004e-57L, 1.3345633256521815205858155673950177421079L);
5105   TEST_c_c (clog, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 4.1101771307217268747345114262406964584250e-56L, 1.4596065864518742494094402406719567059585L);
5106   TEST_c_c (clog, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -1.4281333889622737316199756373421183559948e-62L, 1.3673546561165378090903506783353927980633L);
5107   TEST_c_c (clog, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 1.0027319539522347477331743836657426754857e-62L, 0.8193464073721167323313606647411269414759L);
5108   TEST_c_c (clog, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -1.7471844652198029695350765775994001163767e-63L, 1.1789110097072986038243729592318526094314L);
5109   TEST_c_c (clog, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 4.3299788920664682288477984749202524623248e-63L, 1.4746938237585656250866370987773473745867L);
5110 #endif
5111 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5112   TEST_c_c (clog, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -1.1683999374665377365054966073875064467108e-66L, 1.3257197596350832748781065387304444940172L);
5113   TEST_c_c (clog, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 1.5077923002544367932999503838191154621839e-65L, 1.2897445708311412721399861948957141824914L);
5114   TEST_c_c (clog, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -7.1865869169568789348552370692485515571497e-67L, 0.8730167479365994646287897223471819363668L);
5115   TEST_c_c (clog, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 6.6255694866654064502633121109394710807528e-66L, 1.0526409614996288387567810726095850312049L);
5116   TEST_c_c (clog, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 4.6017338806965821566734340588575402712716e-67L, 1.3547418904611758959096647942223384691728L);
5117   TEST_c_c (clog, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 2.5993421227864195179698176012564317527271e-67L, 1.4132318089683022770487383611430906982461L);
5118 #endif
5119
5120   END (clog, complex);
5121 }
5122
5123
5124 static void
5125 clog10_test (void)
5126 {
5127   errno = 0;
5128   FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
5129   if (errno == ENOSYS)
5130     /* Function not implemented.  */
5131     return;
5132
5133   START (clog10);
5134
5135   TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5136   TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
5137
5138   TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
5139   TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
5140
5141   TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
5142
5143   TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
5144   TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
5145
5146   TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
5147   TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
5148   TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
5149   TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
5150   TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
5151   TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
5152   TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
5153   TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
5154
5155   TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
5156   TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
5157   TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
5158   TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
5159
5160   TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
5161   TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
5162   TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
5163   TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
5164
5165   TEST_c_c (clog10, plus_infty, qnan_value, plus_infty, qnan_value);
5166   TEST_c_c (clog10, minus_infty, qnan_value, plus_infty, qnan_value);
5167
5168   TEST_c_c (clog10, qnan_value, plus_infty, plus_infty, qnan_value);
5169   TEST_c_c (clog10, qnan_value, minus_infty, plus_infty, qnan_value);
5170
5171   TEST_c_c (clog10, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5172   TEST_c_c (clog10, 3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5173   TEST_c_c (clog10, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5174   TEST_c_c (clog10, -3, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5175
5176   TEST_c_c (clog10, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5177   TEST_c_c (clog10, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5178   TEST_c_c (clog10, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5179   TEST_c_c (clog10, qnan_value, -5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5180
5181   TEST_c_c (clog10, qnan_value, qnan_value, qnan_value, qnan_value);
5182
5183   TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
5184   TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
5185
5186   TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
5187   TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L, UNDERFLOW_EXCEPTION_FLOAT);
5188   TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
5189   TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
5190
5191 #ifndef TEST_FLOAT
5192   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
5193   TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
5194   TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
5195   TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
5196 #endif
5197
5198 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5199   TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
5200   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
5201   TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
5202 #endif
5203
5204   TEST_c_c (clog10, 0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
5205   TEST_c_c (clog10, -0x1p-149L, 0x1.fp+127L, 38.51805116050395969095658815123105801479L, 0.6821881769209206737428918127156778851051L);
5206   TEST_c_c (clog10, 0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
5207   TEST_c_c (clog10, -0x1p-149L, -0x1.fp+127L, 38.51805116050395969095658815123105801479L, -0.6821881769209206737428918127156778851051L);
5208   TEST_c_c (clog10, -0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, 1.364376353841841347485783625431355770210L);
5209   TEST_c_c (clog10, -0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, -1.364376353841841347485783625431355770210L);
5210 #ifdef TEST_FLOAT
5211   TEST_c_c (clog10, 0x1.fp+127L, 0x1p-149L, 38.51805116050395969095658815123105801479L, plus_zero, UNDERFLOW_EXCEPTION);
5212   TEST_c_c (clog10, 0x1.fp+127L, -0x1p-149L, 38.51805116050395969095658815123105801479L, minus_zero, UNDERFLOW_EXCEPTION);
5213 #endif
5214
5215 #ifndef TEST_FLOAT
5216   TEST_c_c (clog10, 0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
5217   TEST_c_c (clog10, -0x1p-1074L, 0x1.fp+1023L, 308.2409272754311106024666378243768099991L, 0.6821881769209206737428918127156778851051L);
5218   TEST_c_c (clog10, 0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
5219   TEST_c_c (clog10, -0x1p-1074L, -0x1.fp+1023L, 308.2409272754311106024666378243768099991L, -0.6821881769209206737428918127156778851051L);
5220   TEST_c_c (clog10, -0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, 1.364376353841841347485783625431355770210L);
5221   TEST_c_c (clog10, -0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, -1.364376353841841347485783625431355770210L);
5222 #endif
5223 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5224   TEST_c_c (clog10, 0x1.fp+1023L, 0x1p-1074L, 308.2409272754311106024666378243768099991L, plus_zero, UNDERFLOW_EXCEPTION);
5225   TEST_c_c (clog10, 0x1.fp+1023L, -0x1p-1074L, 308.2409272754311106024666378243768099991L, minus_zero, UNDERFLOW_EXCEPTION);
5226 #endif
5227
5228 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5229   TEST_c_c (clog10, 0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5230   TEST_c_c (clog10, -0x1p-16445L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5231   TEST_c_c (clog10, 0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5232   TEST_c_c (clog10, -0x1p-16445L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5233   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
5234   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
5235   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16445L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
5236   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16445L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
5237 # if LDBL_MANT_DIG >= 113
5238   TEST_c_c (clog10, 0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5239   TEST_c_c (clog10, -0x1p-16494L, 0x1.fp+16383L, 4932.061660674182269085496060792589701158L, 0.6821881769209206737428918127156778851051L);
5240   TEST_c_c (clog10, 0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5241   TEST_c_c (clog10, -0x1p-16494L, -0x1.fp+16383L, 4932.061660674182269085496060792589701158L, -0.6821881769209206737428918127156778851051L);
5242   TEST_c_c (clog10, -0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, 1.364376353841841347485783625431355770210L);
5243   TEST_c_c (clog10, -0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, -1.364376353841841347485783625431355770210L);
5244   TEST_c_c (clog10, 0x1.fp+16383L, 0x1p-16494L, 4932.061660674182269085496060792589701158L, plus_zero, UNDERFLOW_EXCEPTION);
5245   TEST_c_c (clog10, 0x1.fp+16383L, -0x1p-16494L, 4932.061660674182269085496060792589701158L, minus_zero, UNDERFLOW_EXCEPTION);
5246 # endif
5247 #endif
5248
5249   TEST_c_c (clog10, 1.0L, 0x1.234566p-10L, 2.680828048441605163181684680300513080769e-7L, 4.825491868832381486767558728169977751564e-4L);
5250   TEST_c_c (clog10, -1.0L, 0x1.234566p-20L, 2.556638434669064077889576526006849923281e-13L, 1.364375882602207106407956770293808181427L);
5251   TEST_c_c (clog10, 0x1.234566p-30L, 1.0L, 2.438200411482400072282924063740535840474e-19L, 6.821881764607257184291586401763604544928e-1L);
5252   TEST_c_c (clog10, -0x1.234566p-40L, -1.0L, 2.325249110681915353442924915876654139373e-25L, -6.821881769213700828789403802671540158935e-1L);
5253   TEST_c_c (clog10, 0x1.234566p-50L, 1.0L, 2.217530356103816369479108963807448194409e-31L, 6.821881769209202348667823902864283966959e-1L);
5254   TEST_c_c (clog10, 0x1.234566p-60L, 1.0L, 2.114801746467415208319767917450504756866e-37L, 6.821881769209206733143018621078368211515e-1L);
5255   TEST_c_c (clog10, 0x1p-61L, 1.0L, 4.084085680564517578238994467153626207224e-38L, 6.821881769209206735545466044044889962925e-1L);
5256   TEST_c_c (clog10, 0x1p-62L, 1.0L, 1.021021420141129394559748616788406551878e-38L, 6.821881769209206736487192085600834406988e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5257   TEST_c_c (clog10, 0x1p-63L, 1.0L, 2.552553550352823486399371541971016379740e-39L, 6.821881769209206736958055106378806629019e-1L, UNDERFLOW_EXCEPTION_FLOAT);
5258 #ifndef TEST_FLOAT
5259   TEST_c_c (clog10, 0x1p-509L, 1.0L, 7.730698388614835910296270976605350994446e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5260   TEST_c_c (clog10, 0x1p-510L, 1.0L, 1.932674597153708977574067744151337748612e-308L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5261   TEST_c_c (clog10, 0x1p-511L, 1.0L, 4.831686492884272443935169360378344371529e-309L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION_DOUBLE);
5262 #endif
5263 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5264   TEST_c_c (clog10, 0x1p-8189L, 1.0L, 1.168114274114528946314738738025008370069e-4931L, 6.821881769209206737428918127156778851051e-1L);
5265   TEST_c_c (clog10, 0x1p-8190L, 1.0L, 2.920285685286322365786846845062520925172e-4932L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
5266   TEST_c_c (clog10, 0x1p-8191L, 1.0L, 7.300714213215805914467117112656302312931e-4933L, 6.821881769209206737428918127156778851051e-1L, UNDERFLOW_EXCEPTION);
5267 #endif
5268
5269   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-10L, 3.604093470239754109961125085078190708674e-5L, 4.824745078422174667425851670822596859720e-4L);
5270   TEST_c_c (clog10, 0x1.000566p0L, 0x1.234p-100L, 3.577293486783822178310971763308187385546e-5L, 3.897399639875661463735636919790792140598e-31L);
5271 #ifndef TEST_FLOAT
5272   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-30L, 1.150487028947346337782682105935961875822e-10L, 1.364376353381646356131680448946397884147L);
5273   TEST_c_c (clog10, -0x1.0000000123456p0L, 0x1.2345678p-1000L, 1.150487026509145544402795327729455391948e-10L, 1.364376353841841347485783625431355770210L);
5274 #endif
5275 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5276   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-60L, 4.285899851347756188767674032946882584784e-19L, 4.285899850759344225805480528847018395861e-19L);
5277   TEST_c_c (clog10, 0x1.00000000000000123456789abcp0L, 0x1.23456789p-1000L, 4.285899851347756186652871946325962330640e-19L, 4.611541215247321502041995872887317363241e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5278 #endif
5279
5280   TEST_c_c (clog10, 0x0.ffffffp0L, 0x0.ffffffp-100L, -2.588596909321764128428416045209904492216e-8L, 3.425979381266895667295625489912064603415e-31L);
5281 #ifndef TEST_FLOAT
5282   TEST_c_c (clog10, 0x0.fffffffffffff8p0L, 0x0.fffffffffffff8p-1000L, -4.821637332766435821255375046554377090472e-17L, 4.053112396770095089737411317782466262176e-302L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
5283 #endif
5284 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
5285   TEST_c_c (clog10, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp-15000L, -2.354315103889861110220423157644627849164e-20L, 1.541165759405643564697852372112893034397e-4516L);
5286 #endif
5287
5288   TEST_c_c (clog10, 0x1a6p-10L, 0x3a5p-10L, -6.2126412844802358329771948751248003038444e-07L, 0.4977135139537443711784513409096950995985L);
5289   TEST_c_c (clog10, 0xf2p-10L, 0x3e3p-10L, 2.6921240173351112953324592659528481616879e-06L, 0.5785726025799636431142862788413361783862L);
5290   TEST_c_c (clog10, 0x4d4ep-15L, 0x6605p-15L, -7.0781945783414996953799915941870192015212e-09L, 0.4005747524909781155537088181659175147564L);
5291   TEST_c_c (clog10, 0x2818p-15L, 0x798fp-15L, 6.6737261053986614395049481326819059203910e-09L, 0.5438241985991753781478398141908629586460L);
5292   TEST_c_c (clog10, 0x9b57bp-20L, 0xcb7b4p-20L, -1.7182001068739620267773842120965071561416e-11L, 0.3990121149225253562859800593935899629087L);
5293   TEST_c_c (clog10, 0x2731p-20L, 0xfffd0p-20L, 1.9156943718715958194239364991329064049438e-11L, 0.6780326907904082601285090019969008967595L);
5294   TEST_c_c (clog10, 0x2ede88p-23L, 0x771c3fp-23L, -1.9440841725722970687903291200493082253766e-13L, 0.5193774116724956222518530053006822210323L);
5295   TEST_c_c (clog10, 0x11682p-23L, 0x7ffed1p-23L, 5.0916490233953865181284669870035717560498e-13L, 0.6784968969384861816694467029319146542069L);
5296   TEST_c_c (clog10, 0xa1f2c1p-24L, 0xc643aep-24L, -4.5516256421319921959681423447271490869664e-14L, 0.3847315790697197749315054516562206543710L);
5297   TEST_c_c (clog10, 0x659feap-24L, 0xeaf6f9p-24L, 1.6200701438094619117335617123525612051457e-14L, 0.5049027913635038013499728086604870749732L);
5298 #ifndef TEST_FLOAT
5299   TEST_c_c (clog10, 0x4447d7175p-35L, 0x6c445e00ap-35L, -6.4375803621988389731799033530075237868110e-21L, 0.4378257977686804492768642780897650927167L);
5300   TEST_c_c (clog10, 0x2dd46725bp-35L, 0x7783a1284p-35L, 1.9312741086596516918394613098872836703188e-20L, 0.5231613813514771042838490538484014771862L);
5301   TEST_c_c (clog10, 0x164c74eea876p-45L, 0x16f393482f77p-45L, -1.3155760824064879362415202279780039150764e-26L, 0.3473590599762514228227328130640352044313L);
5302   TEST_c_c (clog10, 0xfe961079616p-45L, 0x1bc37e09e6d1p-45L, 2.3329549194675052736016290082882121135546e-26L, 0.4561756099441139182878993697611751382976L);
5303   TEST_c_c (clog10, 0xa4722f19346cp-51L, 0x7f9631c5e7f07p-51L, -2.6979587627476803379953050733225113494503e-30L, 0.6472785229986997177606324374555347813105L);
5304   TEST_c_c (clog10, 0x10673dd0f2481p-51L, 0x7ef1d17cefbd2p-51L, 1.3918041236396763648388478552321724382899e-29L, 0.6263795733790237053262025311642907438291L);
5305   TEST_c_c (clog10, 0x8ecbf810c4ae6p-52L, 0xd479468b09a37p-52L, -4.2289432987513243393180377141513840878196e-30L, 0.4252020027092323591068799049905597805296L);
5306   TEST_c_c (clog10, 0x5b06b680ea2ccp-52L, 0xef452b965da9fp-52L, 3.6079845358966994996207055940336690133424e-30L, 0.5243112258263349992771652393178033846555L);
5307   TEST_c_c (clog10, 0x659b70ab7971bp-53L, 0x1f5d111e08abecp-53L, -1.0893543813872082317104059174982092534059e-30L, 0.5954257879188711495921161433751775633232L);
5308   TEST_c_c (clog10, 0x15cfbd1990d1ffp-53L, 0x176a3973e09a9ap-53L, 4.4163015461643576961232672330852798804976e-31L, 0.3564851427422832755956993418877523303529L);
5309   TEST_c_c (clog10, 0x1367a310575591p-54L, 0x3cfcc0a0541f60p-54L, 2.2081507730821788480616336165447731164865e-32L, 0.5484039935757001196548030312819898864760L);
5310   TEST_c_c (clog10, 0x55cb6d0c83af5p-55L, 0x7fe33c0c7c4e90p-55L, -2.2583360179249556400630343805573865814771e-32L, 0.6639894257763289307423302343317622430835L);
5311 #endif
5312 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64
5313   TEST_c_c (clog10, 0x298c62cb546588a7p-63L, 0x7911b1dfcc4ecdaep-63L, -5.1816837072162316773907242302011632570857e-37L, 0.5386167838952956925896424154370364458140L);
5314   TEST_c_c (clog10, 0x4d9c37e2b5cb4533p-63L, 0x65c98be2385a042ep-63L, 2.7822833698845776001753149807484078521508e-37L, 0.3992725998539071066769046272515417679815L);
5315   TEST_c_c (clog10, 0x602fd5037c4792efp-64L, 0xed3e2086dcca80b8p-64L, -1.0146400362652473358437501879334790111898e-37L, 0.5149047982335273098246594109614460842099L);
5316   TEST_c_c (clog10, 0x6b10b4f3520217b6p-64L, 0xe8893cbb449253a1p-64L, 1.0529283395205396881397407610630442563938e-37L, 0.4947949395762683446121140513971996916447L);
5317   TEST_c_c (clog10, 0x81b7efa81fc35ad1p-65L, 0x1ef4b835f1c79d812p-65L, -4.3074341162203896332989394770760901408798e-39L, 0.5709443672155660428417571212549720987784L);
5318 #endif
5319 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
5320   TEST_c_c (clog10, 0x3f96469050f650869c2p-75L, 0x6f16b2c9c8b05988335p-75L, -4.5643214291682663316715446865040356750881e-46L, 0.4564083863660793840592614609053162690362L);
5321   TEST_c_c (clog10, 0x3157fc1d73233e580c8p-75L, 0x761b52ccd435d7c7f5fp-75L, 5.8575458340992751256451490143468457830297e-44L, 0.5103174273246635294300470585396890237265L);
5322   TEST_c_c (clog10, 0x155f8afc4c48685bf63610p-85L, 0x17d0cf2652cdbeb1294e19p-85L, -2.0748709499710785084693619097712106753591e-50L, 0.3645447681189598740620098186365764884771L);
5323   TEST_c_c (clog10, 0x13836d58a13448d750b4b9p-85L, 0x195ca7bc3ab4f9161edbe6p-85L, 1.2333149003324592532859843519619084433953e-50L, 0.3973779298829931059309198145608711073016L);
5324   TEST_c_c (clog10, 0x1df515eb171a808b9e400266p-95L, 0x7c71eb0cd4688dfe98581c77p-95L, -1.5221162575729652613635150540947625639689e-57L, 0.5795934880811949230121092882659698986043L);
5325   TEST_c_c (clog10, 0xe33f66c9542ca25cc43c867p-95L, 0x7f35a68ebd3704a43c465864p-95L, 1.7850272475173865337808494725293124613817e-56L, 0.6338990862456906754888183278564382516852L);
5326   TEST_c_c (clog10, 0x6771f22c64ed551b857c128b4cp-105L, 0x1f570e7a13cc3cf2f44fd793ea1p-105L, -6.2023045024810589256360494043570293518879e-63L, 0.5938345819561308555003145899438513900776L);
5327   TEST_c_c (clog10, 0x15d8ab6ed05ca514086ac3a1e84p-105L, 0x1761e480aa094c0b10b34b09ce9p-105L, 4.3548095442952115860848857519953610343042e-63L, 0.3558376234889641500775150477035448866763L);
5328   TEST_c_c (clog10, 0x187190c1a334497bdbde5a95f48p-106L, 0x3b25f08062d0a095c4cfbbc338dp-106L, -7.5879257211204444302994221436282805900756e-64L, 0.5119945461708707332160859198685423099187L);
5329   TEST_c_c (clog10, 0x6241ef0da53f539f02fad67dabp-106L, 0x3fb46641182f7efd9caa769dac0p-106L, 1.8804859395820231849002915747252695375405e-63L, 0.6404513901551516189871978418046651877394L);
5330 #endif
5331 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
5332   TEST_c_c (clog10, 0x3e1d0a105ac4ebeacd9c6952d34cp-112L, 0xf859b3d1b06d005dcbb5516d5479p-112L, -5.0742964549782184008668435276046798273476e-67L, 0.5757527761596220360985719127090110408283L);
5333   TEST_c_c (clog10, 0x47017a2e36807acb1e5214b209dep-112L, 0xf5f4a550c9d75e3bb1839d865f0dp-112L, 6.5482587585671294601662599808612773010057e-66L, 0.5601289501766423782280643144987875760229L);
5334   TEST_c_c (clog10, 0x148f818cb7a9258fca942ade2a0cap-113L, 0x18854a34780b8333ec53310ad7001p-113L, -3.1210950417524756037077807411854181477733e-67L, 0.3791463562379872585396164879981280044658L);
5335   TEST_c_c (clog10, 0xfd95243681c055c2632286921092p-113L, 0x1bccabcd29ca2152860ec29e34ef7p-113L, 2.8774482675253468630312378575186855052697e-66L, 0.4571561610046221605554903008571429975493L);
5336   TEST_c_c (clog10, 0xdb85c467ee2aadd5f425fe0f4b8dp-114L, 0x3e83162a0f95f1dcbf97dddf410eap-114L, 1.9985076315737626043096596036300177494613e-67L, 0.5883569274304683249184005177865521205198L);
5337   TEST_c_c (clog10, 0x1415bcaf2105940d49a636e98ae59p-115L, 0x7e6a150adfcd1b0921d44b31f40f4p-115L, 1.1288799405048268615023706955013387413519e-67L, 0.6137587762850841972073301550420510507903L);
5338 #endif
5339
5340   END (clog10, complex);
5341 }
5342
5343
5344 static void
5345 conj_test (void)
5346 {
5347   START (conj);
5348   TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
5349   TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
5350   TEST_c_c (conj, qnan_value, qnan_value, qnan_value, qnan_value);
5351   TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
5352   TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
5353   TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
5354   TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
5355
5356   END (conj, complex);
5357 }
5358
5359
5360 static void
5361 copysign_test (void)
5362 {
5363   START (copysign);
5364
5365   TEST_ff_f (copysign, 0, 4, 0);
5366   TEST_ff_f (copysign, 0, -4, minus_zero);
5367   TEST_ff_f (copysign, minus_zero, 4, 0);
5368   TEST_ff_f (copysign, minus_zero, -4, minus_zero);
5369
5370   TEST_ff_f (copysign, plus_infty, 0, plus_infty);
5371   TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
5372   TEST_ff_f (copysign, minus_infty, 0, plus_infty);
5373   TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
5374
5375   TEST_ff_f (copysign, 0, plus_infty, 0);
5376   TEST_ff_f (copysign, 0, minus_zero, minus_zero);
5377   TEST_ff_f (copysign, minus_zero, plus_infty, 0);
5378   TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
5379
5380   /* XXX More correctly we would have to check the sign of the NaN.  */
5381   TEST_ff_f (copysign, qnan_value, 0, qnan_value);
5382   TEST_ff_f (copysign, qnan_value, minus_zero, qnan_value);
5383   TEST_ff_f (copysign, -qnan_value, 0, qnan_value);
5384   TEST_ff_f (copysign, -qnan_value, minus_zero, qnan_value);
5385
5386   END (copysign);
5387 }
5388
5389
5390 static void
5391 cos_test (void)
5392 {
5393   errno = 0;
5394   FUNC(cos) (0);
5395   if (errno == ENOSYS)
5396     /* Function not implemented.  */
5397     return;
5398
5399   START (cos);
5400
5401   TEST_f_f (cos, 0, 1);
5402   TEST_f_f (cos, minus_zero, 1);
5403   errno = 0;
5404   TEST_f_f (cos, plus_infty, qnan_value, INVALID_EXCEPTION);
5405   check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
5406   errno = 0;
5407   TEST_f_f (cos, minus_infty, qnan_value, INVALID_EXCEPTION);
5408   check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
5409   errno = 0;
5410   TEST_f_f (cos, qnan_value, qnan_value);
5411   check_int ("errno for cos(qNaN) unchanged", errno, 0, 0, 0, 0);
5412
5413   TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
5414   TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
5415
5416   /* The value of M_PI_2l is never exactly PI/2, and therefore the
5417      answer is never exactly zero. The answer is equal to the error
5418      in rounding PI/2 for the type used.  Thus the answer is unique
5419      to each type.  */
5420 #ifdef TEST_FLOAT
5421   /* 32-bit float.  */
5422   TEST_f_f (cos, M_PI_2l, -0x1.777a5cp-25L);
5423 #endif
5424 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
5425   /* 64-bit double or 64-bit long double.  */
5426   TEST_f_f (cos, M_PI_2l, 0x1.1a62633145c07p-54L);
5427 #endif
5428 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
5429   /* 96-bit long double.  */
5430   TEST_f_f (cos, M_PI_2l, -0xe.ce675d1fc8f8cbbp-69L);
5431 #endif
5432 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
5433   /* 128-bit IBM long double.  */
5434   TEST_f_f (cos, M_PI_2l, 0x1.c1cd129024e088a67cc74020bcp-107L);
5435 #endif
5436 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
5437   /* 128-bit long double.  */
5438   TEST_f_f (cos, M_PI_2l, 0x1.cd129024e088a67cc74020bbea64p-115L);
5439 #endif
5440
5441   TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
5442
5443   TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
5444   TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
5445
5446 #ifdef TEST_DOUBLE
5447   TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
5448 #endif
5449
5450   TEST_f_f (cos, 0x1.442f74p+15, 2.4407839902314016628485779006274989801517e-06L);
5451
5452 #ifndef TEST_FLOAT
5453   TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
5454   TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
5455 #endif
5456
5457 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5458   TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
5459 #endif
5460
5461   TEST_f_f (cos, 0x1p+120, -9.25879022854837867303861764107414946730833e-01L);
5462   TEST_f_f (cos, 0x1p+127, 7.81914638714960072263910298466369236613162e-01L);
5463   TEST_f_f (cos, 0x1.fffff8p+127, 9.98819362551949040703862043664101081064641e-01L);
5464   TEST_f_f (cos, 0x1.fffffep+127, 8.53021039830304158051791467692161107353094e-01L);
5465   TEST_f_f (cos, 0x1p+50, 8.68095904660550604334592502063501320395739e-01L);
5466   TEST_f_f (cos, 0x1p+28, -1.65568979490578758865468278195361551113358e-01L);
5467
5468   END (cos);
5469 }
5470
5471
5472 static void
5473 cos_test_tonearest (void)
5474 {
5475   int save_round_mode;
5476   errno = 0;
5477   FUNC(cos) (0);
5478   if (errno == ENOSYS)
5479     /* Function not implemented.  */
5480     return;
5481
5482   START (cos_tonearest);
5483
5484   save_round_mode = fegetround ();
5485
5486   if (!fesetround (FE_TONEAREST))
5487     {
5488       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5489       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5490       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5491       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5492       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5493       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5494       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5495       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5496       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5497       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5498     }
5499
5500   fesetround (save_round_mode);
5501
5502   END (cos_tonearest);
5503 }
5504
5505
5506 static void
5507 cos_test_towardzero (void)
5508 {
5509   int save_round_mode;
5510   errno = 0;
5511   FUNC(cos) (0);
5512   if (errno == ENOSYS)
5513     /* Function not implemented.  */
5514     return;
5515
5516   START (cos_towardzero);
5517
5518   save_round_mode = fegetround ();
5519
5520   if (!fesetround (FE_TOWARDZERO))
5521     {
5522       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5523       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5524       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5525       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5526       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5527       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5528       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5529       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5530       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5531       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5532     }
5533
5534   fesetround (save_round_mode);
5535
5536   END (cos_towardzero);
5537 }
5538
5539
5540 static void
5541 cos_test_downward (void)
5542 {
5543   int save_round_mode;
5544   errno = 0;
5545   FUNC(cos) (0);
5546   if (errno == ENOSYS)
5547     /* Function not implemented.  */
5548     return;
5549
5550   START (cos_downward);
5551
5552   save_round_mode = fegetround ();
5553
5554   if (!fesetround (FE_DOWNWARD))
5555     {
5556       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5557       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5558       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5559       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5560       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5561       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5562       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5563       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5564       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5565       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5566     }
5567
5568   fesetround (save_round_mode);
5569
5570   END (cos_downward);
5571 }
5572
5573
5574 static void
5575 cos_test_upward (void)
5576 {
5577   int save_round_mode;
5578   errno = 0;
5579   FUNC(cos) (0);
5580   if (errno == ENOSYS)
5581     /* Function not implemented.  */
5582     return;
5583
5584   START (cos_upward);
5585
5586   save_round_mode = fegetround ();
5587
5588   if (!fesetround (FE_UPWARD))
5589     {
5590       TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
5591       TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
5592       TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
5593       TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
5594       TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
5595       TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
5596       TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
5597       TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
5598       TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
5599       TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
5600     }
5601
5602   fesetround (save_round_mode);
5603
5604   END (cos_upward);
5605 }
5606
5607
5608 static void
5609 cosh_test (void)
5610 {
5611   errno = 0;
5612   FUNC(cosh) (0.7L);
5613   if (errno == ENOSYS)
5614     /* Function not implemented.  */
5615     return;
5616
5617   START (cosh);
5618   TEST_f_f (cosh, 0, 1);
5619   TEST_f_f (cosh, minus_zero, 1);
5620
5621 #ifndef TEST_INLINE
5622   TEST_f_f (cosh, plus_infty, plus_infty);
5623   TEST_f_f (cosh, minus_infty, plus_infty);
5624 #endif
5625   TEST_f_f (cosh, qnan_value, qnan_value);
5626
5627   TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
5628
5629 #ifndef TEST_FLOAT
5630   TEST_f_f (cosh, 709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
5631   TEST_f_f (cosh, -709.8893558127259666434838436543941497802734375L, 9.9999998999995070652573675944761818416035e+307L);
5632 #endif
5633
5634   END (cosh);
5635 }
5636
5637
5638 static void
5639 cosh_test_tonearest (void)
5640 {
5641   int save_round_mode;
5642   errno = 0;
5643   FUNC(cosh) (0);
5644   if (errno == ENOSYS)
5645     /* Function not implemented.  */
5646     return;
5647
5648   START (cosh_tonearest);
5649
5650   save_round_mode = fegetround ();
5651
5652   if (!fesetround (FE_TONEAREST))
5653     {
5654       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5655       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5656       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5657     }
5658
5659   fesetround (save_round_mode);
5660
5661   END (cosh_tonearest);
5662 }
5663
5664
5665 static void
5666 cosh_test_towardzero (void)
5667 {
5668   int save_round_mode;
5669   errno = 0;
5670   FUNC(cosh) (0);
5671   if (errno == ENOSYS)
5672     /* Function not implemented.  */
5673     return;
5674
5675   START (cosh_towardzero);
5676
5677   save_round_mode = fegetround ();
5678
5679   if (!fesetround (FE_TOWARDZERO))
5680     {
5681       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5682       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5683       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5684     }
5685
5686   fesetround (save_round_mode);
5687
5688   END (cosh_towardzero);
5689 }
5690
5691
5692 static void
5693 cosh_test_downward (void)
5694 {
5695   int save_round_mode;
5696   errno = 0;
5697   FUNC(cosh) (0);
5698   if (errno == ENOSYS)
5699     /* Function not implemented.  */
5700     return;
5701
5702   START (cosh_downward);
5703
5704   save_round_mode = fegetround ();
5705
5706   if (!fesetround (FE_DOWNWARD))
5707     {
5708       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5709       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5710       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5711     }
5712
5713   fesetround (save_round_mode);
5714
5715   END (cosh_downward);
5716 }
5717
5718
5719 static void
5720 cosh_test_upward (void)
5721 {
5722   int save_round_mode;
5723   errno = 0;
5724   FUNC(cosh) (0);
5725   if (errno == ENOSYS)
5726     /* Function not implemented.  */
5727     return;
5728
5729   START (cosh_upward);
5730
5731   save_round_mode = fegetround ();
5732
5733   if (!fesetround (FE_UPWARD))
5734     {
5735       TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
5736       TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
5737       TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
5738     }
5739
5740   fesetround (save_round_mode);
5741
5742   END (cosh_upward);
5743 }
5744
5745
5746 static void
5747 cpow_test (void)
5748 {
5749   errno = 0;
5750   FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
5751   if (errno == ENOSYS)
5752     /* Function not implemented.  */
5753     return;
5754
5755   START (cpow);
5756
5757   TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
5758   TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
5759
5760   TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
5761   TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
5762
5763   TEST_cc_c (cpow, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value, qnan_value);
5764
5765   TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
5766   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
5767   TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
5768   TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
5769
5770   END (cpow, complex);
5771 }
5772
5773
5774 static void
5775 cproj_test (void)
5776 {
5777   START (cproj);
5778   TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
5779   TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
5780   TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
5781   TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
5782
5783   TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value);
5784
5785   TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
5786   TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
5787   TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
5788   TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
5789
5790   TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
5791   TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
5792
5793   END (cproj, complex);
5794 }
5795
5796
5797 static void
5798 creal_test (void)
5799 {
5800   START (creal);
5801   TEST_c_f (creal, 0.0, 1.0, 0.0);
5802   TEST_c_f (creal, minus_zero, 1.0, minus_zero);
5803   TEST_c_f (creal, qnan_value, 1.0, qnan_value);
5804   TEST_c_f (creal, qnan_value, qnan_value, qnan_value);
5805   TEST_c_f (creal, plus_infty, 1.0, plus_infty);
5806   TEST_c_f (creal, minus_infty, 1.0, minus_infty);
5807   TEST_c_f (creal, 2.0, 3.0, 2.0);
5808
5809   END (creal);
5810 }
5811
5812 static void
5813 csin_test (void)
5814 {
5815   errno = 0;
5816   FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
5817   if (errno == ENOSYS)
5818     /* Function not implemented.  */
5819     return;
5820
5821   START (csin);
5822
5823   TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
5824   TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
5825   TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
5826   TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
5827
5828   TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
5829   TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
5830   TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
5831   TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
5832
5833   TEST_c_c (csin, plus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5834   TEST_c_c (csin, minus_infty, 0.0, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5835   TEST_c_c (csin, plus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5836   TEST_c_c (csin, minus_infty, minus_zero, qnan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5837
5838   TEST_c_c (csin, plus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5839   TEST_c_c (csin, minus_infty, plus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5840   TEST_c_c (csin, plus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5841   TEST_c_c (csin, minus_infty, minus_infty, qnan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5842
5843   TEST_c_c (csin, plus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5844   TEST_c_c (csin, plus_infty, -6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5845   TEST_c_c (csin, minus_infty, 6.75, qnan_value, qnan_value, INVALID_EXCEPTION);
5846   TEST_c_c (csin, minus_infty, -6.75,  qnan_value, qnan_value, INVALID_EXCEPTION);
5847
5848   TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
5849   TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
5850   TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
5851   TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
5852
5853   TEST_c_c (csin, qnan_value, 0.0, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5854   TEST_c_c (csin, qnan_value, minus_zero, qnan_value, 0.0, IGNORE_ZERO_INF_SIGN);
5855
5856   TEST_c_c (csin, qnan_value, plus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5857   TEST_c_c (csin, qnan_value, minus_infty, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
5858
5859   TEST_c_c (csin, qnan_value, 9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5860   TEST_c_c (csin, qnan_value, -9.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5861
5862   TEST_c_c (csin, 0.0, qnan_value, 0.0, qnan_value);
5863   TEST_c_c (csin, minus_zero, qnan_value, minus_zero, qnan_value);
5864
5865   TEST_c_c (csin, 10.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5866   TEST_c_c (csin, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5867
5868   TEST_c_c (csin, plus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5869   TEST_c_c (csin, minus_infty, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5870
5871   TEST_c_c (csin, qnan_value, qnan_value, qnan_value, qnan_value);
5872
5873   TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
5874   TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
5875
5876   TEST_c_c (csin, 0.75, 89.5, 2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5877   TEST_c_c (csin, 0.75, -89.5, 2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5878   TEST_c_c (csin, -0.75, 89.5, -2.522786001038096774676288412995370563339e38L, 2.708024460708609732016532185663087200560e38L);
5879   TEST_c_c (csin, -0.75, -89.5, -2.522786001038096774676288412995370563339e38L, -2.708024460708609732016532185663087200560e38L);
5880
5881 #ifndef TEST_FLOAT
5882   TEST_c_c (csin, 0.75, 710.5, 1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5883   TEST_c_c (csin, 0.75, -710.5, 1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5884   TEST_c_c (csin, -0.75, 710.5, -1.255317763348154410745082950806112487736e308L, 1.347490911916428129246890157395342279438e308L);
5885   TEST_c_c (csin, -0.75, -710.5, -1.255317763348154410745082950806112487736e308L, -1.347490911916428129246890157395342279438e308L);
5886 #endif
5887
5888 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5889   TEST_c_c (csin, 0.75, 11357.25, 8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5890   TEST_c_c (csin, 0.75, -11357.25, 8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5891   TEST_c_c (csin, -0.75, 11357.25, -8.385498349388321535962327491346664141020e4931L, 9.001213196851067077465606717616495588201e4931L);
5892   TEST_c_c (csin, -0.75, -11357.25, -8.385498349388321535962327491346664141020e4931L, -9.001213196851067077465606717616495588201e4931L);
5893 #endif
5894
5895 #ifdef TEST_FLOAT
5896   TEST_c_c (csin, 0x1p-149, 180, 1.043535896672617552965983803453927655332e33L, plus_infty, OVERFLOW_EXCEPTION);
5897 #endif
5898
5899 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
5900   TEST_c_c (csin, 0x1p-1074, 1440, 5.981479269486130556466515778180916082415e301L, plus_infty, OVERFLOW_EXCEPTION);
5901 #endif
5902
5903 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5904   TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
5905 #endif
5906
5907   TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
5908   TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
5909
5910   END (csin, complex);
5911 }
5912
5913
5914 static void
5915 csinh_test (void)
5916 {
5917   errno = 0;
5918   FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
5919   if (errno == ENOSYS)
5920     /* Function not implemented.  */
5921     return;
5922
5923   START (csinh);
5924
5925   TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
5926   TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
5927   TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
5928   TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
5929
5930   TEST_c_c (csinh, 0.0, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5931   TEST_c_c (csinh, minus_zero, plus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5932   TEST_c_c (csinh, 0.0, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5933   TEST_c_c (csinh, minus_zero, minus_infty, 0.0, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5934
5935   TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
5936   TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
5937   TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
5938   TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
5939
5940   TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5941   TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5942   TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5943   TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
5944
5945   TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
5946   TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
5947   TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
5948   TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
5949
5950   TEST_c_c (csinh, 6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5951   TEST_c_c (csinh, -6.75, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5952   TEST_c_c (csinh, 6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5953   TEST_c_c (csinh, -6.75, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
5954
5955   TEST_c_c (csinh, 0.0, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5956   TEST_c_c (csinh, minus_zero, qnan_value, 0.0, qnan_value, IGNORE_ZERO_INF_SIGN);
5957
5958   TEST_c_c (csinh, plus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5959   TEST_c_c (csinh, minus_infty, qnan_value, plus_infty, qnan_value, IGNORE_ZERO_INF_SIGN);
5960
5961   TEST_c_c (csinh, 9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5962   TEST_c_c (csinh, -9.0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5963
5964   TEST_c_c (csinh, qnan_value, 0.0, qnan_value, 0.0);
5965   TEST_c_c (csinh, qnan_value, minus_zero, qnan_value, minus_zero);
5966
5967   TEST_c_c (csinh, qnan_value, 10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5968   TEST_c_c (csinh, qnan_value, -10.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5969
5970   TEST_c_c (csinh, qnan_value, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5971   TEST_c_c (csinh, qnan_value, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
5972
5973   TEST_c_c (csinh, qnan_value, qnan_value, qnan_value, qnan_value);
5974
5975   TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
5976   TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
5977
5978   TEST_c_c (csinh, 89.5, 0.75, 2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5979   TEST_c_c (csinh, -89.5, 0.75, -2.708024460708609732016532185663087200560e38L, 2.522786001038096774676288412995370563339e38L);
5980   TEST_c_c (csinh, 89.5, -0.75, 2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5981   TEST_c_c (csinh, -89.5, -0.75, -2.708024460708609732016532185663087200560e38L, -2.522786001038096774676288412995370563339e38L);
5982
5983 #ifndef TEST_FLOAT
5984   TEST_c_c (csinh, 710.5, 0.75, 1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5985   TEST_c_c (csinh, -710.5, 0.75, -1.347490911916428129246890157395342279438e308L, 1.255317763348154410745082950806112487736e308L);
5986   TEST_c_c (csinh, 710.5, -0.75, 1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5987   TEST_c_c (csinh, -710.5, -0.75, -1.347490911916428129246890157395342279438e308L, -1.255317763348154410745082950806112487736e308L);
5988 #endif
5989
5990 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
5991   TEST_c_c (csinh, 11357.25, 0.75, 9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5992   TEST_c_c (csinh, -11357.25, 0.75, -9.001213196851067077465606717616495588201e4931L, 8.385498349388321535962327491346664141020e4931L);
5993   TEST_c_c (csinh, 11357.25, -0.75, 9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5994   TEST_c_c (csinh, -11357.25, -0.75, -9.001213196851067077465606717616495588201e4931L, -8.385498349388321535962327491346664141020e4931L);
5995 #endif
5996
5997 #ifdef TEST_FLOAT
5998   TEST_c_c (csinh, 180, 0x1p-149, plus_infty, 1.043535896672617552965983803453927655332e33L, OVERFLOW_EXCEPTION);
5999 #endif
6000
6001 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6002   TEST_c_c (csinh, 1440, 0x1p-1074, plus_infty, 5.981479269486130556466515778180916082415e301L, OVERFLOW_EXCEPTION);
6003 #endif
6004
6005 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6006   TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
6007 #endif
6008
6009   TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
6010   TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
6011
6012   END (csinh, complex);
6013 }
6014
6015
6016 static void
6017 csqrt_test (void)
6018 {
6019   errno = 0;
6020   FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
6021   if (errno == ENOSYS)
6022     /* Function not implemented.  */
6023     return;
6024
6025   START (csqrt);
6026
6027   TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
6028   TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
6029   TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
6030   TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
6031
6032   TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
6033   TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
6034   TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
6035   TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
6036
6037   TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
6038   TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
6039   TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
6040   TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
6041
6042   TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
6043   TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
6044   TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
6045   TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
6046   TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
6047   TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
6048   TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
6049   TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
6050   TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
6051   TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
6052   TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
6053   TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
6054
6055   TEST_c_c (csqrt, minus_infty, qnan_value, qnan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
6056
6057   TEST_c_c (csqrt, plus_infty, qnan_value, plus_infty, qnan_value);
6058
6059   TEST_c_c (csqrt, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6060   TEST_c_c (csqrt, 1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6061   TEST_c_c (csqrt, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6062   TEST_c_c (csqrt, -1, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6063
6064   TEST_c_c (csqrt, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6065   TEST_c_c (csqrt, qnan_value, 8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6066   TEST_c_c (csqrt, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6067   TEST_c_c (csqrt, qnan_value, -8, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6068
6069   TEST_c_c (csqrt, qnan_value, qnan_value, qnan_value, qnan_value);
6070
6071   TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
6072   TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
6073   TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
6074   TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
6075   TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
6076   TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
6077   TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
6078   /* Principal square root should be returned (i.e., non-negative real
6079      part).  */
6080   TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
6081
6082   TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
6083   TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
6084   TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
6085   TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
6086
6087   TEST_c_c (csqrt, plus_zero, 0x1p-149L, 2.646977960169688559588507814623881131411e-23L, 2.646977960169688559588507814623881131411e-23L);
6088   TEST_c_c (csqrt, 0x1p-50L, 0x1p-149L, 2.980232238769531250000000000000000000000e-8L, 2.350988701644575015937473074444491355637e-38L);
6089 #ifdef TEST_FLOAT
6090   TEST_c_c (csqrt, 0x1p+127L, 0x1p-149L, 1.304381782533278221234957180625250836888e19L, plus_zero, UNDERFLOW_EXCEPTION);
6091 #endif
6092   TEST_c_c (csqrt, 0x1p-149L, 0x1p+127L, 9.223372036854775808000000000000000000000e18L, 9.223372036854775808000000000000000000000e18L);
6093   TEST_c_c (csqrt, 0x1.000002p-126L, 0x1.000002p-126L, 1.191195773697904627170323731331667740087e-19L, 4.934094449071842328766868579214125217132e-20L);
6094   TEST_c_c (csqrt, -0x1.000002p-126L, -0x1.000002p-126L, 4.934094449071842328766868579214125217132e-20L, -1.191195773697904627170323731331667740087e-19L);
6095
6096 #ifndef TEST_FLOAT
6097   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
6098   TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
6099   TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
6100   TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
6101
6102   TEST_c_c (csqrt, plus_zero, 0x1p-1074L, 1.571727784702628688909515672805082228285e-162L, 1.571727784702628688909515672805082228285e-162L);
6103   TEST_c_c (csqrt, 0x1p-500L, 0x1p-1074L, 5.527147875260444560247265192192255725514e-76L, 4.469444793151709302716387622440056066334e-249L);
6104 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MAX_EXP == 1024)
6105   TEST_c_c (csqrt, 0x1p+1023L, 0x1p-1074L, 9.480751908109176726832526455652159260085e153L, plus_zero, UNDERFLOW_EXCEPTION);
6106 #endif
6107   TEST_c_c (csqrt, 0x1p-1074L, 0x1p+1023L, 6.703903964971298549787012499102923063740e153L, 6.703903964971298549787012499102923063740e153L);
6108   TEST_c_c (csqrt, 0x1.0000000000001p-1022L, 0x1.0000000000001p-1022L, 1.638872094839911521020410942677082920935e-154L, 6.788430486774966350907249113759995429568e-155L);
6109   TEST_c_c (csqrt, -0x1.0000000000001p-1022L, -0x1.0000000000001p-1022L, 6.788430486774966350907249113759995429568e-155L, -1.638872094839911521020410942677082920935e-154L);
6110 #endif
6111
6112 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6113   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
6114   TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
6115   TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L,  8.297059146828716918029689466551384219370e-2476L);
6116
6117   TEST_c_c (csqrt, plus_zero, 0x1p-16445L, 4.269191686890197837775136325621239761720e-2476L, 4.269191686890197837775136325621239761720e-2476L);
6118   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16445L, 2.660791472672778409283210520357607795518e-753L, 6.849840675828785164910701384823702064234e-4199L);
6119   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16445L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6120   TEST_c_c (csqrt, 0x1p-16445L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6121   TEST_c_c (csqrt, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-16382L, 2.014551439675644900131815801350165472778e-2466L, 8.344545284118961664300307045791497724440e-2467L);
6122   TEST_c_c (csqrt, -0x1.0000000000000002p-16382L, -0x1.0000000000000002p-16382L, 8.344545284118961664300307045791497724440e-2467L, -2.014551439675644900131815801350165472778e-2466L);
6123
6124 # if LDBL_MANT_DIG >= 113
6125   TEST_c_c (csqrt, plus_zero, 0x1p-16494L, 1.799329752913293143453817328207572571442e-2483L, 1.799329752913293143453817328207572571442e-2483L);
6126   TEST_c_c (csqrt, 0x1p-5000L, 0x1p-16494L, 2.660791472672778409283210520357607795518e-753L, 1.216776133331049643422030716668249905907e-4213L);
6127   TEST_c_c (csqrt, 0x1p+16383L, 0x1p-16494L, 7.712754032630730034273323365543179095045e2465L, plus_zero, UNDERFLOW_EXCEPTION);
6128   TEST_c_c (csqrt, 0x1p-16494L, 0x1p+16383L, 5.453740678097079647314921223668914312241e2465L, 5.453740678097079647314921223668914312241e2465L);
6129   TEST_c_c (csqrt, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-16382L, 2.014551439675644900022606748976158925145e-2466L, 8.344545284118961663847948339519226074126e-2467L);
6130   TEST_c_c (csqrt, -0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-16382L, 8.344545284118961663847948339519226074126e-2467L, -2.014551439675644900022606748976158925145e-2466L);
6131 # endif
6132 #endif
6133
6134   END (csqrt, complex);
6135 }
6136
6137 static void
6138 ctan_test (void)
6139 {
6140   errno = 0;
6141   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6142   if (errno == ENOSYS)
6143     /* Function not implemented.  */
6144     return;
6145
6146   START (ctan);
6147
6148   TEST_c_c (ctan, 0, 0, 0.0, 0.0);
6149   TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
6150   TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
6151   TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
6152
6153   TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
6154   TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
6155   TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
6156   TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
6157
6158   TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
6159   TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
6160   TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
6161   TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
6162
6163   TEST_c_c (ctan, plus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
6164   TEST_c_c (ctan, plus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
6165   TEST_c_c (ctan, minus_infty, 0, qnan_value, qnan_value, INVALID_EXCEPTION);
6166   TEST_c_c (ctan, minus_infty, 2, qnan_value, qnan_value, INVALID_EXCEPTION);
6167   TEST_c_c (ctan, plus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
6168   TEST_c_c (ctan, plus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
6169   TEST_c_c (ctan, minus_infty, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION);
6170   TEST_c_c (ctan, minus_infty, -2, qnan_value, qnan_value, INVALID_EXCEPTION);
6171
6172   TEST_c_c (ctan, qnan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
6173   TEST_c_c (ctan, qnan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
6174
6175   TEST_c_c (ctan, 0, qnan_value, 0.0, qnan_value);
6176   TEST_c_c (ctan, minus_zero, qnan_value, minus_zero, qnan_value);
6177
6178   TEST_c_c (ctan, 0.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6179   TEST_c_c (ctan, -4.5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6180
6181   TEST_c_c (ctan, qnan_value, 0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6182   TEST_c_c (ctan, qnan_value, 5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6183   TEST_c_c (ctan, qnan_value, minus_zero, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6184   TEST_c_c (ctan, qnan_value, -0.25, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6185
6186   TEST_c_c (ctan, qnan_value, qnan_value, qnan_value, qnan_value);
6187
6188   TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
6189   TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
6190
6191   TEST_c_c (ctan, 1, 45, 1.490158918874345552942703234806348520895e-39L, 1.000000000000000000000000000000000000001L, UNDERFLOW_EXCEPTION_FLOAT);
6192   TEST_c_c (ctan, 1, 47, 2.729321264492904590777293425576722354636e-41L, 1.0, UNDERFLOW_EXCEPTION_FLOAT);
6193
6194 #ifndef TEST_FLOAT
6195   TEST_c_c (ctan, 1, 355, 8.140551093483276762350406321792653551513e-309L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
6196   TEST_c_c (ctan, 1, 365, 1.677892637497921890115075995898773550884e-317L, 1.0, UNDERFLOW_EXCEPTION_DOUBLE);
6197 #endif
6198
6199 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6200   TEST_c_c (ctan, 1, 5680, 4.725214596136812019616700920476949798307e-4934L, 1.0, UNDERFLOW_EXCEPTION);
6201   TEST_c_c (ctan, 1, 5690, 9.739393181626937151720816611272607059057e-4943L, 1.0, UNDERFLOW_EXCEPTION);
6202 #endif
6203
6204   TEST_c_c (ctan, 0x3.243f6cp-1, 0, -2.287733242885645987394874673945769518150e7L, 0.0);
6205
6206   TEST_c_c (ctan, 0x1p127, 1, 0.2446359391192790896381501310437708987204L, 0.9101334047676183761532873794426475906201L);
6207
6208 #ifndef TEST_FLOAT
6209   TEST_c_c (ctan, 0x1p1023, 1, -0.2254627924997545057926782581695274244229L, 0.8786063118883068695462540226219865087189L);
6210 #endif
6211
6212 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6213   TEST_c_c (ctan, 0x1p16383L, 1, 0.1608598776370396607204448234354670036772L, 0.8133818522051542536316746743877629761488L);
6214 #endif
6215
6216   TEST_c_c (ctan, 50000, 50000, plus_zero, 1.0, UNDERFLOW_EXCEPTION);
6217   TEST_c_c (ctan, 50000, -50000, plus_zero, -1.0, UNDERFLOW_EXCEPTION);
6218   TEST_c_c (ctan, -50000, 50000, minus_zero, 1.0, UNDERFLOW_EXCEPTION);
6219   TEST_c_c (ctan, -50000, -50000, minus_zero, -1.0, UNDERFLOW_EXCEPTION);
6220
6221   END (ctan, complex);
6222 }
6223
6224
6225 static void
6226 ctan_test_tonearest (void)
6227 {
6228   int save_round_mode;
6229   errno = 0;
6230   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6231   if (errno == ENOSYS)
6232     /* Function not implemented.  */
6233     return;
6234
6235   START (ctan_tonearest);
6236
6237   save_round_mode = fegetround ();
6238
6239   if (!fesetround (FE_TONEAREST))
6240     {
6241       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6242
6243 #ifndef TEST_FLOAT
6244       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6245 #endif
6246
6247 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6248       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6249 #endif
6250     }
6251
6252   fesetround (save_round_mode);
6253
6254   END (ctan_tonearest, complex);
6255 }
6256
6257
6258 static void
6259 ctan_test_towardzero (void)
6260 {
6261   int save_round_mode;
6262   errno = 0;
6263   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6264   if (errno == ENOSYS)
6265     /* Function not implemented.  */
6266     return;
6267
6268   START (ctan_towardzero);
6269
6270   save_round_mode = fegetround ();
6271
6272   if (!fesetround (FE_TOWARDZERO))
6273     {
6274       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6275
6276 #ifndef TEST_FLOAT
6277       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6278 #endif
6279
6280 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6281       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6282 #endif
6283     }
6284
6285   fesetround (save_round_mode);
6286
6287   END (ctan_towardzero, complex);
6288 }
6289
6290
6291 static void
6292 ctan_test_downward (void)
6293 {
6294   int save_round_mode;
6295   errno = 0;
6296   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6297   if (errno == ENOSYS)
6298     /* Function not implemented.  */
6299     return;
6300
6301   START (ctan_downward);
6302
6303   save_round_mode = fegetround ();
6304
6305   if (!fesetround (FE_DOWNWARD))
6306     {
6307       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6308
6309 #ifndef TEST_FLOAT
6310       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6311 #endif
6312
6313 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6314       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6315 #endif
6316     }
6317
6318   fesetround (save_round_mode);
6319
6320   END (ctan_downward, complex);
6321 }
6322
6323
6324 static void
6325 ctan_test_upward (void)
6326 {
6327   int save_round_mode;
6328   errno = 0;
6329   FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
6330   if (errno == ENOSYS)
6331     /* Function not implemented.  */
6332     return;
6333
6334   START (ctan_upward);
6335
6336   save_round_mode = fegetround ();
6337
6338   if (!fesetround (FE_UPWARD))
6339     {
6340       TEST_c_c (ctan, 0x1.921fb6p+0, 0x1p-149, -2.287733242885645987394874673945769518150e7L, 7.334008549954377778731880988481078535821e-31L);
6341
6342 #ifndef TEST_FLOAT
6343       TEST_c_c (ctan, 0x1.921fb54442d18p+0, 0x1p-1074, 1.633123935319536975596773704152891653086e16L, 1.317719414943508315995636961402669067843e-291L);
6344 #endif
6345
6346 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6347       TEST_c_c (ctan, 0x1.921fb54442d1846ap+0L, 0x1p-16445L, -3.986797629811710706723242948653362815645e19L, 5.793882568875674066286163141055208625180e-4912L);
6348 #endif
6349     }
6350
6351   fesetround (save_round_mode);
6352
6353   END (ctan_upward, complex);
6354 }
6355
6356
6357 static void
6358 ctanh_test (void)
6359 {
6360   errno = 0;
6361   FUNC(ctanh) (BUILD_COMPLEX (0, 0));
6362   if (errno == ENOSYS)
6363     /* Function not implemented.  */
6364     return;
6365
6366   START (ctanh);
6367
6368   TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
6369   TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
6370   TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
6371   TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
6372
6373   TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
6374   TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
6375   TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
6376   TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
6377   TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
6378   TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
6379   TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
6380   TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
6381
6382   TEST_c_c (ctanh, 0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6383   TEST_c_c (ctanh, 2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6384   TEST_c_c (ctanh, 0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6385   TEST_c_c (ctanh, 2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6386   TEST_c_c (ctanh, minus_zero, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6387   TEST_c_c (ctanh, -2, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6388   TEST_c_c (ctanh, minus_zero, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6389   TEST_c_c (ctanh, -2, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
6390
6391   TEST_c_c (ctanh, plus_infty, qnan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
6392   TEST_c_c (ctanh, minus_infty, qnan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
6393
6394   TEST_c_c (ctanh, qnan_value, 0, qnan_value, 0.0);
6395   TEST_c_c (ctanh, qnan_value, minus_zero, qnan_value, minus_zero);
6396
6397   TEST_c_c (ctanh, qnan_value, 0.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6398   TEST_c_c (ctanh, qnan_value, -4.5, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6399
6400   TEST_c_c (ctanh, 0, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6401   TEST_c_c (ctanh, 5, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6402   TEST_c_c (ctanh, minus_zero, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6403   TEST_c_c (ctanh, -0.25, qnan_value, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
6404
6405   TEST_c_c (ctanh, qnan_value, qnan_value, qnan_value, qnan_value);
6406
6407   TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
6408
6409   TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
6410   TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
6411
6412   TEST_c_c (ctanh, 45, 1, 1.000000000000000000000000000000000000001L, 1.490158918874345552942703234806348520895e-39L, UNDERFLOW_EXCEPTION_FLOAT);
6413   TEST_c_c (ctanh, 47, 1, 1.0, 2.729321264492904590777293425576722354636e-41L, UNDERFLOW_EXCEPTION_FLOAT);
6414
6415 #ifndef TEST_FLOAT
6416   TEST_c_c (ctanh, 355, 1, 1.0, 8.140551093483276762350406321792653551513e-309L, UNDERFLOW_EXCEPTION_DOUBLE);
6417   TEST_c_c (ctanh, 365, 1, 1.0, 1.677892637497921890115075995898773550884e-317L, UNDERFLOW_EXCEPTION_DOUBLE);
6418 #endif
6419
6420 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6421   TEST_c_c (ctanh, 5680, 1, 1.0, 4.725214596136812019616700920476949798307e-4934L, UNDERFLOW_EXCEPTION);
6422   TEST_c_c (ctanh, 5690, 1, 1.0, 9.739393181626937151720816611272607059057e-4943L, UNDERFLOW_EXCEPTION);
6423 #endif
6424
6425   TEST_c_c (ctanh, 0, 0x3.243f6cp-1, 0.0, -2.287733242885645987394874673945769518150e7L);
6426
6427   TEST_c_c (ctanh, 1, 0x1p127, 0.9101334047676183761532873794426475906201L, 0.2446359391192790896381501310437708987204L);
6428
6429 #ifndef TEST_FLOAT
6430   TEST_c_c (ctanh, 1, 0x1p1023, 0.8786063118883068695462540226219865087189L, -0.2254627924997545057926782581695274244229L);
6431 #endif
6432
6433 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6434   TEST_c_c (ctanh, 1, 0x1p16383L, 0.8133818522051542536316746743877629761488L, 0.1608598776370396607204448234354670036772L);
6435 #endif
6436
6437   TEST_c_c (ctanh, 50000, 50000, 1.0, plus_zero, UNDERFLOW_EXCEPTION);
6438   TEST_c_c (ctanh, 50000, -50000, 1.0, minus_zero, UNDERFLOW_EXCEPTION);
6439   TEST_c_c (ctanh, -50000, 50000, -1.0, plus_zero, UNDERFLOW_EXCEPTION);
6440   TEST_c_c (ctanh, -50000, -50000, -1.0, minus_zero, UNDERFLOW_EXCEPTION);
6441
6442   END (ctanh, complex);
6443 }
6444
6445
6446 static void
6447 ctanh_test_tonearest (void)
6448 {
6449   int save_round_mode;
6450   errno = 0;
6451   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6452   if (errno == ENOSYS)
6453     /* Function not implemented.  */
6454     return;
6455
6456   START (ctanh_tonearest);
6457
6458   save_round_mode = fegetround ();
6459
6460   if (!fesetround (FE_TONEAREST))
6461     {
6462       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6463
6464 #ifndef TEST_FLOAT
6465       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6466 #endif
6467
6468 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6469       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6470 #endif
6471     }
6472
6473   fesetround (save_round_mode);
6474
6475   END (ctanh_tonearest, complex);
6476 }
6477
6478
6479 static void
6480 ctanh_test_towardzero (void)
6481 {
6482   int save_round_mode;
6483   errno = 0;
6484   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6485   if (errno == ENOSYS)
6486     /* Function not implemented.  */
6487     return;
6488
6489   START (ctanh_towardzero);
6490
6491   save_round_mode = fegetround ();
6492
6493   if (!fesetround (FE_TOWARDZERO))
6494     {
6495       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6496
6497 #ifndef TEST_FLOAT
6498       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6499 #endif
6500
6501 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6502       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6503 #endif
6504     }
6505
6506   fesetround (save_round_mode);
6507
6508   END (ctanh_towardzero, complex);
6509 }
6510
6511
6512 static void
6513 ctanh_test_downward (void)
6514 {
6515   int save_round_mode;
6516   errno = 0;
6517   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6518   if (errno == ENOSYS)
6519     /* Function not implemented.  */
6520     return;
6521
6522   START (ctanh_downward);
6523
6524   save_round_mode = fegetround ();
6525
6526   if (!fesetround (FE_DOWNWARD))
6527     {
6528       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6529
6530 #ifndef TEST_FLOAT
6531       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6532 #endif
6533
6534 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6535       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6536 #endif
6537     }
6538
6539   fesetround (save_round_mode);
6540
6541   END (ctanh_downward, complex);
6542 }
6543
6544
6545 static void
6546 ctanh_test_upward (void)
6547 {
6548   int save_round_mode;
6549   errno = 0;
6550   FUNC(ctanh) (BUILD_COMPLEX (0.7L, 1.2L));
6551   if (errno == ENOSYS)
6552     /* Function not implemented.  */
6553     return;
6554
6555   START (ctanh_upward);
6556
6557   save_round_mode = fegetround ();
6558
6559   if (!fesetround (FE_UPWARD))
6560     {
6561       TEST_c_c (ctanh, 0x1p-149, 0x1.921fb6p+0, 7.334008549954377778731880988481078535821e-31L, -2.287733242885645987394874673945769518150e7L);
6562
6563 #ifndef TEST_FLOAT
6564       TEST_c_c (ctanh, 0x1p-1074, 0x1.921fb54442d18p+0, 1.317719414943508315995636961402669067843e-291L, 1.633123935319536975596773704152891653086e16L);
6565 #endif
6566
6567 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
6568       TEST_c_c (ctanh, 0x1p-16445L, 0x1.921fb54442d1846ap+0L, 5.793882568875674066286163141055208625180e-4912L, -3.986797629811710706723242948653362815645e19L);
6569 #endif
6570     }
6571
6572   fesetround (save_round_mode);
6573
6574   END (ctanh_upward, complex);
6575 }
6576
6577
6578 static void
6579 erf_test (void)
6580 {
6581   errno = 0;
6582   FUNC(erf) (0);
6583   if (errno == ENOSYS)
6584     /* Function not implemented.  */
6585     return;
6586
6587   START (erf);
6588
6589   TEST_f_f (erf, 0, 0);
6590   TEST_f_f (erf, minus_zero, minus_zero);
6591   TEST_f_f (erf, plus_infty, 1);
6592   TEST_f_f (erf, minus_infty, -1);
6593   TEST_f_f (erf, qnan_value, qnan_value);
6594
6595   TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
6596   TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
6597   TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
6598   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
6599   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
6600   TEST_f_f (erf, 27.0L, 1.0L);
6601
6602   END (erf);
6603 }
6604
6605
6606 static void
6607 erfc_test (void)
6608 {
6609   errno = 0;
6610   FUNC(erfc) (0);
6611   if (errno == ENOSYS)
6612     /* Function not implemented.  */
6613     return;
6614
6615   START (erfc);
6616
6617   TEST_f_f (erfc, plus_infty, 0.0);
6618   TEST_f_f (erfc, minus_infty, 2.0);
6619   TEST_f_f (erfc, 0.0, 1.0);
6620   TEST_f_f (erfc, minus_zero, 1.0);
6621   TEST_f_f (erfc, qnan_value, qnan_value);
6622
6623   TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
6624   TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
6625   TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
6626   TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
6627   TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
6628   TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
6629   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
6630   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
6631 #ifdef TEST_LDOUBLE
6632   /* The result can only be represented in long double.  */
6633 # if LDBL_MIN_10_EXP < -319
6634   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
6635 # endif
6636 # if LDBL_MANT_DIG >= 106
6637   TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
6638 # endif
6639 #endif
6640
6641   END (erfc);
6642 }
6643
6644
6645 static void
6646 exp_test (void)
6647 {
6648   errno = 0;
6649   FUNC(exp) (0);
6650   if (errno == ENOSYS)
6651     /* Function not implemented.  */
6652     return;
6653
6654   START (exp);
6655
6656   TEST_f_f (exp, 0, 1);
6657   TEST_f_f (exp, minus_zero, 1);
6658
6659 #ifndef TEST_INLINE
6660   TEST_f_f (exp, plus_infty, plus_infty);
6661   TEST_f_f (exp, minus_infty, 0);
6662 #endif
6663   TEST_f_f (exp, qnan_value, qnan_value);
6664   TEST_f_f (exp, 1, M_El);
6665
6666   TEST_f_f (exp, 2, M_E2l);
6667   TEST_f_f (exp, 3, M_E3l);
6668   TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
6669   TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
6670   TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
6671 #ifndef TEST_FLOAT
6672   TEST_f_f (exp, 709.75L, 1.739836873264160557698252711673830393864768e+308L);
6673 #endif
6674 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
6675   /* The result can only be represented in sane long double.  */
6676   TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
6677 #endif
6678
6679 #if !(defined TEST_LDOUBLE && LDBL_MAX_EXP > 1024)
6680   TEST_f_f (exp, 710, plus_infty, OVERFLOW_EXCEPTION);
6681   TEST_f_f (exp, -1234, plus_zero, UNDERFLOW_EXCEPTION);
6682 #endif
6683   TEST_f_f (exp, 1e5, plus_infty, OVERFLOW_EXCEPTION);
6684   TEST_f_f (exp, max_value, plus_infty, OVERFLOW_EXCEPTION);
6685   TEST_f_f (exp, -max_value, 0, UNDERFLOW_EXCEPTION);
6686
6687   END (exp);
6688 }
6689
6690
6691 static void
6692 exp_test_tonearest (void)
6693 {
6694   int save_round_mode;
6695   errno = 0;
6696   FUNC(exp) (0);
6697   if (errno == ENOSYS)
6698     /* Function not implemented.  */
6699     return;
6700
6701   START (exp_tonearest);
6702
6703   save_round_mode = fegetround ();
6704
6705   if (!fesetround (FE_TONEAREST))
6706     {
6707       TEST_f_f (exp, 1, M_El);
6708       TEST_f_f (exp, 2, M_E2l);
6709       TEST_f_f (exp, 3, M_E3l);
6710     }
6711
6712   fesetround (save_round_mode);
6713
6714   END (exp_tonearest);
6715 }
6716
6717
6718 static void
6719 exp_test_towardzero (void)
6720 {
6721   int save_round_mode;
6722   errno = 0;
6723   FUNC(exp) (0);
6724   if (errno == ENOSYS)
6725     /* Function not implemented.  */
6726     return;
6727
6728   START (exp_towardzero);
6729
6730   save_round_mode = fegetround ();
6731
6732   if (!fesetround (FE_TOWARDZERO))
6733     {
6734       TEST_f_f (exp, 1, M_El);
6735       TEST_f_f (exp, 2, M_E2l);
6736       TEST_f_f (exp, 3, M_E3l);
6737     }
6738
6739   fesetround (save_round_mode);
6740
6741   END (exp_towardzero);
6742 }
6743
6744
6745 static void
6746 exp_test_downward (void)
6747 {
6748   int save_round_mode;
6749   errno = 0;
6750   FUNC(exp) (0);
6751   if (errno == ENOSYS)
6752     /* Function not implemented.  */
6753     return;
6754
6755   START (exp_downward);
6756
6757   save_round_mode = fegetround ();
6758
6759   if (!fesetround (FE_DOWNWARD))
6760     {
6761       TEST_f_f (exp, 1, M_El);
6762       TEST_f_f (exp, 2, M_E2l);
6763       TEST_f_f (exp, 3, M_E3l);
6764     }
6765
6766   fesetround (save_round_mode);
6767
6768   END (exp_downward);
6769 }
6770
6771
6772 static void
6773 exp_test_upward (void)
6774 {
6775   int save_round_mode;
6776   errno = 0;
6777   FUNC(exp) (0);
6778   if (errno == ENOSYS)
6779     /* Function not implemented.  */
6780     return;
6781
6782   START (exp_upward);
6783
6784   save_round_mode = fegetround ();
6785
6786   if (!fesetround (FE_UPWARD))
6787     {
6788       TEST_f_f (exp, 1, M_El);
6789       TEST_f_f (exp, 2, M_E2l);
6790       TEST_f_f (exp, 3, M_E3l);
6791     }
6792
6793   fesetround (save_round_mode);
6794
6795   END (exp_upward);
6796 }
6797
6798
6799 static void
6800 exp10_test (void)
6801 {
6802   errno = 0;
6803   FUNC(exp10) (0);
6804   if (errno == ENOSYS)
6805     /* Function not implemented.  */
6806     return;
6807
6808   START (exp10);
6809
6810   TEST_f_f (exp10, 0, 1);
6811   TEST_f_f (exp10, minus_zero, 1);
6812
6813   TEST_f_f (exp10, plus_infty, plus_infty);
6814   TEST_f_f (exp10, minus_infty, 0);
6815   TEST_f_f (exp10, qnan_value, qnan_value);
6816   TEST_f_f (exp10, 3, 1000);
6817   TEST_f_f (exp10, -1, 0.1L);
6818   TEST_f_f (exp10, 36, 1.0e36L);
6819   TEST_f_f (exp10, -36, 1.0e-36L);
6820 #ifndef TEST_FLOAT
6821   TEST_f_f (exp10, 305, 1.0e305L);
6822   TEST_f_f (exp10, -305, 1.0e-305L, UNDERFLOW_EXCEPTION_LDOUBLE_IBM);
6823 #endif
6824 #if defined TEST_LDOUBLE && LDBL_MAX_10_EXP >= 4932
6825   TEST_f_f (exp10, 4932, 1.0e4932L);
6826   TEST_f_f (exp10, -4932, 1.0e-4932L, UNDERFLOW_EXCEPTION);
6827 #endif
6828   TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6829   TEST_f_f (exp10, -1e6, 0, UNDERFLOW_EXCEPTION);
6830   TEST_f_f (exp10, max_value, plus_infty, OVERFLOW_EXCEPTION);
6831   TEST_f_f (exp10, -max_value, 0, UNDERFLOW_EXCEPTION);
6832   TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
6833
6834   END (exp10);
6835 }
6836
6837
6838 static void
6839 exp2_test (void)
6840 {
6841   errno = 0;
6842   FUNC(exp2) (0);
6843   if (errno == ENOSYS)
6844     /* Function not implemented.  */
6845     return;
6846
6847   START (exp2);
6848
6849   TEST_f_f (exp2, 0, 1);
6850   TEST_f_f (exp2, minus_zero, 1);
6851   TEST_f_f (exp2, plus_infty, plus_infty);
6852   TEST_f_f (exp2, minus_infty, 0);
6853   TEST_f_f (exp2, qnan_value, qnan_value);
6854
6855   TEST_f_f (exp2, 10, 1024);
6856   TEST_f_f (exp2, -1, 0.5);
6857   TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION);
6858   TEST_f_f (exp2, -1e6, 0, UNDERFLOW_EXCEPTION);
6859   TEST_f_f (exp2, max_value, plus_infty, OVERFLOW_EXCEPTION);
6860   TEST_f_f (exp2, -max_value, 0, UNDERFLOW_EXCEPTION);
6861   TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
6862
6863   TEST_f_f (exp2, 100.5, 1.792728671193156477399422023278661496394e+30L);
6864   TEST_f_f (exp2, 127, 0x1p127);
6865   TEST_f_f (exp2, -149, 0x1p-149);
6866
6867 #ifndef TEST_FLOAT
6868   TEST_f_f (exp2, 1000.25, 1.274245659452564874772384918171765416737e+301L);
6869   TEST_f_f (exp2, 1023, 0x1p1023);
6870   TEST_f_f (exp2, -1074, 0x1p-1074);
6871 #endif
6872
6873 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6874   TEST_f_f (exp2, 16383, 0x1p16383L);
6875   TEST_f_f (exp2, -16400, 0x1p-16400L);
6876 #endif
6877
6878   END (exp2);
6879 }
6880
6881
6882 static void
6883 expm1_test (void)
6884 {
6885   errno = 0;
6886   FUNC(expm1) (0);
6887   if (errno == ENOSYS)
6888     /* Function not implemented.  */
6889     return;
6890
6891   START (expm1);
6892
6893   TEST_f_f (expm1, 0, 0);
6894   TEST_f_f (expm1, minus_zero, minus_zero);
6895
6896 #ifndef TEST_INLINE
6897   TEST_f_f (expm1, plus_infty, plus_infty);
6898   TEST_f_f (expm1, minus_infty, -1);
6899 #endif
6900   TEST_f_f (expm1, qnan_value, qnan_value);
6901
6902   TEST_f_f (expm1, 1, M_El - 1.0);
6903   TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
6904
6905   TEST_f_f (expm1, 50.0L, 5.1847055285870724640864533229334853848275e+21L);
6906
6907 #ifndef TEST_FLOAT
6908   TEST_f_f (expm1, 127.0L, 1.4302079958348104463583671072905261080748e+55L);
6909   TEST_f_f (expm1, 500.0L, 1.4035922178528374107397703328409120821806e+217L);
6910 #endif
6911
6912 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6913   TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
6914 #endif
6915
6916   TEST_f_f (expm1, -10.0, -0.9999546000702375151484644084844394493898L);
6917   TEST_f_f (expm1, -16.0, -0.9999998874648252807408854862248209398728L);
6918   TEST_f_f (expm1, -17.0, -0.9999999586006228121483334034897228104472L);
6919   TEST_f_f (expm1, -18.0, -0.9999999847700202552873715638633707664826L);
6920   TEST_f_f (expm1, -36.0, -0.9999999999999997680477169756430611687736L);
6921   TEST_f_f (expm1, -37.0, -0.9999999999999999146695237425593420572195L);
6922   TEST_f_f (expm1, -38.0, -0.9999999999999999686086720795197037129104L);
6923   TEST_f_f (expm1, -44.0, -0.9999999999999999999221886775886620348429L);
6924   TEST_f_f (expm1, -45.0, -0.9999999999999999999713748141945060635553L);
6925   TEST_f_f (expm1, -46.0, -0.9999999999999999999894693826424461876212L);
6926   TEST_f_f (expm1, -73.0, -0.9999999999999999999999999999999802074012L);
6927   TEST_f_f (expm1, -74.0, -0.9999999999999999999999999999999927187098L);
6928   TEST_f_f (expm1, -75.0, -0.9999999999999999999999999999999973213630L);
6929   TEST_f_f (expm1, -78.0, -0.9999999999999999999999999999999998666385L);
6930   TEST_f_f (expm1, -79.0, -0.9999999999999999999999999999999999509391L);
6931   TEST_f_f (expm1, -80.0, -0.9999999999999999999999999999999999819515L);
6932   TEST_f_f (expm1, -100.0, -1.0);
6933   TEST_f_f (expm1, -1000.0, -1.0);
6934   TEST_f_f (expm1, -10000.0, -1.0);
6935   TEST_f_f (expm1, -100000.0, -1.0);
6936
6937   errno = 0;
6938   TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION);
6939   check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
6940   TEST_f_f (expm1, max_value, plus_infty, OVERFLOW_EXCEPTION);
6941   TEST_f_f (expm1, -max_value, -1);
6942
6943   END (expm1);
6944 }
6945
6946
6947 static void
6948 fabs_test (void)
6949 {
6950   START (fabs);
6951
6952   TEST_f_f (fabs, 0, 0);
6953   TEST_f_f (fabs, minus_zero, 0);
6954
6955   TEST_f_f (fabs, plus_infty, plus_infty);
6956   TEST_f_f (fabs, minus_infty, plus_infty);
6957   TEST_f_f (fabs, qnan_value, qnan_value);
6958
6959   TEST_f_f (fabs, 38.0, 38.0);
6960   TEST_f_f (fabs, -M_El, M_El);
6961
6962   END (fabs);
6963 }
6964
6965
6966 static void
6967 fdim_test (void)
6968 {
6969   START (fdim);
6970
6971   TEST_ff_f (fdim, 0, 0, 0);
6972   TEST_ff_f (fdim, 9, 0, 9);
6973   TEST_ff_f (fdim, 0, 9, 0);
6974   TEST_ff_f (fdim, -9, 0, 0);
6975   TEST_ff_f (fdim, 0, -9, 9);
6976
6977   TEST_ff_f (fdim, plus_infty, 9, plus_infty);
6978   TEST_ff_f (fdim, plus_infty, -9, plus_infty);
6979   TEST_ff_f (fdim, minus_infty, 9, 0);
6980   TEST_ff_f (fdim, minus_infty, -9, 0);
6981   TEST_ff_f (fdim, 9, minus_infty, plus_infty);
6982   TEST_ff_f (fdim, -9, minus_infty, plus_infty);
6983   TEST_ff_f (fdim, 9, plus_infty, 0);
6984   TEST_ff_f (fdim, -9, plus_infty, 0);
6985
6986   TEST_ff_f (fdim, 0, qnan_value, qnan_value);
6987   TEST_ff_f (fdim, 9, qnan_value, qnan_value);
6988   TEST_ff_f (fdim, -9, qnan_value, qnan_value);
6989   TEST_ff_f (fdim, qnan_value, 9, qnan_value);
6990   TEST_ff_f (fdim, qnan_value, -9, qnan_value);
6991   TEST_ff_f (fdim, plus_infty, qnan_value, qnan_value);
6992   TEST_ff_f (fdim, minus_infty, qnan_value, qnan_value);
6993   TEST_ff_f (fdim, qnan_value, plus_infty, qnan_value);
6994   TEST_ff_f (fdim, qnan_value, minus_infty, qnan_value);
6995   TEST_ff_f (fdim, qnan_value, qnan_value, qnan_value);
6996
6997   TEST_ff_f (fdim, plus_infty, plus_infty, 0);
6998
6999   END (fdim);
7000 }
7001
7002
7003 static void
7004 finite_test (void)
7005 {
7006   START (finite);
7007
7008   TEST_f_b (finite, 0, 1);
7009   TEST_f_b (finite, minus_zero, 1);
7010   TEST_f_b (finite, 10, 1);
7011   TEST_f_b (finite, min_subnorm_value, 1);
7012   TEST_f_b (finite, plus_infty, 0);
7013   TEST_f_b (finite, minus_infty, 0);
7014   TEST_f_b (finite, qnan_value, 0);
7015
7016   END (finite);
7017 }
7018
7019
7020 static void
7021 floor_test (void)
7022 {
7023   START (floor);
7024
7025   TEST_f_f (floor, 0.0, 0.0);
7026   TEST_f_f (floor, minus_zero, minus_zero);
7027   TEST_f_f (floor, plus_infty, plus_infty);
7028   TEST_f_f (floor, minus_infty, minus_infty);
7029   TEST_f_f (floor, qnan_value, qnan_value);
7030
7031   TEST_f_f (floor, M_PIl, 3.0);
7032   TEST_f_f (floor, -M_PIl, -4.0);
7033
7034   TEST_f_f (floor, 0.1, 0.0);
7035   TEST_f_f (floor, 0.25, 0.0);
7036   TEST_f_f (floor, 0.625, 0.0);
7037   TEST_f_f (floor, -0.1, -1.0);
7038   TEST_f_f (floor, -0.25, -1.0);
7039   TEST_f_f (floor, -0.625, -1.0);
7040
7041 #ifdef TEST_LDOUBLE
7042   /* The result can only be represented in long double.  */
7043   TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
7044   TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
7045   TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
7046   TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
7047   TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
7048 # if LDBL_MANT_DIG > 100
7049   TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
7050   TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
7051   TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
7052 # endif
7053
7054   TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
7055   TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
7056   TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
7057   TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
7058   TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
7059 # if LDBL_MANT_DIG > 100
7060   TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
7061   TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
7062   TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
7063 # endif
7064
7065   TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
7066   TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
7067   TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
7068   TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
7069   TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
7070
7071 # if LDBL_MANT_DIG > 100
7072   TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
7073   TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
7074   TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
7075   TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
7076   TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
7077   TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
7078 # endif
7079
7080   TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
7081   TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
7082   TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
7083   TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
7084   TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
7085
7086 # if LDBL_MANT_DIG > 100
7087   TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
7088   TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
7089   TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
7090   TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
7091   TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
7092   TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
7093 # endif
7094
7095   TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
7096   TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
7097   TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
7098   TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
7099   TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
7100
7101   TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
7102   TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
7103   TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
7104   TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
7105   TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
7106
7107   TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7108   TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7109   TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7110   TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7111   TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7112
7113   TEST_f_f (floor, 0xf.ffffffffffffff8p+47L, 0xf.fffffffffffep+47L);
7114   TEST_f_f (floor, -0x8.000000000000004p+48L, -0x8.000000000001p+48L);
7115 #endif
7116
7117   END (floor);
7118 }
7119
7120
7121 static void
7122 fma_test (void)
7123 {
7124   START (fma);
7125
7126   TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
7127   TEST_fff_f (fma, qnan_value, 2.0, 3.0, qnan_value);
7128   TEST_fff_f (fma, 1.0, qnan_value, 3.0, qnan_value);
7129   TEST_fff_f (fma, 1.0, 2.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7130   TEST_fff_f (fma, plus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7131   TEST_fff_f (fma, minus_infty, 0.0, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7132   TEST_fff_f (fma, 0.0, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7133   TEST_fff_f (fma, 0.0, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION_OK);
7134   TEST_fff_f (fma, plus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7135   TEST_fff_f (fma, minus_infty, 0.0, 1.0, qnan_value, INVALID_EXCEPTION);
7136   TEST_fff_f (fma, 0.0, plus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7137   TEST_fff_f (fma, 0.0, minus_infty, 1.0, qnan_value, INVALID_EXCEPTION);
7138
7139   TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
7140   TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7141   TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7142   TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
7143   TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
7144   TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, qnan_value, INVALID_EXCEPTION);
7145   TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, qnan_value, INVALID_EXCEPTION);
7146   TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, qnan_value, INVALID_EXCEPTION);
7147
7148   TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
7149
7150   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7151                          LDBL_MAX, DBL_MAX, FLT_MAX);
7152   TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
7153   TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
7154   TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
7155   TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
7156   TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
7157   TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
7158   TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
7159   TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
7160
7161   TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7162   TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7163   TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7164   TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7165   TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7166   TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7167   TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7168   TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7169   TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7170   TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7171   TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7172   TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7173   TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7174   TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7175   TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7176   TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7177   TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7178   TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7179   TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7180   TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7181   TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7182   TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7183   TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7184   TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7185
7186   TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7187   TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7188   TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7189   TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7190
7191   TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7192   TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7193   TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7194   TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7195   TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7196   TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7197   TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7198   TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7199
7200   TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7201   TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7202   TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7203   TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7204   TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7205   TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7206   TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7207   TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7208
7209 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7210   TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
7211   TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
7212   TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
7213   TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
7214   TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
7215   TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
7216   TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
7217   TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7218   TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7219   TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7220   TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7221   TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7222   TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7223   TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7224   TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7225   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7226   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
7227   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
7228   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7229   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7230   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7231   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7232   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7233   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7234   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7235   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7236   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7237   TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7238   TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7239   TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7240   TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7241   TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7242   TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7243   TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7244   TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7245   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7246   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
7247   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
7248   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7249   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7250   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
7251   TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
7252   TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7253 #endif
7254 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7255   TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
7256   TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
7257   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
7258   TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
7259   TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
7260   TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
7261   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
7262   TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
7263   TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
7264   TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0, UNDERFLOW_EXCEPTION);
7265   TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022, UNDERFLOW_EXCEPTION);
7266   TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022, UNDERFLOW_EXCEPTION);
7267   TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022, UNDERFLOW_EXCEPTION);
7268   TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022, UNDERFLOW_EXCEPTION);
7269   TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022, UNDERFLOW_EXCEPTION);
7270   TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022, UNDERFLOW_EXCEPTION);
7271   TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022, UNDERFLOW_EXCEPTION);
7272   TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022, UNDERFLOW_EXCEPTION);
7273   TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022, UNDERFLOW_EXCEPTION);
7274   TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
7275   TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7276   TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7277   TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7278   TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7279   TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7280   TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7281   TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7282   TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7283   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7284   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
7285   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
7286   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7287   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7288   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7289   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7290   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7291   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7292   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7293   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7294   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7295   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7296   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7297   TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7298   TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7299   TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7300   TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7301   TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7302   TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7303   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7304   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7305   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7306   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7307   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7308   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
7309   TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
7310   TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7311 #endif
7312 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7313   TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
7314   TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
7315   TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
7316   TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
7317   TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
7318   TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L, UNDERFLOW_EXCEPTION);
7319   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7320   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7321   TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7322   TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7323   TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7324   TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7325   TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7326   TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7327   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7328   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
7329   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
7330   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7331   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7332   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7333   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7334   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7335   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7336   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7337   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7338   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7339   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7340   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7341   TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7342   TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7343   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7344   TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7345   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7346   TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7347   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7348   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7349   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7350   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7351   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7352   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7353   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7354   TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7355 #endif
7356 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7357   TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
7358   TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L, UNDERFLOW_EXCEPTION);
7359   TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L, UNDERFLOW_EXCEPTION);
7360   TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
7361   TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
7362   TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
7363   TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
7364   TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
7365   TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
7366   TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
7367   TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
7368   TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
7369   TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
7370   TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7371   TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7372   TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7373   TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7374   TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7375   TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7376   TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7377   TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7378   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7379   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
7380   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
7381   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7382   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7383   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7384   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7385   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7386   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7387   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7388   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7389   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7390   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7391   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7392   TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7393   TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7394   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7395   TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7396   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7397   TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7398   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7399   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7400   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7401   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7402   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7403   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7404   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7405   TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7406 #endif
7407
7408   END (fma);
7409 }
7410
7411
7412 static void
7413 fma_test_towardzero (void)
7414 {
7415   int save_round_mode;
7416   START (fma_towardzero);
7417
7418   save_round_mode = fegetround ();
7419
7420   if (!fesetround (FE_TOWARDZERO))
7421     {
7422       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7423       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7424       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7425       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7426       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7427       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7428       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7429       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7430       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7431       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7432       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7433       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7434       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7435       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7436       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7437       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7438       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7439       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7440       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7441       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7442       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7443       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7444       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7445       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7446
7447       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7448       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7449       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7450       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7451
7452       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7453       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7454       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7455       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7456       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7457       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7458       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7459       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7460
7461 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7462       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7463       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7464       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7465       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7466       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7467       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7468       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7469       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7470 #endif
7471
7472 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7473       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7474       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7475       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7476       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7477       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7478       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7479       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7480       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7481       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7482       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
7483       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
7484       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7485       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7486       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7487       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7488       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7489       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7490       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7491       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7492       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7493       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7494       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
7495       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
7496       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7497       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7498       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7499       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7500       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7501       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7502       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
7503       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
7504       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7505       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7506       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
7507       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
7508       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7509 #endif
7510 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7511       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7512       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7513       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7514       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7515       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7516       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7517       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7518       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7519       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7520       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
7521       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
7522       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7523       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7524       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7525       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7526       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7527       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7528       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7529       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7530       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7531       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7532       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
7533       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
7534       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7535       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7536       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7537       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7538       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7539       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7540       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
7541       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
7542       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7543       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7544       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
7545       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
7546       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7547 #endif
7548 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7549       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7550       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7551       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7552       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7553       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7554       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7555       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7556       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7557       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7558       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7559       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7560       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
7561       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7562       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7563       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7564       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
7565       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7566       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7567       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7568       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7569       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7570       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
7571       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
7572       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7573       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7574       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7575       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7576       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7577       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7578       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7579       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
7580       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7581       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7582       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
7583       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
7584       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7585 #endif
7586 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7587       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7588       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7589       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7590       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7591       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7592       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7593       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7594       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7595       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7596       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7597       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7598       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
7599       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7600       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7601       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7602       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
7603       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7604       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7605       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7606       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7607       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7608       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
7609       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
7610       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7611       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7612       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7613       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7614       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7615       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7616       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7617       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
7618       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7619       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7620       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
7621       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
7622       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7623 #endif
7624     }
7625
7626   fesetround (save_round_mode);
7627
7628   END (fma_towardzero);
7629 }
7630
7631
7632 static void
7633 fma_test_downward (void)
7634 {
7635   int save_round_mode;
7636   START (fma_downward);
7637
7638   save_round_mode = fegetround ();
7639
7640   if (!fesetround (FE_DOWNWARD))
7641     {
7642       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7643       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, minus_zero);
7644       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, minus_zero);
7645       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7646       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, minus_zero);
7647       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7648       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7649       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, minus_zero);
7650       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7651       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, minus_zero);
7652       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, minus_zero);
7653       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7654       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, minus_zero);
7655       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7656       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7657       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, minus_zero);
7658       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7659       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, minus_zero);
7660       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, minus_zero);
7661       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7662       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, minus_zero);
7663       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7664       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7665       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, minus_zero);
7666
7667       TEST_fff_f (fma, 1.0, 1.0, -1.0, minus_zero);
7668       TEST_fff_f (fma, 1.0, -1.0, 1.0, minus_zero);
7669       TEST_fff_f (fma, -1.0, 1.0, 1.0, minus_zero);
7670       TEST_fff_f (fma, -1.0, -1.0, -1.0, minus_zero);
7671
7672       TEST_fff_f (fma, min_value, min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7673       TEST_fff_f (fma, min_value, min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7674       TEST_fff_f (fma, min_value, -min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7675       TEST_fff_f (fma, min_value, -min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7676       TEST_fff_f (fma, -min_value, min_value, plus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7677       TEST_fff_f (fma, -min_value, min_value, minus_zero, -min_subnorm_value, UNDERFLOW_EXCEPTION);
7678       TEST_fff_f (fma, -min_value, -min_value, plus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7679       TEST_fff_f (fma, -min_value, -min_value, minus_zero, plus_zero, UNDERFLOW_EXCEPTION);
7680
7681 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7682       TEST_fff_f (fma, max_value, max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7683       TEST_fff_f (fma, max_value, max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7684       TEST_fff_f (fma, max_value, -max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7685       TEST_fff_f (fma, max_value, -max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7686       TEST_fff_f (fma, -max_value, max_value, min_value, minus_infty, OVERFLOW_EXCEPTION);
7687       TEST_fff_f (fma, -max_value, max_value, -min_value, minus_infty, OVERFLOW_EXCEPTION);
7688       TEST_fff_f (fma, -max_value, -max_value, min_value, max_value, OVERFLOW_EXCEPTION);
7689       TEST_fff_f (fma, -max_value, -max_value, -min_value, max_value, OVERFLOW_EXCEPTION);
7690 #endif
7691
7692 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7693       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7694       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00008p-127, UNDERFLOW_EXCEPTION);
7695       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7696       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7697       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7698       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7699       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7700       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7701       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1p127);
7702       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x0.ffffffp127);
7703       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x1p127);
7704       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1.000002p127);
7705       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1p-126);
7706       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7707       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7708       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1.000002p-126);
7709       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7710       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7711       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7712       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x1p-126, UNDERFLOW_EXCEPTION);
7713       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7714       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, plus_zero, UNDERFLOW_EXCEPTION);
7715       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7716       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-148, UNDERFLOW_EXCEPTION);
7717       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7718       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7719       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7720       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7721       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1p127);
7722       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x0.ffffffp127);
7723       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x1p127);
7724       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1.000002p127);
7725       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1p103);
7726       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x0.ffffffp103);
7727       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x1p103);
7728       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1.000002p103);
7729 #endif
7730 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7731       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7732       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7733       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7734       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7735       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7736       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7737       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7738       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7739       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1p1023);
7740       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x0.fffffffffffff8p1023);
7741       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x1p1023);
7742       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1.0000000000001p1023);
7743       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1p-1022);
7744       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7745       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7746       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1.0000000000001p-1022);
7747       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7748       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7749       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7750       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x1p-1022, UNDERFLOW_EXCEPTION);
7751       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7752       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, plus_zero, UNDERFLOW_EXCEPTION);
7753       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7754       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1073, UNDERFLOW_EXCEPTION);
7755       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7756       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7757       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7758       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7759       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7760       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x0.fffffffffffff8p1023);
7761       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7762       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1.0000000000001p1023);
7763       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1p970);
7764       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x0.fffffffffffff8p970);
7765       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x1p970);
7766       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1.0000000000001p970);
7767 #endif
7768 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7769       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7770       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7771       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7772       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7773       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7774       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7775       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7776       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7777       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1p16383L);
7778       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7779       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x1p16383L);
7780       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1.0000000000000002p16383L);
7781       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1p-16382L);
7782       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7783       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7784       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1.0000000000000002p-16382L);
7785       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7786       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
7787       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7788       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7789       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
7790       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, plus_zero, UNDERFLOW_EXCEPTION);
7791       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
7792       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16444L, UNDERFLOW_EXCEPTION);
7793       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7794       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7795       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
7796       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
7797       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
7798       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x0.ffffffffffffffffp16383L);
7799       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
7800       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1.0000000000000002p16383L);
7801       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
7802       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x0.ffffffffffffffffp16319L);
7803       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
7804       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1.0000000000000002p16319L);
7805 #endif
7806 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
7807       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
7808       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7809       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7810       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7811       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7812       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7813       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7814       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7815       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1p16383L);
7816       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7817       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x1p16383L);
7818       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7819       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1p-16382L);
7820       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7821       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7822       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1.0000000000000000000000000001p-16382L);
7823       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7824       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7825       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
7826       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x1p-16382L, UNDERFLOW_EXCEPTION);
7827       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
7828       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, plus_zero, UNDERFLOW_EXCEPTION);
7829       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
7830       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16493L, UNDERFLOW_EXCEPTION);
7831       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7832       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7833       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
7834       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
7835       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
7836       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x0.ffffffffffffffffffffffffffff8p16383L);
7837       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
7838       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1.0000000000000000000000000001p16383L);
7839       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
7840       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x0.ffffffffffffffffffffffffffff8p16319L);
7841       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
7842       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1.0000000000000000000000000001p16319L);
7843 #endif
7844     }
7845
7846   fesetround (save_round_mode);
7847
7848   END (fma_downward);
7849 }
7850
7851
7852 static void
7853 fma_test_upward (void)
7854 {
7855   int save_round_mode;
7856   START (fma_upward);
7857
7858   save_round_mode = fegetround ();
7859
7860   if (!fesetround (FE_UPWARD))
7861     {
7862       TEST_fff_f (fma, plus_zero, plus_zero, plus_zero, plus_zero);
7863       TEST_fff_f (fma, plus_zero, plus_zero, minus_zero, plus_zero);
7864       TEST_fff_f (fma, plus_zero, minus_zero, plus_zero, plus_zero);
7865       TEST_fff_f (fma, plus_zero, minus_zero, minus_zero, minus_zero);
7866       TEST_fff_f (fma, minus_zero, plus_zero, plus_zero, plus_zero);
7867       TEST_fff_f (fma, minus_zero, plus_zero, minus_zero, minus_zero);
7868       TEST_fff_f (fma, minus_zero, minus_zero, plus_zero, plus_zero);
7869       TEST_fff_f (fma, minus_zero, minus_zero, minus_zero, plus_zero);
7870       TEST_fff_f (fma, 1.0, plus_zero, plus_zero, plus_zero);
7871       TEST_fff_f (fma, 1.0, plus_zero, minus_zero, plus_zero);
7872       TEST_fff_f (fma, 1.0, minus_zero, plus_zero, plus_zero);
7873       TEST_fff_f (fma, 1.0, minus_zero, minus_zero, minus_zero);
7874       TEST_fff_f (fma, -1.0, plus_zero, plus_zero, plus_zero);
7875       TEST_fff_f (fma, -1.0, plus_zero, minus_zero, minus_zero);
7876       TEST_fff_f (fma, -1.0, minus_zero, plus_zero, plus_zero);
7877       TEST_fff_f (fma, -1.0, minus_zero, minus_zero, plus_zero);
7878       TEST_fff_f (fma, plus_zero, 1.0, plus_zero, plus_zero);
7879       TEST_fff_f (fma, plus_zero, 1.0, minus_zero, plus_zero);
7880       TEST_fff_f (fma, plus_zero, -1.0, plus_zero, plus_zero);
7881       TEST_fff_f (fma, plus_zero, -1.0, minus_zero, minus_zero);
7882       TEST_fff_f (fma, minus_zero, 1.0, plus_zero, plus_zero);
7883       TEST_fff_f (fma, minus_zero, 1.0, minus_zero, minus_zero);
7884       TEST_fff_f (fma, minus_zero, -1.0, plus_zero, plus_zero);
7885       TEST_fff_f (fma, minus_zero, -1.0, minus_zero, plus_zero);
7886
7887       TEST_fff_f (fma, 1.0, 1.0, -1.0, plus_zero);
7888       TEST_fff_f (fma, 1.0, -1.0, 1.0, plus_zero);
7889       TEST_fff_f (fma, -1.0, 1.0, 1.0, plus_zero);
7890       TEST_fff_f (fma, -1.0, -1.0, -1.0, plus_zero);
7891
7892       TEST_fff_f (fma, min_value, min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7893       TEST_fff_f (fma, min_value, min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7894       TEST_fff_f (fma, min_value, -min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7895       TEST_fff_f (fma, min_value, -min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7896       TEST_fff_f (fma, -min_value, min_value, plus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7897       TEST_fff_f (fma, -min_value, min_value, minus_zero, minus_zero, UNDERFLOW_EXCEPTION);
7898       TEST_fff_f (fma, -min_value, -min_value, plus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7899       TEST_fff_f (fma, -min_value, -min_value, minus_zero, min_subnorm_value, UNDERFLOW_EXCEPTION);
7900
7901 #if !(defined TEST_LDOUBLE && LDBL_MANT_DIG == 106) /* Bug 13304.  */
7902       TEST_fff_f (fma, max_value, max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7903       TEST_fff_f (fma, max_value, max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7904       TEST_fff_f (fma, max_value, -max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7905       TEST_fff_f (fma, max_value, -max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7906       TEST_fff_f (fma, -max_value, max_value, min_value, -max_value, OVERFLOW_EXCEPTION);
7907       TEST_fff_f (fma, -max_value, max_value, -min_value, -max_value, OVERFLOW_EXCEPTION);
7908       TEST_fff_f (fma, -max_value, -max_value, min_value, plus_infty, OVERFLOW_EXCEPTION);
7909       TEST_fff_f (fma, -max_value, -max_value, -min_value, plus_infty, OVERFLOW_EXCEPTION);
7910 #endif
7911
7912 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
7913       TEST_fff_f (fma, 0x1.4p-126, 0x1.000004p-1, 0x1p-128, 0x1.c00008p-127, UNDERFLOW_EXCEPTION);
7914       TEST_fff_f (fma, -0x1.4p-126, 0x1.000004p-1, -0x1p-128, -0x1.c00004p-127, UNDERFLOW_EXCEPTION);
7915       TEST_fff_f (fma, 0x1.fffff8p-126, 0x1.000002p-1, 0x1p-149, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7916       TEST_fff_f (fma, -0x1.fffff8p-126, 0x1.000002p-1, -0x1p-149, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7917       TEST_fff_f (fma, 0x1p-149, 0x1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7918       TEST_fff_f (fma, -0x1p-149, 0x1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7919       TEST_fff_f (fma, 0x1p-149, 0x1.1p-1, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7920       TEST_fff_f (fma, -0x1p-149, 0x1.1p-1, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7921       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p127, 0x1.000002p127);
7922       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p127, 0x1p127);
7923       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p127, -0x0.ffffffp127);
7924       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p127, -0x1p127);
7925       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-126, 0x1.000002p-126);
7926       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-126, 0x1p-126, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7927       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7928       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-126, -0x1p-126);
7929       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x0.fffffep-126, 0x1p-126, UNDERFLOW_EXCEPTION);
7930       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x0.fffffep-126, 0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7931       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x0.fffffep-126, -0x0.fffffcp-126, UNDERFLOW_EXCEPTION);
7932       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x0.fffffep-126, -0x0.fffffep-126, UNDERFLOW_EXCEPTION);
7933       TEST_fff_f (fma, 0x1p-149, 0x1p-149, 0x1p-149, 0x1p-148, UNDERFLOW_EXCEPTION);
7934       TEST_fff_f (fma, 0x1p-149, -0x1p-149, 0x1p-149, 0x1p-149, UNDERFLOW_EXCEPTION);
7935       TEST_fff_f (fma, 0x1p-149, 0x1p-149, -0x1p-149, minus_zero, UNDERFLOW_EXCEPTION);
7936       TEST_fff_f (fma, 0x1p-149, -0x1p-149, -0x1p-149, -0x1p-149, UNDERFLOW_EXCEPTION);
7937       TEST_fff_f (fma, 0x0.fffp0, 0x0.fffp0, -0x0.ffep0, 0x1p-24);
7938       TEST_fff_f (fma, 0x0.fffp0, -0x0.fffp0, 0x0.ffep0, -0x1p-24);
7939       TEST_fff_f (fma, -0x0.fffp0, 0x0.fffp0, 0x0.ffep0, -0x1p-24);
7940       TEST_fff_f (fma, -0x0.fffp0, -0x0.fffp0, -0x0.ffep0, 0x1p-24);
7941       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p127, 0x1.000002p127);
7942       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p127, 0x1p127);
7943       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p127, -0x0.ffffffp127);
7944       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p127, -0x1p127);
7945       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, 0x1p103, 0x1.000002p103);
7946       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, 0x1p103, 0x1p103);
7947       TEST_fff_f (fma, 0x1.000002p-126, 0x1.000002p-26, -0x1p103, -0x0.ffffffp103);
7948       TEST_fff_f (fma, 0x1.000002p-126, -0x1.000002p-26, -0x1p103, -0x1p103);
7949 #endif
7950 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
7951       TEST_fff_f (fma, 0x1.4p-1022, 0x1.0000000000002p-1, 0x1p-1024, 0x1.c000000000004p-1023, UNDERFLOW_EXCEPTION);
7952       TEST_fff_f (fma, -0x1.4p-1022, 0x1.0000000000002p-1, -0x1p-1024, -0x1.c000000000002p-1023, UNDERFLOW_EXCEPTION);
7953       TEST_fff_f (fma, 0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7954       TEST_fff_f (fma, -0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7955       TEST_fff_f (fma, 0x1p-1074, 0x1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7956       TEST_fff_f (fma, -0x1p-1074, 0x1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7957       TEST_fff_f (fma, 0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7958       TEST_fff_f (fma, -0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7959       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p1023, 0x1.0000000000001p1023);
7960       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p1023, 0x1p1023);
7961       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p1023, -0x0.fffffffffffff8p1023);
7962       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p1023, -0x1p1023);
7963       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1022, 0x1.0000000000001p-1022);
7964       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1022, 0x1p-1022, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7965       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7966       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1022, -0x1p-1022);
7967       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x0.fffffffffffffp-1022, 0x1p-1022, UNDERFLOW_EXCEPTION);
7968       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7969       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.ffffffffffffep-1022, UNDERFLOW_EXCEPTION);
7970       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x0.fffffffffffffp-1022, -0x0.fffffffffffffp-1022, UNDERFLOW_EXCEPTION);
7971       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, 0x1p-1074, 0x1p-1073, UNDERFLOW_EXCEPTION);
7972       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, 0x1p-1074, 0x1p-1074, UNDERFLOW_EXCEPTION);
7973       TEST_fff_f (fma, 0x1p-1074, 0x1p-1074, -0x1p-1074, minus_zero, UNDERFLOW_EXCEPTION);
7974       TEST_fff_f (fma, 0x1p-1074, -0x1p-1074, -0x1p-1074, -0x1p-1074, UNDERFLOW_EXCEPTION);
7975       TEST_fff_f (fma, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7976       TEST_fff_f (fma, 0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7977       TEST_fff_f (fma, -0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0, 0x0.fffffffffffffp0, -0x1p-106);
7978       TEST_fff_f (fma, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0, -0x0.fffffffffffffp0, 0x1p-106);
7979       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p1023, 0x1.0000000000001p1023);
7980       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p1023, 0x1p1023);
7981       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p1023, -0x0.fffffffffffff8p1023);
7982       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p1023, -0x1p1023);
7983       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, 0x1p970, 0x1.0000000000001p970);
7984       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, 0x1p970, 0x1p970);
7985       TEST_fff_f (fma, 0x1.0000000000001p-1022, 0x1.0000000000001p-55, -0x1p970, -0x0.fffffffffffff8p970);
7986       TEST_fff_f (fma, 0x1.0000000000001p-1022, -0x1.0000000000001p-55, -0x1p970, -0x1p970);
7987 #endif
7988 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
7989       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000004p-1L, 0x1p-16384L, 0x1.c000000000000008p-16383L, UNDERFLOW_EXCEPTION);
7990       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000004p-1L, -0x1p-16384L, -0x1.c000000000000004p-16383L, UNDERFLOW_EXCEPTION);
7991       TEST_fff_f (fma, 0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, 0x1p-16445L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7992       TEST_fff_f (fma, -0x1.fffffffffffffff8p-16382L, 0x1.0000000000000002p-1L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7993       TEST_fff_f (fma, 0x1p-16445L, 0x1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
7994       TEST_fff_f (fma, -0x1p-16445L, 0x1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7995       TEST_fff_f (fma, 0x1p-16445L, 0x1.1p-1L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
7996       TEST_fff_f (fma, -0x1p-16445L, 0x1.1p-1L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
7997       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p16383L, 0x1.0000000000000002p16383L);
7998       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p16383L, 0x1p16383L);
7999       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8000       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p16383L, -0x1p16383L);
8001       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16382L, 0x1.0000000000000002p-16382L);
8002       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8003       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8004       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16382L, -0x1p-16382L);
8005       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8006       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x0.fffffffffffffffep-16382L, 0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8007       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffcp-16382L, UNDERFLOW_EXCEPTION);
8008       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x0.fffffffffffffffep-16382L, -0x0.fffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8009       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, 0x1p-16445L, 0x1p-16444L, UNDERFLOW_EXCEPTION);
8010       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, 0x1p-16445L, 0x1p-16445L, UNDERFLOW_EXCEPTION);
8011       TEST_fff_f (fma, 0x1p-16445L, 0x1p-16445L, -0x1p-16445L, minus_zero, UNDERFLOW_EXCEPTION);
8012       TEST_fff_f (fma, 0x1p-16445L, -0x1p-16445L, -0x1p-16445L, -0x1p-16445L, UNDERFLOW_EXCEPTION);
8013       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8014       TEST_fff_f (fma, 0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8015       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffffffep0L, -0x1p-128L);
8016       TEST_fff_f (fma, -0x0.ffffffffffffffffp0L, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffffffep0L, 0x1p-128L);
8017       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16383L, 0x1.0000000000000002p16383L);
8018       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16383L, 0x1p16383L);
8019       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16383L, -0x0.ffffffffffffffffp16383L);
8020       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16383L, -0x1p16383L);
8021       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, 0x1p16319L, 0x1.0000000000000002p16319L);
8022       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, 0x1p16319L, 0x1p16319L);
8023       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, 0x1.0000000000000002p-66L, -0x1p16319L, -0x0.ffffffffffffffffp16319L);
8024       TEST_fff_f (fma, 0x1.0000000000000002p-16382L, -0x1.0000000000000002p-66L, -0x1p16319L, -0x1p16319L);
8025 #endif
8026 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
8027       TEST_fff_f (fma, 0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, 0x1p-16384L, 0x1.c000000000000000000000000004p-16383L, UNDERFLOW_EXCEPTION);
8028       TEST_fff_f (fma, -0x1.4p-16382L, 0x1.0000000000000000000000000002p-1L, -0x1p-16384L, -0x1.c000000000000000000000000002p-16383L, UNDERFLOW_EXCEPTION);
8029       TEST_fff_f (fma, 0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, 0x1p-16494L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8030       TEST_fff_f (fma, -0x1.fffffffffffffffffffffffffffcp-16382L, 0x1.0000000000000000000000000001p-1L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8031       TEST_fff_f (fma, 0x1p-16494L, 0x1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8032       TEST_fff_f (fma, -0x1p-16494L, 0x1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8033       TEST_fff_f (fma, 0x1p-16494L, 0x1.1p-1L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8034       TEST_fff_f (fma, -0x1p-16494L, 0x1.1p-1L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8035       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8036       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p16383L, 0x1p16383L);
8037       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8038       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p16383L, -0x1p16383L);
8039       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16382L, 0x1.0000000000000000000000000001p-16382L);
8040       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION_BEFORE_ROUNDING);
8041       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8042       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16382L, -0x1p-16382L);
8043       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x1p-16382L, UNDERFLOW_EXCEPTION);
8044       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x0.ffffffffffffffffffffffffffffp-16382L, 0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8045       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.fffffffffffffffffffffffffffep-16382L, UNDERFLOW_EXCEPTION);
8046       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x0.ffffffffffffffffffffffffffffp-16382L, -0x0.ffffffffffffffffffffffffffffp-16382L, UNDERFLOW_EXCEPTION);
8047       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, 0x1p-16494L, 0x1p-16493L, UNDERFLOW_EXCEPTION);
8048       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, 0x1p-16494L, 0x1p-16494L, UNDERFLOW_EXCEPTION);
8049       TEST_fff_f (fma, 0x1p-16494L, 0x1p-16494L, -0x1p-16494L, minus_zero, UNDERFLOW_EXCEPTION);
8050       TEST_fff_f (fma, 0x1p-16494L, -0x1p-16494L, -0x1p-16494L, -0x1p-16494L, UNDERFLOW_EXCEPTION);
8051       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8052       TEST_fff_f (fma, 0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8053       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffffffffffffffffffffffffp0L, -0x1p-226L);
8054       TEST_fff_f (fma, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffffffffffffffffffffffffp0L, 0x1p-226L);
8055       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1.0000000000000000000000000001p16383L);
8056       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16383L, 0x1p16383L);
8057       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x0.ffffffffffffffffffffffffffff8p16383L);
8058       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16383L, -0x1p16383L);
8059       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1.0000000000000000000000000001p16319L);
8060       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, 0x1p16319L, 0x1p16319L);
8061       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, 0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x0.ffffffffffffffffffffffffffff8p16319L);
8062       TEST_fff_f (fma, 0x1.0000000000000000000000000001p-16382L, -0x1.0000000000000000000000000001p-66L, -0x1p16319L, -0x1p16319L);
8063 #endif
8064     }
8065
8066   fesetround (save_round_mode);
8067
8068   END (fma_upward);
8069 }
8070
8071
8072 static void
8073 fmax_test (void)
8074 {
8075   START (fmax);
8076
8077   TEST_ff_f (fmax, 0, 0, 0);
8078   TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
8079   TEST_ff_f (fmax, 9, 0, 9);
8080   TEST_ff_f (fmax, 0, 9, 9);
8081   TEST_ff_f (fmax, -9, 0, 0);
8082   TEST_ff_f (fmax, 0, -9, 0);
8083
8084   TEST_ff_f (fmax, plus_infty, 9, plus_infty);
8085   TEST_ff_f (fmax, 0, plus_infty, plus_infty);
8086   TEST_ff_f (fmax, -9, plus_infty, plus_infty);
8087   TEST_ff_f (fmax, plus_infty, -9, plus_infty);
8088
8089   TEST_ff_f (fmax, minus_infty, 9, 9);
8090   TEST_ff_f (fmax, minus_infty, -9, -9);
8091   TEST_ff_f (fmax, 9, minus_infty, 9);
8092   TEST_ff_f (fmax, -9, minus_infty, -9);
8093
8094   TEST_ff_f (fmax, 0, qnan_value, 0);
8095   TEST_ff_f (fmax, 9, qnan_value, 9);
8096   TEST_ff_f (fmax, -9, qnan_value, -9);
8097   TEST_ff_f (fmax, qnan_value, 0, 0);
8098   TEST_ff_f (fmax, qnan_value, 9, 9);
8099   TEST_ff_f (fmax, qnan_value, -9, -9);
8100   TEST_ff_f (fmax, plus_infty, qnan_value, plus_infty);
8101   TEST_ff_f (fmax, minus_infty, qnan_value, minus_infty);
8102   TEST_ff_f (fmax, qnan_value, plus_infty, plus_infty);
8103   TEST_ff_f (fmax, qnan_value, minus_infty, minus_infty);
8104   TEST_ff_f (fmax, qnan_value, qnan_value, qnan_value);
8105
8106   END (fmax);
8107 }
8108
8109
8110 static void
8111 fmin_test (void)
8112 {
8113   START (fmin);
8114
8115   TEST_ff_f (fmin, 0, 0, 0);
8116   TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
8117   TEST_ff_f (fmin, 9, 0, 0);
8118   TEST_ff_f (fmin, 0, 9, 0);
8119   TEST_ff_f (fmin, -9, 0, -9);
8120   TEST_ff_f (fmin, 0, -9, -9);
8121
8122   TEST_ff_f (fmin, plus_infty, 9, 9);
8123   TEST_ff_f (fmin, 9, plus_infty, 9);
8124   TEST_ff_f (fmin, plus_infty, -9, -9);
8125   TEST_ff_f (fmin, -9, plus_infty, -9);
8126   TEST_ff_f (fmin, minus_infty, 9, minus_infty);
8127   TEST_ff_f (fmin, minus_infty, -9, minus_infty);
8128   TEST_ff_f (fmin, 9, minus_infty, minus_infty);
8129   TEST_ff_f (fmin, -9, minus_infty, minus_infty);
8130
8131   TEST_ff_f (fmin, 0, qnan_value, 0);
8132   TEST_ff_f (fmin, 9, qnan_value, 9);
8133   TEST_ff_f (fmin, -9, qnan_value, -9);
8134   TEST_ff_f (fmin, qnan_value, 0, 0);
8135   TEST_ff_f (fmin, qnan_value, 9, 9);
8136   TEST_ff_f (fmin, qnan_value, -9, -9);
8137   TEST_ff_f (fmin, plus_infty, qnan_value, plus_infty);
8138   TEST_ff_f (fmin, minus_infty, qnan_value, minus_infty);
8139   TEST_ff_f (fmin, qnan_value, plus_infty, plus_infty);
8140   TEST_ff_f (fmin, qnan_value, minus_infty, minus_infty);
8141   TEST_ff_f (fmin, qnan_value, qnan_value, qnan_value);
8142
8143   END (fmin);
8144 }
8145
8146
8147 static void
8148 fmod_test (void)
8149 {
8150   errno = 0;
8151   FUNC(fmod) (6.5, 2.3L);
8152   if (errno == ENOSYS)
8153     /* Function not implemented.  */
8154     return;
8155
8156   START (fmod);
8157
8158   /* fmod (+0, y) == +0 for y != 0.  */
8159   TEST_ff_f (fmod, 0, 3, 0);
8160
8161   /* fmod (-0, y) == -0 for y != 0.  */
8162   TEST_ff_f (fmod, minus_zero, 3, minus_zero);
8163
8164   /* fmod (+inf, y) == qNaN plus invalid exception.  */
8165   errno = 0;
8166   TEST_ff_f (fmod, plus_infty, 3, qnan_value, INVALID_EXCEPTION);
8167   check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8168   /* fmod (-inf, y) == qNaN plus invalid exception.  */
8169   errno = 0;
8170   TEST_ff_f (fmod, minus_infty, 3, qnan_value, INVALID_EXCEPTION);
8171   check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
8172   /* fmod (x, +0) == qNaN plus invalid exception.  */
8173   errno = 0;
8174   TEST_ff_f (fmod, 3, 0, qnan_value, INVALID_EXCEPTION);
8175   check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
8176   /* fmod (x, -0) == qNaN plus invalid exception.  */
8177   TEST_ff_f (fmod, 3, minus_zero, qnan_value, INVALID_EXCEPTION);
8178
8179   /* fmod (x, +inf) == x for x not infinite.  */
8180   TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
8181   /* fmod (x, -inf) == x for x not infinite.  */
8182   TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
8183
8184   TEST_ff_f (fmod, qnan_value, qnan_value, qnan_value);
8185
8186   TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
8187   TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
8188   TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
8189   TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
8190
8191   TEST_ff_f (fmod, 0x0.fffffep-126L, 0x1p-149L, plus_zero);
8192 #ifndef TEST_FLOAT
8193   TEST_ff_f (fmod, 0x0.fffffffffffffp-1022L, 0x1p-1074L, plus_zero);
8194 #endif
8195 #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
8196   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
8197 #endif
8198
8199   END (fmod);
8200 }
8201
8202
8203 static void
8204 fpclassify_test (void)
8205 {
8206   START (fpclassify);
8207
8208   TEST_f_i (fpclassify, qnan_value, FP_NAN);
8209   TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
8210   TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
8211   TEST_f_i (fpclassify, plus_zero, FP_ZERO);
8212   TEST_f_i (fpclassify, minus_zero, FP_ZERO);
8213   TEST_f_i (fpclassify, 1000, FP_NORMAL);
8214   TEST_f_i (fpclassify, min_subnorm_value, FP_SUBNORMAL);
8215
8216   END (fpclassify);
8217 }
8218
8219
8220 static void
8221 frexp_test (void)
8222 {
8223   int x;
8224
8225   START (frexp);
8226
8227   TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
8228   TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
8229   TEST_fI_f1 (frexp, qnan_value, qnan_value, IGNORE);
8230
8231   TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
8232   TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
8233
8234   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
8235   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
8236
8237   END (frexp);
8238 }
8239
8240
8241 static void
8242 gamma_test (void)
8243 {
8244   errno = 0;
8245   FUNC(gamma) (1);
8246
8247   if (errno == ENOSYS)
8248     /* Function not implemented.  */
8249     return;
8250
8251   START (gamma);
8252
8253   TEST_f_f (gamma, plus_infty, plus_infty);
8254   TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8255   TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8256   TEST_f_f (gamma, minus_infty, plus_infty);
8257   TEST_f_f (gamma, qnan_value, qnan_value);
8258
8259   TEST_f_f1 (gamma, 1, 0, 1);
8260   TEST_f_f1 (gamma, 3, M_LN2l, 1);
8261
8262   TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
8263   TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8264
8265   END (gamma);
8266 }
8267
8268 static void
8269 hypot_test (void)
8270 {
8271   errno = 0;
8272   FUNC(hypot) (0.7L, 12.4L);
8273   if (errno == ENOSYS)
8274     /* Function not implemented.  */
8275     return;
8276
8277   START (hypot);
8278
8279   TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
8280   TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
8281
8282 #ifndef TEST_INLINE
8283   TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty);
8284   TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty);
8285   TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty);
8286   TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty);
8287 #endif
8288
8289   TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value);
8290
8291   /* hypot (x,y) == hypot (+-x, +-y)  */
8292   TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
8293   TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
8294   TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
8295   TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
8296   TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
8297   TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
8298   TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
8299   TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
8300
8301   /*  hypot (x,0) == fabs (x)  */
8302   TEST_ff_f (hypot, 0.75L, 0, 0.75L);
8303   TEST_ff_f (hypot, -0.75L, 0, 0.75L);
8304   TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
8305
8306   TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
8307
8308   TEST_ff_f (hypot, 1.0L, 0x1p-61L, 1.0L);
8309 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
8310   TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L);
8311 #endif
8312
8313 #if !(defined TEST_FLOAT && defined TEST_INLINE)
8314   TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
8315   TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
8316 #endif
8317
8318 #if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
8319   TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
8320 #endif
8321
8322 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
8323   TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
8324 #endif
8325
8326   END (hypot);
8327 }
8328
8329
8330 static void
8331 ilogb_test (void)
8332 {
8333   START (ilogb);
8334
8335   TEST_f_i (ilogb, 1, 0);
8336   TEST_f_i (ilogb, M_El, 1);
8337   TEST_f_i (ilogb, 1024, 10);
8338   TEST_f_i (ilogb, -2000, 10);
8339
8340   /* ilogb (0.0) == FP_ILOGB0 plus invalid exception  */
8341   errno = 0;
8342   TEST_f_i (ilogb, 0.0, FP_ILOGB0, INVALID_EXCEPTION);
8343   check_int ("errno for ilogb(0.0) unchanged", errno, EDOM, 0, 0, 0);
8344   /* ilogb (qNaN) == FP_ILOGBNAN plus invalid exception  */
8345   errno = 0;
8346   TEST_f_i (ilogb, qnan_value, FP_ILOGBNAN, INVALID_EXCEPTION);
8347   check_int ("errno for ilogb(qNaN) unchanged", errno, EDOM, 0, 0, 0);
8348   /* ilogb (inf) == INT_MAX plus invalid exception  */
8349   errno = 0;
8350   TEST_f_i (ilogb, plus_infty, INT_MAX, INVALID_EXCEPTION);
8351   check_int ("errno for ilogb(Inf) unchanged", errno, EDOM, 0, 0, 0);
8352   /* ilogb (-inf) == INT_MAX plus invalid exception  */
8353   errno = 0;
8354   TEST_f_i (ilogb, minus_infty, INT_MAX, INVALID_EXCEPTION);
8355   check_int ("errno for ilogb(-Inf) unchanged", errno, EDOM, 0, 0, 0);
8356
8357   END (ilogb);
8358 }
8359
8360 static void
8361 isfinite_test (void)
8362 {
8363   START (isfinite);
8364
8365   TEST_f_b (isfinite, 0, 1);
8366   TEST_f_b (isfinite, minus_zero, 1);
8367   TEST_f_b (isfinite, 10, 1);
8368   TEST_f_b (isfinite, min_subnorm_value, 1);
8369   TEST_f_b (isfinite, plus_infty, 0);
8370   TEST_f_b (isfinite, minus_infty, 0);
8371   TEST_f_b (isfinite, qnan_value, 0);
8372
8373   END (isfinite);
8374 }
8375
8376 static void
8377 isgreater_test (void)
8378 {
8379   START (isgreater);
8380
8381   TEST_ff_i (isgreater, minus_zero, minus_zero, 0);
8382   TEST_ff_i (isgreater, minus_zero, plus_zero, 0);
8383   TEST_ff_i (isgreater, minus_zero, (FLOAT) 1, 0);
8384   TEST_ff_i (isgreater, minus_zero, qnan_value, 0);
8385   TEST_ff_i (isgreater, plus_zero, minus_zero, 0);
8386   TEST_ff_i (isgreater, plus_zero, plus_zero, 0);
8387   TEST_ff_i (isgreater, plus_zero, (FLOAT) 1, 0);
8388   TEST_ff_i (isgreater, plus_zero, qnan_value, 0);
8389   TEST_ff_i (isgreater, (FLOAT) 1, minus_zero, 1);
8390   TEST_ff_i (isgreater, (FLOAT) 1, plus_zero, 1);
8391   TEST_ff_i (isgreater, (FLOAT) 1, (FLOAT) 1, 0);
8392   TEST_ff_i (isgreater, (FLOAT) 1, qnan_value, 0);
8393   TEST_ff_i (isgreater, qnan_value, minus_zero, 0);
8394   TEST_ff_i (isgreater, qnan_value, plus_zero, 0);
8395   TEST_ff_i (isgreater, qnan_value, (FLOAT) 1, 0);
8396   TEST_ff_i (isgreater, qnan_value, qnan_value, 0);
8397
8398   END (isgreater);
8399 }
8400
8401 static void
8402 isgreaterequal_test (void)
8403 {
8404   START (isgreaterequal);
8405
8406   TEST_ff_i (isgreaterequal, minus_zero, minus_zero, 1);
8407   TEST_ff_i (isgreaterequal, minus_zero, plus_zero, 1);
8408   TEST_ff_i (isgreaterequal, minus_zero, (FLOAT) 1, 0);
8409   TEST_ff_i (isgreaterequal, minus_zero, qnan_value, 0);
8410   TEST_ff_i (isgreaterequal, plus_zero, minus_zero, 1);
8411   TEST_ff_i (isgreaterequal, plus_zero, plus_zero, 1);
8412   TEST_ff_i (isgreaterequal, plus_zero, (FLOAT) 1, 0);
8413   TEST_ff_i (isgreaterequal, plus_zero, qnan_value, 0);
8414   TEST_ff_i (isgreaterequal, (FLOAT) 1, minus_zero, 1);
8415   TEST_ff_i (isgreaterequal, (FLOAT) 1, plus_zero, 1);
8416   TEST_ff_i (isgreaterequal, (FLOAT) 1, (FLOAT) 1, 1);
8417   TEST_ff_i (isgreaterequal, (FLOAT) 1, qnan_value, 0);
8418   TEST_ff_i (isgreaterequal, qnan_value, minus_zero, 0);
8419   TEST_ff_i (isgreaterequal, qnan_value, plus_zero, 0);
8420   TEST_ff_i (isgreaterequal, qnan_value, (FLOAT) 1, 0);
8421   TEST_ff_i (isgreaterequal, qnan_value, qnan_value, 0);
8422
8423   END (isgreaterequal);
8424 }
8425
8426 static void
8427 isinf_test (void)
8428 {
8429   START (isinf);
8430
8431   TEST_f_b (isinf, 0, 0);
8432   TEST_f_b (isinf, minus_zero, 0);
8433   TEST_f_b (isinf, 10, 0);
8434   TEST_f_b (isinf, min_subnorm_value, 0);
8435   TEST_f_b (isinf, plus_infty, 1);
8436   TEST_f_b (isinf, minus_infty, 1);
8437   TEST_f_b (isinf, qnan_value, 0);
8438
8439   END (isinf);
8440 }
8441
8442 static void
8443 isless_test (void)
8444 {
8445   START (isless);
8446
8447   TEST_ff_i (isless, minus_zero, minus_zero, 0);
8448   TEST_ff_i (isless, minus_zero, plus_zero, 0);
8449   TEST_ff_i (isless, minus_zero, (FLOAT) 1, 1);
8450   TEST_ff_i (isless, minus_zero, qnan_value, 0);
8451   TEST_ff_i (isless, plus_zero, minus_zero, 0);
8452   TEST_ff_i (isless, plus_zero, plus_zero, 0);
8453   TEST_ff_i (isless, plus_zero, (FLOAT) 1, 1);
8454   TEST_ff_i (isless, plus_zero, qnan_value, 0);
8455   TEST_ff_i (isless, (FLOAT) 1, minus_zero, 0);
8456   TEST_ff_i (isless, (FLOAT) 1, plus_zero, 0);
8457   TEST_ff_i (isless, (FLOAT) 1, (FLOAT) 1, 0);
8458   TEST_ff_i (isless, (FLOAT) 1, qnan_value, 0);
8459   TEST_ff_i (isless, qnan_value, minus_zero, 0);
8460   TEST_ff_i (isless, qnan_value, plus_zero, 0);
8461   TEST_ff_i (isless, qnan_value, (FLOAT) 1, 0);
8462   TEST_ff_i (isless, qnan_value, qnan_value, 0);
8463
8464   END (isless);
8465 }
8466
8467 static void
8468 islessequal_test (void)
8469 {
8470   START (islessequal);
8471
8472   TEST_ff_i (islessequal, minus_zero, minus_zero, 1);
8473   TEST_ff_i (islessequal, minus_zero, plus_zero, 1);
8474   TEST_ff_i (islessequal, minus_zero, (FLOAT) 1, 1);
8475   TEST_ff_i (islessequal, minus_zero, qnan_value, 0);
8476   TEST_ff_i (islessequal, plus_zero, minus_zero, 1);
8477   TEST_ff_i (islessequal, plus_zero, plus_zero, 1);
8478   TEST_ff_i (islessequal, plus_zero, (FLOAT) 1, 1);
8479   TEST_ff_i (islessequal, plus_zero, qnan_value, 0);
8480   TEST_ff_i (islessequal, (FLOAT) 1, minus_zero, 0);
8481   TEST_ff_i (islessequal, (FLOAT) 1, plus_zero, 0);
8482   TEST_ff_i (islessequal, (FLOAT) 1, (FLOAT) 1, 1);
8483   TEST_ff_i (islessequal, (FLOAT) 1, qnan_value, 0);
8484   TEST_ff_i (islessequal, qnan_value, minus_zero, 0);
8485   TEST_ff_i (islessequal, qnan_value, plus_zero, 0);
8486   TEST_ff_i (islessequal, qnan_value, (FLOAT) 1, 0);
8487   TEST_ff_i (islessequal, qnan_value, qnan_value, 0);
8488
8489   END (islessequal);
8490 }
8491
8492 static void
8493 islessgreater_test (void)
8494 {
8495   START (islessgreater);
8496
8497   TEST_ff_i (islessgreater, minus_zero, minus_zero, 0);
8498   TEST_ff_i (islessgreater, minus_zero, plus_zero, 0);
8499   TEST_ff_i (islessgreater, minus_zero, (FLOAT) 1, 1);
8500   TEST_ff_i (islessgreater, minus_zero, qnan_value, 0);
8501   TEST_ff_i (islessgreater, plus_zero, minus_zero, 0);
8502   TEST_ff_i (islessgreater, plus_zero, plus_zero, 0);
8503   TEST_ff_i (islessgreater, plus_zero, (FLOAT) 1, 1);
8504   TEST_ff_i (islessgreater, plus_zero, qnan_value, 0);
8505   TEST_ff_i (islessgreater, (FLOAT) 1, minus_zero, 1);
8506   TEST_ff_i (islessgreater, (FLOAT) 1, plus_zero, 1);
8507   TEST_ff_i (islessgreater, (FLOAT) 1, (FLOAT) 1, 0);
8508   TEST_ff_i (islessgreater, (FLOAT) 1, qnan_value, 0);
8509   TEST_ff_i (islessgreater, qnan_value, minus_zero, 0);
8510   TEST_ff_i (islessgreater, qnan_value, plus_zero, 0);
8511   TEST_ff_i (islessgreater, qnan_value, (FLOAT) 1, 0);
8512   TEST_ff_i (islessgreater, qnan_value, qnan_value, 0);
8513
8514   END (islessgreater);
8515 }
8516
8517 static void
8518 isnan_test (void)
8519 {
8520   START (isnan);
8521
8522   TEST_f_b (isnan, 0, 0);
8523   TEST_f_b (isnan, minus_zero, 0);
8524   TEST_f_b (isnan, 10, 0);
8525   TEST_f_b (isnan, min_subnorm_value, 0);
8526   TEST_f_b (isnan, plus_infty, 0);
8527   TEST_f_b (isnan, minus_infty, 0);
8528   TEST_f_b (isnan, qnan_value, 1);
8529
8530   END (isnan);
8531 }
8532
8533 static void
8534 isnormal_test (void)
8535 {
8536   START (isnormal);
8537
8538   TEST_f_b (isnormal, 0, 0);
8539   TEST_f_b (isnormal, minus_zero, 0);
8540   TEST_f_b (isnormal, 10, 1);
8541   TEST_f_b (isnormal, min_subnorm_value, 0);
8542   TEST_f_b (isnormal, plus_infty, 0);
8543   TEST_f_b (isnormal, minus_infty, 0);
8544   TEST_f_b (isnormal, qnan_value, 0);
8545
8546   END (isnormal);
8547 }
8548
8549 static void
8550 issignaling_test (void)
8551 {
8552   START (issignaling);
8553
8554   TEST_f_b (issignaling, 0, 0);
8555   TEST_f_b (issignaling, minus_zero, 0);
8556   TEST_f_b (issignaling, 10, 0);
8557   TEST_f_b (issignaling, min_subnorm_value, 0);
8558   TEST_f_b (issignaling, plus_infty, 0);
8559   TEST_f_b (issignaling, minus_infty, 0);
8560   TEST_f_b (issignaling, qnan_value, 0);
8561
8562   END (issignaling);
8563 }
8564
8565 static void
8566 isunordered_test (void)
8567 {
8568   START (isunordered);
8569
8570   TEST_ff_i (isunordered, minus_zero, minus_zero, 0);
8571   TEST_ff_i (isunordered, minus_zero, plus_zero, 0);
8572   TEST_ff_i (isunordered, minus_zero, (FLOAT) 1, 0);
8573   TEST_ff_i (isunordered, minus_zero, qnan_value, 1);
8574   TEST_ff_i (isunordered, plus_zero, minus_zero, 0);
8575   TEST_ff_i (isunordered, plus_zero, plus_zero, 0);
8576   TEST_ff_i (isunordered, plus_zero, (FLOAT) 1, 0);
8577   TEST_ff_i (isunordered, plus_zero, qnan_value, 1);
8578   TEST_ff_i (isunordered, (FLOAT) 1, minus_zero, 0);
8579   TEST_ff_i (isunordered, (FLOAT) 1, plus_zero, 0);
8580   TEST_ff_i (isunordered, (FLOAT) 1, (FLOAT) 1, 0);
8581   TEST_ff_i (isunordered, (FLOAT) 1, qnan_value, 1);
8582   TEST_ff_i (isunordered, qnan_value, minus_zero, 1);
8583   TEST_ff_i (isunordered, qnan_value, plus_zero, 1);
8584   TEST_ff_i (isunordered, qnan_value, (FLOAT) 1, 1);
8585   TEST_ff_i (isunordered, qnan_value, qnan_value, 1);
8586
8587   END (isunordered);
8588 }
8589
8590 static void
8591 j0_test (void)
8592 {
8593   FLOAT s, c;
8594   errno = 0;
8595   FUNC (sincos) (0, &s, &c);
8596   if (errno == ENOSYS)
8597     /* Required function not implemented.  */
8598     return;
8599   FUNC(j0) (0);
8600   if (errno == ENOSYS)
8601     /* Function not implemented.  */
8602     return;
8603
8604   START (j0);
8605
8606   /* j0 is the Bessel function of the first kind of order 0 */
8607   TEST_f_f (j0, qnan_value, qnan_value);
8608   TEST_f_f (j0, plus_infty, 0);
8609   TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
8610   TEST_f_f (j0, 0.0, 1.0);
8611   TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
8612   TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
8613   TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
8614   TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
8615   TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
8616   TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
8617   TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
8618   TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
8619   TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8620
8621   TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
8622
8623 #ifndef TEST_FLOAT
8624   TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
8625   TEST_f_f (j0, 0x1p1023L, -1.5665258060609012834424478437196679802783e-155L);
8626 #endif
8627
8628 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8629   TEST_f_f (j0, 0x1p16382L, -1.2193782500509000574176799046642541129387e-2466L);
8630   TEST_f_f (j0, 0x1p16383L, 9.5859502826270374691362975419147645151233e-2467L);
8631 #endif
8632
8633   END (j0);
8634 }
8635
8636
8637 static void
8638 j1_test (void)
8639 {
8640   FLOAT s, c;
8641   errno = 0;
8642   FUNC (sincos) (0, &s, &c);
8643   if (errno == ENOSYS)
8644     /* Required function not implemented.  */
8645     return;
8646   FUNC(j1) (0);
8647   if (errno == ENOSYS)
8648     /* Function not implemented.  */
8649     return;
8650
8651   /* j1 is the Bessel function of the first kind of order 1 */
8652
8653   START (j1);
8654
8655   TEST_f_f (j1, qnan_value, qnan_value);
8656   TEST_f_f (j1, plus_infty, 0);
8657
8658   TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
8659   TEST_f_f (j1, 0.0, 0.0);
8660   TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
8661   TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
8662   TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
8663   TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
8664   TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
8665   TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
8666   TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
8667
8668   TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
8669
8670 #ifndef TEST_FLOAT
8671   TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
8672   TEST_f_f (j1, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
8673 #endif
8674
8675 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
8676   TEST_f_f (j1, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
8677   TEST_f_f (j1, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
8678 #endif
8679
8680   END (j1);
8681 }
8682
8683 static void
8684 jn_test (void)
8685 {
8686   FLOAT s, c;
8687   errno = 0;
8688   FUNC (sincos) (0, &s, &c);
8689   if (errno == ENOSYS)
8690     /* Required function not implemented.  */
8691     return;
8692   FUNC(jn) (1, 1);
8693   if (errno == ENOSYS)
8694     /* Function not implemented.  */
8695     return;
8696
8697   /* jn is the Bessel function of the first kind of order n.  */
8698   START (jn);
8699
8700   /* jn (0, x) == j0 (x)  */
8701   TEST_ff_f (jn, 0, qnan_value, qnan_value);
8702   TEST_ff_f (jn, 0, plus_infty, 0);
8703   TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
8704   TEST_ff_f (jn, 0, 0.0, 1.0);
8705   TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
8706   TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
8707   TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
8708   TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
8709   TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
8710   TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
8711   TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
8712   TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
8713   TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
8714
8715   /* jn (1, x) == j1 (x)  */
8716   TEST_ff_f (jn, 1, qnan_value, qnan_value);
8717   TEST_ff_f (jn, 1, plus_infty, 0);
8718   TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
8719   TEST_ff_f (jn, 1, 0.0, 0.0);
8720   TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
8721   TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
8722   TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
8723   TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
8724   TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
8725   TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
8726   TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
8727
8728   /* jn (3, x)  */
8729   TEST_ff_f (jn, 3, qnan_value, qnan_value);
8730   TEST_ff_f (jn, 3, plus_infty, 0);
8731
8732   TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
8733   TEST_ff_f (jn, 3, 0.0, 0.0);
8734   TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
8735   TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
8736   TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
8737   TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
8738   TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
8739
8740   /*  jn (10, x)  */
8741   TEST_ff_f (jn, 10, qnan_value, qnan_value);
8742   TEST_ff_f (jn, 10, plus_infty, 0);
8743
8744   TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
8745   TEST_ff_f (jn, 10, 0.0, 0.0);
8746   TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
8747   TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
8748   TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
8749   TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
8750   TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
8751
8752   /* BZ #11589 .*/
8753   TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
8754   TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
8755   TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
8756   TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
8757   TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
8758   TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
8759   TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
8760   TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
8761
8762   /* Bug 14155: spurious exception may occur.  */
8763   TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L, UNDERFLOW_EXCEPTION_OK);
8764
8765   END (jn);
8766 }
8767
8768
8769 static void
8770 ldexp_test (void)
8771 {
8772   START (ldexp);
8773
8774   TEST_ff_f (ldexp, 0, 0, 0);
8775   TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
8776
8777   TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
8778   TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
8779   TEST_ff_f (ldexp, qnan_value, 1, qnan_value);
8780
8781   TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
8782   TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
8783
8784   /* ldexp (x, 0) == x.  */
8785   TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
8786
8787   END (ldexp);
8788 }
8789
8790
8791 static void
8792 lgamma_test (void)
8793 {
8794   errno = 0;
8795   FUNC(lgamma) (0);
8796   if (errno == ENOSYS)
8797     /* Function not implemented.  */
8798     return;
8799
8800   START (lgamma);
8801
8802   TEST_f_f (lgamma, plus_infty, plus_infty);
8803   TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8804   check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
8805   TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8806   check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
8807   TEST_f_f (lgamma, qnan_value, qnan_value);
8808
8809   /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0.  */
8810   errno = 0;
8811   TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8812   check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
8813   TEST_f_f (lgamma, minus_infty, plus_infty);
8814   TEST_f_f (lgamma, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
8815   TEST_f_f (lgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
8816
8817   TEST_f_f1 (lgamma, 1, 0, 1);
8818
8819   TEST_f_f1 (lgamma, 3, M_LN2l, 1);
8820
8821   TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
8822   TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
8823   TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
8824   TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
8825
8826   END (lgamma);
8827 }
8828
8829
8830 static void
8831 lrint_test (void)
8832 {
8833   /* XXX this test is incomplete.  We need to have a way to specifiy
8834      the rounding method and test the critical cases.  So far, only
8835      unproblematic numbers are tested.  */
8836   /* TODO: missing +/-Inf as well as qNaN tests.  */
8837
8838   START (lrint);
8839
8840   TEST_f_l (lrint, 0.0, 0);
8841   TEST_f_l (lrint, minus_zero, 0);
8842   TEST_f_l (lrint, 0.2L, 0);
8843   TEST_f_l (lrint, -0.2L, 0);
8844
8845   TEST_f_l (lrint, 1.4L, 1);
8846   TEST_f_l (lrint, -1.4L, -1);
8847
8848   TEST_f_l (lrint, 8388600.3L, 8388600);
8849   TEST_f_l (lrint, -8388600.3L, -8388600);
8850
8851   TEST_f_l (lrint, 1071930.0008, 1071930);
8852 #ifndef TEST_FLOAT
8853   TEST_f_l (lrint, 1073741824.01, 1073741824);
8854 # if LONG_MAX > 281474976710656
8855   TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8856 # endif
8857 #endif
8858
8859   END (lrint);
8860 }
8861
8862
8863 static void
8864 lrint_test_tonearest (void)
8865 {
8866   int save_round_mode;
8867   START (lrint_tonearest);
8868
8869   save_round_mode = fegetround ();
8870
8871   if (!fesetround (FE_TONEAREST))
8872     {
8873       TEST_f_l (lrint, 0.0, 0);
8874       TEST_f_l (lrint, minus_zero, 0);
8875       TEST_f_l (lrint, 0.2L, 0);
8876       TEST_f_l (lrint, -0.2L, 0);
8877       TEST_f_l (lrint, 0.5L, 0);
8878       TEST_f_l (lrint, -0.5L, 0);
8879       TEST_f_l (lrint, 0.8L, 1);
8880       TEST_f_l (lrint, -0.8L, -1);
8881
8882       TEST_f_l (lrint, 1.4L, 1);
8883       TEST_f_l (lrint, -1.4L, -1);
8884
8885       TEST_f_l (lrint, 8388600.3L, 8388600);
8886       TEST_f_l (lrint, -8388600.3L, -8388600);
8887
8888       TEST_f_l (lrint, 1071930.0008, 1071930);
8889 #ifndef TEST_FLOAT
8890       TEST_f_l (lrint, 1073741824.01, 1073741824);
8891 # if LONG_MAX > 281474976710656
8892       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8893 # endif
8894 #endif
8895     }
8896
8897   fesetround (save_round_mode);
8898
8899   END (lrint_tonearest);
8900 }
8901
8902
8903 static void
8904 lrint_test_towardzero (void)
8905 {
8906   int save_round_mode;
8907   START (lrint_towardzero);
8908
8909   save_round_mode = fegetround ();
8910
8911   if (!fesetround (FE_TOWARDZERO))
8912     {
8913       TEST_f_l (lrint, 0.0, 0);
8914       TEST_f_l (lrint, minus_zero, 0);
8915       TEST_f_l (lrint, 0.2L, 0);
8916       TEST_f_l (lrint, -0.2L, 0);
8917       TEST_f_l (lrint, 0.5L, 0);
8918       TEST_f_l (lrint, -0.5L, 0);
8919       TEST_f_l (lrint, 0.8L, 0);
8920       TEST_f_l (lrint, -0.8L, 0);
8921
8922       TEST_f_l (lrint, 1.4L, 1);
8923       TEST_f_l (lrint, -1.4L, -1);
8924
8925       TEST_f_l (lrint, 8388600.3L, 8388600);
8926       TEST_f_l (lrint, -8388600.3L, -8388600);
8927
8928       TEST_f_l (lrint, 1071930.0008, 1071930);
8929 #ifndef TEST_FLOAT
8930       TEST_f_l (lrint, 1073741824.01, 1073741824);
8931 # if LONG_MAX > 281474976710656
8932       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8933 # endif
8934 #endif
8935     }
8936
8937   fesetround (save_round_mode);
8938
8939   END (lrint_towardzero);
8940 }
8941
8942
8943 static void
8944 lrint_test_downward (void)
8945 {
8946   int save_round_mode;
8947   START (lrint_downward);
8948
8949   save_round_mode = fegetround ();
8950
8951   if (!fesetround (FE_DOWNWARD))
8952     {
8953       TEST_f_l (lrint, 0.0, 0);
8954       TEST_f_l (lrint, minus_zero, 0);
8955       TEST_f_l (lrint, 0.2L, 0);
8956       TEST_f_l (lrint, -0.2L, -1);
8957       TEST_f_l (lrint, 0.5L, 0);
8958       TEST_f_l (lrint, -0.5L, -1);
8959       TEST_f_l (lrint, 0.8L, 0);
8960       TEST_f_l (lrint, -0.8L, -1);
8961
8962       TEST_f_l (lrint, 1.4L, 1);
8963       TEST_f_l (lrint, -1.4L, -2);
8964
8965       TEST_f_l (lrint, 8388600.3L, 8388600);
8966       TEST_f_l (lrint, -8388600.3L, -8388601);
8967
8968       TEST_f_l (lrint, 1071930.0008, 1071930);
8969 #ifndef TEST_FLOAT
8970       TEST_f_l (lrint, 1073741824.01, 1073741824);
8971 # if LONG_MAX > 281474976710656
8972       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
8973 # endif
8974 #endif
8975     }
8976
8977   fesetround (save_round_mode);
8978
8979   END (lrint_downward);
8980 }
8981
8982
8983 static void
8984 lrint_test_upward (void)
8985 {
8986   int save_round_mode;
8987   START (lrint_upward);
8988
8989   save_round_mode = fegetround ();
8990
8991   if (!fesetround (FE_UPWARD))
8992     {
8993       TEST_f_l (lrint, 0.0, 0);
8994       TEST_f_l (lrint, minus_zero, 0);
8995       TEST_f_l (lrint, 0.2L, 1);
8996       TEST_f_l (lrint, -0.2L, 0);
8997       TEST_f_l (lrint, 0.5L, 1);
8998       TEST_f_l (lrint, -0.5L, 0);
8999       TEST_f_l (lrint, 0.8L, 1);
9000       TEST_f_l (lrint, -0.8L, 0);
9001
9002       TEST_f_l (lrint, 1.4L, 2);
9003       TEST_f_l (lrint, -1.4L, -1);
9004
9005       TEST_f_l (lrint, 8388600.3L, 8388601);
9006       TEST_f_l (lrint, -8388600.3L, -8388600);
9007
9008 #ifndef TEST_FLOAT
9009       TEST_f_l (lrint, 1071930.0008, 1071931);
9010       TEST_f_l (lrint, 1073741824.01, 1073741825);
9011 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
9012       TEST_f_l (lrint, 281474976710656.025, 281474976710656);
9013 # endif
9014 #endif
9015     }
9016
9017   fesetround (save_round_mode);
9018
9019   END (lrint_upward);
9020 }
9021
9022
9023 static void
9024 llrint_test (void)
9025 {
9026   /* XXX this test is incomplete.  We need to have a way to specifiy
9027      the rounding method and test the critical cases.  So far, only
9028      unproblematic numbers are tested.  */
9029   /* TODO: missing +/-Inf as well as qNaN tests.  */
9030
9031   START (llrint);
9032
9033   TEST_f_L (llrint, 0.0, 0);
9034   TEST_f_L (llrint, minus_zero, 0);
9035   TEST_f_L (llrint, 0.2L, 0);
9036   TEST_f_L (llrint, -0.2L, 0);
9037
9038   TEST_f_L (llrint, 1.4L, 1);
9039   TEST_f_L (llrint, -1.4L, -1);
9040
9041   TEST_f_L (llrint, 8388600.3L, 8388600);
9042   TEST_f_L (llrint, -8388600.3L, -8388600);
9043
9044   TEST_f_l (llrint, 1071930.0008, 1071930);
9045
9046   /* Test boundary conditions.  */
9047   /* 0x1FFFFF */
9048   TEST_f_L (llrint, 2097151.0,2097151LL);
9049   /* 0x800000 */
9050   TEST_f_L (llrint, 8388608.0, 8388608LL);
9051   /* 0x1000000 */
9052   TEST_f_L (llrint, 16777216.0, 16777216LL);
9053   /* 0x20000000000 */
9054   TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9055   /* 0x40000000000 */
9056   TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9057   /* 0x1000000000000 */
9058   TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9059   /* 0x10000000000000 */
9060   TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9061   /* 0x10000080000000 */
9062   TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9063   /* 0x20000000000000 */
9064   TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9065   /* 0x80000000000000 */
9066   TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9067   /* 0x100000000000000 */
9068   TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9069 #ifdef TEST_LDOUBLE
9070   /* The input can only be represented in long double.  */
9071   TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9072   TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9073   TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9074   TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9075   TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9076
9077   TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9078   TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9079   TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9080   TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9081   TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9082
9083 # if LDBL_MANT_DIG > 100
9084   TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9085   TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9086   TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9087   TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9088   TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9089   TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9090
9091   TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9092   TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9093   TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9094   TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9095   TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9096   TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9097 #endif
9098
9099   TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9100   TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9101   TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9102   TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9103   TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9104
9105   TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9106   TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9107   TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9108   TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9109   TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9110
9111 # if LDBL_MANT_DIG > 100
9112   TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9113   TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9114   TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9115   TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9116   TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9117   TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9118
9119   TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9120   TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9121   TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9122   TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9123   TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9124   TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9125 #endif
9126
9127   TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9128   TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9129   TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9130   TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9131   TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9132
9133   TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9134   TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9135   TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9136   TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9137   TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9138
9139 # if LDBL_MANT_DIG > 100
9140   TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9141   TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9142   TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9143   TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9144   TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9145   TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9146   TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9147   TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9148   TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9149   TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9150   TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9151   TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9152 # endif
9153 #endif
9154
9155   END (llrint);
9156 }
9157
9158 static void
9159 llrint_test_tonearest (void)
9160 {
9161   int save_round_mode;
9162   START (llrint_tonearest);
9163
9164   save_round_mode = fegetround ();
9165
9166   if (!fesetround (FE_TONEAREST))
9167     {
9168       TEST_f_L (llrint, 0.0, 0);
9169       TEST_f_L (llrint, minus_zero, 0);
9170       TEST_f_L (llrint, 0.2L, 0);
9171       TEST_f_L (llrint, -0.2L, 0);
9172
9173       TEST_f_L (llrint, 1.4L, 1);
9174       TEST_f_L (llrint, -1.4L, -1);
9175
9176       TEST_f_L (llrint, 8388600.3L, 8388600);
9177       TEST_f_L (llrint, -8388600.3L, -8388600);
9178
9179       TEST_f_l (llrint, 1071930.0008, 1071930);
9180
9181       /* Test boundary conditions.  */
9182       /* 0x1FFFFF */
9183       TEST_f_L (llrint, 2097151.0,2097151LL);
9184       /* 0x800000 */
9185       TEST_f_L (llrint, 8388608.0, 8388608LL);
9186       /* 0x1000000 */
9187       TEST_f_L (llrint, 16777216.0, 16777216LL);
9188       /* 0x20000000000 */
9189       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9190       /* 0x40000000000 */
9191       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9192       /* 0x1000000000000 */
9193       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9194       /* 0x10000000000000 */
9195       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9196       /* 0x10000080000000 */
9197       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9198       /* 0x20000000000000 */
9199       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9200       /* 0x80000000000000 */
9201       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9202       /* 0x100000000000000 */
9203       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9204 #ifdef TEST_LDOUBLE
9205       /* The input can only be represented in long double.  */
9206       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9207       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9208       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9209       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9210       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9211
9212       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9213       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9214       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9215       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9216       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9217
9218 # if LDBL_MANT_DIG > 100
9219       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9220       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9221       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9222       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9223       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9224       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9225
9226       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9227       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9228       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9229       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9230       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9231       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9232 #endif
9233
9234       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9235       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9236       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9237       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9238       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9239
9240       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9241       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9242       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9243       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9244       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9245
9246 # if LDBL_MANT_DIG > 100
9247       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9248       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9249       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9250       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9251       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9252       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9253
9254       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9255       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9256       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9257       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9258       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9259       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9260 #endif
9261
9262       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9263       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9264       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9265       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9266       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9267
9268       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9269       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9270       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9271       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9272       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9273
9274 # if LDBL_MANT_DIG > 100
9275       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9276       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9277       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9278       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9279       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9280       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9281       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9282       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9283       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9284       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9285       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9286       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9287 # endif
9288 #endif
9289     }
9290
9291   fesetround (save_round_mode);
9292
9293   END (llrint_tonearest);
9294 }
9295
9296 static void
9297 llrint_test_towardzero (void)
9298 {
9299   int save_round_mode;
9300   START (llrint_towardzero);
9301
9302   save_round_mode = fegetround ();
9303
9304   if (!fesetround (FE_TOWARDZERO))
9305     {
9306       TEST_f_L (llrint, 0.0, 0);
9307       TEST_f_L (llrint, minus_zero, 0);
9308       TEST_f_L (llrint, 0.2L, 0);
9309       TEST_f_L (llrint, -0.2L, 0);
9310
9311       TEST_f_L (llrint, 1.4L, 1);
9312       TEST_f_L (llrint, -1.4L, -1);
9313
9314       TEST_f_L (llrint, 8388600.3L, 8388600);
9315       TEST_f_L (llrint, -8388600.3L, -8388600);
9316
9317       TEST_f_l (llrint, 1071930.0008, 1071930);
9318
9319       /* Test boundary conditions.  */
9320       /* 0x1FFFFF */
9321       TEST_f_L (llrint, 2097151.0,2097151LL);
9322       /* 0x800000 */
9323       TEST_f_L (llrint, 8388608.0, 8388608LL);
9324       /* 0x1000000 */
9325       TEST_f_L (llrint, 16777216.0, 16777216LL);
9326       /* 0x20000000000 */
9327       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9328       /* 0x40000000000 */
9329       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9330       /* 0x1000000000000 */
9331       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9332       /* 0x10000000000000 */
9333       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9334       /* 0x10000080000000 */
9335       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9336       /* 0x20000000000000 */
9337       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9338       /* 0x80000000000000 */
9339       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9340       /* 0x100000000000000 */
9341       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9342 #ifdef TEST_LDOUBLE
9343       /* The input can only be represented in long double.  */
9344       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
9345       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9346       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9347       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
9348       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
9349
9350       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
9351       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9352       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9353       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
9354       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
9355
9356 # if LDBL_MANT_DIG > 100
9357       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9358       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9359       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9360       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
9361       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
9362       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
9363
9364       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9365       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9366       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9367       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
9368       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
9369       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
9370 #endif
9371
9372       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
9373       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9374       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9375       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
9376       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
9377
9378       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
9379       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9380       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9381       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
9382       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
9383
9384 # if LDBL_MANT_DIG > 100
9385       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9386       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9387       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9388       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
9389       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
9390       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
9391
9392       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9393       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9394       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9395       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
9396       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
9397       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
9398 #endif
9399
9400       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
9401       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9402       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9403       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
9404       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
9405
9406       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
9407       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9408       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9409       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
9410       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
9411
9412 # if LDBL_MANT_DIG > 100
9413       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
9414       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
9415       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9416       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9417       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9418       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9419       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9420       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9421       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
9422       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
9423       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9424       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9425 # endif
9426 #endif
9427     }
9428
9429   fesetround (save_round_mode);
9430
9431   END (llrint_towardzero);
9432 }
9433
9434 static void
9435 llrint_test_downward (void)
9436 {
9437   int save_round_mode;
9438   START (llrint_downward);
9439
9440   save_round_mode = fegetround ();
9441
9442   if (!fesetround (FE_DOWNWARD))
9443     {
9444       TEST_f_L (llrint, 0.0, 0);
9445       TEST_f_L (llrint, minus_zero, 0);
9446       TEST_f_L (llrint, 0.2L, 0);
9447       TEST_f_L (llrint, -0.2L, -1);
9448
9449       TEST_f_L (llrint, 1.4L, 1);
9450       TEST_f_L (llrint, -1.4L, -2);
9451
9452       TEST_f_L (llrint, 8388600.3L, 8388600);
9453       TEST_f_L (llrint, -8388600.3L, -8388601);
9454
9455       TEST_f_l (llrint, 1071930.0008, 1071930);
9456
9457       /* Test boundary conditions.  */
9458       /* 0x1FFFFF */
9459       TEST_f_L (llrint, 2097151.0,2097151LL);
9460       /* 0x800000 */
9461       TEST_f_L (llrint, 8388608.0, 8388608LL);
9462       /* 0x1000000 */
9463       TEST_f_L (llrint, 16777216.0, 16777216LL);
9464       /* 0x20000000000 */
9465       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9466       /* 0x40000000000 */
9467       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9468       /* 0x1000000000000 */
9469       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9470       /* 0x10000000000000 */
9471       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9472       /* 0x10000080000000 */
9473       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9474       /* 0x20000000000000 */
9475       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9476       /* 0x80000000000000 */
9477       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9478       /* 0x100000000000000 */
9479       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9480 #ifdef TEST_LDOUBLE
9481       /* The input can only be represented in long double.  */
9482       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
9483       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
9484       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
9485       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
9486       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
9487
9488       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
9489       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
9490       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
9491       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
9492       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
9493       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
9494
9495       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
9496       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
9497       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
9498       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
9499       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
9500
9501       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
9502       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
9503       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
9504       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
9505       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
9506       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
9507
9508       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
9509       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
9510       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
9511       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
9512       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
9513
9514       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
9515       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
9516       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
9517       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
9518       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
9519       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
9520
9521       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
9522       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
9523       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
9524       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
9525       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
9526
9527       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
9528       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
9529       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
9530       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
9531       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
9532       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
9533
9534       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
9535       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
9536       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
9537       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
9538       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
9539
9540       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
9541       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
9542       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
9543       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
9544       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
9545
9546 # if LDBL_MANT_DIG > 100
9547       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
9548       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
9549       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9550       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9551       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
9552       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
9553       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
9554       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
9555       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
9556       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
9557       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9558       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9559 # endif
9560 #endif
9561     }
9562
9563   fesetround (save_round_mode);
9564
9565   END (llrint_downward);
9566 }
9567
9568 static void
9569 llrint_test_upward (void)
9570 {
9571   int save_round_mode;
9572   START (llrint_upward);
9573
9574   save_round_mode = fegetround ();
9575
9576   if (!fesetround (FE_UPWARD))
9577     {
9578       TEST_f_L (llrint, 0.0, 0);
9579       TEST_f_L (llrint, minus_zero, 0);
9580       TEST_f_L (llrint, 0.2L, 1);
9581       TEST_f_L (llrint, -0.2L, 0);
9582
9583       TEST_f_L (llrint, 1.4L, 2);
9584       TEST_f_L (llrint, -1.4L, -1);
9585
9586       TEST_f_L (llrint, 8388600.3L, 8388601);
9587       TEST_f_L (llrint, -8388600.3L, -8388600);
9588 #ifndef TEST_FLOAT
9589       TEST_f_l (llrint, 1071930.0008, 1071931);
9590 #endif
9591       /* Test boundary conditions.  */
9592       /* 0x1FFFFF */
9593       TEST_f_L (llrint, 2097151.0,2097151LL);
9594       /* 0x800000 */
9595       TEST_f_L (llrint, 8388608.0, 8388608LL);
9596       /* 0x1000000 */
9597       TEST_f_L (llrint, 16777216.0, 16777216LL);
9598       /* 0x20000000000 */
9599       TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
9600       /* 0x40000000000 */
9601       TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
9602       /* 0x1000000000000 */
9603       TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
9604       /* 0x10000000000000 */
9605       TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
9606       /* 0x10000080000000 */
9607       TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
9608       /* 0x20000000000000 */
9609       TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
9610       /* 0x80000000000000 */
9611       TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
9612       /* 0x100000000000000 */
9613       TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
9614 #ifdef TEST_LDOUBLE
9615       /* The input can only be represented in long double.  */
9616       TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
9617       TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
9618       TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
9619       TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
9620       TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
9621
9622       TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
9623       TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
9624       TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
9625       TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
9626       TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
9627       TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
9628
9629       TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
9630       TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
9631       TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
9632       TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
9633       TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
9634
9635       TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
9636       TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
9637       TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
9638       TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
9639       TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
9640       TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
9641
9642       TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
9643       TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
9644       TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
9645       TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
9646       TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
9647
9648       TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
9649       TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
9650       TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
9651       TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
9652       TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
9653       TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
9654
9655       TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
9656       TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
9657       TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
9658       TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
9659       TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
9660
9661       TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
9662       TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
9663       TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
9664       TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
9665       TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
9666       TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
9667
9668       TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
9669       TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
9670       TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
9671       TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
9672       TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
9673
9674       TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
9675       TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
9676       TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
9677       TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
9678       TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
9679
9680 # if LDBL_MANT_DIG > 100
9681       TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
9682       TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
9683       TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
9684       TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
9685       TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
9686       TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
9687       TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
9688       TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
9689       TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
9690       TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
9691       TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
9692       TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
9693 # endif
9694 #endif
9695     }
9696
9697   fesetround (save_round_mode);
9698
9699   END (llrint_upward);
9700 }
9701
9702
9703 static void
9704 log_test (void)
9705 {
9706   errno = 0;
9707   FUNC(log) (1);
9708   if (errno == ENOSYS)
9709     /* Function not implemented.  */
9710     return;
9711   START (log);
9712
9713   TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9714   TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9715
9716   TEST_f_f (log, 1, 0);
9717
9718   TEST_f_f (log, -1, qnan_value, INVALID_EXCEPTION);
9719   TEST_f_f (log, -max_value, qnan_value, INVALID_EXCEPTION);
9720   TEST_f_f (log, minus_infty, qnan_value, INVALID_EXCEPTION);
9721   TEST_f_f (log, plus_infty, plus_infty);
9722   TEST_f_f (log, qnan_value, qnan_value);
9723
9724   TEST_f_f (log, M_El, 1);
9725   TEST_f_f (log, 1.0 / M_El, -1);
9726   TEST_f_f (log, 2, M_LN2l);
9727   TEST_f_f (log, 10, M_LN10l);
9728   TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
9729
9730   END (log);
9731 }
9732
9733
9734 static void
9735 log10_test (void)
9736 {
9737   errno = 0;
9738   FUNC(log10) (1);
9739   if (errno == ENOSYS)
9740     /* Function not implemented.  */
9741     return;
9742
9743   START (log10);
9744
9745   TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9746   TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9747
9748   TEST_f_f (log10, 1, 0);
9749
9750   /* log10 (x) == qNaN plus invalid exception if x < 0.  */
9751   TEST_f_f (log10, -1, qnan_value, INVALID_EXCEPTION);
9752   TEST_f_f (log10, -max_value, qnan_value, INVALID_EXCEPTION);
9753   TEST_f_f (log10, minus_infty, qnan_value, INVALID_EXCEPTION);
9754
9755   TEST_f_f (log10, plus_infty, plus_infty);
9756   TEST_f_f (log10, qnan_value, qnan_value);
9757
9758   TEST_f_f (log10, 0.1L, -1);
9759   TEST_f_f (log10, 10.0, 1);
9760   TEST_f_f (log10, 100.0, 2);
9761   TEST_f_f (log10, 10000.0, 4);
9762   TEST_f_f (log10, M_El, M_LOG10El);
9763   TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
9764
9765   END (log10);
9766 }
9767
9768
9769 static void
9770 log1p_test (void)
9771 {
9772   errno = 0;
9773   FUNC(log1p) (0);
9774   if (errno == ENOSYS)
9775     /* Function not implemented.  */
9776     return;
9777
9778   START (log1p);
9779
9780   TEST_f_f (log1p, 0, 0);
9781   TEST_f_f (log1p, minus_zero, minus_zero);
9782
9783   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9784   TEST_f_f (log1p, -2, qnan_value, INVALID_EXCEPTION);
9785   TEST_f_f (log1p, -max_value, qnan_value, INVALID_EXCEPTION);
9786   TEST_f_f (log1p, minus_infty, qnan_value, INVALID_EXCEPTION);
9787
9788   TEST_f_f (log1p, plus_infty, plus_infty);
9789   TEST_f_f (log1p, qnan_value, qnan_value);
9790
9791   TEST_f_f (log1p, M_El - 1.0, 1);
9792
9793   TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
9794   TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
9795
9796   END (log1p);
9797 }
9798
9799
9800 static void
9801 log2_test (void)
9802 {
9803   errno = 0;
9804   FUNC(log2) (1);
9805   if (errno == ENOSYS)
9806     /* Function not implemented.  */
9807     return;
9808
9809   START (log2);
9810
9811   TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9812   TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9813
9814   TEST_f_f (log2, 1, 0);
9815
9816   TEST_f_f (log2, -1, qnan_value, INVALID_EXCEPTION);
9817   TEST_f_f (log2, -max_value, qnan_value, INVALID_EXCEPTION);
9818   TEST_f_f (log2, minus_infty, qnan_value, INVALID_EXCEPTION);
9819
9820   TEST_f_f (log2, plus_infty, plus_infty);
9821   TEST_f_f (log2, qnan_value, qnan_value);
9822
9823   TEST_f_f (log2, M_El, M_LOG2El);
9824   TEST_f_f (log2, 2.0, 1);
9825   TEST_f_f (log2, 16.0, 4);
9826   TEST_f_f (log2, 256.0, 8);
9827   TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
9828
9829   END (log2);
9830 }
9831
9832
9833 static void
9834 logb_test (void)
9835 {
9836   START (logb);
9837
9838   TEST_f_f (logb, plus_infty, plus_infty);
9839   TEST_f_f (logb, minus_infty, plus_infty);
9840
9841   TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9842
9843   TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
9844   TEST_f_f (logb, qnan_value, qnan_value);
9845
9846   TEST_f_f (logb, 1, 0);
9847   TEST_f_f (logb, M_El, 1);
9848   TEST_f_f (logb, 1024, 10);
9849   TEST_f_f (logb, -2000, 10);
9850
9851   TEST_f_f (logb, 0x0.1p-127, -131);
9852   TEST_f_f (logb, 0x0.01p-127, -135);
9853   TEST_f_f (logb, 0x0.011p-127, -135);
9854 #ifndef TEST_FLOAT
9855   TEST_f_f (logb, 0x0.8p-1022, -1023);
9856   TEST_f_f (logb, 0x0.1p-1022, -1026);
9857   TEST_f_f (logb, 0x0.00111p-1022, -1034);
9858   TEST_f_f (logb, 0x0.00001p-1022, -1042);
9859   TEST_f_f (logb, 0x0.000011p-1022, -1042);
9860   TEST_f_f (logb, 0x0.0000000000001p-1022, -1074);
9861 #endif
9862 #if defined TEST_LDOUBLE && LDBL_MIN_EXP - LDBL_MANT_DIG <= -16400
9863   TEST_f_f (logb, 0x1p-16400L, -16400);
9864   TEST_f_f (logb, 0x.00000000001p-16382L, -16426);
9865 #endif
9866
9867   END (logb);
9868 }
9869
9870 static void
9871 logb_test_downward (void)
9872 {
9873   int save_round_mode;
9874   errno = 0;
9875
9876   FUNC(logb) (0);
9877   if (errno == ENOSYS)
9878     /* Function not implemented.  */
9879     return;
9880
9881   START (logb_downward);
9882
9883   save_round_mode = fegetround ();
9884
9885   if (!fesetround (FE_DOWNWARD))
9886     {
9887
9888       /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.".  Libm
9889          should not return -0 from logb in any rounding mode.  PowerPC32 has
9890          failed with this test for power4 logb (and logbl on all PowerPC
9891          platforms) in the past due to instruction selection.  GCC PR 52775
9892          provides the availability of the fcfid insn in 32-bit mode which
9893          eliminates the use of fsub in this instance and prevents the negative
9894          signed 0.0.  */
9895
9896       /* BZ #887  */
9897       TEST_f_f (logb, 1.000e+0, plus_zero);
9898     }
9899
9900   fesetround (save_round_mode);
9901
9902   END (logb_downward);
9903 }
9904
9905 static void
9906 lround_test (void)
9907 {
9908   /* TODO: missing +/-Inf as well as qNaN tests.  */
9909
9910   START (lround);
9911
9912   TEST_f_l (lround, 0, 0);
9913   TEST_f_l (lround, minus_zero, 0);
9914   TEST_f_l (lround, 0.2L, 0.0);
9915   TEST_f_l (lround, -0.2L, 0);
9916   TEST_f_l (lround, 0.5, 1);
9917   TEST_f_l (lround, -0.5, -1);
9918   TEST_f_l (lround, 0.8L, 1);
9919   TEST_f_l (lround, -0.8L, -1);
9920   TEST_f_l (lround, 1.5, 2);
9921   TEST_f_l (lround, -1.5, -2);
9922   TEST_f_l (lround, 22514.5, 22515);
9923   TEST_f_l (lround, -22514.5, -22515);
9924   TEST_f_l (lround, 1071930.0008, 1071930);
9925 #ifndef TEST_FLOAT
9926   TEST_f_l (lround, 1073741824.01, 1073741824);
9927 # if LONG_MAX > 281474976710656
9928   TEST_f_l (lround, 281474976710656.025, 281474976710656);
9929   TEST_f_l (lround, 18014398509481974, 18014398509481974);
9930 # endif
9931   TEST_f_l (lround, 2097152.5, 2097153);
9932   TEST_f_l (lround, -2097152.5, -2097153);
9933   /* nextafter(0.5,-1)  */
9934   TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
9935   /* nextafter(-0.5,1)  */
9936   TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
9937 #else
9938   /* nextafter(0.5,-1)  */
9939   TEST_f_l (lround, 0x1.fffffp-2, 0);
9940   /* nextafter(-0.5,1)  */
9941   TEST_f_l (lround, -0x1.fffffp-2, 0);
9942   TEST_f_l (lround, 0x1.fffffep+23, 16777215);
9943   TEST_f_l (lround, -0x1.fffffep+23, -16777215);
9944 #endif
9945   END (lround);
9946 }
9947
9948
9949 static void
9950 llround_test (void)
9951 {
9952   /* TODO: missing +/-Inf as well as qNaN tests.  */
9953
9954   START (llround);
9955
9956   TEST_f_L (llround, 0, 0);
9957   TEST_f_L (llround, minus_zero, 0);
9958   TEST_f_L (llround, 0.2L, 0.0);
9959   TEST_f_L (llround, -0.2L, 0);
9960   TEST_f_L (llround, 0.5, 1);
9961   TEST_f_L (llround, -0.5, -1);
9962   TEST_f_L (llround, 0.8L, 1);
9963   TEST_f_L (llround, -0.8L, -1);
9964   TEST_f_L (llround, 1.5, 2);
9965   TEST_f_L (llround, -1.5, -2);
9966   TEST_f_L (llround, 22514.5, 22515);
9967   TEST_f_L (llround, -22514.5, -22515);
9968   TEST_f_l (llround, 1071930.0008, 1071930);
9969 #ifndef TEST_FLOAT
9970   TEST_f_L (llround, 2097152.5, 2097153);
9971   TEST_f_L (llround, -2097152.5, -2097153);
9972   TEST_f_L (llround, 34359738368.5, 34359738369ll);
9973   TEST_f_L (llround, -34359738368.5, -34359738369ll);
9974   TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
9975 #endif
9976
9977   /* Test boundary conditions.  */
9978   /* 0x1FFFFF */
9979   TEST_f_L (llround, 2097151.0, 2097151LL);
9980   /* 0x800000 */
9981   TEST_f_L (llround, 8388608.0, 8388608LL);
9982   /* 0x1000000 */
9983   TEST_f_L (llround, 16777216.0, 16777216LL);
9984   /* 0x20000000000 */
9985   TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
9986   /* 0x40000000000 */
9987   TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
9988   /* 0x1000000000000 */
9989   TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
9990   /* 0x10000000000000 */
9991   TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
9992   /* 0x10000080000000 */
9993   TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
9994   /* 0x20000000000000 */
9995   TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
9996   /* 0x80000000000000 */
9997   TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
9998   /* 0x100000000000000 */
9999   TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
10000
10001 #ifndef TEST_FLOAT
10002   /* 0x100000000 */
10003   TEST_f_L (llround, 4294967295.5, 4294967296LL);
10004   /* 0x200000000 */
10005   TEST_f_L (llround, 8589934591.5, 8589934592LL);
10006
10007   /* nextafter(0.5,-1)  */
10008   TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
10009   /* nextafter(-0.5,1)  */
10010   TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
10011   /* On PowerPC an exponent of '52' is the largest incrementally
10012    * representable sequence of whole-numbers in the 'double' range.  We test
10013    * lround to make sure that a guard bit set during the lround operation
10014    * hasn't forced an erroneous shift giving us an incorrect result.  The odd
10015    * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
10016    * rightmost bit set.  */
10017   /* +-(2^52+1)  */
10018   TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
10019   TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
10020   /* +-(2^53-1): Input is the last (positive and negative) incrementally
10021    * representable whole-number in the 'double' range that might round
10022    * erroneously.  */
10023   TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
10024   TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
10025 #else
10026   /* nextafter(0.5,-1)  */
10027   TEST_f_L (llround, 0x1.fffffep-2, 0);
10028   /* nextafter(-0.5,1)  */
10029   TEST_f_L (llround, -0x1.fffffep-2, 0);
10030   /* As above, on PowerPC an exponent of '23' is the largest incrementally
10031    * representable sequence of whole-numbers in the 'float' range.
10032    * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected.  */
10033   TEST_f_L (llround, 0x1.000002p+23,8388609);
10034   TEST_f_L (llround, -0x1.000002p+23,-8388609);
10035   TEST_f_L (llround, 0x1.fffffep+23, 16777215);
10036   TEST_f_L (llround, -0x1.fffffep+23, -16777215);
10037 #endif
10038
10039
10040 #ifdef TEST_LDOUBLE
10041   /* The input can only be represented in long double.  */
10042   TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
10043   TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
10044   TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
10045   TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
10046   TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
10047
10048 # if LDBL_MANT_DIG > 100
10049   TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
10050   TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
10051   TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
10052   TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
10053   TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
10054   TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
10055
10056   TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
10057   TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
10058   TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
10059   TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
10060   TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
10061   TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
10062 # endif
10063
10064   TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
10065   TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
10066   TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
10067   TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
10068   TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
10069
10070   TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
10071   TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
10072   TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
10073   TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
10074   TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
10075
10076 # if LDBL_MANT_DIG > 100
10077   TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
10078   TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
10079   TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
10080   TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
10081   TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
10082   TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
10083
10084   TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
10085   TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
10086   TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
10087   TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
10088   TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
10089   TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
10090 # endif
10091
10092   TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
10093   TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
10094   TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
10095   TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
10096   TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
10097
10098   TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
10099   TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
10100   TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
10101   TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
10102   TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
10103
10104   TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
10105   TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
10106   TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
10107   TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
10108   TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
10109
10110   TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
10111   TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
10112   TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
10113   TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
10114   TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
10115   TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
10116 #endif
10117
10118   END (llround);
10119 }
10120
10121 static void
10122 modf_test (void)
10123 {
10124   FLOAT x;
10125
10126   START (modf);
10127
10128   TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
10129   TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
10130   TEST_fF_f1 (modf, qnan_value, qnan_value, qnan_value);
10131   TEST_fF_f1 (modf, 0, 0, 0);
10132   TEST_fF_f1 (modf, 1.5, 0.5, 1);
10133   TEST_fF_f1 (modf, 2.5, 0.5, 2);
10134   TEST_fF_f1 (modf, -2.5, -0.5, -2);
10135   TEST_fF_f1 (modf, 20, 0, 20);
10136   TEST_fF_f1 (modf, 21, 0, 21);
10137   TEST_fF_f1 (modf, 89.5, 0.5, 89);
10138
10139   END (modf);
10140 }
10141
10142
10143 static void
10144 nearbyint_test (void)
10145 {
10146   START (nearbyint);
10147
10148   TEST_f_f (nearbyint, 0.0, 0.0);
10149   TEST_f_f (nearbyint, minus_zero, minus_zero);
10150   TEST_f_f (nearbyint, plus_infty, plus_infty);
10151   TEST_f_f (nearbyint, minus_infty, minus_infty);
10152   TEST_f_f (nearbyint, qnan_value, qnan_value);
10153
10154   /* Subnormal values */
10155   TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
10156   TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
10157
10158   /* Default rounding mode is round to nearest.  */
10159   TEST_f_f (nearbyint, 0.5, 0.0);
10160   TEST_f_f (nearbyint, 1.5, 2.0);
10161   TEST_f_f (nearbyint, -0.5, minus_zero);
10162   TEST_f_f (nearbyint, -1.5, -2.0);
10163
10164   TEST_f_f (nearbyint, 262144.75, 262145.0);
10165   TEST_f_f (nearbyint, 262142.75, 262143.0);
10166   TEST_f_f (nearbyint, 524286.75, 524287.0);
10167   TEST_f_f (nearbyint, 524288.75, 524289.0);
10168
10169   TEST_f_f (nearbyint, 1048576.75, 1048577.0);
10170   TEST_f_f (nearbyint, 2097152.75, 2097153.0);
10171   TEST_f_f (nearbyint, 2492472.75, 2492473.0);
10172   TEST_f_f (nearbyint, 2886220.75, 2886221.0);
10173   TEST_f_f (nearbyint, 3058792.75, 3058793.0);
10174   TEST_f_f (nearbyint, -1048576.75, -1048577.0);
10175   TEST_f_f (nearbyint, -2097152.75, -2097153.0);
10176   TEST_f_f (nearbyint, -2492472.75, -2492473.0);
10177   TEST_f_f (nearbyint, -2886220.75, -2886221.0);
10178   TEST_f_f (nearbyint, -3058792.75, -3058793.0);
10179 #ifndef TEST_FLOAT
10180   TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
10181   TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
10182   TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
10183   TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
10184   TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
10185   TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
10186   TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
10187   TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
10188   TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
10189   TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
10190 #endif
10191
10192   END (nearbyint);
10193 }
10194
10195 static void
10196 nextafter_test (void)
10197 {
10198
10199   START (nextafter);
10200
10201   TEST_ff_f (nextafter, 0, 0, 0);
10202   TEST_ff_f (nextafter, minus_zero, 0, 0);
10203   TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
10204   TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
10205
10206   TEST_ff_f (nextafter, 9, 9, 9);
10207   TEST_ff_f (nextafter, -9, -9, -9);
10208   TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
10209   TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
10210
10211   TEST_ff_f (nextafter, qnan_value, 1.1L, qnan_value);
10212   TEST_ff_f (nextafter, 1.1L, qnan_value, qnan_value);
10213   TEST_ff_f (nextafter, qnan_value, qnan_value, qnan_value);
10214
10215   FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
10216                          LDBL_MAX, DBL_MAX, FLT_MAX);
10217   TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
10218   TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
10219
10220 #ifdef TEST_LDOUBLE
10221   // XXX Enable once gcc is fixed.
10222   //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
10223 #endif
10224
10225   /* XXX We need the hexadecimal FP number representation here for further
10226      tests.  */
10227
10228   END (nextafter);
10229 }
10230
10231
10232 static void
10233 nexttoward_test (void)
10234 {
10235   START (nexttoward);
10236   TEST_ff_f (nexttoward, 0, 0, 0);
10237   TEST_ff_f (nexttoward, minus_zero, 0, 0);
10238   TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
10239   TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
10240
10241   TEST_ff_f (nexttoward, 9, 9, 9);
10242   TEST_ff_f (nexttoward, -9, -9, -9);
10243   TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
10244   TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
10245
10246   TEST_ff_f (nexttoward, qnan_value, 1.1L, qnan_value);
10247   TEST_ff_f (nexttoward, 1.1L, qnan_value, qnan_value);
10248   TEST_ff_f (nexttoward, qnan_value, qnan_value, qnan_value);
10249
10250 #ifdef TEST_FLOAT
10251   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.000002p0);
10252   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.000002p0);
10253   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.000002p0);
10254   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.ffffffp0);
10255   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.ffffffp0);
10256   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.ffffffp0);
10257   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.000002p0);
10258   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.000002p0);
10259   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.000002p0);
10260   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.ffffffp0);
10261   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.ffffffp0);
10262   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.ffffffp0);
10263   TEST_ff_f (nexttoward, -0x1.3p-145, -0xap-148L, -0x1.4p-145, UNDERFLOW_EXCEPTION);
10264 # if LDBL_MANT_DIG >= 64
10265   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.000002p0);
10266   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.ffffffp0);
10267   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.000002p0);
10268   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.ffffffp0);
10269 # endif
10270 # if LDBL_MANT_DIG >= 106
10271   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.000002p0);
10272   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.ffffffp0);
10273   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.000002p0);
10274   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.ffffffp0);
10275 # endif
10276 # if LDBL_MANT_DIG >= 113
10277   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.000002p0);
10278   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.ffffffp0);
10279   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.000002p0);
10280   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.ffffffp0);
10281 # endif
10282 #endif
10283 #ifdef TEST_DOUBLE
10284   TEST_ff_f (nexttoward, 1.0, 1.1L, 0x1.0000000000001p0);
10285   TEST_ff_f (nexttoward, 1.0, LDBL_MAX, 0x1.0000000000001p0);
10286   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000001p0, 0x1.0000000000001p0);
10287   TEST_ff_f (nexttoward, 1.0, 0.9L, 0x0.fffffffffffff8p0);
10288   TEST_ff_f (nexttoward, 1.0, -LDBL_MAX, 0x0.fffffffffffff8p0);
10289   TEST_ff_f (nexttoward, 1.0, 0x0.fffffffffffff8p0, 0x0.fffffffffffff8p0);
10290   TEST_ff_f (nexttoward, -1.0, -1.1L, -0x1.0000000000001p0);
10291   TEST_ff_f (nexttoward, -1.0, -LDBL_MAX, -0x1.0000000000001p0);
10292   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000001p0, -0x1.0000000000001p0);
10293   TEST_ff_f (nexttoward, -1.0, -0.9L, -0x0.fffffffffffff8p0);
10294   TEST_ff_f (nexttoward, -1.0, LDBL_MAX, -0x0.fffffffffffff8p0);
10295   TEST_ff_f (nexttoward, -1.0, -0x0.fffffffffffff8p0, -0x0.fffffffffffff8p0);
10296   TEST_ff_f (nexttoward, -1.0, -0x8.00346dc5d6388p-3L, -0x1.0000000000001p0);
10297   TEST_ff_f (nexttoward, 0x1p-1074, 0x1p-1073L, 0x1p-1073, UNDERFLOW_EXCEPTION);
10298 # if LDBL_MANT_DIG >= 64
10299   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000002p0L, 0x1.0000000000001p0);
10300   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffp0L, 0x0.fffffffffffff8p0);
10301   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000002p0L, -0x1.0000000000001p0);
10302   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffp0L, -0x0.fffffffffffff8p0);
10303 # endif
10304 # if LDBL_MANT_DIG >= 106
10305   TEST_ff_f (nexttoward, 1.0, 0x1.000000000000000000000000008p0L, 0x1.0000000000001p0);
10306   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffcp0L, 0x0.fffffffffffff8p0);
10307   TEST_ff_f (nexttoward, -1.0, -0x1.000000000000000000000000008p0L, -0x1.0000000000001p0);
10308   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffcp0L, -0x0.fffffffffffff8p0);
10309 # endif
10310 # if LDBL_MANT_DIG >= 113
10311   TEST_ff_f (nexttoward, 1.0, 0x1.0000000000000000000000000001p0L, 0x1.0000000000001p0);
10312   TEST_ff_f (nexttoward, 1.0, 0x0.ffffffffffffffffffffffffffff8p0L, 0x0.fffffffffffff8p0);
10313   TEST_ff_f (nexttoward, -1.0, -0x1.0000000000000000000000000001p0L, -0x1.0000000000001p0);
10314   TEST_ff_f (nexttoward, -1.0, -0x0.ffffffffffffffffffffffffffff8p0L, -0x0.fffffffffffff8p0);
10315 # endif
10316 #endif
10317
10318   END (nexttoward);
10319 }
10320
10321
10322 static void
10323 pow_test (void)
10324 {
10325
10326   errno = 0;
10327   FUNC(pow) (0, 0);
10328   if (errno == ENOSYS)
10329     /* Function not implemented.  */
10330     return;
10331
10332   START (pow);
10333
10334   TEST_ff_f (pow, 0, 0, 1);
10335   TEST_ff_f (pow, 0, minus_zero, 1);
10336   TEST_ff_f (pow, minus_zero, 0, 1);
10337   TEST_ff_f (pow, minus_zero, minus_zero, 1);
10338
10339   TEST_ff_f (pow, 10, 0, 1);
10340   TEST_ff_f (pow, 10, minus_zero, 1);
10341   TEST_ff_f (pow, -10, 0, 1);
10342   TEST_ff_f (pow, -10, minus_zero, 1);
10343
10344   TEST_ff_f (pow, qnan_value, 0, 1);
10345   TEST_ff_f (pow, qnan_value, minus_zero, 1);
10346
10347
10348 #ifndef TEST_INLINE
10349   TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
10350   TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
10351   TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
10352   TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
10353
10354   TEST_ff_f (pow, 0.9L, plus_infty, 0);
10355   TEST_ff_f (pow, 1e-7L, plus_infty, 0);
10356   TEST_ff_f (pow, -0.9L, plus_infty, 0);
10357   TEST_ff_f (pow, -1e-7L, plus_infty, 0);
10358
10359   TEST_ff_f (pow, 1.1L, minus_infty, 0);
10360   TEST_ff_f (pow, plus_infty, minus_infty, 0);
10361   TEST_ff_f (pow, -1.1L, minus_infty, 0);
10362   TEST_ff_f (pow, minus_infty, minus_infty, 0);
10363
10364   TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
10365   TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
10366   TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
10367   TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
10368
10369   TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
10370   TEST_ff_f (pow, plus_infty, 1, plus_infty);
10371   TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
10372   TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty);
10373
10374   TEST_ff_f (pow, plus_infty, -1e-7L, 0);
10375   TEST_ff_f (pow, plus_infty, -1, 0);
10376   TEST_ff_f (pow, plus_infty, -1e7L, 0);
10377   TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0);
10378
10379   TEST_ff_f (pow, minus_infty, 1, minus_infty);
10380   TEST_ff_f (pow, minus_infty, 11, minus_infty);
10381   TEST_ff_f (pow, minus_infty, 1001, minus_infty);
10382
10383   TEST_ff_f (pow, minus_infty, 2, plus_infty);
10384   TEST_ff_f (pow, minus_infty, 12, plus_infty);
10385   TEST_ff_f (pow, minus_infty, 1002, plus_infty);
10386   TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
10387   TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
10388   TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
10389   TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
10390   TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty);
10391
10392   TEST_ff_f (pow, minus_infty, -1, minus_zero);
10393   TEST_ff_f (pow, minus_infty, -11, minus_zero);
10394   TEST_ff_f (pow, minus_infty, -1001, minus_zero);
10395
10396   TEST_ff_f (pow, minus_infty, -2, 0);
10397   TEST_ff_f (pow, minus_infty, -12, 0);
10398   TEST_ff_f (pow, minus_infty, -1002, 0);
10399   TEST_ff_f (pow, minus_infty, -0.1L, 0);
10400   TEST_ff_f (pow, minus_infty, -1.1L, 0);
10401   TEST_ff_f (pow, minus_infty, -11.1L, 0);
10402   TEST_ff_f (pow, minus_infty, -1001.1L, 0);
10403   TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0);
10404 #endif
10405
10406   TEST_ff_f (pow, qnan_value, qnan_value, qnan_value);
10407   TEST_ff_f (pow, 0, qnan_value, qnan_value);
10408   TEST_ff_f (pow, 1, qnan_value, 1);
10409   TEST_ff_f (pow, -1, qnan_value, qnan_value);
10410   TEST_ff_f (pow, qnan_value, 1, qnan_value);
10411   TEST_ff_f (pow, qnan_value, -1, qnan_value);
10412
10413   /* pow (x, qNaN) == qNaN.  */
10414   TEST_ff_f (pow, 3.0, qnan_value, qnan_value);
10415   TEST_ff_f (pow, minus_zero, qnan_value, qnan_value);
10416   TEST_ff_f (pow, plus_infty, qnan_value, qnan_value);
10417   TEST_ff_f (pow, -3.0, qnan_value, qnan_value);
10418   TEST_ff_f (pow, minus_infty, qnan_value, qnan_value);
10419
10420   TEST_ff_f (pow, qnan_value, 3.0, qnan_value);
10421   TEST_ff_f (pow, qnan_value, -3.0, qnan_value);
10422   TEST_ff_f (pow, qnan_value, plus_infty, qnan_value);
10423   TEST_ff_f (pow, qnan_value, minus_infty, qnan_value);
10424   TEST_ff_f (pow, qnan_value, 2.5, qnan_value);
10425   TEST_ff_f (pow, qnan_value, -2.5, qnan_value);
10426   TEST_ff_f (pow, qnan_value, min_subnorm_value, qnan_value);
10427   TEST_ff_f (pow, qnan_value, -min_subnorm_value, qnan_value);
10428
10429   TEST_ff_f (pow, 1, plus_infty, 1);
10430   TEST_ff_f (pow, -1, plus_infty, 1);
10431   TEST_ff_f (pow, 1, minus_infty, 1);
10432   TEST_ff_f (pow, -1, minus_infty, 1);
10433   TEST_ff_f (pow, 1, 1, 1);
10434   TEST_ff_f (pow, 1, -1, 1);
10435   TEST_ff_f (pow, 1, 1.25, 1);
10436   TEST_ff_f (pow, 1, -1.25, 1);
10437   TEST_ff_f (pow, 1, 0x1p62L, 1);
10438   TEST_ff_f (pow, 1, 0x1p63L, 1);
10439   TEST_ff_f (pow, 1, 0x1p64L, 1);
10440   TEST_ff_f (pow, 1, 0x1p72L, 1);
10441   TEST_ff_f (pow, 1, min_subnorm_value, 1);
10442   TEST_ff_f (pow, 1, -min_subnorm_value, 1);
10443
10444   /* pow (x, +-0) == 1.  */
10445   TEST_ff_f (pow, plus_infty, 0, 1);
10446   TEST_ff_f (pow, plus_infty, minus_zero, 1);
10447   TEST_ff_f (pow, minus_infty, 0, 1);
10448   TEST_ff_f (pow, minus_infty, minus_zero, 1);
10449   TEST_ff_f (pow, 32.75L, 0, 1);
10450   TEST_ff_f (pow, 32.75L, minus_zero, 1);
10451   TEST_ff_f (pow, -32.75L, 0, 1);
10452   TEST_ff_f (pow, -32.75L, minus_zero, 1);
10453   TEST_ff_f (pow, 0x1p72L, 0, 1);
10454   TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
10455   TEST_ff_f (pow, 0x1p-72L, 0, 1);
10456   TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
10457
10458   TEST_ff_f (pow, -0.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
10459   TEST_ff_f (pow, -0.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
10460   TEST_ff_f (pow, -10.1L, 1.1L, qnan_value, INVALID_EXCEPTION);
10461   TEST_ff_f (pow, -10.1L, -1.1L, qnan_value, INVALID_EXCEPTION);
10462   TEST_ff_f (pow, -1.01L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10463   TEST_ff_f (pow, -1.01L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10464   TEST_ff_f (pow, -1.0L, min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10465   TEST_ff_f (pow, -1.0L, -min_subnorm_value, qnan_value, INVALID_EXCEPTION);
10466
10467   errno = 0;
10468   TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10469   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10470   errno = 0;
10471   TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10472   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10473   errno = 0;
10474   TEST_ff_f (pow, 0, -0xffffff, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10475   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10476 #ifndef TEST_FLOAT
10477   errno = 0;
10478   TEST_ff_f (pow, 0, -0x1.fffffffffffffp+52L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10479   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10480 #endif
10481 #ifdef TEST_LDOUBLE
10482 # if LDBL_MANT_DIG >= 64
10483   errno = 0;
10484   TEST_ff_f (pow, 0, -0x1.fffffffffffffffep+63L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10485   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10486 # endif
10487 # if LDBL_MANT_DIG >= 106
10488   errno = 0;
10489   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffff8p+105L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10490   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10491 # endif
10492 # if LDBL_MANT_DIG >= 113
10493   errno = 0;
10494   TEST_ff_f (pow, 0, -0x1.ffffffffffffffffffffffffffffp+112L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10495   check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10496 # endif
10497 #endif
10498   TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10499   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10500   errno = 0;
10501   TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10502   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10503   errno = 0;
10504   TEST_ff_f (pow, minus_zero, -0xffffff, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10505   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10506   errno = 0;
10507   TEST_ff_f (pow, minus_zero, -0x1fffffe, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10508   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10509 #ifndef TEST_FLOAT
10510   errno = 0;
10511   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+52L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10512   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10513   errno = 0;
10514   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffp+53L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10515   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10516 #endif
10517 #ifdef TEST_LDOUBLE
10518 # if LDBL_MANT_DIG >= 64
10519   errno = 0;
10520   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+63L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10521   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10522   errno = 0;
10523   TEST_ff_f (pow, minus_zero, -0x1.fffffffffffffffep+64L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10524   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10525 # endif
10526 # if LDBL_MANT_DIG >= 106
10527   errno = 0;
10528   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10529   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10530   errno = 0;
10531   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10532   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10533 # endif
10534 # if LDBL_MANT_DIG >= 113
10535   errno = 0;
10536   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10537   check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
10538   errno = 0;
10539   TEST_ff_f (pow, minus_zero, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10540   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10541 # endif
10542 #endif
10543
10544   errno = 0;
10545   TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10546   check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10547   errno = 0;
10548   TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10549   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10550   errno = 0;
10551   TEST_ff_f (pow, 0, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10552   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10553   errno = 0;
10554   TEST_ff_f (pow, 0, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10555   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10556   errno = 0;
10557   TEST_ff_f (pow, 0, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10558   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10559   errno = 0;
10560   TEST_ff_f (pow, 0, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10561   check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10562   errno = 0;
10563   TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10564   check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
10565   errno = 0;
10566   TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10567   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10568   errno = 0;
10569   TEST_ff_f (pow, minus_zero, -min_subnorm_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10570   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10571   errno = 0;
10572   TEST_ff_f (pow, minus_zero, -0x1p24, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10573   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10574   errno = 0;
10575   TEST_ff_f (pow, minus_zero, -0x1p127, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10576   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10577   errno = 0;
10578   TEST_ff_f (pow, minus_zero, -max_value, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
10579   check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
10580
10581   TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
10582   TEST_ff_f (pow, 10, -0x1p72L, 0, UNDERFLOW_EXCEPTION);
10583   TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
10584   TEST_ff_f (pow, 10, -max_value, 0, UNDERFLOW_EXCEPTION);
10585
10586   TEST_ff_f (pow, 0, 1, 0);
10587   TEST_ff_f (pow, 0, 11, 0);
10588
10589   TEST_ff_f (pow, minus_zero, 1, minus_zero);
10590   TEST_ff_f (pow, minus_zero, 11, minus_zero);
10591
10592   TEST_ff_f (pow, 0, 2, 0);
10593   TEST_ff_f (pow, 0, 11.1L, 0);
10594
10595   TEST_ff_f (pow, minus_zero, 2, 0);
10596   TEST_ff_f (pow, minus_zero, 11.1L, 0);
10597   TEST_ff_f (pow, 0, plus_infty, 0);
10598   TEST_ff_f (pow, minus_zero, plus_infty, 0);
10599   TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
10600   TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK);
10601
10602 #ifndef TEST_INLINE
10603   /* pow (x, +inf) == +inf for |x| > 1.  */
10604   TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
10605
10606   /* pow (x, +inf) == +0 for |x| < 1.  */
10607   TEST_ff_f (pow, 0.5, plus_infty, 0.0);
10608
10609   /* pow (x, -inf) == +0 for |x| > 1.  */
10610   TEST_ff_f (pow, 1.5, minus_infty, 0.0);
10611
10612   /* pow (x, -inf) == +inf for |x| < 1.  */
10613   TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
10614 #endif
10615
10616   /* pow (+inf, y) == +inf for y > 0.  */
10617   TEST_ff_f (pow, plus_infty, 2, plus_infty);
10618   TEST_ff_f (pow, plus_infty, 0xffffff, plus_infty);
10619 #ifndef TEST_FLOAT
10620   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffp+52L, plus_infty);
10621 #endif
10622 #ifdef TEST_LDOUBLE
10623 # if LDBL_MANT_DIG >= 64
10624   TEST_ff_f (pow, plus_infty, 0x1.fffffffffffffffep+63L, plus_infty);
10625 # endif
10626 # if LDBL_MANT_DIG >= 106
10627   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, plus_infty);
10628 # endif
10629 # if LDBL_MANT_DIG >= 113
10630   TEST_ff_f (pow, plus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, plus_infty);
10631 # endif
10632 #endif
10633   TEST_ff_f (pow, plus_infty, 0x1p24, plus_infty);
10634   TEST_ff_f (pow, plus_infty, 0x1p127, plus_infty);
10635   TEST_ff_f (pow, plus_infty, max_value, plus_infty);
10636
10637   /* pow (+inf, y) == +0 for y < 0.  */
10638   TEST_ff_f (pow, plus_infty, -1, 0.0);
10639   TEST_ff_f (pow, plus_infty, -0xffffff, 0.0);
10640 #ifndef TEST_FLOAT
10641   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffp+52L, 0.0);
10642 #endif
10643 #ifdef TEST_LDOUBLE
10644 # if LDBL_MANT_DIG >= 64
10645   TEST_ff_f (pow, plus_infty, -0x1.fffffffffffffffep+63L, 0.0);
10646 # endif
10647 # if LDBL_MANT_DIG >= 106
10648   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
10649 # endif
10650 # if LDBL_MANT_DIG >= 113
10651   TEST_ff_f (pow, plus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
10652 # endif
10653 #endif
10654   TEST_ff_f (pow, plus_infty, -0x1p24, 0.0);
10655   TEST_ff_f (pow, plus_infty, -0x1p127, 0.0);
10656   TEST_ff_f (pow, plus_infty, -max_value, 0.0);
10657
10658   /* pow (-inf, y) == -inf for y an odd integer > 0.  */
10659   TEST_ff_f (pow, minus_infty, 27, minus_infty);
10660   TEST_ff_f (pow, minus_infty, 0xffffff, minus_infty);
10661   TEST_ff_f (pow, minus_infty, 0x1fffffe, plus_infty);
10662 #ifndef TEST_FLOAT
10663   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+52L, minus_infty);
10664   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffp+53L, plus_infty);
10665 #endif
10666 #ifdef TEST_LDOUBLE
10667 # if LDBL_MANT_DIG >= 64
10668   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+63L, minus_infty);
10669   TEST_ff_f (pow, minus_infty, 0x1.fffffffffffffffep+64L, plus_infty);
10670 # endif
10671 # if LDBL_MANT_DIG >= 106
10672   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty);
10673   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty);
10674 # endif
10675 # if LDBL_MANT_DIG >= 113
10676   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty);
10677   TEST_ff_f (pow, minus_infty, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty);
10678 # endif
10679 #endif
10680
10681   /* pow (-inf, y) == +inf for y > 0 and not an odd integer.  */
10682   TEST_ff_f (pow, minus_infty, 28, plus_infty);
10683   TEST_ff_f (pow, minus_infty, 0x1p24, plus_infty);
10684   TEST_ff_f (pow, minus_infty, 0x1p127, plus_infty);
10685   TEST_ff_f (pow, minus_infty, max_value, plus_infty);
10686
10687   /* pow (-inf, y) == -0 for y an odd integer < 0. */
10688   TEST_ff_f (pow, minus_infty, -3, minus_zero);
10689   TEST_ff_f (pow, minus_infty, -0xffffff, minus_zero);
10690   TEST_ff_f (pow, minus_infty, -0x1fffffe, plus_zero);
10691 #ifndef TEST_FLOAT
10692   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+52L, minus_zero);
10693   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffp+53L, plus_zero);
10694 #endif
10695 #ifdef TEST_LDOUBLE
10696 # if LDBL_MANT_DIG >= 64
10697   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+63L, minus_zero);
10698   TEST_ff_f (pow, minus_infty, -0x1.fffffffffffffffep+64L, plus_zero);
10699 # endif
10700 # if LDBL_MANT_DIG >= 106
10701   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
10702   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
10703 # endif
10704 # if LDBL_MANT_DIG >= 113
10705   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
10706   TEST_ff_f (pow, minus_infty, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
10707 # endif
10708 #endif
10709   /* pow (-inf, y) == +0 for y < 0 and not an odd integer.  */
10710   TEST_ff_f (pow, minus_infty, -2.0, 0.0);
10711   TEST_ff_f (pow, minus_infty, -0x1p24, 0.0);
10712   TEST_ff_f (pow, minus_infty, -0x1p127, 0.0);
10713   TEST_ff_f (pow, minus_infty, -max_value, 0.0);
10714
10715   /* pow (+0, y) == +0 for y an odd integer > 0.  */
10716   TEST_ff_f (pow, 0.0, 27, 0.0);
10717   TEST_ff_f (pow, 0.0, 0xffffff, 0.0);
10718 #ifndef TEST_FLOAT
10719   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffp+52L, 0.0);
10720 #endif
10721 #ifdef TEST_LDOUBLE
10722 # if LDBL_MANT_DIG >= 64
10723   TEST_ff_f (pow, 0.0, 0x1.fffffffffffffffep+63L, 0.0);
10724 # endif
10725 # if LDBL_MANT_DIG >= 106
10726   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffff8p+105L, 0.0);
10727 # endif
10728 # if LDBL_MANT_DIG >= 113
10729   TEST_ff_f (pow, 0.0, 0x1.ffffffffffffffffffffffffffffp+112L, 0.0);
10730 # endif
10731 #endif
10732
10733   /* pow (-0, y) == -0 for y an odd integer > 0.  */
10734   TEST_ff_f (pow, minus_zero, 27, minus_zero);
10735   TEST_ff_f (pow, minus_zero, 0xffffff, minus_zero);
10736   TEST_ff_f (pow, minus_zero, 0x1fffffe, plus_zero);
10737 #ifndef TEST_FLOAT
10738   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+52L, minus_zero);
10739   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffp+53L, plus_zero);
10740 #endif
10741 #ifdef TEST_LDOUBLE
10742 # if LDBL_MANT_DIG >= 64
10743   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+63L, minus_zero);
10744   TEST_ff_f (pow, minus_zero, 0x1.fffffffffffffffep+64L, plus_zero);
10745 # endif
10746 # if LDBL_MANT_DIG >= 106
10747   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero);
10748   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero);
10749 # endif
10750 # if LDBL_MANT_DIG >= 113
10751   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero);
10752   TEST_ff_f (pow, minus_zero, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero);
10753 # endif
10754 #endif
10755
10756   /* pow (+0, y) == +0 for y > 0 and not an odd integer.  */
10757   TEST_ff_f (pow, 0.0, 4, 0.0);
10758   TEST_ff_f (pow, 0.0, 0x1p24, 0.0);
10759   TEST_ff_f (pow, 0.0, 0x1p127, 0.0);
10760   TEST_ff_f (pow, 0.0, max_value, 0.0);
10761   TEST_ff_f (pow, 0.0, min_subnorm_value, 0.0);
10762
10763   /* pow (-0, y) == +0 for y > 0 and not an odd integer.  */
10764   TEST_ff_f (pow, minus_zero, 4, 0.0);
10765   TEST_ff_f (pow, minus_zero, 0x1p24, 0.0);
10766   TEST_ff_f (pow, minus_zero, 0x1p127, 0.0);
10767   TEST_ff_f (pow, minus_zero, max_value, 0.0);
10768   TEST_ff_f (pow, minus_zero, min_subnorm_value, 0.0);
10769
10770   TEST_ff_f (pow, 16, 0.25L, 2);
10771   TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
10772   TEST_ff_f (pow, 2, 4, 16);
10773   TEST_ff_f (pow, 256, 8, 0x1p64L);
10774
10775   TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
10776
10777 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
10778   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
10779 #endif
10780
10781   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
10782   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
10783 #ifndef TEST_FLOAT
10784   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+52L, -1.0);
10785   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffp+53L, 1.0);
10786 #endif
10787 #ifdef TEST_LDOUBLE
10788 # if LDBL_MANT_DIG >= 64
10789   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+63L, -1.0);
10790   TEST_ff_f (pow, -1.0, -0x1.fffffffffffffffep+64L, 1.0);
10791 # endif
10792 # if LDBL_MANT_DIG >= 106
10793   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10794   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10795 # endif
10796 # if LDBL_MANT_DIG >= 113
10797   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10798   TEST_ff_f (pow, -1.0, -0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10799 # endif
10800 #endif
10801   TEST_ff_f (pow, -1.0, -max_value, 1.0);
10802
10803   TEST_ff_f (pow, -1.0, 0xffffff, -1.0);
10804   TEST_ff_f (pow, -1.0, 0x1fffffe, 1.0);
10805 #ifndef TEST_FLOAT
10806   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+52L, -1.0);
10807   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffp+53L, 1.0);
10808 #endif
10809 #ifdef TEST_LDOUBLE
10810 # if LDBL_MANT_DIG >= 64
10811   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+63L, -1.0);
10812   TEST_ff_f (pow, -1.0, 0x1.fffffffffffffffep+64L, 1.0);
10813 # endif
10814 # if LDBL_MANT_DIG >= 106
10815   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+105L, -1.0);
10816   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffff8p+106L, 1.0);
10817 # endif
10818 # if LDBL_MANT_DIG >= 113
10819   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+112L, -1.0);
10820   TEST_ff_f (pow, -1.0, 0x1.ffffffffffffffffffffffffffffp+113L, 1.0);
10821 # endif
10822 #endif
10823   TEST_ff_f (pow, -1.0, max_value, 1.0);
10824
10825   TEST_ff_f (pow, -2.0, 126, 0x1p126);
10826   TEST_ff_f (pow, -2.0, 127, -0x1p127);
10827   /* Allow inexact results for float to be considered to underflow.  */
10828   TEST_ff_f (pow, -2.0, -126, 0x1p-126, UNDERFLOW_EXCEPTION_OK_FLOAT);
10829   TEST_ff_f (pow, -2.0, -127, -0x1p-127, UNDERFLOW_EXCEPTION_OK_FLOAT);
10830
10831   TEST_ff_f (pow, -2.0, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10832   TEST_ff_f (pow, -2.0, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10833 #ifndef TEST_FLOAT
10834   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10835   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10836 #endif
10837 #ifdef TEST_LDOUBLE
10838 # if LDBL_MANT_DIG >= 64
10839   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10840   TEST_ff_f (pow, -2.0, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10841 # endif
10842 # if LDBL_MANT_DIG >= 106
10843   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10844   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10845 # endif
10846 # if LDBL_MANT_DIG >= 113
10847   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10848   TEST_ff_f (pow, -2.0, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10849 # endif
10850 #endif
10851   TEST_ff_f (pow, -2.0, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10852
10853   TEST_ff_f (pow, -2.0, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10854   TEST_ff_f (pow, -2.0, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10855 #ifndef TEST_FLOAT
10856   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10857   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10858 #endif
10859 #ifdef TEST_LDOUBLE
10860 # if LDBL_MANT_DIG >= 64
10861   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10862   TEST_ff_f (pow, -2.0, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10863 # endif
10864 # if LDBL_MANT_DIG >= 106
10865   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10866   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10867 # endif
10868 # if LDBL_MANT_DIG >= 113
10869   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10870   TEST_ff_f (pow, -2.0, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10871 # endif
10872 #endif
10873   TEST_ff_f (pow, -2.0, max_value, plus_infty, OVERFLOW_EXCEPTION);
10874
10875   TEST_ff_f (pow, -max_value, 0.5, qnan_value, INVALID_EXCEPTION);
10876   TEST_ff_f (pow, -max_value, 1.5, qnan_value, INVALID_EXCEPTION);
10877   TEST_ff_f (pow, -max_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10878   TEST_ff_f (pow, -max_value, -2, plus_zero, UNDERFLOW_EXCEPTION);
10879   TEST_ff_f (pow, -max_value, -3, minus_zero, UNDERFLOW_EXCEPTION);
10880   TEST_ff_f (pow, -max_value, 2, plus_infty, OVERFLOW_EXCEPTION);
10881   TEST_ff_f (pow, -max_value, 3, minus_infty, OVERFLOW_EXCEPTION);
10882
10883   TEST_ff_f (pow, -max_value, -0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10884   TEST_ff_f (pow, -max_value, -0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10885 #ifndef TEST_FLOAT
10886   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10887   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10888 #endif
10889 #ifdef TEST_LDOUBLE
10890 # if LDBL_MANT_DIG >= 64
10891   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10892   TEST_ff_f (pow, -max_value, -0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10893 # endif
10894 # if LDBL_MANT_DIG >= 106
10895   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10896   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10897 # endif
10898 # if LDBL_MANT_DIG >= 113
10899   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10900   TEST_ff_f (pow, -max_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10901 # endif
10902 #endif
10903   TEST_ff_f (pow, -max_value, -max_value, plus_zero, UNDERFLOW_EXCEPTION);
10904
10905   TEST_ff_f (pow, -max_value, 0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10906   TEST_ff_f (pow, -max_value, 0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10907 #ifndef TEST_FLOAT
10908   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10909   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10910 #endif
10911 #ifdef TEST_LDOUBLE
10912 # if LDBL_MANT_DIG >= 64
10913   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10914   TEST_ff_f (pow, -max_value, 0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10915 # endif
10916 # if LDBL_MANT_DIG >= 106
10917   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10918   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10919 # endif
10920 # if LDBL_MANT_DIG >= 113
10921   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10922   TEST_ff_f (pow, -max_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10923 # endif
10924 #endif
10925   TEST_ff_f (pow, -max_value, max_value, plus_infty, OVERFLOW_EXCEPTION);
10926
10927   TEST_ff_f (pow, -0.5, 126, 0x1p-126);
10928   TEST_ff_f (pow, -0.5, 127, -0x1p-127);
10929   TEST_ff_f (pow, -0.5, -126, 0x1p126);
10930   TEST_ff_f (pow, -0.5, -127, -0x1p127);
10931
10932   TEST_ff_f (pow, -0.5, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10933   TEST_ff_f (pow, -0.5, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10934 #ifndef TEST_FLOAT
10935   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10936   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10937 #endif
10938 #ifdef TEST_LDOUBLE
10939 # if LDBL_MANT_DIG >= 64
10940   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10941   TEST_ff_f (pow, -0.5, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10942 # endif
10943 # if LDBL_MANT_DIG >= 106
10944   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10945   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
10946 # endif
10947 # if LDBL_MANT_DIG >= 113
10948   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
10949   TEST_ff_f (pow, -0.5, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
10950 # endif
10951 #endif
10952   TEST_ff_f (pow, -0.5, -max_value, plus_infty, OVERFLOW_EXCEPTION);
10953
10954   TEST_ff_f (pow, -0.5, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
10955   TEST_ff_f (pow, -0.5, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
10956 #ifndef TEST_FLOAT
10957   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
10958   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
10959 #endif
10960 #ifdef TEST_LDOUBLE
10961 # if LDBL_MANT_DIG >= 64
10962   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
10963   TEST_ff_f (pow, -0.5, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
10964 # endif
10965 # if LDBL_MANT_DIG >= 106
10966   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
10967   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
10968 # endif
10969 # if LDBL_MANT_DIG >= 113
10970   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
10971   TEST_ff_f (pow, -0.5, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
10972 # endif
10973 #endif
10974   TEST_ff_f (pow, -0.5, max_value, plus_zero, UNDERFLOW_EXCEPTION);
10975
10976   TEST_ff_f (pow, -min_value, 0.5, qnan_value, INVALID_EXCEPTION);
10977   TEST_ff_f (pow, -min_value, 1.5, qnan_value, INVALID_EXCEPTION);
10978   TEST_ff_f (pow, -min_value, 1000.5, qnan_value, INVALID_EXCEPTION);
10979   TEST_ff_f (pow, -min_value, -2, plus_infty, OVERFLOW_EXCEPTION);
10980   TEST_ff_f (pow, -min_value, -3, minus_infty, OVERFLOW_EXCEPTION);
10981   /* Allow inexact results to be considered to underflow.  */
10982   TEST_ff_f (pow, -min_value, 1, -min_value, UNDERFLOW_EXCEPTION_OK);
10983   TEST_ff_f (pow, -min_value, 2, plus_zero, UNDERFLOW_EXCEPTION);
10984   TEST_ff_f (pow, -min_value, 3, minus_zero, UNDERFLOW_EXCEPTION);
10985
10986   TEST_ff_f (pow, -min_value, -0xffffff, minus_infty, OVERFLOW_EXCEPTION);
10987   TEST_ff_f (pow, -min_value, -0x1fffffe, plus_infty, OVERFLOW_EXCEPTION);
10988 #ifndef TEST_FLOAT
10989   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+52L, minus_infty, OVERFLOW_EXCEPTION);
10990   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffp+53L, plus_infty, OVERFLOW_EXCEPTION);
10991 #endif
10992 #ifdef TEST_LDOUBLE
10993 # if LDBL_MANT_DIG >= 64
10994   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+63L, minus_infty, OVERFLOW_EXCEPTION);
10995   TEST_ff_f (pow, -min_value, -0x1.fffffffffffffffep+64L, plus_infty, OVERFLOW_EXCEPTION);
10996 # endif
10997 # if LDBL_MANT_DIG >= 106
10998   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+105L, minus_infty, OVERFLOW_EXCEPTION);
10999   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffff8p+106L, plus_infty, OVERFLOW_EXCEPTION);
11000 # endif
11001 # if LDBL_MANT_DIG >= 113
11002   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+112L, minus_infty, OVERFLOW_EXCEPTION);
11003   TEST_ff_f (pow, -min_value, -0x1.ffffffffffffffffffffffffffffp+113L, plus_infty, OVERFLOW_EXCEPTION);
11004 # endif
11005 #endif
11006   TEST_ff_f (pow, -min_value, -max_value, plus_infty, OVERFLOW_EXCEPTION);
11007
11008   TEST_ff_f (pow, -min_value, 0xffffff, minus_zero, UNDERFLOW_EXCEPTION);
11009   TEST_ff_f (pow, -min_value, 0x1fffffe, plus_zero, UNDERFLOW_EXCEPTION);
11010 #ifndef TEST_FLOAT
11011   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+52L, minus_zero, UNDERFLOW_EXCEPTION);
11012   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffp+53L, plus_zero, UNDERFLOW_EXCEPTION);
11013 #endif
11014 #ifdef TEST_LDOUBLE
11015 # if LDBL_MANT_DIG >= 64
11016   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+63L, minus_zero, UNDERFLOW_EXCEPTION);
11017   TEST_ff_f (pow, -min_value, 0x1.fffffffffffffffep+64L, plus_zero, UNDERFLOW_EXCEPTION);
11018 # endif
11019 # if LDBL_MANT_DIG >= 106
11020   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+105L, minus_zero, UNDERFLOW_EXCEPTION);
11021   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffff8p+106L, plus_zero, UNDERFLOW_EXCEPTION);
11022 # endif
11023 # if LDBL_MANT_DIG >= 113
11024   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+112L, minus_zero, UNDERFLOW_EXCEPTION);
11025   TEST_ff_f (pow, -min_value, 0x1.ffffffffffffffffffffffffffffp+113L, plus_zero, UNDERFLOW_EXCEPTION);
11026 # endif
11027 #endif
11028   TEST_ff_f (pow, -min_value, max_value, plus_zero, UNDERFLOW_EXCEPTION);
11029
11030   TEST_ff_f (pow, 0x0.ffffffp0, 10, 0.999999403953712118183885036774764444747L);
11031   TEST_ff_f (pow, 0x0.ffffffp0, 100, 0.999994039553108359406305079606228341585L);
11032   TEST_ff_f (pow, 0x0.ffffffp0, 1000, 0.9999403971297699052276650144650733772182L);
11033   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p24, 0.3678794302077803437135155590023422899744L);
11034   TEST_ff_f (pow, 0x0.ffffffp0, 0x1p30, 1.603807831524924233828134753069728224044e-28L);
11035   TEST_ff_f (pow, 0x0.ffffffp0, 0x1.234566p30, 2.374884712135295099971443365381007297732e-32L);
11036   TEST_ff_f (pow, 0x0.ffffffp0, -10, 1.000000596046643153205170848674671339688L);
11037   TEST_ff_f (pow, 0x0.ffffffp0, -100, 1.000005960482418779499387594989252621451L);
11038   TEST_ff_f (pow, 0x0.ffffffp0, -1000, 1.000059606422943986382898964231519867906L);
11039   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p24, 2.7182819094701610539628664526874952929416L);
11040   TEST_ff_f (pow, 0x0.ffffffp0, -0x1p30, 6.2351609734265057988914412331288163636075e+27L);
11041   TEST_ff_f (pow, 0x0.ffffffp0, -0x1.234566p30, 4.2107307141696353498921307077142537353515e+31L);
11042   TEST_ff_f (pow, 0x1.000002p0, 0x1p24, 7.3890552180866447284268641248075832310141L);
11043   TEST_ff_f (pow, 0x1.000002p0, 0x1.234566p29, 4.2107033006507495188536371520637025716256e+31L);
11044   TEST_ff_f (pow, 0x1.000002p0, -0x1.234566p29, 2.3749001736727769098946062325205705312166e-32L);
11045
11046 #if !defined TEST_FLOAT
11047   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, 0x1.23456789abcdfp62L, 1.0118762747827252817436395051178295138220e-253L);
11048   TEST_ff_f (pow, 0x0.fffffffffffff8p0L, -0x1.23456789abcdfp62L, 9.8826311568054561811190162420900667121992e+252L);
11049   TEST_ff_f (pow, 0x1.0000000000001p0L, 0x1.23456789abcdfp61L, 9.8826311568044974397135026217687399395481e+252L);
11050   TEST_ff_f (pow, 0x1.0000000000001p0L, -0x1.23456789abcdfp61L, 1.0118762747828234466621210689458255908670e-253L);
11051 #endif
11052
11053 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 64 && LDBL_MAX_EXP >= 16384
11054   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, 0x1.23456789abcdef0ep77L, 1.2079212226420368189981778807634890018840e-4048L);
11055   TEST_ff_f (pow, 0x0.ffffffffffffffffp0L, -0x1.23456789abcdef0ep77L, 8.2786855736563746280496724205839522148001e+4047L);
11056   TEST_ff_f (pow, 0x1.0000000000000002p0L, 0x1.23456789abcdef0ep76L, 8.2786855736563683535324500168799315131570e+4047L);
11057   TEST_ff_f (pow, 0x1.0000000000000002p0L, -0x1.23456789abcdef0ep76L, 1.2079212226420377344964713407722652880280e-4048L);
11058 #endif
11059
11060 #if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 113
11061   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, 0x1.23456789abcdef0123456789abcdp126L, 1.2079212226420440237790185999151440179953e-4048L);
11062   TEST_ff_f (pow, 0x0.ffffffffffffffffffffffffffff8p0L, -0x1.23456789abcdef0123456789abcdp126L, 8.2786855736563252489063231915535105363602e+4047L);
11063   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, 0x1.23456789abcdef0123456789abcdp125L, 8.2786855736563252489063231915423647547782e+4047L);
11064   TEST_ff_f (pow, 0x1.0000000000000000000000000001p0L, -0x1.23456789abcdef0123456789abcdp125L, 1.2079212226420440237790185999167702696503e-4048L);
11065 #endif
11066
11067 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
11068   TEST_ff_f (pow, 1e4932L, 0.75L, 1e3699L);
11069   TEST_ff_f (pow, 1e4928L, 0.75L, 1e3696L);
11070   TEST_ff_f (pow, 1e4924L, 0.75L, 1e3693L);
11071   TEST_ff_f (pow, 1e4920L, 0.75L, 1e3690L);
11072   TEST_ff_f (pow, 10.0L, 4932.0L, 1e4932L);
11073   TEST_ff_f (pow, 10.0L, 4931.0L, 1e4931L);
11074   TEST_ff_f (pow, 10.0L, 4930.0L, 1e4930L);
11075   TEST_ff_f (pow, 10.0L, 4929.0L, 1e4929L);
11076   TEST_ff_f (pow, 10.0L, -4931.0L, 1e-4931L);
11077   TEST_ff_f (pow, 10.0L, -4930.0L, 1e-4930L);
11078   TEST_ff_f (pow, 10.0L, -4929.0L, 1e-4929L);
11079   TEST_ff_f (pow, 1e27L, 182.0L, 1e4914L);
11080   TEST_ff_f (pow, 1e27L, -182.0L, 1e-4914L);
11081 #endif
11082
11083   TEST_ff_f (pow, min_subnorm_value, min_subnorm_value, 1.0L);
11084   TEST_ff_f (pow, min_subnorm_value, -min_subnorm_value, 1.0L);
11085   TEST_ff_f (pow, max_value, min_subnorm_value, 1.0L);
11086   TEST_ff_f (pow, max_value, -min_subnorm_value, 1.0L);
11087   TEST_ff_f (pow, 0.99L, min_subnorm_value, 1.0L);
11088   TEST_ff_f (pow, 0.99L, -min_subnorm_value, 1.0L);
11089   TEST_ff_f (pow, 1.01L, min_subnorm_value, 1.0L);
11090   TEST_ff_f (pow, 1.01L, -min_subnorm_value, 1.0L);
11091
11092   TEST_ff_f (pow, 2.0L, -100000.0L, plus_zero, UNDERFLOW_EXCEPTION);
11093
11094   END (pow);
11095 }
11096
11097
11098 static void
11099 pow_test_tonearest (void)
11100 {
11101   int save_round_mode;
11102   errno = 0;
11103   FUNC(pow) (0, 0);
11104   if (errno == ENOSYS)
11105     /* Function not implemented.  */
11106     return;
11107
11108   START (pow_tonearest);
11109
11110   save_round_mode = fegetround ();
11111
11112   if (!fesetround (FE_TONEAREST))
11113     {
11114       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11115       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11116     }
11117
11118   fesetround (save_round_mode);
11119
11120   END (pow_tonearest);
11121 }
11122
11123
11124 static void
11125 pow_test_towardzero (void)
11126 {
11127   int save_round_mode;
11128   errno = 0;
11129   FUNC(pow) (0, 0);
11130   if (errno == ENOSYS)
11131     /* Function not implemented.  */
11132     return;
11133
11134   START (pow_towardzero);
11135
11136   save_round_mode = fegetround ();
11137
11138   if (!fesetround (FE_TOWARDZERO))
11139     {
11140       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11141       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11142     }
11143
11144   fesetround (save_round_mode);
11145
11146   END (pow_towardzero);
11147 }
11148
11149
11150 static void
11151 pow_test_downward (void)
11152 {
11153   int save_round_mode;
11154   errno = 0;
11155   FUNC(pow) (0, 0);
11156   if (errno == ENOSYS)
11157     /* Function not implemented.  */
11158     return;
11159
11160   START (pow_downward);
11161
11162   save_round_mode = fegetround ();
11163
11164   if (!fesetround (FE_DOWNWARD))
11165     {
11166       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11167       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11168     }
11169
11170   fesetround (save_round_mode);
11171
11172   END (pow_downward);
11173 }
11174
11175
11176 static void
11177 pow_test_upward (void)
11178 {
11179   int save_round_mode;
11180   errno = 0;
11181   FUNC(pow) (0, 0);
11182   if (errno == ENOSYS)
11183     /* Function not implemented.  */
11184     return;
11185
11186   START (pow_upward);
11187
11188   save_round_mode = fegetround ();
11189
11190   if (!fesetround (FE_UPWARD))
11191     {
11192       TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
11193       TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
11194     }
11195
11196   fesetround (save_round_mode);
11197
11198   END (pow_upward);
11199 }
11200
11201
11202 static void
11203 remainder_test (void)
11204 {
11205   errno = 0;
11206   FUNC(remainder) (1.625, 1.0);
11207   if (errno == ENOSYS)
11208     /* Function not implemented.  */
11209     return;
11210
11211   START (remainder);
11212
11213   errno = 0;
11214   TEST_ff_f (remainder, 1, 0, qnan_value, INVALID_EXCEPTION);
11215   check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11216   errno = 0;
11217   TEST_ff_f (remainder, 1, minus_zero, qnan_value, INVALID_EXCEPTION);
11218   check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11219   errno = 0;
11220   TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
11221   check_int ("errno for remainder(INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11222   errno = 0;
11223   TEST_ff_f (remainder, plus_infty, 0, qnan_value, INVALID_EXCEPTION);
11224   check_int ("errno for remainder(INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11225   errno = 0;
11226   TEST_ff_f (remainder, plus_infty, 1, qnan_value, INVALID_EXCEPTION);
11227   check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
11228   errno = 0;
11229   TEST_ff_f (remainder, plus_infty, 2, qnan_value, INVALID_EXCEPTION);
11230   check_int ("errno for remainder(INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
11231   errno = 0;
11232   TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, INVALID_EXCEPTION);
11233   check_int ("errno for remainder(-INF, -0) = EDOM ", errno, EDOM, 0, 0, 0);
11234   errno = 0;
11235   TEST_ff_f (remainder, minus_infty, 0, qnan_value, INVALID_EXCEPTION);
11236   check_int ("errno for remainder(-INF, 0) = EDOM ", errno, EDOM, 0, 0, 0);
11237   errno = 0;
11238   TEST_ff_f (remainder, minus_infty, 1, qnan_value, INVALID_EXCEPTION);
11239   check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
11240   errno = 0;
11241   TEST_ff_f (remainder, minus_infty, 2, qnan_value, INVALID_EXCEPTION);
11242   check_int ("errno for remainder(-INF, 2) = EDOM ", errno, EDOM, 0, 0, 0);
11243   errno = 0;
11244   TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value);
11245   check_int ("errno for remainder(qNAN, qNAN) unchanged", errno, 0, 0, 0, 0);
11246   errno = 0;
11247   TEST_ff_f (remainder, 0, qnan_value, qnan_value);
11248   check_int ("errno for remainder(0, qNAN) unchanged", errno, 0, 0, 0, 0);
11249   errno = 0;
11250   TEST_ff_f (remainder, qnan_value, 0, qnan_value);
11251   check_int ("errno for remainder(qNaN, 0) unchanged", errno, 0, 0, 0, 0);
11252
11253   errno = 0;
11254   TEST_ff_f (remainder, 7.0, plus_infty, 7.0);
11255   check_int ("errno for remainder(7.0, INF) unchanged", errno, 0, 0, 0, 0);
11256   errno = 0;
11257   TEST_ff_f (remainder, 7.0, minus_infty, 7.0);
11258   check_int ("errno for remainder(7.0, -INF) unchanged", errno, 0, 0, 0, 0);
11259
11260   TEST_ff_f (remainder, 1.625, 1.0, -0.375);
11261   TEST_ff_f (remainder, -1.625, 1.0, 0.375);
11262   TEST_ff_f (remainder, 1.625, -1.0, -0.375);
11263   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
11264   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
11265   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
11266
11267   END (remainder);
11268 }
11269
11270 static void
11271 remquo_test (void)
11272 {
11273   /* x is needed.  */
11274   int x;
11275
11276   errno = 0;
11277   FUNC(remquo) (1.625, 1.0, &x);
11278   if (errno == ENOSYS)
11279     /* Function not implemented.  */
11280     return;
11281
11282   START (remquo);
11283
11284   TEST_ffI_f1 (remquo, 1, 0, qnan_value, IGNORE, INVALID_EXCEPTION);
11285   TEST_ffI_f1 (remquo, 1, minus_zero, qnan_value, IGNORE, INVALID_EXCEPTION);
11286   TEST_ffI_f1 (remquo, plus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
11287   TEST_ffI_f1 (remquo, minus_infty, 1, qnan_value, IGNORE, INVALID_EXCEPTION);
11288   TEST_ffI_f1 (remquo, qnan_value, qnan_value, qnan_value, IGNORE);
11289
11290   TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
11291   TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
11292   TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
11293   TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
11294
11295   TEST_ffI_f1 (remquo, 5, 2, 1, 2);
11296   TEST_ffI_f1 (remquo, 3, 2, -1, 2);
11297
11298   END (remquo);
11299 }
11300
11301 static void
11302 rint_test (void)
11303 {
11304   /* TODO: missing qNaN tests.  */
11305
11306   START (rint);
11307
11308   TEST_f_f (rint, 0.0, 0.0);
11309   TEST_f_f (rint, minus_zero, minus_zero);
11310   TEST_f_f (rint, plus_infty, plus_infty);
11311   TEST_f_f (rint, minus_infty, minus_infty);
11312
11313   /* Default rounding mode is round to even.  */
11314   TEST_f_f (rint, 0.5, 0.0);
11315   TEST_f_f (rint, 1.5, 2.0);
11316   TEST_f_f (rint, 2.5, 2.0);
11317   TEST_f_f (rint, 3.5, 4.0);
11318   TEST_f_f (rint, 4.5, 4.0);
11319   TEST_f_f (rint, -0.5, -0.0);
11320   TEST_f_f (rint, -1.5, -2.0);
11321   TEST_f_f (rint, -2.5, -2.0);
11322   TEST_f_f (rint, -3.5, -4.0);
11323   TEST_f_f (rint, -4.5, -4.0);
11324   TEST_f_f (rint, 0.1, 0.0);
11325   TEST_f_f (rint, 0.25, 0.0);
11326   TEST_f_f (rint, 0.625, 1.0);
11327   TEST_f_f (rint, -0.1, -0.0);
11328   TEST_f_f (rint, -0.25, -0.0);
11329   TEST_f_f (rint, -0.625, -1.0);
11330   TEST_f_f (rint, 262144.75, 262145.0);
11331   TEST_f_f (rint, 262142.75, 262143.0);
11332   TEST_f_f (rint, 524286.75, 524287.0);
11333   TEST_f_f (rint, 524288.75, 524289.0);
11334   TEST_f_f (rint, 1048576.75, 1048577.0);
11335   TEST_f_f (rint, 2097152.75, 2097153.0);
11336   TEST_f_f (rint, -1048576.75, -1048577.0);
11337   TEST_f_f (rint, -2097152.75, -2097153.0);
11338 #ifndef TEST_FLOAT
11339   TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11340   TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11341   TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11342   TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11343   TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11344   TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11345   TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11346   TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11347   TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11348   TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11349 #endif
11350 #ifdef TEST_LDOUBLE
11351   /* The result can only be represented in long double.  */
11352   TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11353   TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11354   TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11355   TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11356   TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11357
11358 # if LDBL_MANT_DIG > 100
11359   TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11360   TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11361   TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11362 # endif
11363
11364   TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11365   TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11366   TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11367   TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11368   TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11369
11370 # if LDBL_MANT_DIG > 100
11371   TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11372   TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11373   TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11374
11375   TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11376   TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11377   TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11378   TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11379   TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11380   TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11381
11382   TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11383   TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11384   TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11385   TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11386   TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11387   TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11388 # endif
11389
11390   TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
11391   TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
11392   TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
11393   TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
11394   TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
11395
11396   TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
11397   TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
11398   TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
11399   TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
11400   TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
11401
11402   TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
11403   TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
11404   TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
11405   TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
11406   TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
11407
11408   TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
11409   TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
11410   TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
11411   TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
11412   TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
11413
11414   TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
11415   TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
11416   TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
11417   TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
11418   TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
11419 #endif
11420
11421   END (rint);
11422 }
11423
11424 static void
11425 rint_test_tonearest (void)
11426 {
11427   int save_round_mode;
11428   START (rint_tonearest);
11429
11430   save_round_mode = fegetround ();
11431
11432   if (!fesetround (FE_TONEAREST))
11433     {
11434       TEST_f_f (rint, 2.0, 2.0);
11435       TEST_f_f (rint, 1.5, 2.0);
11436       TEST_f_f (rint, 1.0, 1.0);
11437       TEST_f_f (rint, 0.5, 0.0);
11438       TEST_f_f (rint, 0.0, 0.0);
11439       TEST_f_f (rint, minus_zero, minus_zero);
11440       TEST_f_f (rint, -0.5, -0.0);
11441       TEST_f_f (rint, -1.0, -1.0);
11442       TEST_f_f (rint, -1.5, -2.0);
11443       TEST_f_f (rint, -2.0, -2.0);
11444       TEST_f_f (rint, 0.1, 0.0);
11445       TEST_f_f (rint, 0.25, 0.0);
11446       TEST_f_f (rint, 0.625, 1.0);
11447       TEST_f_f (rint, -0.1, -0.0);
11448       TEST_f_f (rint, -0.25, -0.0);
11449       TEST_f_f (rint, -0.625, -1.0);
11450       TEST_f_f (rint, 1048576.75, 1048577.0);
11451       TEST_f_f (rint, 2097152.75, 2097153.0);
11452       TEST_f_f (rint, -1048576.75, -1048577.0);
11453       TEST_f_f (rint, -2097152.75, -2097153.0);
11454 #ifndef TEST_FLOAT
11455       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11456       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11457       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11458       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11459       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11460       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11461       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11462       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11463       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11464       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11465 #endif
11466 #ifdef TEST_LDOUBLE
11467       /* The result can only be represented in long double.  */
11468       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11469       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11470       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11471       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11472       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11473 # if LDBL_MANT_DIG > 100
11474       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11475       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11476       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11477 # endif
11478       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11479       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11480       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11481       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11482       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11483 # if LDBL_MANT_DIG > 100
11484       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11485       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11486       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11487
11488       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11489       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11490       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11491       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11492       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11493       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11494
11495       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11496       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11497       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11498       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11499       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11500       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11501 # endif
11502 #endif
11503     }
11504
11505   fesetround (save_round_mode);
11506
11507   END (rint_tonearest);
11508 }
11509
11510 static void
11511 rint_test_towardzero (void)
11512 {
11513   int save_round_mode;
11514   START (rint_towardzero);
11515
11516   save_round_mode = fegetround ();
11517
11518   if (!fesetround (FE_TOWARDZERO))
11519     {
11520       TEST_f_f (rint, 2.0, 2.0);
11521       TEST_f_f (rint, 1.5, 1.0);
11522       TEST_f_f (rint, 1.0, 1.0);
11523       TEST_f_f (rint, 0.5, 0.0);
11524       TEST_f_f (rint, 0.0, 0.0);
11525       TEST_f_f (rint, minus_zero, minus_zero);
11526       TEST_f_f (rint, -0.5, -0.0);
11527       TEST_f_f (rint, -1.0, -1.0);
11528       TEST_f_f (rint, -1.5, -1.0);
11529       TEST_f_f (rint, -2.0, -2.0);
11530       TEST_f_f (rint, 0.1, 0.0);
11531       TEST_f_f (rint, 0.25, 0.0);
11532       TEST_f_f (rint, 0.625, 0.0);
11533       TEST_f_f (rint, -0.1, -0.0);
11534       TEST_f_f (rint, -0.25, -0.0);
11535       TEST_f_f (rint, -0.625, -0.0);
11536       TEST_f_f (rint, 1048576.75, 1048576.0);
11537       TEST_f_f (rint, 2097152.75, 2097152.0);
11538       TEST_f_f (rint, -1048576.75, -1048576.0);
11539       TEST_f_f (rint, -2097152.75, -2097152.0);
11540 #ifndef TEST_FLOAT
11541       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
11542       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
11543       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
11544       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
11545       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
11546       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
11547       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
11548       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
11549       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
11550       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
11551 #endif
11552 #ifdef TEST_LDOUBLE
11553       /* The result can only be represented in long double.  */
11554       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
11555       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11556       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11557       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
11558       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
11559 # if LDBL_MANT_DIG > 100
11560       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
11561       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
11562       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
11563 # endif
11564       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
11565       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11566       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11567       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
11568       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
11569 # if LDBL_MANT_DIG > 100
11570       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
11571       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
11572       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
11573
11574       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11575       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11576       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11577       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
11578       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
11579       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
11580
11581       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11582       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11583       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11584       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
11585       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
11586       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
11587 # endif
11588 #endif
11589     }
11590
11591   fesetround (save_round_mode);
11592
11593   END (rint_towardzero);
11594 }
11595
11596 static void
11597 rint_test_downward (void)
11598 {
11599   int save_round_mode;
11600   START (rint_downward);
11601
11602   save_round_mode = fegetround ();
11603
11604   if (!fesetround (FE_DOWNWARD))
11605     {
11606       TEST_f_f (rint, 2.0, 2.0);
11607       TEST_f_f (rint, 1.5, 1.0);
11608       TEST_f_f (rint, 1.0, 1.0);
11609       TEST_f_f (rint, 0.5, 0.0);
11610       TEST_f_f (rint, 0.0, 0.0);
11611       TEST_f_f (rint, minus_zero, minus_zero);
11612       TEST_f_f (rint, -0.5, -1.0);
11613       TEST_f_f (rint, -1.0, -1.0);
11614       TEST_f_f (rint, -1.5, -2.0);
11615       TEST_f_f (rint, -2.0, -2.0);
11616       TEST_f_f (rint, 0.1, 0.0);
11617       TEST_f_f (rint, 0.25, 0.0);
11618       TEST_f_f (rint, 0.625, 0.0);
11619       TEST_f_f (rint, -0.1, -1.0);
11620       TEST_f_f (rint, -0.25, -1.0);
11621       TEST_f_f (rint, -0.625, -1.0);
11622       TEST_f_f (rint, 1048576.75, 1048576.0);
11623       TEST_f_f (rint, 2097152.75, 2097152.0);
11624       TEST_f_f (rint, -1048576.75, -1048577.0);
11625       TEST_f_f (rint, -2097152.75, -2097153.0);
11626 #ifndef TEST_FLOAT
11627       TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
11628       TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
11629       TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
11630       TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
11631       TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
11632       TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
11633       TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
11634       TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
11635       TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
11636       TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
11637 #endif
11638 #ifdef TEST_LDOUBLE
11639       /* The result can only be represented in long double.  */
11640       TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
11641       TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
11642       TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
11643       TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
11644       TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
11645 # if LDBL_MANT_DIG > 100
11646       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
11647       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
11648       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
11649 # endif
11650       TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
11651       TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
11652       TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
11653       TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
11654       TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
11655 # if LDBL_MANT_DIG > 100
11656       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
11657       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
11658       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
11659
11660       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
11661       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
11662       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
11663       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
11664       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
11665       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
11666
11667       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
11668       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
11669       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
11670       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
11671       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
11672       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
11673 # endif
11674 #endif
11675     }
11676
11677   fesetround (save_round_mode);
11678
11679   END (rint_downward);
11680 }
11681
11682 static void
11683 rint_test_upward (void)
11684 {
11685   int save_round_mode;
11686   START (rint_upward);
11687
11688   save_round_mode = fegetround ();
11689
11690   if (!fesetround (FE_UPWARD))
11691     {
11692       TEST_f_f (rint, 2.0, 2.0);
11693       TEST_f_f (rint, 1.5, 2.0);
11694       TEST_f_f (rint, 1.0, 1.0);
11695       TEST_f_f (rint, 0.5, 1.0);
11696       TEST_f_f (rint, 0.0, 0.0);
11697       TEST_f_f (rint, minus_zero, minus_zero);
11698       TEST_f_f (rint, -0.5, -0.0);
11699       TEST_f_f (rint, -1.0, -1.0);
11700       TEST_f_f (rint, -1.5, -1.0);
11701       TEST_f_f (rint, -2.0, -2.0);
11702       TEST_f_f (rint, 0.1, 1.0);
11703       TEST_f_f (rint, 0.25, 1.0);
11704       TEST_f_f (rint, 0.625, 1.0);
11705       TEST_f_f (rint, -0.1, -0.0);
11706       TEST_f_f (rint, -0.25, -0.0);
11707       TEST_f_f (rint, -0.625, -0.0);
11708       TEST_f_f (rint, 1048576.75, 1048577.0);
11709       TEST_f_f (rint, 2097152.75, 2097153.0);
11710       TEST_f_f (rint, -1048576.75, -1048576.0);
11711       TEST_f_f (rint, -2097152.75, -2097152.0);
11712 #ifndef TEST_FLOAT
11713       TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
11714       TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
11715       TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
11716       TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
11717       TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
11718       TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
11719       TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
11720       TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
11721       TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
11722       TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
11723 #endif
11724 #ifdef TEST_LDOUBLE
11725       /* The result can only be represented in long double.  */
11726       TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
11727       TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
11728       TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
11729       TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
11730       TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
11731 # if LDBL_MANT_DIG > 100
11732       TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
11733       TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
11734       TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
11735 # endif
11736       TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
11737       TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
11738       TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
11739       TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
11740       TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
11741 # if LDBL_MANT_DIG > 100
11742       TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
11743       TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
11744       TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
11745
11746       TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
11747       TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
11748       TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
11749       TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
11750       TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
11751       TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
11752
11753       TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
11754       TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
11755       TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
11756       TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
11757       TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
11758       TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
11759 # endif
11760 #endif
11761     }
11762
11763   fesetround (save_round_mode);
11764
11765   END (rint_upward);
11766 }
11767
11768 static void
11769 round_test (void)
11770 {
11771   /* TODO: missing +/-Inf as well as qNaN tests.  */
11772
11773   START (round);
11774
11775   TEST_f_f (round, 0, 0);
11776   TEST_f_f (round, minus_zero, minus_zero);
11777   TEST_f_f (round, 0.2L, 0.0);
11778   TEST_f_f (round, -0.2L, minus_zero);
11779   TEST_f_f (round, 0.5, 1.0);
11780   TEST_f_f (round, -0.5, -1.0);
11781   TEST_f_f (round, 0.8L, 1.0);
11782   TEST_f_f (round, -0.8L, -1.0);
11783   TEST_f_f (round, 1.5, 2.0);
11784   TEST_f_f (round, -1.5, -2.0);
11785   TEST_f_f (round, 0.1, 0.0);
11786   TEST_f_f (round, 0.25, 0.0);
11787   TEST_f_f (round, 0.625, 1.0);
11788   TEST_f_f (round, -0.1, -0.0);
11789   TEST_f_f (round, -0.25, -0.0);
11790   TEST_f_f (round, -0.625, -1.0);
11791   TEST_f_f (round, 2097152.5, 2097153);
11792   TEST_f_f (round, -2097152.5, -2097153);
11793
11794 #ifdef TEST_LDOUBLE
11795   /* The result can only be represented in long double.  */
11796   TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
11797   TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
11798   TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
11799   TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
11800   TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
11801 # if LDBL_MANT_DIG > 100
11802   TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
11803   TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
11804   TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
11805 # endif
11806
11807   TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
11808   TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
11809   TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
11810   TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
11811   TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
11812 # if LDBL_MANT_DIG > 100
11813   TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
11814   TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
11815   TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
11816 # endif
11817
11818   TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
11819   TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
11820   TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
11821   TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
11822   TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
11823
11824   TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
11825   TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
11826   TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
11827   TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
11828   TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
11829
11830 # if LDBL_MANT_DIG > 100
11831   TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
11832   TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
11833   TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
11834   TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
11835   TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
11836   TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
11837
11838   TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
11839   TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
11840   TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
11841   TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
11842   TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
11843   TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
11844 # endif
11845
11846   TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
11847   TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
11848   TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
11849   TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
11850   TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
11851
11852   TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
11853   TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
11854   TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
11855   TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
11856   TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
11857
11858   TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
11859   TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
11860   TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
11861   TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
11862   TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
11863 #endif
11864
11865   END (round);
11866 }
11867
11868
11869 static void
11870 scalb_test (void)
11871 {
11872
11873   START (scalb);
11874
11875   TEST_ff_f (scalb, 2.0, 0.5, qnan_value, INVALID_EXCEPTION);
11876   TEST_ff_f (scalb, 3.0, -2.5, qnan_value, INVALID_EXCEPTION);
11877
11878   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11879   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11880
11881   TEST_ff_f (scalb, 1, 0, 1);
11882   TEST_ff_f (scalb, -1, 0, -1);
11883
11884   TEST_ff_f (scalb, 0, plus_infty, qnan_value, INVALID_EXCEPTION);
11885   TEST_ff_f (scalb, minus_zero, plus_infty, qnan_value, INVALID_EXCEPTION);
11886
11887   TEST_ff_f (scalb, 0, 2, 0);
11888   TEST_ff_f (scalb, minus_zero, -4, minus_zero);
11889   TEST_ff_f (scalb, 0, 0, 0);
11890   TEST_ff_f (scalb, minus_zero, 0, minus_zero);
11891   TEST_ff_f (scalb, 0, -1, 0);
11892   TEST_ff_f (scalb, minus_zero, -10, minus_zero);
11893   TEST_ff_f (scalb, 0, minus_infty, 0);
11894   TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
11895
11896   TEST_ff_f (scalb, plus_infty, -1, plus_infty);
11897   TEST_ff_f (scalb, minus_infty, -10, minus_infty);
11898   TEST_ff_f (scalb, plus_infty, 0, plus_infty);
11899   TEST_ff_f (scalb, minus_infty, 0, minus_infty);
11900   TEST_ff_f (scalb, plus_infty, 2, plus_infty);
11901   TEST_ff_f (scalb, minus_infty, 100, minus_infty);
11902
11903   TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
11904   TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
11905
11906   TEST_ff_f (scalb, 1, plus_infty, plus_infty);
11907   TEST_ff_f (scalb, -1, plus_infty, minus_infty);
11908   TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
11909   TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
11910
11911   TEST_ff_f (scalb, plus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11912   TEST_ff_f (scalb, minus_infty, minus_infty, qnan_value, INVALID_EXCEPTION);
11913
11914   TEST_ff_f (scalb, qnan_value, 1, qnan_value);
11915   TEST_ff_f (scalb, 1, qnan_value, qnan_value);
11916   TEST_ff_f (scalb, qnan_value, 0, qnan_value);
11917   TEST_ff_f (scalb, 0, qnan_value, qnan_value);
11918   TEST_ff_f (scalb, qnan_value, plus_infty, qnan_value);
11919   TEST_ff_f (scalb, plus_infty, qnan_value, qnan_value);
11920   TEST_ff_f (scalb, qnan_value, qnan_value, qnan_value);
11921
11922   TEST_ff_f (scalb, 0.8L, 4, 12.8L);
11923   TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
11924
11925   END (scalb);
11926 }
11927
11928
11929 static void
11930 scalbn_test (void)
11931 {
11932
11933   START (scalbn);
11934
11935   TEST_fi_f (scalbn, 0, 0, 0);
11936   TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
11937
11938   TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
11939   TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
11940   TEST_fi_f (scalbn, qnan_value, 1, qnan_value);
11941
11942   TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
11943   TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
11944
11945   TEST_fi_f (scalbn, 1, 0L, 1);
11946
11947   TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11948   TEST_fi_f (scalbn, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11949   TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11950   TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11951   TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11952   TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11953   TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11954   TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11955
11956   END (scalbn);
11957 }
11958
11959
11960 static void
11961 scalbln_test (void)
11962 {
11963
11964   START (scalbln);
11965
11966   TEST_fl_f (scalbln, 0, 0, 0);
11967   TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
11968
11969   TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
11970   TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
11971   TEST_fl_f (scalbln, qnan_value, 1, qnan_value);
11972
11973   TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
11974   TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
11975
11976   TEST_fl_f (scalbln, 1, 0L, 1);
11977
11978   TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11979   TEST_fi_f (scalbln, 1, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11980   TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11981   TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11982   TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11983   TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11984   TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
11985   TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11986
11987   TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11988   TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11989   TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11990   TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11991   TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11992   TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11993   TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
11994   TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero, UNDERFLOW_EXCEPTION);
11995
11996 #if LONG_MAX >= 0x100000000
11997   TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
11998   TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
11999   TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12000   TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12001   TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12002   TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12003   TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
12004   TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero, UNDERFLOW_EXCEPTION);
12005 #endif
12006
12007   END (scalbn);
12008 }
12009
12010
12011 static void
12012 signbit_test (void)
12013 {
12014   /* TODO: missing qNaN tests.  */
12015
12016   START (signbit);
12017
12018   TEST_f_b (signbit, 0, 0);
12019   TEST_f_b (signbit, minus_zero, 1);
12020   TEST_f_b (signbit, plus_infty, 0);
12021   TEST_f_b (signbit, minus_infty, 1);
12022
12023   /* signbit (x) != 0 for x < 0.  */
12024   TEST_f_b (signbit, -1, 1);
12025   /* signbit (x) == 0 for x >= 0.  */
12026   TEST_f_b (signbit, 1, 0);
12027
12028   END (signbit);
12029 }
12030
12031
12032 static void
12033 sin_test (void)
12034 {
12035   errno = 0;
12036   FUNC(sin) (0);
12037   if (errno == ENOSYS)
12038     /* Function not implemented.  */
12039     return;
12040
12041   START (sin);
12042
12043   TEST_f_f (sin, 0, 0);
12044   TEST_f_f (sin, minus_zero, minus_zero);
12045   errno = 0;
12046   TEST_f_f (sin, plus_infty, qnan_value, INVALID_EXCEPTION);
12047   check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
12048   errno = 0;
12049   TEST_f_f (sin, minus_infty, qnan_value, INVALID_EXCEPTION);
12050   check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
12051   errno = 0;
12052   TEST_f_f (sin, qnan_value, qnan_value);
12053   check_int ("errno for sin(qNaN) unchanged", errno, 0, 0, 0, 0);
12054
12055   TEST_f_f (sin, M_PI_6l, 0.5);
12056   TEST_f_f (sin, -M_PI_6l, -0.5);
12057   TEST_f_f (sin, M_PI_2l, 1);
12058   TEST_f_f (sin, -M_PI_2l, -1);
12059   TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
12060
12061   TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
12062   TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
12063
12064   TEST_f_f (sin, 0x1.7f4134p+103, -6.6703229329788657073304190650534846045235e-08L);
12065
12066 #ifdef TEST_DOUBLE
12067   TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
12068   TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
12069 #endif
12070
12071 #ifndef TEST_FLOAT
12072   TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
12073   TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
12074 #endif
12075
12076 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12077   TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
12078 #endif
12079
12080   TEST_f_f (sin, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L);
12081   TEST_f_f (sin, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L);
12082   TEST_f_f (sin, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L);
12083   TEST_f_f (sin, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L);
12084   TEST_f_f (sin, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L);
12085   TEST_f_f (sin, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L);
12086
12087   END (sin);
12088
12089 }
12090
12091
12092 static void
12093 sin_test_tonearest (void)
12094 {
12095   int save_round_mode;
12096   errno = 0;
12097   FUNC(sin) (0);
12098   if (errno == ENOSYS)
12099     /* Function not implemented.  */
12100     return;
12101
12102   START (sin_tonearest);
12103
12104   save_round_mode = fegetround ();
12105
12106   if (!fesetround (FE_TONEAREST))
12107     {
12108       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12109       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12110       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12111       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12112       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12113       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12114       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12115       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12116       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12117       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12118     }
12119
12120   fesetround (save_round_mode);
12121
12122   END (sin_tonearest);
12123 }
12124
12125
12126 static void
12127 sin_test_towardzero (void)
12128 {
12129   int save_round_mode;
12130   errno = 0;
12131   FUNC(sin) (0);
12132   if (errno == ENOSYS)
12133     /* Function not implemented.  */
12134     return;
12135
12136   START (sin_towardzero);
12137
12138   save_round_mode = fegetround ();
12139
12140   if (!fesetround (FE_TOWARDZERO))
12141     {
12142       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12143       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12144       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12145       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12146       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12147       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12148       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12149       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12150       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12151       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12152     }
12153
12154   fesetround (save_round_mode);
12155
12156   END (sin_towardzero);
12157 }
12158
12159
12160 static void
12161 sin_test_downward (void)
12162 {
12163   int save_round_mode;
12164   errno = 0;
12165   FUNC(sin) (0);
12166   if (errno == ENOSYS)
12167     /* Function not implemented.  */
12168     return;
12169
12170   START (sin_downward);
12171
12172   save_round_mode = fegetround ();
12173
12174   if (!fesetround (FE_DOWNWARD))
12175     {
12176       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12177       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12178       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12179       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12180       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12181       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12182       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12183       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12184       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12185       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12186     }
12187
12188   fesetround (save_round_mode);
12189
12190   END (sin_downward);
12191 }
12192
12193
12194 static void
12195 sin_test_upward (void)
12196 {
12197   int save_round_mode;
12198   errno = 0;
12199   FUNC(sin) (0);
12200   if (errno == ENOSYS)
12201     /* Function not implemented.  */
12202     return;
12203
12204   START (sin_upward);
12205
12206   save_round_mode = fegetround ();
12207
12208   if (!fesetround (FE_UPWARD))
12209     {
12210       TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
12211       TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
12212       TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
12213       TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
12214       TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
12215       TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
12216       TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
12217       TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
12218       TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
12219       TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
12220     }
12221
12222   fesetround (save_round_mode);
12223
12224   END (sin_upward);
12225 }
12226
12227
12228 static void
12229 sincos_test (void)
12230 {
12231   FLOAT sin_res, cos_res;
12232
12233   errno = 0;
12234   FUNC(sincos) (0, &sin_res, &cos_res);
12235   if (errno == ENOSYS)
12236     /* Function not implemented.  */
12237     return;
12238
12239   START (sincos);
12240
12241   /* sincos is treated differently because it returns void.  */
12242   TEST_extra (sincos, 0, 0, 1);
12243
12244   TEST_extra (sincos, minus_zero, minus_zero, 1);
12245   TEST_extra (sincos, plus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12246   TEST_extra (sincos, minus_infty, qnan_value, qnan_value, INVALID_EXCEPTION);
12247   TEST_extra (sincos, qnan_value, qnan_value, qnan_value);
12248
12249   /* The value of M_PI_2l is never exactly PI/2, and therefore the
12250      answer is never exactly zero. The answer is equal to the error
12251      in rounding PI/2 for the type used.  Thus the answer is unique
12252      to each type.  */
12253 #ifdef TEST_FLOAT
12254   /* 32-bit float.  */
12255   TEST_extra (sincos, M_PI_2l, 1, -0x1.777a5cp-25L);
12256 #endif
12257 #if defined TEST_DOUBLE || (defined TEST_LDOUBLE && LDBL_MANT_DIG == 53)
12258   /* 64-bit double or 64-bit long double.  */
12259   TEST_extra (sincos, M_PI_2l, 1, 0x1.1a62633145c07p-54L);
12260 #endif
12261 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 64
12262   /* 96-bit long double.  */
12263   TEST_extra (sincos, M_PI_2l, 1, -0xe.ce675d1fc8f8cbbp-69L);
12264 #endif
12265 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
12266   /* 128-bit IBM long double.  */
12267   TEST_extra (sincos, M_PI_2l, 1, 0x1.c1cd129024e088a67cc74020bcp-107L);
12268 #endif
12269 #if defined TEST_LDOUBLE && LDBL_MANT_DIG == 113
12270   /* 128-bit long double.  */
12271   TEST_extra (sincos, M_PI_2l, 1, 0x1.cd129024e088a67cc74020bbea64p-115L);
12272 #endif
12273
12274   TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
12275   TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
12276   TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
12277
12278   TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
12279   TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
12280
12281 #ifdef TEST_DOUBLE
12282   TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
12283 #endif
12284
12285 #ifndef TEST_FLOAT
12286   TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
12287   TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
12288 #endif
12289
12290 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12291   TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
12292 #endif
12293
12294   TEST_extra (sincos, 0x1p+120, 3.77820109360752022655548470056922991960587e-01L, -9.25879022854837867303861764107414946730833e-01L);
12295   TEST_extra (sincos, 0x1p+127, 6.23385512955870240370428801097126489001833e-01L, 7.81914638714960072263910298466369236613162e-01L);
12296   TEST_extra (sincos, 0x1.fffff8p+127, 4.85786063130487339701113680434728152037092e-02L, 9.98819362551949040703862043664101081064641e-01L);
12297   TEST_extra (sincos, 0x1.fffffep+127, -5.21876523333658540551505357019806722935726e-01L, 8.53021039830304158051791467692161107353094e-01L);
12298   TEST_extra (sincos, 0x1p+50, 4.96396515208940840876821859865411368093356e-01L, 8.68095904660550604334592502063501320395739e-01L);
12299   TEST_extra (sincos, 0x1p+28, -9.86198211836975655703110310527108292055548e-01L, -1.65568979490578758865468278195361551113358e-01L);
12300
12301   END (sincos);
12302 }
12303
12304 static void
12305 sinh_test (void)
12306 {
12307   errno = 0;
12308   FUNC(sinh) (0.7L);
12309   if (errno == ENOSYS)
12310     /* Function not implemented.  */
12311     return;
12312
12313   START (sinh);
12314   TEST_f_f (sinh, 0, 0);
12315   TEST_f_f (sinh, minus_zero, minus_zero);
12316
12317 #ifndef TEST_INLINE
12318   TEST_f_f (sinh, plus_infty, plus_infty);
12319   TEST_f_f (sinh, minus_infty, minus_infty);
12320 #endif
12321   TEST_f_f (sinh, qnan_value, qnan_value);
12322
12323   TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
12324   TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
12325
12326   END (sinh);
12327 }
12328
12329
12330 static void
12331 sinh_test_tonearest (void)
12332 {
12333   int save_round_mode;
12334   errno = 0;
12335   FUNC(sinh) (0);
12336   if (errno == ENOSYS)
12337     /* Function not implemented.  */
12338     return;
12339
12340   START (sinh_tonearest);
12341
12342   save_round_mode = fegetround ();
12343
12344   if (!fesetround (FE_TONEAREST))
12345     {
12346       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12347       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12348       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12349     }
12350
12351   fesetround (save_round_mode);
12352
12353   END (sinh_tonearest);
12354 }
12355
12356
12357 static void
12358 sinh_test_towardzero (void)
12359 {
12360   int save_round_mode;
12361   errno = 0;
12362   FUNC(sinh) (0);
12363   if (errno == ENOSYS)
12364     /* Function not implemented.  */
12365     return;
12366
12367   START (sinh_towardzero);
12368
12369   save_round_mode = fegetround ();
12370
12371   if (!fesetround (FE_TOWARDZERO))
12372     {
12373       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12374       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12375       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12376     }
12377
12378   fesetround (save_round_mode);
12379
12380   END (sinh_towardzero);
12381 }
12382
12383
12384 static void
12385 sinh_test_downward (void)
12386 {
12387   int save_round_mode;
12388   errno = 0;
12389   FUNC(sinh) (0);
12390   if (errno == ENOSYS)
12391     /* Function not implemented.  */
12392     return;
12393
12394   START (sinh_downward);
12395
12396   save_round_mode = fegetround ();
12397
12398   if (!fesetround (FE_DOWNWARD))
12399     {
12400       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12401       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12402       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12403     }
12404
12405   fesetround (save_round_mode);
12406
12407   END (sinh_downward);
12408 }
12409
12410
12411 static void
12412 sinh_test_upward (void)
12413 {
12414   int save_round_mode;
12415   errno = 0;
12416   FUNC(sinh) (0);
12417   if (errno == ENOSYS)
12418     /* Function not implemented.  */
12419     return;
12420
12421   START (sinh_upward);
12422
12423   save_round_mode = fegetround ();
12424
12425   if (!fesetround (FE_UPWARD))
12426     {
12427       TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
12428       TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
12429       TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
12430     }
12431
12432   fesetround (save_round_mode);
12433
12434   END (sinh_upward);
12435 }
12436
12437
12438 static void
12439 sqrt_test (void)
12440 {
12441   errno = 0;
12442   FUNC(sqrt) (1);
12443   if (errno == ENOSYS)
12444     /* Function not implemented.  */
12445     return;
12446
12447   START (sqrt);
12448
12449   TEST_f_f (sqrt, 0, 0);
12450   TEST_f_f (sqrt, qnan_value, qnan_value);
12451   TEST_f_f (sqrt, plus_infty, plus_infty);
12452
12453   TEST_f_f (sqrt, minus_zero, minus_zero);
12454
12455   /* sqrt (x) == qNaN plus invalid exception for x < 0.  */
12456   TEST_f_f (sqrt, -1, qnan_value, INVALID_EXCEPTION);
12457   TEST_f_f (sqrt, -max_value, qnan_value, INVALID_EXCEPTION);
12458   TEST_f_f (sqrt, minus_infty, qnan_value, INVALID_EXCEPTION);
12459
12460   TEST_f_f (sqrt, 2209, 47);
12461   TEST_f_f (sqrt, 4, 2);
12462   TEST_f_f (sqrt, 2, M_SQRT2l);
12463   TEST_f_f (sqrt, 0.25, 0.5);
12464   TEST_f_f (sqrt, 6642.25, 81.5);
12465   TEST_f_f (sqrt, 15190.5625L, 123.25L);
12466   TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
12467
12468   END (sqrt);
12469 }
12470
12471
12472 static void
12473 tan_test (void)
12474 {
12475   errno = 0;
12476   FUNC(tan) (0);
12477   if (errno == ENOSYS)
12478     /* Function not implemented.  */
12479     return;
12480
12481   START (tan);
12482
12483   TEST_f_f (tan, 0, 0);
12484   TEST_f_f (tan, minus_zero, minus_zero);
12485   errno = 0;
12486   TEST_f_f (tan, plus_infty, qnan_value, INVALID_EXCEPTION);
12487   check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
12488   errno = 0;
12489   TEST_f_f (tan, minus_infty, qnan_value, INVALID_EXCEPTION);
12490   check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
12491   errno = 0;
12492   TEST_f_f (tan, qnan_value, qnan_value);
12493   check_int ("errno for tan(qNaN) == 0", errno, 0, 0, 0, 0);
12494
12495   TEST_f_f (tan, M_PI_4l, 1);
12496   TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
12497
12498   TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
12499   TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
12500
12501   TEST_f_f (tan, 0xc.9p-4, 0.9995162902115457818029468900654150261381L);
12502   TEST_f_f (tan, 0xc.908p-4, 0.9997603425502441410973077452249560802034L);
12503   TEST_f_f (tan, 0xc.90cp-4, 0.9998823910588060302788513970802357770031L);
12504   TEST_f_f (tan, 0xc.90ep-4, 0.9999434208994808753305784795924711152508L);
12505   TEST_f_f (tan, 0xc.90fp-4, 0.9999739372166156702433266059635165160515L);
12506   TEST_f_f (tan, 0xc.90f8p-4, 0.9999891957244072765118898375645469865764L);
12507   TEST_f_f (tan, 0xc.90fcp-4, 0.9999968250656122402859679132395522927393L);
12508   TEST_f_f (tan, 0xc.90fdp-4, 0.9999987324100083358016192309006353329444L);
12509   TEST_f_f (tan, 0xc.90fd8p-4, 0.9999996860835706212861509874451585282616L);
12510   TEST_f_f (tan, 0xc.90fdap-4, 0.9999999245021033010474530133665235922808L);
12511   TEST_f_f (tan, 0xc.ap-4, 1.0073556597407272165371804539701396631519L);
12512   TEST_f_f (tan, 0xc.98p-4, 1.0034282930863044654045449407466962736255L);
12513   TEST_f_f (tan, 0xc.94p-4, 1.0014703786820082237342656561856877993328L);
12514   TEST_f_f (tan, 0xc.92p-4, 1.0004928571392300571266638743539017593717L);
12515   TEST_f_f (tan, 0xc.91p-4, 1.0000044544650244953647966900221905361131L);
12516   TEST_f_f (tan, 0xc.90fep-4, 1.0000006397580424009014454926842136804016L);
12517   TEST_f_f (tan, 0xc.90fdcp-4, 1.0000001629206928242190327320047489394217L);
12518   TEST_f_f (tan, 0xc.90fdbp-4, 1.0000000437113909572052640953950483705005L);
12519
12520   TEST_f_f (tan, -0xc.9p-4, -0.9995162902115457818029468900654150261381L);
12521   TEST_f_f (tan, -0xc.908p-4, -0.9997603425502441410973077452249560802034L);
12522   TEST_f_f (tan, -0xc.90cp-4, -0.9998823910588060302788513970802357770031L);
12523   TEST_f_f (tan, -0xc.90ep-4, -0.9999434208994808753305784795924711152508L);
12524   TEST_f_f (tan, -0xc.90fp-4, -0.9999739372166156702433266059635165160515L);
12525   TEST_f_f (tan, -0xc.90f8p-4, -0.9999891957244072765118898375645469865764L);
12526   TEST_f_f (tan, -0xc.90fcp-4, -0.9999968250656122402859679132395522927393L);
12527   TEST_f_f (tan, -0xc.90fdp-4, -0.9999987324100083358016192309006353329444L);
12528   TEST_f_f (tan, -0xc.90fd8p-4, -0.9999996860835706212861509874451585282616L);
12529   TEST_f_f (tan, -0xc.90fdap-4, -0.9999999245021033010474530133665235922808L);
12530   TEST_f_f (tan, -0xc.ap-4, -1.0073556597407272165371804539701396631519L);
12531   TEST_f_f (tan, -0xc.98p-4, -1.0034282930863044654045449407466962736255L);
12532   TEST_f_f (tan, -0xc.94p-4, -1.0014703786820082237342656561856877993328L);
12533   TEST_f_f (tan, -0xc.92p-4, -1.0004928571392300571266638743539017593717L);
12534   TEST_f_f (tan, -0xc.91p-4, -1.0000044544650244953647966900221905361131L);
12535   TEST_f_f (tan, -0xc.90fep-4, -1.0000006397580424009014454926842136804016L);
12536   TEST_f_f (tan, -0xc.90fdcp-4, -1.0000001629206928242190327320047489394217L);
12537   TEST_f_f (tan, -0xc.90fdbp-4, -1.0000000437113909572052640953950483705005L);
12538
12539 #ifndef TEST_FLOAT
12540   TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
12541   TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
12542 #endif
12543
12544 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12545   TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
12546 #endif
12547
12548   END (tan);
12549 }
12550
12551
12552 static void
12553 tan_test_tonearest (void)
12554 {
12555   int save_round_mode;
12556   errno = 0;
12557   FUNC(tan) (0);
12558   if (errno == ENOSYS)
12559     /* Function not implemented.  */
12560     return;
12561
12562   START (tan_tonearest);
12563
12564   save_round_mode = fegetround ();
12565
12566   if (!fesetround (FE_TONEAREST))
12567     {
12568       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12569       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12570       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12571       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12572       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12573       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12574       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12575       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12576       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12577       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12578     }
12579
12580   fesetround (save_round_mode);
12581
12582   END (tan_tonearest);
12583 }
12584
12585
12586 static void
12587 tan_test_towardzero (void)
12588 {
12589   int save_round_mode;
12590   errno = 0;
12591   FUNC(tan) (0);
12592   if (errno == ENOSYS)
12593     /* Function not implemented.  */
12594     return;
12595
12596   START (tan_towardzero);
12597
12598   save_round_mode = fegetround ();
12599
12600   if (!fesetround (FE_TOWARDZERO))
12601     {
12602       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12603       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12604       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12605       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12606       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12607       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12608       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12609       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12610       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12611       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12612     }
12613
12614   fesetround (save_round_mode);
12615
12616   END (tan_towardzero);
12617 }
12618
12619
12620 static void
12621 tan_test_downward (void)
12622 {
12623   int save_round_mode;
12624   errno = 0;
12625   FUNC(tan) (0);
12626   if (errno == ENOSYS)
12627     /* Function not implemented.  */
12628     return;
12629
12630   START (tan_downward);
12631
12632   save_round_mode = fegetround ();
12633
12634   if (!fesetround (FE_DOWNWARD))
12635     {
12636       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12637       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12638       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12639       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12640       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12641       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12642       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12643       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12644       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12645       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12646     }
12647
12648   fesetround (save_round_mode);
12649
12650   END (tan_downward);
12651 }
12652
12653
12654 static void
12655 tan_test_upward (void)
12656 {
12657   int save_round_mode;
12658   errno = 0;
12659   FUNC(tan) (0);
12660   if (errno == ENOSYS)
12661     /* Function not implemented.  */
12662     return;
12663
12664   START (tan_upward);
12665
12666   save_round_mode = fegetround ();
12667
12668   if (!fesetround (FE_UPWARD))
12669     {
12670       TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
12671       TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
12672       TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
12673       TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
12674       TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
12675       TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
12676       TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
12677       TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
12678       TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
12679       TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
12680     }
12681
12682   fesetround (save_round_mode);
12683
12684   END (tan_upward);
12685 }
12686
12687
12688 static void
12689 tanh_test (void)
12690 {
12691   errno = 0;
12692   FUNC(tanh) (0.7L);
12693   if (errno == ENOSYS)
12694     /* Function not implemented.  */
12695     return;
12696
12697   START (tanh);
12698
12699   TEST_f_f (tanh, 0, 0);
12700   TEST_f_f (tanh, minus_zero, minus_zero);
12701
12702 #ifndef TEST_INLINE
12703   TEST_f_f (tanh, plus_infty, 1);
12704   TEST_f_f (tanh, minus_infty, -1);
12705 #endif
12706   TEST_f_f (tanh, qnan_value, qnan_value);
12707
12708   TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
12709   TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
12710
12711   TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
12712   TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
12713
12714   /* 2^-57  */
12715   TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
12716
12717   END (tanh);
12718 }
12719
12720 static void
12721 tgamma_test (void)
12722 {
12723   errno = 0;
12724   FUNC(tgamma) (1);
12725   if (errno == ENOSYS)
12726     /* Function not implemented.  */
12727     return;
12728
12729   START (tgamma);
12730
12731   TEST_f_f (tgamma, plus_infty, plus_infty);
12732   TEST_f_f (tgamma, max_value, plus_infty, OVERFLOW_EXCEPTION);
12733   TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
12734   TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
12735   /* tgamma (x) == qNaN plus invalid exception for integer x <= 0.  */
12736   TEST_f_f (tgamma, -2, qnan_value, INVALID_EXCEPTION);
12737   TEST_f_f (tgamma, -max_value, qnan_value, INVALID_EXCEPTION);
12738   TEST_f_f (tgamma, minus_infty, qnan_value, INVALID_EXCEPTION);
12739   TEST_f_f (tgamma, qnan_value, qnan_value);
12740
12741   TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
12742   TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
12743
12744   TEST_f_f (tgamma, 1, 1);
12745   TEST_f_f (tgamma, 4, 6);
12746
12747   TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
12748   TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
12749
12750   END (tgamma);
12751 }
12752
12753
12754 static void
12755 trunc_test (void)
12756 {
12757   START (trunc);
12758
12759   TEST_f_f (trunc, plus_infty, plus_infty);
12760   TEST_f_f (trunc, minus_infty, minus_infty);
12761   TEST_f_f (trunc, qnan_value, qnan_value);
12762
12763   TEST_f_f (trunc, 0, 0);
12764   TEST_f_f (trunc, minus_zero, minus_zero);
12765   TEST_f_f (trunc, 0.1, 0);
12766   TEST_f_f (trunc, 0.25, 0);
12767   TEST_f_f (trunc, 0.625, 0);
12768   TEST_f_f (trunc, -0.1, minus_zero);
12769   TEST_f_f (trunc, -0.25, minus_zero);
12770   TEST_f_f (trunc, -0.625, minus_zero);
12771   TEST_f_f (trunc, 1, 1);
12772   TEST_f_f (trunc, -1, -1);
12773   TEST_f_f (trunc, 1.625, 1);
12774   TEST_f_f (trunc, -1.625, -1);
12775
12776   TEST_f_f (trunc, 1048580.625L, 1048580L);
12777   TEST_f_f (trunc, -1048580.625L, -1048580L);
12778
12779   TEST_f_f (trunc, 8388610.125L, 8388610.0L);
12780   TEST_f_f (trunc, -8388610.125L, -8388610.0L);
12781
12782   TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
12783   TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
12784
12785 #ifdef TEST_LDOUBLE
12786   /* The result can only be represented in long double.  */
12787   TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
12788   TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
12789   TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
12790   TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
12791   TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
12792
12793 # if LDBL_MANT_DIG > 100
12794   TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
12795   TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
12796   TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
12797 # endif
12798
12799   TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
12800   TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
12801   TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
12802   TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
12803   TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
12804
12805 # if LDBL_MANT_DIG > 100
12806   TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
12807   TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
12808   TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
12809 # endif
12810
12811   TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
12812   TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
12813   TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
12814   TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
12815   TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
12816
12817 # if LDBL_MANT_DIG > 100
12818   TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
12819   TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
12820   TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
12821   TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
12822   TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
12823   TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
12824 # endif
12825
12826   TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
12827   TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
12828   TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
12829   TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
12830   TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
12831
12832 # if LDBL_MANT_DIG > 100
12833   TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
12834   TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
12835   TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
12836   TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
12837   TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
12838   TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
12839 # endif
12840
12841   TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
12842   TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
12843   TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
12844   TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
12845   TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
12846
12847   TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
12848   TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
12849   TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
12850   TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
12851   TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
12852
12853   TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
12854   TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
12855   TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
12856   TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
12857   TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
12858 #endif
12859
12860   END (trunc);
12861 }
12862
12863 static void
12864 y0_test (void)
12865 {
12866   FLOAT s, c;
12867   errno = 0;
12868   FUNC (sincos) (0, &s, &c);
12869   if (errno == ENOSYS)
12870     /* Required function not implemented.  */
12871     return;
12872   FUNC(y0) (1);
12873   if (errno == ENOSYS)
12874     /* Function not implemented.  */
12875     return;
12876
12877   /* y0 is the Bessel function of the second kind of order 0 */
12878   START (y0);
12879
12880   TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
12881   TEST_f_f (y0, -max_value, minus_infty, INVALID_EXCEPTION);
12882   TEST_f_f (y0, 0.0, minus_infty);
12883   TEST_f_f (y0, qnan_value, qnan_value);
12884   TEST_f_f (y0, plus_infty, 0);
12885
12886   TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
12887   TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
12888   TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
12889   TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
12890   TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
12891   TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
12892   TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
12893
12894   TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
12895
12896 #ifndef TEST_FLOAT
12897   TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
12898   TEST_f_f (y0, 0x1p1023L, 8.2687542933709649327986678723012001545638e-155L);
12899 #endif
12900
12901 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12902   TEST_f_f (y0, 0x1p16382L, 8.0839224448726336195866026476176740513439e-2467L);
12903   TEST_f_f (y0, 0x1p16383L, -3.8895531955766020648617743624167352352217e-2467L);
12904 #endif
12905
12906   TEST_f_f (y0, 0x1p-10L, -4.4865150767109739412411806297168793661098L);
12907   TEST_f_f (y0, 0x1p-20L, -8.8992283012125827603076426611387876938160L);
12908   TEST_f_f (y0, 0x1p-30L, -1.3311940304267782826037118027401817264906e+1L);
12909   TEST_f_f (y0, 0x1p-40L, -1.7724652307320814696990854700366226762563e+1L);
12910   TEST_f_f (y0, 0x1p-50L, -2.2137364310373846564919987139743760738155e+1L);
12911   TEST_f_f (y0, 0x1p-60L, -2.6550076313426878432849115782108205929120e+1L);
12912   TEST_f_f (y0, 0x1p-70L, -3.0962788316479910300778244424468159753887e+1L);
12913   TEST_f_f (y0, 0x1p-80L, -3.5375500319532942168707373066828113573541e+1L);
12914   TEST_f_f (y0, 0x1p-90L, -3.9788212322585974036636501709188067393195e+1L);
12915   TEST_f_f (y0, 0x1p-100L, -4.420092432563900590456563035154802121284e+1L);
12916   TEST_f_f (y0, 0x1p-110L, -4.861363632869203777249475899390797503250e+1L);
12917
12918   END (y0);
12919 }
12920
12921
12922 static void
12923 y1_test (void)
12924 {
12925   FLOAT s, c;
12926   errno = 0;
12927   FUNC (sincos) (0, &s, &c);
12928   if (errno == ENOSYS)
12929     /* Required function not implemented.  */
12930     return;
12931   FUNC(y1) (1);
12932   if (errno == ENOSYS)
12933     /* Function not implemented.  */
12934     return;
12935
12936   /* y1 is the Bessel function of the second kind of order 1 */
12937   START (y1);
12938
12939   TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
12940   TEST_f_f (y1, -max_value, minus_infty, INVALID_EXCEPTION);
12941   TEST_f_f (y1, 0.0, minus_infty);
12942   TEST_f_f (y1, plus_infty, 0);
12943   TEST_f_f (y1, qnan_value, qnan_value);
12944
12945   TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
12946   TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
12947   TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
12948   TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
12949   TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
12950   TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
12951   TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
12952
12953   TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
12954
12955 #ifndef TEST_FLOAT
12956   TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
12957   TEST_f_f (y1, 0x1p1023L, 1.5665258060609012834424478437196679802783e-155L);
12958 #endif
12959
12960 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
12961   TEST_f_f (y1, 0x1p16382L, 1.2193782500509000574176799046642541129387e-2466L);
12962   TEST_f_f (y1, 0x1p16383L, -9.5859502826270374691362975419147645151233e-2467L);
12963 #endif
12964
12965   TEST_f_f (y1, 0x1p-10L, -6.5190099301063115047395187618929589514382e+02L);
12966   TEST_f_f (y1, 0x1p-20L, -6.6754421443450423911167962313100637952285e+05L);
12967   TEST_f_f (y1, 0x1p-30L, -6.8356527557643159612937462812258975438856e+08L);
12968   TEST_f_f (y1, 0x1p-40L, -6.9997084219026594793707805777425993547887e+11L);
12969   TEST_f_f (y1, 0x1p-50L, -7.1677014240283233068755952926181262431559e+14L);
12970   TEST_f_f (y1, 0x1p-60L, -7.3397262582050030662406095795388448059822e+17L);
12971   TEST_f_f (y1, 0x1p-70L, -7.5158796884019231398303842094477769620063e+20L);
12972   TEST_f_f (y1, 0x1p-80L, -7.6962608009235692951863134304745236090943e+23L);
12973   TEST_f_f (y1, 0x1p-90L, -7.8809710601457349582707849528059121757126e+26L);
12974   TEST_f_f (y1, 0x1p-100L, -8.0701143655892325972692837916732540679297e+29L);
12975   TEST_f_f (y1, 0x1p-110L, -8.2637971103633741796037466026734121655600e+32L);
12976
12977   END (y1);
12978 }
12979
12980
12981 static void
12982 yn_test (void)
12983 {
12984   FLOAT s, c;
12985   errno = 0;
12986   FUNC (sincos) (0, &s, &c);
12987   if (errno == ENOSYS)
12988     /* Required function not implemented.  */
12989     return;
12990   FUNC(yn) (1, 1);
12991   if (errno == ENOSYS)
12992     /* Function not implemented.  */
12993     return;
12994
12995   /* yn is the Bessel function of the second kind of order n */
12996   START (yn);
12997
12998   /* yn (0, x) == y0 (x)  */
12999   TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
13000   TEST_ff_f (yn, 0, -max_value, minus_infty, INVALID_EXCEPTION);
13001   TEST_ff_f (yn, 0, 0.0, minus_infty);
13002   TEST_ff_f (yn, 0, qnan_value, qnan_value);
13003   TEST_ff_f (yn, 0, plus_infty, 0);
13004
13005   TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
13006   TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
13007   TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
13008   TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
13009   TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
13010   TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
13011   TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
13012
13013   /* yn (1, x) == y1 (x)  */
13014   TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
13015   TEST_ff_f (yn, 1, 0.0, minus_infty);
13016   TEST_ff_f (yn, 1, plus_infty, 0);
13017   TEST_ff_f (yn, 1, qnan_value, qnan_value);
13018
13019   TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
13020   TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
13021   TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
13022   TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
13023   TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
13024   TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
13025   TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
13026
13027   /* yn (3, x)  */
13028   TEST_ff_f (yn, 3, plus_infty, 0);
13029   TEST_ff_f (yn, 3, qnan_value, qnan_value);
13030
13031   TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
13032   TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
13033   TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
13034   TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
13035   TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
13036
13037   /* yn (10, x)  */
13038   TEST_ff_f (yn, 10, plus_infty, 0);
13039   TEST_ff_f (yn, 10, qnan_value, qnan_value);
13040
13041   TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
13042   TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
13043   TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
13044   TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
13045   TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
13046
13047   /* Check whether yn returns correct value for LDBL_MIN, DBL_MIN,
13048      and FLT_MIN.  See Bug 14173.  */
13049   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
13050
13051   errno = 0;
13052   TEST_ff_f (yn, 10, min_value, minus_infty, OVERFLOW_EXCEPTION);
13053   check_int ("errno for yn(10,-min) == ERANGE", errno, ERANGE, 0, 0, 0);
13054
13055   END (yn);
13056 }
13057
13058
13059 static void
13060 significand_test (void)
13061 {
13062   /* significand returns the mantissa of the exponential representation.  */
13063
13064   /* TODO: missing +/-Inf as well as qNaN tests.  */
13065
13066   START (significand);
13067
13068   TEST_f_f (significand, 4.0, 1.0);
13069   TEST_f_f (significand, 6.0, 1.5);
13070   TEST_f_f (significand, 8.0, 1.0);
13071
13072   END (significand);
13073 }
13074
13075
13076 static void
13077 initialize (void)
13078 {
13079   fpstack_test ("start *init*");
13080
13081   plus_zero = 0.0;
13082   qnan_value = FUNC (__builtin_nan) ("");
13083   minus_zero = FUNC (copysign) (0.0, -1.0);
13084   plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
13085                        HUGE_VALL, HUGE_VAL, HUGE_VALF);
13086   minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
13087                         -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
13088   max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
13089                       LDBL_MAX, DBL_MAX, FLT_MAX);
13090   min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
13091                       LDBL_MIN, DBL_MIN, FLT_MIN);
13092   min_subnorm_value = CHOOSE (__LDBL_DENORM_MIN__,
13093                               __DBL_DENORM_MIN__,
13094                               __FLT_DENORM_MIN__,
13095                               __LDBL_DENORM_MIN__,
13096                               __DBL_DENORM_MIN__,
13097                               __FLT_DENORM_MIN__);
13098
13099   (void) &plus_zero;
13100   (void) &qnan_value;
13101   (void) &minus_zero;
13102   (void) &plus_infty;
13103   (void) &minus_infty;
13104   (void) &max_value;
13105   (void) &min_value;
13106   (void) &min_subnorm_value;
13107
13108   /* Clear all exceptions.  From now on we must not get random exceptions.  */
13109   feclearexcept (FE_ALL_EXCEPT);
13110
13111   /* Test to make sure we start correctly.  */
13112   fpstack_test ("end *init*");
13113 }
13114
13115 /* Definitions of arguments for argp functions.  */
13116 static const struct argp_option options[] =
13117 {
13118   { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
13119   { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
13120   { "no-max-error", 'f', NULL, 0,
13121     "Don't output maximal errors of functions"},
13122   { "no-points", 'p', NULL, 0,
13123     "Don't output results of functions invocations"},
13124   { "ignore-max-ulp", 'i', "yes/no", 0,
13125     "Ignore given maximal errors"},
13126   { "output-dir", 'o', "DIR", 0,
13127     "Directory where generated files will be placed"},
13128   { NULL, 0, NULL, 0, NULL }
13129 };
13130
13131 /* Short description of program.  */
13132 static const char doc[] = "Math test suite: " TEST_MSG ;
13133
13134 /* Prototype for option handler.  */
13135 static error_t parse_opt (int key, char *arg, struct argp_state *state);
13136
13137 /* Data structure to communicate with argp functions.  */
13138 static struct argp argp =
13139 {
13140   options, parse_opt, NULL, doc,
13141 };
13142
13143
13144 /* Handle program arguments.  */
13145 static error_t
13146 parse_opt (int key, char *arg, struct argp_state *state)
13147 {
13148   switch (key)
13149     {
13150     case 'f':
13151       output_max_error = 0;
13152       break;
13153     case 'i':
13154       if (strcmp (arg, "yes") == 0)
13155         ignore_max_ulp = 1;
13156       else if (strcmp (arg, "no") == 0)
13157         ignore_max_ulp = 0;
13158       break;
13159     case 'o':
13160       output_dir = (char *) malloc (strlen (arg) + 1);
13161       if (output_dir != NULL)
13162         strcpy (output_dir, arg);
13163       else
13164         return errno;
13165       break;
13166     case 'p':
13167       output_points = 0;
13168       break;
13169     case 'u':
13170       output_ulps = 1;
13171       break;
13172     case 'v':
13173       if (optarg)
13174         verbose = (unsigned int) strtoul (optarg, NULL, 0);
13175       else
13176         verbose = 3;
13177       break;
13178     default:
13179       return ARGP_ERR_UNKNOWN;
13180     }
13181   return 0;
13182 }
13183
13184 #if 0
13185 /* function to check our ulp calculation.  */
13186 void
13187 check_ulp (void)
13188 {
13189   int i;
13190
13191   FLOAT u, diff, ulp;
13192   /* This gives one ulp.  */
13193   u = FUNC(nextafter) (10, 20);
13194   check_equal (10.0, u, 1, &diff, &ulp);
13195   printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
13196
13197   /* This gives one more ulp.  */
13198   u = FUNC(nextafter) (u, 20);
13199   check_equal (10.0, u, 2, &diff, &ulp);
13200   printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
13201
13202   /* And now calculate 100 ulp.  */
13203   for (i = 2; i < 100; i++)
13204     u = FUNC(nextafter) (u, 20);
13205   check_equal (10.0, u, 100, &diff, &ulp);
13206   printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
13207 }
13208 #endif
13209
13210 int
13211 main (int argc, char **argv)
13212 {
13213
13214   int remaining;
13215   char *ulps_file_path;
13216   size_t dir_len = 0;
13217
13218   verbose = 1;
13219   output_ulps = 0;
13220   output_max_error = 1;
13221   output_points = 1;
13222   output_dir = NULL;
13223   /* XXX set to 0 for releases.  */
13224   ignore_max_ulp = 0;
13225
13226   /* Parse and process arguments.  */
13227   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
13228
13229   if (remaining != argc)
13230     {
13231       fprintf (stderr, "wrong number of arguments");
13232       argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
13233       exit (EXIT_FAILURE);
13234     }
13235
13236   if (output_ulps)
13237     {
13238       if (output_dir != NULL)
13239         dir_len = strlen (output_dir);
13240       ulps_file_path = (char *) malloc (dir_len + strlen (ulps_file_name) + 1);
13241       if (ulps_file_path == NULL)
13242         {
13243           perror ("can't allocate path for `ULPs' file: ");
13244           exit (1);
13245         }
13246       sprintf (ulps_file_path, "%s%s", output_dir == NULL ? "" : output_dir, ulps_file_name);
13247       ulps_file = fopen (ulps_file_path, "a");
13248       if (ulps_file == NULL)
13249         {
13250           perror ("can't open file `ULPs' for writing: ");
13251           exit (1);
13252         }
13253     }
13254
13255
13256   initialize ();
13257   printf (TEST_MSG);
13258
13259 #if 0
13260   check_ulp ();
13261 #endif
13262
13263   /* Keep the tests a wee bit ordered (according to ISO C99).  */
13264   /* Classification macros:  */
13265   finite_test ();
13266   fpclassify_test ();
13267   isfinite_test ();
13268   isinf_test ();
13269   isnan_test ();
13270   isnormal_test ();
13271   issignaling_test ();
13272   signbit_test ();
13273
13274   /* Trigonometric functions:  */
13275   acos_test ();
13276   acos_test_tonearest ();
13277   acos_test_towardzero ();
13278   acos_test_downward ();
13279   acos_test_upward ();
13280   asin_test ();
13281   asin_test_tonearest ();
13282   asin_test_towardzero ();
13283   asin_test_downward ();
13284   asin_test_upward ();
13285   atan_test ();
13286   atan2_test ();
13287   cos_test ();
13288   cos_test_tonearest ();
13289   cos_test_towardzero ();
13290   cos_test_downward ();
13291   cos_test_upward ();
13292   sin_test ();
13293   sin_test_tonearest ();
13294   sin_test_towardzero ();
13295   sin_test_downward ();
13296   sin_test_upward ();
13297   sincos_test ();
13298   tan_test ();
13299   tan_test_tonearest ();
13300   tan_test_towardzero ();
13301   tan_test_downward ();
13302   tan_test_upward ();
13303
13304   /* Hyperbolic functions:  */
13305   acosh_test ();
13306   asinh_test ();
13307   atanh_test ();
13308   cosh_test ();
13309   cosh_test_tonearest ();
13310   cosh_test_towardzero ();
13311   cosh_test_downward ();
13312   cosh_test_upward ();
13313   sinh_test ();
13314   sinh_test_tonearest ();
13315   sinh_test_towardzero ();
13316   sinh_test_downward ();
13317   sinh_test_upward ();
13318   tanh_test ();
13319
13320   /* Exponential and logarithmic functions:  */
13321   exp_test ();
13322   exp_test_tonearest ();
13323   exp_test_towardzero ();
13324   exp_test_downward ();
13325   exp_test_upward ();
13326   exp10_test ();
13327   exp2_test ();
13328   expm1_test ();
13329   frexp_test ();
13330   ldexp_test ();
13331   log_test ();
13332   log10_test ();
13333   log1p_test ();
13334   log2_test ();
13335   logb_test ();
13336   logb_test_downward ();
13337   modf_test ();
13338   ilogb_test ();
13339   scalb_test ();
13340   scalbn_test ();
13341   scalbln_test ();
13342   significand_test ();
13343
13344   /* Power and absolute value functions:  */
13345   cbrt_test ();
13346   fabs_test ();
13347   hypot_test ();
13348   pow_test ();
13349   pow_test_tonearest ();
13350   pow_test_towardzero ();
13351   pow_test_downward ();
13352   pow_test_upward ();
13353   sqrt_test ();
13354
13355   /* Error and gamma functions:  */
13356   erf_test ();
13357   erfc_test ();
13358   gamma_test ();
13359   lgamma_test ();
13360   tgamma_test ();
13361
13362   /* Nearest integer functions:  */
13363   ceil_test ();
13364   floor_test ();
13365   nearbyint_test ();
13366   rint_test ();
13367   rint_test_tonearest ();
13368   rint_test_towardzero ();
13369   rint_test_downward ();
13370   rint_test_upward ();
13371   lrint_test ();
13372   lrint_test_tonearest ();
13373   lrint_test_towardzero ();
13374   lrint_test_downward ();
13375   lrint_test_upward ();
13376   llrint_test ();
13377   llrint_test_tonearest ();
13378   llrint_test_towardzero ();
13379   llrint_test_downward ();
13380   llrint_test_upward ();
13381   round_test ();
13382   lround_test ();
13383   llround_test ();
13384   trunc_test ();
13385
13386   /* Remainder functions:  */
13387   fmod_test ();
13388   remainder_test ();
13389   remquo_test ();
13390
13391   /* Manipulation functions:  */
13392   copysign_test ();
13393   nextafter_test ();
13394   nexttoward_test ();
13395
13396   /* maximum, minimum and positive difference functions */
13397   fdim_test ();
13398   fmax_test ();
13399   fmin_test ();
13400
13401   /* Multiply and add:  */
13402   fma_test ();
13403   fma_test_towardzero ();
13404   fma_test_downward ();
13405   fma_test_upward ();
13406
13407   /* Comparison macros:  */
13408   isgreater_test ();
13409   isgreaterequal_test ();
13410   isless_test ();
13411   islessequal_test ();
13412   islessgreater_test ();
13413   isunordered_test ();
13414
13415   /* Complex functions:  */
13416   cabs_test ();
13417   cacos_test ();
13418   cacosh_test ();
13419   carg_test ();
13420   casin_test ();
13421   casinh_test ();
13422   catan_test ();
13423   catanh_test ();
13424   ccos_test ();
13425   ccosh_test ();
13426   cexp_test ();
13427   cimag_test ();
13428   clog10_test ();
13429   clog_test ();
13430   conj_test ();
13431   cpow_test ();
13432   cproj_test ();
13433   creal_test ();
13434   csin_test ();
13435   csinh_test ();
13436   csqrt_test ();
13437   ctan_test ();
13438   ctan_test_tonearest ();
13439   ctan_test_towardzero ();
13440   ctan_test_downward ();
13441   ctan_test_upward ();
13442   ctanh_test ();
13443   ctanh_test_tonearest ();
13444   ctanh_test_towardzero ();
13445   ctanh_test_downward ();
13446   ctanh_test_upward ();
13447
13448   /* Bessel functions:  */
13449   j0_test ();
13450   j1_test ();
13451   jn_test ();
13452   y0_test ();
13453   y1_test ();
13454   yn_test ();
13455
13456   if (output_ulps)
13457     fclose (ulps_file);
13458
13459   printf ("\nTest suite completed:\n");
13460   printf ("  %d test cases plus %d tests for exception flags executed.\n",
13461           noTests, noExcTests);
13462   if (noXFails)
13463     printf ("  %d expected failures occurred.\n", noXFails);
13464   if (noXPasses)
13465     printf ("  %d unexpected passes occurred.\n", noXPasses);
13466   if (noErrors)
13467     {
13468       printf ("  %d errors occurred.\n", noErrors);
13469       return 1;
13470     }
13471   printf ("  All tests passed successfully.\n");
13472
13473   return 0;
13474 }
13475
13476 /*
13477  * Local Variables:
13478  * mode:c
13479  * End:
13480  */