1 /* Copyright (C) 1997-2006, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Andreas Jaeger <aj@suse.de>, 1997.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
19 /* Part of testsuite for libm.
21 This file is processed by a perl script. The resulting file has to
22 be included by a master file that defines:
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
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,
37 PRINTF_XEXPR Like PRINTF_EXPR, but print in hexadecimal format.
38 PRINTF_NEXPR Like PRINTF_EXPR, but print nice. */
40 /* This testsuite has currently tests for:
41 acos, acosh, asin, asinh, atan, atan2, atanh,
42 cbrt, ceil, copysign, cos, cosh, erf, erfc, exp, exp10, exp2, expm1,
43 fabs, fdim, floor, fma, fmax, fmin, fmod, fpclassify,
45 ilogb, isfinite, isinf, isnan, isnormal,
46 isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
48 ldexp, lgamma, log, log10, log1p, log2, logb,
49 modf, nearbyint, nextafter,
50 pow, remainder, remquo, rint, lrint, llrint,
51 round, lround, llround,
52 scalb, scalbn, scalbln, signbit, sin, sincos, sinh, sqrt, tan, tanh, tgamma, trunc,
53 y0, y1, yn, significand
55 and for the following complex math functions:
56 cabs, cacos, cacosh, carg, casin, casinh, catan, catanh,
57 ccos, ccosh, cexp, clog, cpow, cproj, csin, csinh, csqrt, ctan, ctanh.
59 At the moment the following functions aren't tested:
62 Parameter handling is primitive in the moment:
63 --verbose=[0..3] for different levels of output:
65 1: basic report on failed tests (default)
66 2: full report on all tests
67 -v for full output (equals --verbose=3)
68 -u for generation of an ULPs file
73 This suite tests some aspects of the correct implementation of
74 mathematical functions in libm. Some simple, specific parameters
75 are tested for correctness but there's no exhaustive
76 testing. Handling of specific inputs (e.g. infinity, not-a-number)
77 is also tested. Correct handling of exceptions is checked
78 against. These implemented tests should check all cases that are
81 Exception testing: At the moment only divide-by-zero, invalid and
82 overflow exceptions are tested. Underflow and inexact exceptions
83 aren't checked at the moment.
85 NaN values: There exist signalling and quiet NaNs. This implementation
86 only uses quiet NaN as parameter but does not differenciate
87 between the two kinds of NaNs as result.
89 Inline functions: Inlining functions should give an improvement in
90 speed - but not in precission. The inlined functions return
91 reasonable values for a reasonable range of input values. The
92 result is not necessarily correct for all values and exceptions are
93 not correctly raised in all cases. Problematic input and return
94 values are infinity, not-a-number and minus zero. This suite
95 therefore does not check these specific inputs and the exception
96 handling for inlined mathematical functions - just the "reasonable"
99 Beware: The tests might fail for any of the following reasons:
101 - Functions are wrong
102 - Floating Point Unit not working properly
103 - Compiler has errors
105 With e.g. gcc 2.7.2.2 the test for cexp fails because of a compiler error.
108 To Do: All parameter should be numbers that can be represented as
109 exact floating point values. Currently some values cannot be
110 represented exactly and therefore the result is not the expected
111 result. For this we will use 36 digits so that numbers can be
112 represented exactly. */
118 #include "libm-test-ulps.h"
131 /* Possible exceptions */
132 #define NO_EXCEPTION 0x0
133 #define INVALID_EXCEPTION 0x1
134 #define DIVIDE_BY_ZERO_EXCEPTION 0x2
135 #define OVERFLOW_EXCEPTION 0x4
136 /* The next flags signals that those exceptions are allowed but not required. */
137 #define INVALID_EXCEPTION_OK 0x8
138 #define DIVIDE_BY_ZERO_EXCEPTION_OK 0x10
139 #define OVERFLOW_EXCEPTION_OK 0x20
140 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
141 /* Some special test flags, passed togther with exceptions. */
142 #define IGNORE_ZERO_INF_SIGN 0x40
144 /* Various constants (we must supply them precalculated for accuracy). */
145 #define M_PI_6l .52359877559829887307710723054658383L
146 #define M_E2l 7.389056098930650227230427460575008L
147 #define M_E3l 20.085536923187667740928529654581719L
148 #define M_2_SQRT_PIl 3.5449077018110320545963349666822903L /* 2 sqrt (M_PIl) */
149 #define M_SQRT_PIl 1.7724538509055160272981674833411451L /* sqrt (M_PIl) */
150 #define M_LOG_SQRT_PIl 0.57236494292470008707171367567652933L /* log(sqrt(M_PIl)) */
151 #define M_LOG_2_SQRT_PIl 1.265512123484645396488945797134706L /* log(2*sqrt(M_PIl)) */
152 #define M_PI_34l (M_PIl - M_PI_4l) /* 3*pi/4 */
153 #define M_PI_34_LOG10El (M_PIl - M_PI_4l) * M_LOG10El
154 #define M_PI2_LOG10El M_PI_2l * M_LOG10El
155 #define M_PI4_LOG10El M_PI_4l * M_LOG10El
156 #define M_PI_LOG10El M_PIl * M_LOG10El
157 #define M_SQRT_2_2 0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
159 static FILE *ulps_file; /* File to document difference. */
160 static int output_ulps; /* Should ulps printed? */
162 static int noErrors; /* number of errors */
163 static int noTests; /* number of tests (without testing exceptions) */
164 static int noExcTests; /* number of tests for exception flags */
165 static int noXFails; /* number of expected failures. */
166 static int noXPasses; /* number of unexpected passes. */
169 static int output_max_error; /* Should the maximal errors printed? */
170 static int output_points; /* Should the single function results printed? */
171 static int ignore_max_ulp; /* Should we ignore max_ulp? */
173 static FLOAT minus_zero, plus_zero;
174 static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
176 static FLOAT max_error, real_max_error, imag_max_error;
179 #define BUILD_COMPLEX(real, imag) \
180 ({ __complex__ FLOAT __retval; \
181 __real__ __retval = (real); \
182 __imag__ __retval = (imag); \
185 #define BUILD_COMPLEX_INT(real, imag) \
186 ({ __complex__ int __retval; \
187 __real__ __retval = (real); \
188 __imag__ __retval = (imag); \
192 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
193 (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
196 init_max_error (void)
201 feclearexcept (FE_ALL_EXCEPT);
205 set_max_error (FLOAT current, FLOAT *curr_max_error)
207 if (current > *curr_max_error)
208 *curr_max_error = current;
212 /* Should the message print to screen? This depends on the verbose flag,
213 and the test status. */
215 print_screen (int ok, int xfail)
219 || (verbose == 1 && ok == xfail)))
225 /* Should the message print to screen? This depends on the verbose flag,
226 and the test status. */
228 print_screen_max_error (int ok, int xfail)
232 || ((verbose == 1) && (ok == xfail))))
237 /* Update statistic counters. */
239 update_stats (int ok, int xfail)
244 else if (!ok && xfail)
246 else if (!ok && !xfail)
251 print_ulps (const char *test_name, FLOAT ulp)
255 fprintf (ulps_file, "Test \"%s\":\n", test_name);
256 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
257 CHOOSE("ldouble", "double", "float",
258 "ildouble", "idouble", "ifloat"),
264 print_function_ulps (const char *function_name, FLOAT ulp)
268 fprintf (ulps_file, "Function: \"%s\":\n", function_name);
269 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
270 CHOOSE("ldouble", "double", "float",
271 "ildouble", "idouble", "ifloat"),
278 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
285 fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
286 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
287 CHOOSE("ldouble", "double", "float",
288 "ildouble", "idouble", "ifloat"),
289 FUNC(ceil) (real_ulp));
293 fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
294 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
295 CHOOSE("ldouble", "double", "float",
296 "ildouble", "idouble", "ifloat"),
297 FUNC(ceil) (imag_ulp));
306 /* Test if Floating-Point stack hasn't changed */
308 fpstack_test (const char *test_name)
311 static int old_stack;
314 asm ("fnstsw" : "=a" (sw));
320 printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
321 test_name, sw, old_stack);
330 print_max_error (const char *func_name, FLOAT allowed, int xfail)
334 if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
340 print_function_ulps (func_name, max_error);
343 if (print_screen_max_error (ok, xfail))
345 printf ("Maximal error of `%s'\n", func_name);
346 printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
347 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
350 update_stats (ok, xfail);
355 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
356 __complex__ int xfail)
360 if ((real_max_error == 0 && imag_max_error == 0)
361 || (real_max_error <= __real__ allowed
362 && imag_max_error <= __imag__ allowed
369 print_complex_function_ulps (func_name, real_max_error, imag_max_error);
372 if (print_screen_max_error (ok, xfail))
374 printf ("Maximal error of real part of: %s\n", func_name);
375 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
376 FUNC(ceil) (real_max_error));
377 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
378 FUNC(ceil) (__real__ allowed));
379 printf ("Maximal error of imaginary part of: %s\n", func_name);
380 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
381 FUNC(ceil) (imag_max_error));
382 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
383 FUNC(ceil) (__imag__ allowed));
386 update_stats (ok, xfail);
390 /* Test whether a given exception was raised. */
392 test_single_exception (const char *test_name,
396 const char *flag_name)
400 if (exception & exc_flag)
402 if (fetestexcept (fe_flag))
404 if (print_screen (1, 0))
405 printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
410 if (print_screen (0, 0))
411 printf ("Failure: %s: Exception \"%s\" not set\n",
412 test_name, flag_name);
417 if (fetestexcept (fe_flag))
420 if (print_screen (0, 0))
421 printf ("Failure: %s: Exception \"%s\" set\n",
422 test_name, flag_name);
426 if (print_screen (1, 0))
427 printf ("%s: Exception \"%s\" not set\n", test_name,
438 /* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
439 allowed but not required exceptions.
442 test_exceptions (const char *test_name, int exception)
446 if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
447 test_single_exception (test_name, exception,
448 DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
452 if ((exception & INVALID_EXCEPTION_OK) == 0)
453 test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
454 "Invalid operation");
457 if ((exception & OVERFLOW_EXCEPTION_OK) == 0)
458 test_single_exception (test_name, exception, OVERFLOW_EXCEPTION,
459 FE_OVERFLOW, "Overflow");
461 feclearexcept (FE_ALL_EXCEPT);
466 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
467 FLOAT max_ulp, int xfail, int exceptions,
468 FLOAT *curr_max_error)
475 test_exceptions (test_name, exceptions);
476 if (isnan (computed) && isnan (expected))
478 else if (isinf (computed) && isinf (expected))
480 /* Test for sign of infinities. */
481 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
482 && signbit (computed) != signbit (expected))
485 printf ("infinity has wrong sign.\n");
490 /* Don't calc ulp for NaNs or infinities. */
491 else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
495 diff = FUNC(fabs) (computed - expected);
496 switch (fpclassify (expected))
499 /* ilogb (0) isn't allowed. */
500 ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
503 ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
506 ulp = (FUNC(ldexp) (diff, MANT_DIG)
507 / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
510 /* It should never happen. */
514 set_max_error (ulp, curr_max_error);
516 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
517 && computed == 0.0 && expected == 0.0
518 && signbit(computed) != signbit (expected))
520 else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
525 print_ulps (test_name, ulp);
529 if (print_screen (ok, xfail))
532 printf ("Failure: ");
533 printf ("Test: %s\n", test_name);
534 printf ("Result:\n");
535 printf (" is: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
537 printf (" should be: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
541 printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
543 printf (" ulp : % .4" PRINTF_NEXPR "\n", ulp);
544 printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
547 update_stats (ok, xfail);
549 fpstack_test (test_name);
554 check_float (const char *test_name, FLOAT computed, FLOAT expected,
555 FLOAT max_ulp, int xfail, int exceptions)
557 check_float_internal (test_name, computed, expected, max_ulp, xfail,
558 exceptions, &max_error);
563 check_complex (const char *test_name, __complex__ FLOAT computed,
564 __complex__ FLOAT expected,
565 __complex__ FLOAT max_ulp, __complex__ int xfail,
568 FLOAT part_comp, part_exp, part_max_ulp;
572 sprintf (str, "Real part of: %s", test_name);
573 part_comp = __real__ computed;
574 part_exp = __real__ expected;
575 part_max_ulp = __real__ max_ulp;
576 part_xfail = __real__ xfail;
578 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
579 exception, &real_max_error);
581 sprintf (str, "Imaginary part of: %s", test_name);
582 part_comp = __imag__ computed;
583 part_exp = __imag__ expected;
584 part_max_ulp = __imag__ max_ulp;
585 part_xfail = __imag__ xfail;
587 /* Don't check again for exceptions, just pass through the
588 zero/inf sign test. */
589 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
590 exception & IGNORE_ZERO_INF_SIGN,
595 /* Check that computed and expected values are equal (int values). */
597 check_int (const char *test_name, int computed, int expected, int max_ulp,
598 int xfail, int exceptions)
600 int diff = computed - expected;
603 test_exceptions (test_name, exceptions);
605 if (abs (diff) <= max_ulp)
609 print_ulps (test_name, diff);
611 if (print_screen (ok, xfail))
614 printf ("Failure: ");
615 printf ("Test: %s\n", test_name);
616 printf ("Result:\n");
617 printf (" is: %d\n", computed);
618 printf (" should be: %d\n", expected);
621 update_stats (ok, xfail);
622 fpstack_test (test_name);
626 /* Check that computed and expected values are equal (long int values). */
628 check_long (const char *test_name, long int computed, long int expected,
629 long int max_ulp, int xfail, int exceptions)
631 long int diff = computed - expected;
634 test_exceptions (test_name, exceptions);
636 if (labs (diff) <= max_ulp)
640 print_ulps (test_name, diff);
642 if (print_screen (ok, xfail))
645 printf ("Failure: ");
646 printf ("Test: %s\n", test_name);
647 printf ("Result:\n");
648 printf (" is: %ld\n", computed);
649 printf (" should be: %ld\n", expected);
652 update_stats (ok, xfail);
653 fpstack_test (test_name);
657 /* Check that computed value is true/false. */
659 check_bool (const char *test_name, int computed, int expected,
660 long int max_ulp, int xfail, int exceptions)
664 test_exceptions (test_name, exceptions);
666 if ((computed == 0) == (expected == 0))
669 if (print_screen (ok, xfail))
672 printf ("Failure: ");
673 printf ("Test: %s\n", test_name);
674 printf ("Result:\n");
675 printf (" is: %d\n", computed);
676 printf (" should be: %d\n", expected);
679 update_stats (ok, xfail);
680 fpstack_test (test_name);
684 /* check that computed and expected values are equal (long int values) */
686 check_longlong (const char *test_name, long long int computed,
687 long long int expected,
688 long long int max_ulp, int xfail,
691 long long int diff = computed - expected;
694 test_exceptions (test_name, exceptions);
696 if (llabs (diff) <= max_ulp)
700 print_ulps (test_name, diff);
702 if (print_screen (ok, xfail))
706 printf ("Test: %s\n", test_name);
707 printf ("Result:\n");
708 printf (" is: %lld\n", computed);
709 printf (" should be: %lld\n", expected);
712 update_stats (ok, xfail);
713 fpstack_test (test_name);
718 /* This is to prevent messages from the SVID libm emulation. */
720 matherr (struct exception *x __attribute__ ((unused)))
726 /****************************************************************************
727 Tests for single functions of libm.
728 Please keep them alphabetically sorted!
729 ****************************************************************************/
737 /* Function not implemented. */
742 TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
743 TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
744 TEST_f_f (acos, nan_value, nan_value);
747 TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
748 TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
750 TEST_f_f (acos, 0, M_PI_2l);
751 TEST_f_f (acos, minus_zero, M_PI_2l);
752 TEST_f_f (acos, 1, 0);
753 TEST_f_f (acos, -1, M_PIl);
754 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
755 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
756 TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
757 TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
758 TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
768 /* Function not implemented. */
773 TEST_f_f (acosh, plus_infty, plus_infty);
774 TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
777 TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
779 TEST_f_f (acosh, 1, 0);
780 TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
791 /* Function not implemented. */
796 TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
797 TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
798 TEST_f_f (asin, nan_value, nan_value);
800 /* asin x == NaN plus invalid exception for |x| > 1. */
801 TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
802 TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
804 TEST_f_f (asin, 0, 0);
805 TEST_f_f (asin, minus_zero, minus_zero);
806 TEST_f_f (asin, 0.5, M_PI_6l);
807 TEST_f_f (asin, -0.5, -M_PI_6l);
808 TEST_f_f (asin, 1.0, M_PI_2l);
809 TEST_f_f (asin, -1.0, -M_PI_2l);
810 TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
821 /* Function not implemented. */
826 TEST_f_f (asinh, 0, 0);
827 TEST_f_f (asinh, minus_zero, minus_zero);
829 TEST_f_f (asinh, plus_infty, plus_infty);
830 TEST_f_f (asinh, minus_infty, minus_infty);
832 TEST_f_f (asinh, nan_value, nan_value);
833 TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
844 /* Function not implemented. */
849 TEST_f_f (atan, 0, 0);
850 TEST_f_f (atan, minus_zero, minus_zero);
852 TEST_f_f (atan, plus_infty, M_PI_2l);
853 TEST_f_f (atan, minus_infty, -M_PI_2l);
854 TEST_f_f (atan, nan_value, nan_value);
856 TEST_f_f (atan, 1, M_PI_4l);
857 TEST_f_f (atan, -1, -M_PI_4l);
859 TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
872 /* Function not implemented. */
878 TEST_f_f (atanh, 0, 0);
879 TEST_f_f (atanh, minus_zero, minus_zero);
881 TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
882 TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
883 TEST_f_f (atanh, nan_value, nan_value);
885 /* atanh (x) == NaN plus invalid exception if |x| > 1. */
886 TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
887 TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
889 TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
900 /* Function not implemented. */
905 /* atan2 (0,x) == 0 for x > 0. */
906 TEST_ff_f (atan2, 0, 1, 0);
908 /* atan2 (-0,x) == -0 for x > 0. */
909 TEST_ff_f (atan2, minus_zero, 1, minus_zero);
911 TEST_ff_f (atan2, 0, 0, 0);
912 TEST_ff_f (atan2, minus_zero, 0, minus_zero);
914 /* atan2 (+0,x) == +pi for x < 0. */
915 TEST_ff_f (atan2, 0, -1, M_PIl);
917 /* atan2 (-0,x) == -pi for x < 0. */
918 TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
920 TEST_ff_f (atan2, 0, minus_zero, M_PIl);
921 TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
923 /* atan2 (y,+0) == pi/2 for y > 0. */
924 TEST_ff_f (atan2, 1, 0, M_PI_2l);
926 /* atan2 (y,-0) == pi/2 for y > 0. */
927 TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
929 /* atan2 (y,+0) == -pi/2 for y < 0. */
930 TEST_ff_f (atan2, -1, 0, -M_PI_2l);
932 /* atan2 (y,-0) == -pi/2 for y < 0. */
933 TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
935 /* atan2 (y,inf) == +0 for finite y > 0. */
936 TEST_ff_f (atan2, 1, plus_infty, 0);
938 /* atan2 (y,inf) == -0 for finite y < 0. */
939 TEST_ff_f (atan2, -1, plus_infty, minus_zero);
941 /* atan2(+inf, x) == pi/2 for finite x. */
942 TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
944 /* atan2(-inf, x) == -pi/2 for finite x. */
945 TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
947 /* atan2 (y,-inf) == +pi for finite y > 0. */
948 TEST_ff_f (atan2, 1, minus_infty, M_PIl);
950 /* atan2 (y,-inf) == -pi for finite y < 0. */
951 TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
953 TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
954 TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
955 TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
956 TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
957 TEST_ff_f (atan2, nan_value, nan_value, nan_value);
959 TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
961 TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
962 TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
963 TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
964 TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
965 TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
966 TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
968 TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
977 FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
979 /* Function not implemented. */
984 /* cabs (x + iy) is specified as hypot (x,y) */
986 /* cabs (+inf + i x) == +inf. */
987 TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
988 /* cabs (-inf + i x) == +inf. */
989 TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
991 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
992 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
994 TEST_c_f (cabs, nan_value, nan_value, nan_value);
996 /* cabs (x,y) == cabs (y,x). */
997 TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
998 /* cabs (x,y) == cabs (-x,y). */
999 TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
1000 /* cabs (x,y) == cabs (-y,x). */
1001 TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
1002 /* cabs (x,y) == cabs (-x,-y). */
1003 TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
1004 /* cabs (x,y) == cabs (-y,-x). */
1005 TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
1006 /* cabs (x,0) == fabs (x). */
1007 TEST_c_f (cabs, -0.75L, 0, 0.75L);
1008 TEST_c_f (cabs, 0.75L, 0, 0.75L);
1009 TEST_c_f (cabs, -1.0L, 0, 1.0L);
1010 TEST_c_f (cabs, 1.0L, 0, 1.0L);
1011 TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1012 TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1014 TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1024 FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1025 if (errno == ENOSYS)
1026 /* Function not implemented. */
1032 TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1033 TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1034 TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1035 TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1037 TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1038 TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1040 TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1041 TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1043 TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1044 TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1045 TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1046 TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1047 TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1048 TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1050 TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1051 TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1052 TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1053 TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1055 TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1056 TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1057 TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1058 TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1060 TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1061 TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1063 TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1064 TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1066 TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1067 TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1069 TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1070 TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1072 TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1073 TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1075 TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1077 TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1078 TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1079 TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1080 TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1081 TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1082 TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1083 TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1084 TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1085 TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1086 TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1087 TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1088 TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1090 TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1091 TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1092 TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1093 TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1094 TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1095 TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1096 TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1097 TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1098 TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1099 TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1100 TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1101 TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1103 TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
1104 TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
1106 END (cacos, complex);
1113 FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
1114 if (errno == ENOSYS)
1115 /* Function not implemented. */
1121 TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1122 TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1123 TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1124 TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1125 TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1126 TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1128 TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1129 TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1131 TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1132 TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1133 TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1134 TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
1135 TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1136 TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1138 TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1139 TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1140 TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1141 TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1143 TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1144 TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1145 TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1146 TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1148 TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1149 TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1151 TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1152 TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1154 TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1155 TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1157 TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1158 TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1160 TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1161 TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1163 TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1165 TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1166 TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1167 TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1168 TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1169 TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1170 TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1171 TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1172 TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1173 TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1174 TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1175 TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1176 TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1178 TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
1179 TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
1180 TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
1181 TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
1182 TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
1183 TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
1184 TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
1185 TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
1186 TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
1187 TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
1188 TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
1189 TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
1191 TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
1192 TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
1194 END (cacosh, complex);
1203 /* carg (x + iy) is specified as atan2 (y, x) */
1205 /* carg (x + i 0) == 0 for x > 0. */
1206 TEST_c_f (carg, 2.0, 0, 0);
1207 /* carg (x - i 0) == -0 for x > 0. */
1208 TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1210 TEST_c_f (carg, 0, 0, 0);
1211 TEST_c_f (carg, 0, minus_zero, minus_zero);
1213 /* carg (x + i 0) == +pi for x < 0. */
1214 TEST_c_f (carg, -2.0, 0, M_PIl);
1216 /* carg (x - i 0) == -pi for x < 0. */
1217 TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1219 TEST_c_f (carg, minus_zero, 0, M_PIl);
1220 TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1222 /* carg (+0 + i y) == pi/2 for y > 0. */
1223 TEST_c_f (carg, 0, 2.0, M_PI_2l);
1225 /* carg (-0 + i y) == pi/2 for y > 0. */
1226 TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1228 /* carg (+0 + i y) == -pi/2 for y < 0. */
1229 TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1231 /* carg (-0 + i y) == -pi/2 for y < 0. */
1232 TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1234 /* carg (inf + i y) == +0 for finite y > 0. */
1235 TEST_c_f (carg, plus_infty, 2.0, 0);
1237 /* carg (inf + i y) == -0 for finite y < 0. */
1238 TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1240 /* carg(x + i inf) == pi/2 for finite x. */
1241 TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1243 /* carg(x - i inf) == -pi/2 for finite x. */
1244 TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1246 /* carg (-inf + i y) == +pi for finite y > 0. */
1247 TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1249 /* carg (-inf + i y) == -pi for finite y < 0. */
1250 TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1252 TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1254 TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1256 TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1258 TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1260 TEST_c_f (carg, nan_value, nan_value, nan_value);
1269 FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
1270 if (errno == ENOSYS)
1271 /* Function not implemented. */
1276 TEST_c_c (casin, 0, 0, 0.0, 0.0);
1277 TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1278 TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1279 TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1281 TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1282 TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1283 TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1284 TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1286 TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1287 TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1288 TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1289 TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1290 TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1291 TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
1292 TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1293 TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
1295 TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1296 TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1297 TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1298 TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1300 TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1301 TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1302 TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1303 TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1305 TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1306 TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1308 TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1309 TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1311 TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1312 TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1314 TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1315 TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1317 TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1318 TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1320 TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1322 TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
1323 TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
1324 TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
1325 TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
1326 TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
1327 TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
1328 TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
1329 TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
1330 TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
1331 TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
1332 TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
1333 TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
1335 TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
1336 TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
1337 TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
1338 TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
1339 TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
1340 TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
1341 TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
1342 TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
1343 TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
1344 TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
1345 TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
1346 TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
1348 TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
1349 TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
1351 END (casin, complex);
1359 FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
1360 if (errno == ENOSYS)
1361 /* Function not implemented. */
1366 TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1367 TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1368 TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1369 TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1371 TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1372 TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1373 TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1374 TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1376 TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1377 TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1378 TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1379 TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1380 TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1381 TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
1382 TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1383 TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1385 TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1386 TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1387 TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1388 TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1390 TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1391 TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1392 TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1393 TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1395 TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1396 TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1398 TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1399 TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1401 TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1402 TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1404 TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1405 TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1407 TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1408 TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1410 TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1412 TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
1413 TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
1414 TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
1415 TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
1416 TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
1417 TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
1418 TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
1419 TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
1420 TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
1421 TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
1422 TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
1423 TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
1425 TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
1426 TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
1427 TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
1428 TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
1429 TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
1430 TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
1431 TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
1432 TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
1433 TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
1434 TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
1435 TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
1436 TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
1438 TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
1439 TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
1441 END (casinh, complex);
1449 FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
1450 if (errno == ENOSYS)
1451 /* Function not implemented. */
1456 TEST_c_c (catan, 0, 0, 0, 0);
1457 TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1458 TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1459 TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1461 TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1462 TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1463 TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1464 TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1467 TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1468 TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1469 TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1470 TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1471 TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1472 TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
1473 TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1474 TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
1476 TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1477 TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1478 TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1479 TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1481 TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1482 TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1483 TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1484 TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1486 TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1487 TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1489 TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1490 TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1492 TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1493 TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1495 TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1496 TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1498 TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1499 TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1501 TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1502 TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1504 TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1506 TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
1507 TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
1509 END (catan, complex);
1516 FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
1517 if (errno == ENOSYS)
1518 /* Function not implemented. */
1523 TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1524 TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1525 TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1526 TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1528 TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1529 TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1530 TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1531 TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1533 TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1534 TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1535 TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1536 TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1537 TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1538 TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
1539 TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1540 TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
1542 TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1543 TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1544 TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1545 TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1547 TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1548 TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1549 TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1550 TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1552 TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1553 TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1555 TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1556 TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1558 TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1559 TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1561 TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1562 TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1564 TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1565 TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1567 TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1568 TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1570 TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1572 TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
1573 TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
1575 END (catanh, complex);
1583 if (errno == ENOSYS)
1584 /* Function not implemented. */
1589 TEST_f_f (cbrt, 0.0, 0.0);
1590 TEST_f_f (cbrt, minus_zero, minus_zero);
1592 TEST_f_f (cbrt, plus_infty, plus_infty);
1593 TEST_f_f (cbrt, minus_infty, minus_infty);
1594 TEST_f_f (cbrt, nan_value, nan_value);
1596 TEST_f_f (cbrt, -0.001L, -0.1L);
1597 TEST_f_f (cbrt, 8, 2);
1598 TEST_f_f (cbrt, -27.0, -3.0);
1599 TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1600 TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
1610 FUNC(ccos) (BUILD_COMPLEX (0, 0));
1611 if (errno == ENOSYS)
1612 /* Function not implemented. */
1617 TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1618 TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1619 TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1620 TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1622 TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1623 TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1624 TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1625 TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1627 TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1628 TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1629 TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1630 TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1632 TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1633 TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1634 TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1635 TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1637 TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1638 TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1639 TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1640 TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1642 TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1643 TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1644 TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1645 TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1647 TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1648 TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1650 TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1651 TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1653 TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1654 TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1656 TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1657 TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1659 TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1660 TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1662 TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1663 TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1665 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1667 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
1668 TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
1670 END (ccos, complex);
1678 FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
1679 if (errno == ENOSYS)
1680 /* Function not implemented. */
1685 TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1686 TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1687 TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1688 TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1690 TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1691 TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1692 TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1693 TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1695 TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1696 TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1697 TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1698 TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1700 TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1701 TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1702 TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1703 TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1705 TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1706 TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1707 TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1708 TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1710 TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1711 TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1712 TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1713 TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1715 TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1716 TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1718 TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1719 TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1721 TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1722 TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1724 TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1725 TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1727 TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1728 TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1730 TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1731 TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1733 TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1735 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
1737 TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
1739 END (ccosh, complex);
1748 TEST_f_f (ceil, 0.0, 0.0);
1749 TEST_f_f (ceil, minus_zero, minus_zero);
1750 TEST_f_f (ceil, plus_infty, plus_infty);
1751 TEST_f_f (ceil, minus_infty, minus_infty);
1752 TEST_f_f (ceil, nan_value, nan_value);
1754 TEST_f_f (ceil, M_PIl, 4.0);
1755 TEST_f_f (ceil, -M_PIl, -3.0);
1756 TEST_f_f (ceil, 0.1, 1.0);
1757 TEST_f_f (ceil, 0.25, 1.0);
1758 TEST_f_f (ceil, 0.625, 1.0);
1759 TEST_f_f (ceil, -0.1, minus_zero);
1760 TEST_f_f (ceil, -0.25, minus_zero);
1761 TEST_f_f (ceil, -0.625, minus_zero);
1764 /* The result can only be represented in long double. */
1765 TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1766 TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1767 TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1768 TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1769 TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1771 TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1772 TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1773 TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1774 TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1775 TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1777 # if LDBL_MANT_DIG > 100
1778 TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1779 TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1780 TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1781 TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1782 TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1783 TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1786 TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1787 TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1788 TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1789 TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1790 TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1792 TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1793 TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1794 TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1795 TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1796 TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1798 # if LDBL_MANT_DIG > 100
1799 TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1800 TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1801 TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1802 TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1803 TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1804 TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1806 TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1807 TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1808 TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1809 TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1810 TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1811 TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1814 TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1815 TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1816 TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1817 TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1818 TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1820 TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1821 TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1822 TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1823 TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1824 TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1826 TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1827 TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1828 TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1829 TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1830 TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1841 FUNC(cexp) (BUILD_COMPLEX (0, 0));
1842 if (errno == ENOSYS)
1843 /* Function not implemented. */
1848 TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1849 TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1850 TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1851 TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1853 TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1854 TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1856 TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1857 TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1859 TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1860 TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1862 TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1863 TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1865 TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1866 TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1868 TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1869 TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1871 TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1872 TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1873 TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1874 TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1876 TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1877 TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1879 TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1880 TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1882 TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1884 TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1886 TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1887 TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1889 TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1890 TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1891 TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1892 TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1894 TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
1895 TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
1897 END (cexp, complex);
1905 TEST_c_f (cimag, 1.0, 0.0, 0.0);
1906 TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1907 TEST_c_f (cimag, 1.0, nan_value, nan_value);
1908 TEST_c_f (cimag, nan_value, nan_value, nan_value);
1909 TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1910 TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1911 TEST_c_f (cimag, 2.0, 3.0, 3.0);
1920 FUNC(clog) (BUILD_COMPLEX (-2, -3));
1921 if (errno == ENOSYS)
1922 /* Function not implemented. */
1927 TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1928 TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1930 TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1931 TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1933 TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1934 TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1936 TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1937 TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1939 TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1940 TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1941 TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1942 TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1943 TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1944 TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1945 TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1946 TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1948 TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1949 TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1950 TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1951 TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1953 TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1954 TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1955 TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1956 TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1958 TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1959 TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1961 TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1962 TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1964 TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1965 TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1966 TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1967 TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1969 TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1970 TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1971 TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1972 TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1974 TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
1976 TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
1977 TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
1979 TEST_c_c (clog, 0x1.fffffep+127L, 0x1.fffffep+127L, 89.06941264234832570836679262104313101776L, M_PI_4l);
1980 TEST_c_c (clog, 0x1.fffffep+127L, 1.0L, 88.72283905206835305365817656031404273372L, 2.938736052218037251011746307725933020145e-39L);
1981 TEST_c_c (clog, 0x1p-149L, 0x1p-149L, -102.9323563131518784484589700365392203592L, M_PI_4l);
1982 TEST_c_c (clog, 0x1p-147L, 0x1p-147L, -101.5460619520319878296245057936228672231L, M_PI_4l);
1985 TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 710.1292864836639693869320059713862337880L, M_PI_4l);
1986 TEST_c_c (clog, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 709.8942846690411016323109979483151967689L, 0.4636476090008061606231772164674799632783L);
1987 TEST_c_c (clog, 0x1p-1074L, 0x1p-1074L, -744.0934983311012896593986823853525458290L, M_PI_4l);
1988 TEST_c_c (clog, 0x1p-1073L, 0x1p-1073L, -743.4003511505413443499814502638943692610L, M_PI_4l);
1991 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
1992 TEST_c_c (clog, 0x1.fp+16383L, 0x1.fp+16383L, 11356.83823118610934184548269774874545400L, M_PI_4l);
1993 TEST_c_c (clog, 0x1.fp+16383L, 0x1p+16383L, 11356.60974243783798653123798337822335902L, 0.4764674194737066993385333770295162295856L);
1994 TEST_c_c (clog, 0x1p-16440L, 0x1p-16441L, -11395.22807662984378194141292922726786191L, 0.4636476090008061162142562314612144020285L);
1997 END (clog, complex);
2005 FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
2006 if (errno == ENOSYS)
2007 /* Function not implemented. */
2012 TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2013 TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
2015 TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
2016 TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
2018 TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
2020 TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
2021 TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
2023 TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
2024 TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
2025 TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
2026 TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
2027 TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
2028 TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
2029 TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
2030 TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
2032 TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
2033 TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
2034 TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
2035 TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
2037 TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
2038 TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
2039 TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
2040 TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
2042 TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
2043 TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
2045 TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
2046 TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
2048 TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2049 TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2050 TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2051 TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2053 TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2054 TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2055 TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2056 TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2058 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
2060 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
2061 TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
2063 TEST_c_c (clog10, 0x1.fffffep+127L, 0x1.fffffep+127L, 38.68235441693561449174780668781319348761L, M_PI4_LOG10El);
2064 TEST_c_c (clog10, 0x1.fffffep+127L, 1.0L, 38.53183941910362389414093724045094697423L, 1.276276851248440096917018665609900318458e-39L);
2065 TEST_c_c (clog10, 0x1p-149L, 0x1p-149L, -44.70295435610120748924022586658721447508L, M_PI4_LOG10El);
2066 TEST_c_c (clog10, 0x1p-147L, 0x1p-147L, -44.10089436477324509881274807713822842154L, M_PI4_LOG10El);
2069 TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 308.4052305577487344482591243175787477115L, M_PI4_LOG10El);
2070 TEST_c_c (clog10, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 308.3031705664207720674749211936626341569L, 0.2013595981366865903254995612594728746470L);
2071 TEST_c_c (clog10, 0x1p-1074L, 0x1p-1074L, -323.1557003452838130619487034867432642357L, M_PI4_LOG10El);
2072 TEST_c_c (clog10, 0x1p-1073L, 0x1p-1073L, -322.8546703496198318667349645920187712089L, M_PI4_LOG10El);
2075 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2076 TEST_c_c (clog10, 0x1.fp+16383L, 0x1.fp+16383L, 4932.212175672014259683102930239951947672L, M_PI4_LOG10El);
2077 TEST_c_c (clog10, 0x1.fp+16383L, 0x1p+16383L, 4932.112944269463028900262609694408579449L, 0.2069271710841128115912940666587802677383L);
2078 TEST_c_c (clog10, 0x1p-16440L, 0x1p-16441L, -4948.884673709346821106688037612752099609L, 0.2013595981366865710389502301937289472543L);
2081 END (clog10, complex);
2089 TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
2090 TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
2091 TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
2092 TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
2093 TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
2094 TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
2095 TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
2097 END (conj, complex);
2102 copysign_test (void)
2106 TEST_ff_f (copysign, 0, 4, 0);
2107 TEST_ff_f (copysign, 0, -4, minus_zero);
2108 TEST_ff_f (copysign, minus_zero, 4, 0);
2109 TEST_ff_f (copysign, minus_zero, -4, minus_zero);
2111 TEST_ff_f (copysign, plus_infty, 0, plus_infty);
2112 TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
2113 TEST_ff_f (copysign, minus_infty, 0, plus_infty);
2114 TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
2116 TEST_ff_f (copysign, 0, plus_infty, 0);
2117 TEST_ff_f (copysign, 0, minus_zero, minus_zero);
2118 TEST_ff_f (copysign, minus_zero, plus_infty, 0);
2119 TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
2121 /* XXX More correctly we would have to check the sign of the NaN. */
2122 TEST_ff_f (copysign, nan_value, 0, nan_value);
2123 TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
2124 TEST_ff_f (copysign, -nan_value, 0, nan_value);
2125 TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
2136 if (errno == ENOSYS)
2137 /* Function not implemented. */
2142 TEST_f_f (cos, 0, 1);
2143 TEST_f_f (cos, minus_zero, 1);
2145 TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
2146 check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
2148 TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
2149 check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
2151 TEST_f_f (cos, nan_value, nan_value);
2152 check_int ("errno for cos(NaN) unchanged", errno, 0, 0, 0, 0);
2154 TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2155 TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2156 TEST_f_f (cos, M_PI_2l, 0);
2158 TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
2160 TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
2161 TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
2164 TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
2168 TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
2169 TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
2172 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2173 TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
2181 cos_test_tonearest (void)
2183 int save_round_mode;
2186 if (errno == ENOSYS)
2187 /* Function not implemented. */
2190 START (cos_tonearest);
2192 save_round_mode = fegetround ();
2194 if (!fesetround (FE_TONEAREST))
2196 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2197 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2198 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2199 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2200 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2201 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2202 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2203 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2204 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2205 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2208 fesetround (save_round_mode);
2210 END (cos_tonearest);
2215 cos_test_towardzero (void)
2217 int save_round_mode;
2220 if (errno == ENOSYS)
2221 /* Function not implemented. */
2224 START (cos_towardzero);
2226 save_round_mode = fegetround ();
2228 if (!fesetround (FE_TOWARDZERO))
2230 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2231 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2232 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2233 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2234 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2235 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2236 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2237 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2238 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2239 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2242 fesetround (save_round_mode);
2244 END (cos_towardzero);
2249 cos_test_downward (void)
2251 int save_round_mode;
2254 if (errno == ENOSYS)
2255 /* Function not implemented. */
2258 START (cos_downward);
2260 save_round_mode = fegetround ();
2262 if (!fesetround (FE_DOWNWARD))
2264 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2265 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2266 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2267 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2268 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2269 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2270 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2271 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2272 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2273 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2276 fesetround (save_round_mode);
2283 cos_test_upward (void)
2285 int save_round_mode;
2288 if (errno == ENOSYS)
2289 /* Function not implemented. */
2294 save_round_mode = fegetround ();
2296 if (!fesetround (FE_UPWARD))
2298 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2299 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2300 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2301 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2302 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2303 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2304 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2305 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2306 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2307 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2310 fesetround (save_round_mode);
2321 if (errno == ENOSYS)
2322 /* Function not implemented. */
2326 TEST_f_f (cosh, 0, 1);
2327 TEST_f_f (cosh, minus_zero, 1);
2330 TEST_f_f (cosh, plus_infty, plus_infty);
2331 TEST_f_f (cosh, minus_infty, plus_infty);
2333 TEST_f_f (cosh, nan_value, nan_value);
2335 TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2342 cosh_test_tonearest (void)
2344 int save_round_mode;
2347 if (errno == ENOSYS)
2348 /* Function not implemented. */
2351 START (cosh_tonearest);
2353 save_round_mode = fegetround ();
2355 if (!fesetround (FE_TONEAREST))
2357 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2358 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2359 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2362 fesetround (save_round_mode);
2364 END (cosh_tonearest);
2369 cosh_test_towardzero (void)
2371 int save_round_mode;
2374 if (errno == ENOSYS)
2375 /* Function not implemented. */
2378 START (cosh_towardzero);
2380 save_round_mode = fegetround ();
2382 if (!fesetround (FE_TOWARDZERO))
2384 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2385 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2386 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2389 fesetround (save_round_mode);
2391 END (cosh_towardzero);
2396 cosh_test_downward (void)
2398 int save_round_mode;
2401 if (errno == ENOSYS)
2402 /* Function not implemented. */
2405 START (cosh_downward);
2407 save_round_mode = fegetround ();
2409 if (!fesetround (FE_DOWNWARD))
2411 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2412 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2413 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2416 fesetround (save_round_mode);
2418 END (cosh_downward);
2423 cosh_test_upward (void)
2425 int save_round_mode;
2428 if (errno == ENOSYS)
2429 /* Function not implemented. */
2432 START (cosh_upward);
2434 save_round_mode = fegetround ();
2436 if (!fesetround (FE_UPWARD))
2438 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2439 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2440 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2443 fesetround (save_round_mode);
2453 FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2454 if (errno == ENOSYS)
2455 /* Function not implemented. */
2460 TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2461 TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2463 TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2464 TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2466 TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2468 TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2469 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2470 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
2471 TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2473 END (cpow, complex);
2481 TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2482 TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2483 TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2484 TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2486 TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2488 TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2489 TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2490 TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2491 TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2493 TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
2494 TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
2496 END (cproj, complex);
2504 TEST_c_f (creal, 0.0, 1.0, 0.0);
2505 TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2506 TEST_c_f (creal, nan_value, 1.0, nan_value);
2507 TEST_c_f (creal, nan_value, nan_value, nan_value);
2508 TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2509 TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2510 TEST_c_f (creal, 2.0, 3.0, 2.0);
2519 FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
2520 if (errno == ENOSYS)
2521 /* Function not implemented. */
2526 TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2527 TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2528 TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2529 TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2531 TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2532 TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2533 TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2534 TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2536 TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2537 TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2538 TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2539 TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2541 TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2542 TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2543 TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2544 TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2546 TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2547 TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2548 TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2549 TEST_c_c (csin, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2551 TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2552 TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2553 TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2554 TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2556 TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2557 TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2559 TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2560 TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2562 TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2563 TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2565 TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2566 TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2568 TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2569 TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2571 TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2572 TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2574 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2576 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
2577 TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
2579 END (csin, complex);
2587 FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
2588 if (errno == ENOSYS)
2589 /* Function not implemented. */
2594 TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2595 TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2596 TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2597 TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2599 TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2600 TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2601 TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2602 TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2604 TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2605 TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2606 TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2607 TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2609 TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2610 TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2611 TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2612 TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2614 TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2615 TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2616 TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2617 TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2619 TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2620 TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2621 TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2622 TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2624 TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2625 TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2627 TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2628 TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2630 TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2631 TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2633 TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2634 TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2636 TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2637 TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2639 TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2640 TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2642 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2644 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
2645 TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
2647 END (csinh, complex);
2655 FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2656 if (errno == ENOSYS)
2657 /* Function not implemented. */
2662 TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2663 TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2664 TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2665 TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2667 TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2668 TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2669 TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2670 TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2672 TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2673 TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2674 TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2675 TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2677 TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2678 TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2679 TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2680 TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2681 TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2682 TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2683 TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2684 TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2685 TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2686 TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2687 TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2688 TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2690 TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2692 TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2694 TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2695 TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2696 TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2697 TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2699 TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2700 TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2701 TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2702 TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2704 TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2706 TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2707 TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2708 TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2709 TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2710 TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
2711 TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2712 TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
2713 /* Principal square root should be returned (i.e., non-negative real
2715 TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
2717 TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
2718 TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
2719 TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
2720 TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
2723 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
2724 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
2725 TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
2726 TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
2729 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2730 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
2731 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
2732 TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
2735 END (csqrt, complex);
2742 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
2743 if (errno == ENOSYS)
2744 /* Function not implemented. */
2749 TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2750 TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2751 TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2752 TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2754 TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2755 TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2756 TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2757 TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2759 TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2760 TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2761 TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2762 TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2764 TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2765 TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2766 TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2767 TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2768 TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2769 TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2770 TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2771 TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2773 TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2774 TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2776 TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2777 TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2779 TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2780 TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2782 TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2783 TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2784 TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2785 TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2787 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2789 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
2790 TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
2792 END (ctan, complex);
2800 FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2801 if (errno == ENOSYS)
2802 /* Function not implemented. */
2807 TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2808 TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2809 TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2810 TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2812 TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2813 TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2814 TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2815 TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2816 TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2817 TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2818 TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2819 TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2821 TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2822 TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2823 TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2824 TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2825 TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2826 TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2827 TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2828 TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2830 TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2831 TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2833 TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2834 TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2836 TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2837 TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2839 TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2840 TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2841 TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2842 TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2844 TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2846 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2848 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
2849 TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
2851 END (ctanh, complex);
2860 if (errno == ENOSYS)
2861 /* Function not implemented. */
2866 TEST_f_f (erf, 0, 0);
2867 TEST_f_f (erf, minus_zero, minus_zero);
2868 TEST_f_f (erf, plus_infty, 1);
2869 TEST_f_f (erf, minus_infty, -1);
2870 TEST_f_f (erf, nan_value, nan_value);
2872 TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2873 TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2874 TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2875 TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2876 TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2877 TEST_f_f (erf, 27.0L, 1.0L);
2888 if (errno == ENOSYS)
2889 /* Function not implemented. */
2894 TEST_f_f (erfc, plus_infty, 0.0);
2895 TEST_f_f (erfc, minus_infty, 2.0);
2896 TEST_f_f (erfc, 0.0, 1.0);
2897 TEST_f_f (erfc, minus_zero, 1.0);
2898 TEST_f_f (erfc, nan_value, nan_value);
2900 TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2901 TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2902 TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2903 TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
2904 TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
2905 TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
2906 TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
2907 TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
2909 /* The result can only be represented in long double. */
2910 # if LDBL_MIN_10_EXP < -319
2911 TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
2913 # if LDBL_MANT_DIG >= 106
2914 TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
2927 if (errno == ENOSYS)
2928 /* Function not implemented. */
2933 TEST_f_f (exp, 0, 1);
2934 TEST_f_f (exp, minus_zero, 1);
2937 TEST_f_f (exp, plus_infty, plus_infty);
2938 TEST_f_f (exp, minus_infty, 0);
2940 TEST_f_f (exp, nan_value, nan_value);
2941 TEST_f_f (exp, 1, M_El);
2943 TEST_f_f (exp, 2, M_E2l);
2944 TEST_f_f (exp, 3, M_E3l);
2945 TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
2946 TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
2947 TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
2948 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
2949 /* The result can only be represented in sane long double. */
2950 TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2958 exp_test_tonearest (void)
2960 int save_round_mode;
2963 if (errno == ENOSYS)
2964 /* Function not implemented. */
2967 START (exp_tonearest);
2969 save_round_mode = fegetround ();
2971 if (!fesetround (FE_TONEAREST))
2973 TEST_f_f (exp, 1, M_El);
2974 TEST_f_f (exp, 2, M_E2l);
2975 TEST_f_f (exp, 3, M_E3l);
2978 fesetround (save_round_mode);
2980 END (exp_tonearest);
2985 exp_test_towardzero (void)
2987 int save_round_mode;
2990 if (errno == ENOSYS)
2991 /* Function not implemented. */
2994 START (exp_towardzero);
2996 save_round_mode = fegetround ();
2998 if (!fesetround (FE_TOWARDZERO))
3000 TEST_f_f (exp, 1, M_El);
3001 TEST_f_f (exp, 2, M_E2l);
3002 TEST_f_f (exp, 3, M_E3l);
3005 fesetround (save_round_mode);
3007 END (exp_towardzero);
3012 exp_test_downward (void)
3014 int save_round_mode;
3017 if (errno == ENOSYS)
3018 /* Function not implemented. */
3021 START (exp_downward);
3023 save_round_mode = fegetround ();
3025 if (!fesetround (FE_DOWNWARD))
3027 TEST_f_f (exp, 1, M_El);
3028 TEST_f_f (exp, 2, M_E2l);
3029 TEST_f_f (exp, 3, M_E3l);
3032 fesetround (save_round_mode);
3039 exp_test_upward (void)
3041 int save_round_mode;
3044 if (errno == ENOSYS)
3045 /* Function not implemented. */
3050 save_round_mode = fegetround ();
3052 if (!fesetround (FE_UPWARD))
3054 TEST_f_f (exp, 1, M_El);
3055 TEST_f_f (exp, 2, M_E2l);
3056 TEST_f_f (exp, 3, M_E3l);
3059 fesetround (save_round_mode);
3070 if (errno == ENOSYS)
3071 /* Function not implemented. */
3076 TEST_f_f (exp10, 0, 1);
3077 TEST_f_f (exp10, minus_zero, 1);
3079 TEST_f_f (exp10, plus_infty, plus_infty);
3080 TEST_f_f (exp10, minus_infty, 0);
3081 TEST_f_f (exp10, nan_value, nan_value);
3082 TEST_f_f (exp10, 3, 1000);
3083 TEST_f_f (exp10, -1, 0.1L);
3084 TEST_f_f (exp10, 1e6, plus_infty, OVERFLOW_EXCEPTION);
3085 TEST_f_f (exp10, -1e6, 0);
3086 TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
3097 if (errno == ENOSYS)
3098 /* Function not implemented. */
3103 TEST_f_f (exp2, 0, 1);
3104 TEST_f_f (exp2, minus_zero, 1);
3105 TEST_f_f (exp2, plus_infty, plus_infty);
3106 TEST_f_f (exp2, minus_infty, 0);
3107 TEST_f_f (exp2, nan_value, nan_value);
3109 TEST_f_f (exp2, 10, 1024);
3110 TEST_f_f (exp2, -1, 0.5);
3111 /* Bug 13871: OVERFLOW exception may be missing. */
3112 TEST_f_f (exp2, 1e6, plus_infty, OVERFLOW_EXCEPTION_OK);
3113 TEST_f_f (exp2, -1e6, 0);
3114 TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
3125 if (errno == ENOSYS)
3126 /* Function not implemented. */
3131 TEST_f_f (expm1, 0, 0);
3132 TEST_f_f (expm1, minus_zero, minus_zero);
3135 TEST_f_f (expm1, plus_infty, plus_infty);
3136 TEST_f_f (expm1, minus_infty, -1);
3138 TEST_f_f (expm1, nan_value, nan_value);
3140 TEST_f_f (expm1, 1, M_El - 1.0);
3141 TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
3143 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3144 TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
3148 /* Bug 13787: OVERFLOW exception may be missing. */
3149 TEST_f_f (expm1, 100000.0, plus_infty, OVERFLOW_EXCEPTION_OK);
3150 check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
3161 TEST_f_f (fabs, 0, 0);
3162 TEST_f_f (fabs, minus_zero, 0);
3164 TEST_f_f (fabs, plus_infty, plus_infty);
3165 TEST_f_f (fabs, minus_infty, plus_infty);
3166 TEST_f_f (fabs, nan_value, nan_value);
3168 TEST_f_f (fabs, 38.0, 38.0);
3169 TEST_f_f (fabs, -M_El, M_El);
3180 TEST_ff_f (fdim, 0, 0, 0);
3181 TEST_ff_f (fdim, 9, 0, 9);
3182 TEST_ff_f (fdim, 0, 9, 0);
3183 TEST_ff_f (fdim, -9, 0, 0);
3184 TEST_ff_f (fdim, 0, -9, 9);
3186 TEST_ff_f (fdim, plus_infty, 9, plus_infty);
3187 TEST_ff_f (fdim, plus_infty, -9, plus_infty);
3188 TEST_ff_f (fdim, minus_infty, 9, 0);
3189 TEST_ff_f (fdim, minus_infty, -9, 0);
3190 TEST_ff_f (fdim, 9, minus_infty, plus_infty);
3191 TEST_ff_f (fdim, -9, minus_infty, plus_infty);
3192 TEST_ff_f (fdim, 9, plus_infty, 0);
3193 TEST_ff_f (fdim, -9, plus_infty, 0);
3195 TEST_ff_f (fdim, 0, nan_value, nan_value);
3196 TEST_ff_f (fdim, 9, nan_value, nan_value);
3197 TEST_ff_f (fdim, -9, nan_value, nan_value);
3198 TEST_ff_f (fdim, nan_value, 9, nan_value);
3199 TEST_ff_f (fdim, nan_value, -9, nan_value);
3200 TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
3201 TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
3202 TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
3203 TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
3204 TEST_ff_f (fdim, nan_value, nan_value, nan_value);
3206 TEST_ff_f (fdim, plus_infty, plus_infty, 0);
3217 TEST_f_f (floor, 0.0, 0.0);
3218 TEST_f_f (floor, minus_zero, minus_zero);
3219 TEST_f_f (floor, plus_infty, plus_infty);
3220 TEST_f_f (floor, minus_infty, minus_infty);
3221 TEST_f_f (floor, nan_value, nan_value);
3223 TEST_f_f (floor, M_PIl, 3.0);
3224 TEST_f_f (floor, -M_PIl, -4.0);
3226 TEST_f_f (floor, 0.1, 0.0);
3227 TEST_f_f (floor, 0.25, 0.0);
3228 TEST_f_f (floor, 0.625, 0.0);
3229 TEST_f_f (floor, -0.1, -1.0);
3230 TEST_f_f (floor, -0.25, -1.0);
3231 TEST_f_f (floor, -0.625, -1.0);
3234 /* The result can only be represented in long double. */
3235 TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
3236 TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
3237 TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
3238 TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
3239 TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
3240 # if LDBL_MANT_DIG > 100
3241 TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
3242 TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
3243 TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
3246 TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
3247 TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
3248 TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
3249 TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
3250 TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
3251 # if LDBL_MANT_DIG > 100
3252 TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
3253 TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
3254 TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
3257 TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
3258 TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
3259 TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
3260 TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
3261 TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
3263 # if LDBL_MANT_DIG > 100
3264 TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
3265 TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
3266 TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
3267 TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
3268 TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
3269 TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
3272 TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
3273 TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
3274 TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
3275 TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
3276 TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
3278 # if LDBL_MANT_DIG > 100
3279 TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
3280 TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
3281 TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
3282 TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
3283 TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
3284 TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
3287 TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
3288 TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
3289 TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
3290 TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
3291 TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
3293 TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
3294 TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
3295 TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
3296 TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
3297 TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
3299 TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
3300 TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
3301 TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
3302 TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
3303 TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
3315 TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
3316 TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
3317 TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
3318 TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3319 TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3320 TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3321 TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3322 TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3323 TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3324 TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3325 TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3326 TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3328 TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3329 TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3330 TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3331 TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3332 TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3333 TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3334 TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3335 TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, nan_value, INVALID_EXCEPTION);
3337 TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
3339 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
3340 LDBL_MAX, DBL_MAX, FLT_MAX);
3341 TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
3342 TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
3343 TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
3344 TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
3345 TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
3346 TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
3347 TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
3348 TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
3350 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
3351 TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
3352 TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
3353 TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
3354 TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
3355 TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
3356 TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
3357 TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
3359 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
3360 TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
3361 TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
3362 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
3363 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
3364 TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
3365 TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
3366 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
3367 TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
3368 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
3369 TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0);
3370 TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022);
3371 TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022);
3372 TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022);
3373 TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022);
3374 TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022);
3375 TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022);
3376 TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022);
3377 TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022);
3378 TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022);
3379 TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
3381 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
3382 TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
3383 TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
3384 TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
3385 TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
3386 TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
3387 TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L);
3389 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
3390 TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
3391 TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L);
3392 TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L);
3393 TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
3394 TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
3395 TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
3396 TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
3397 TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
3398 TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
3399 TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
3400 TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
3401 TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
3402 TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
3414 TEST_ff_f (fmax, 0, 0, 0);
3415 TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
3416 TEST_ff_f (fmax, 9, 0, 9);
3417 TEST_ff_f (fmax, 0, 9, 9);
3418 TEST_ff_f (fmax, -9, 0, 0);
3419 TEST_ff_f (fmax, 0, -9, 0);
3421 TEST_ff_f (fmax, plus_infty, 9, plus_infty);
3422 TEST_ff_f (fmax, 0, plus_infty, plus_infty);
3423 TEST_ff_f (fmax, -9, plus_infty, plus_infty);
3424 TEST_ff_f (fmax, plus_infty, -9, plus_infty);
3426 TEST_ff_f (fmax, minus_infty, 9, 9);
3427 TEST_ff_f (fmax, minus_infty, -9, -9);
3428 TEST_ff_f (fmax, 9, minus_infty, 9);
3429 TEST_ff_f (fmax, -9, minus_infty, -9);
3431 TEST_ff_f (fmax, 0, nan_value, 0);
3432 TEST_ff_f (fmax, 9, nan_value, 9);
3433 TEST_ff_f (fmax, -9, nan_value, -9);
3434 TEST_ff_f (fmax, nan_value, 0, 0);
3435 TEST_ff_f (fmax, nan_value, 9, 9);
3436 TEST_ff_f (fmax, nan_value, -9, -9);
3437 TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
3438 TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
3439 TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
3440 TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
3441 TEST_ff_f (fmax, nan_value, nan_value, nan_value);
3452 TEST_ff_f (fmin, 0, 0, 0);
3453 TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
3454 TEST_ff_f (fmin, 9, 0, 0);
3455 TEST_ff_f (fmin, 0, 9, 0);
3456 TEST_ff_f (fmin, -9, 0, -9);
3457 TEST_ff_f (fmin, 0, -9, -9);
3459 TEST_ff_f (fmin, plus_infty, 9, 9);
3460 TEST_ff_f (fmin, 9, plus_infty, 9);
3461 TEST_ff_f (fmin, plus_infty, -9, -9);
3462 TEST_ff_f (fmin, -9, plus_infty, -9);
3463 TEST_ff_f (fmin, minus_infty, 9, minus_infty);
3464 TEST_ff_f (fmin, minus_infty, -9, minus_infty);
3465 TEST_ff_f (fmin, 9, minus_infty, minus_infty);
3466 TEST_ff_f (fmin, -9, minus_infty, minus_infty);
3468 TEST_ff_f (fmin, 0, nan_value, 0);
3469 TEST_ff_f (fmin, 9, nan_value, 9);
3470 TEST_ff_f (fmin, -9, nan_value, -9);
3471 TEST_ff_f (fmin, nan_value, 0, 0);
3472 TEST_ff_f (fmin, nan_value, 9, 9);
3473 TEST_ff_f (fmin, nan_value, -9, -9);
3474 TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
3475 TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
3476 TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
3477 TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
3478 TEST_ff_f (fmin, nan_value, nan_value, nan_value);
3488 FUNC(fmod) (6.5, 2.3L);
3489 if (errno == ENOSYS)
3490 /* Function not implemented. */
3495 /* fmod (+0, y) == +0 for y != 0. */
3496 TEST_ff_f (fmod, 0, 3, 0);
3498 /* fmod (-0, y) == -0 for y != 0. */
3499 TEST_ff_f (fmod, minus_zero, 3, minus_zero);
3501 /* fmod (+inf, y) == NaN plus invalid exception. */
3503 TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
3504 check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3505 /* fmod (-inf, y) == NaN plus invalid exception. */
3507 TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
3508 check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3509 /* fmod (x, +0) == NaN plus invalid exception. */
3511 TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
3512 check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
3513 /* fmod (x, -0) == NaN plus invalid exception. */
3514 TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
3516 /* fmod (x, +inf) == x for x not infinite. */
3517 TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
3518 /* fmod (x, -inf) == x for x not infinite. */
3519 TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
3521 TEST_ff_f (fmod, nan_value, nan_value, nan_value);
3523 TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
3524 TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
3525 TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
3526 TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
3533 fpclassify_test (void)
3537 TEST_f_i (fpclassify, nan_value, FP_NAN);
3538 TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
3539 TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
3540 TEST_f_i (fpclassify, plus_zero, FP_ZERO);
3541 TEST_f_i (fpclassify, minus_zero, FP_ZERO);
3542 TEST_f_i (fpclassify, 1000, FP_NORMAL);
3555 TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
3556 TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
3557 TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
3559 TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
3560 TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
3562 TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
3563 TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
3575 if (errno == ENOSYS)
3576 /* Function not implemented. */
3578 feclearexcept (FE_ALL_EXCEPT);
3582 TEST_f_f (gamma, plus_infty, plus_infty);
3583 TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3584 TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3585 TEST_f_f (gamma, minus_infty, plus_infty);
3586 TEST_f_f (gamma, nan_value, nan_value);
3588 TEST_f_f1 (gamma, 1, 0, 1);
3589 TEST_f_f1 (gamma, 3, M_LN2l, 1);
3591 TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
3592 TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3601 FUNC(hypot) (0.7L, 12.4L);
3602 if (errno == ENOSYS)
3603 /* Function not implemented. */
3608 TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3609 TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3612 TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
3613 TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
3614 TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
3615 TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
3618 TEST_ff_f (hypot, nan_value, nan_value, nan_value);
3620 /* hypot (x,y) == hypot (+-x, +-y) */
3621 TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
3622 TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
3623 TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
3624 TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
3625 TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
3626 TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
3627 TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
3628 TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
3630 /* hypot (x,0) == fabs (x) */
3631 TEST_ff_f (hypot, 0.75L, 0, 0.75L);
3632 TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3633 TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
3635 TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
3637 #if !(defined TEST_FLOAT && defined TEST_INLINE)
3638 TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
3639 TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
3643 TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
3646 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
3647 TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
3659 TEST_f_i (ilogb, 1, 0);
3660 TEST_f_i (ilogb, M_El, 1);
3661 TEST_f_i (ilogb, 1024, 10);
3662 TEST_f_i (ilogb, -2000, 10);
3664 /* XXX We have a problem here: the standard does not tell us whether
3665 exceptions are allowed/required. ignore them for now. */
3667 TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3668 TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
3669 TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3670 TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
3676 isfinite_test (void)
3680 TEST_f_b (isfinite, 0, 1);
3681 TEST_f_b (isfinite, minus_zero, 1);
3682 TEST_f_b (isfinite, 10, 1);
3683 TEST_f_b (isfinite, plus_infty, 0);
3684 TEST_f_b (isfinite, minus_infty, 0);
3685 TEST_f_b (isfinite, nan_value, 0);
3691 isnormal_test (void)
3695 TEST_f_b (isnormal, 0, 0);
3696 TEST_f_b (isnormal, minus_zero, 0);
3697 TEST_f_b (isnormal, 10, 1);
3698 TEST_f_b (isnormal, plus_infty, 0);
3699 TEST_f_b (isnormal, minus_infty, 0);
3700 TEST_f_b (isnormal, nan_value, 0);
3710 FUNC (sincos) (0, &s, &c);
3711 if (errno == ENOSYS)
3712 /* Required function not implemented. */
3715 if (errno == ENOSYS)
3716 /* Function not implemented. */
3721 /* j0 is the Bessel function of the first kind of order 0 */
3722 TEST_f_f (j0, nan_value, nan_value);
3723 TEST_f_f (j0, plus_infty, 0);
3724 TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
3725 TEST_f_f (j0, 0.0, 1.0);
3726 TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3727 TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3728 TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3729 TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3730 TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3731 TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3732 TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
3733 TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3734 TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3736 TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
3739 TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
3751 FUNC (sincos) (0, &s, &c);
3752 if (errno == ENOSYS)
3753 /* Required function not implemented. */
3756 if (errno == ENOSYS)
3757 /* Function not implemented. */
3760 /* j1 is the Bessel function of the first kind of order 1 */
3764 TEST_f_f (j1, nan_value, nan_value);
3765 TEST_f_f (j1, plus_infty, 0);
3767 TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
3768 TEST_f_f (j1, 0.0, 0.0);
3769 TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3770 TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3771 TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3772 TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3773 TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3774 TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3775 TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
3777 TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
3780 TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
3791 FUNC (sincos) (0, &s, &c);
3792 if (errno == ENOSYS)
3793 /* Required function not implemented. */
3796 if (errno == ENOSYS)
3797 /* Function not implemented. */
3800 /* jn is the Bessel function of the first kind of order n. */
3803 /* jn (0, x) == j0 (x) */
3804 TEST_ff_f (jn, 0, nan_value, nan_value);
3805 TEST_ff_f (jn, 0, plus_infty, 0);
3806 TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
3807 TEST_ff_f (jn, 0, 0.0, 1.0);
3808 TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3809 TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3810 TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3811 TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3812 TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3813 TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3814 TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3815 TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3816 TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3818 /* jn (1, x) == j1 (x) */
3819 TEST_ff_f (jn, 1, nan_value, nan_value);
3820 TEST_ff_f (jn, 1, plus_infty, 0);
3821 TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
3822 TEST_ff_f (jn, 1, 0.0, 0.0);
3823 TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3824 TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3825 TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3826 TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3827 TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3828 TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3829 TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
3832 TEST_ff_f (jn, 3, nan_value, nan_value);
3833 TEST_ff_f (jn, 3, plus_infty, 0);
3835 TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
3836 TEST_ff_f (jn, 3, 0.0, 0.0);
3837 TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3838 TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3839 TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3840 TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3841 TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
3844 TEST_ff_f (jn, 10, nan_value, nan_value);
3845 TEST_ff_f (jn, 10, plus_infty, 0);
3847 TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
3848 TEST_ff_f (jn, 10, 0.0, 0.0);
3849 TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3850 TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3851 TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3852 TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3853 TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
3856 TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
3857 TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
3858 TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
3859 TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
3860 TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
3861 TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
3862 TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
3863 TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
3865 TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
3874 TEST_ff_f (ldexp, 0, 0, 0);
3875 TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3877 TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3878 TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3879 TEST_ff_f (ldexp, nan_value, 1, nan_value);
3881 TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3882 TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3884 /* ldexp (x, 0) == x. */
3885 TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3894 if (errno == ENOSYS)
3895 /* Function not implemented. */
3897 feclearexcept (FE_ALL_EXCEPT);
3901 TEST_f_f (lgamma, plus_infty, plus_infty);
3902 TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3903 check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
3904 TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3905 check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
3906 TEST_f_f (lgamma, nan_value, nan_value);
3908 /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
3910 TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3911 check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
3912 TEST_f_f (lgamma, minus_infty, plus_infty);
3914 TEST_f_f1 (lgamma, 1, 0, 1);
3916 TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3918 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3919 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3920 TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3921 TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
3930 /* XXX this test is incomplete. We need to have a way to specifiy
3931 the rounding method and test the critical cases. So far, only
3932 unproblematic numbers are tested. */
3936 TEST_f_l (lrint, 0.0, 0);
3937 TEST_f_l (lrint, minus_zero, 0);
3938 TEST_f_l (lrint, 0.2L, 0);
3939 TEST_f_l (lrint, -0.2L, 0);
3941 TEST_f_l (lrint, 1.4L, 1);
3942 TEST_f_l (lrint, -1.4L, -1);
3944 TEST_f_l (lrint, 8388600.3L, 8388600);
3945 TEST_f_l (lrint, -8388600.3L, -8388600);
3947 TEST_f_l (lrint, 1071930.0008, 1071930);
3949 TEST_f_l (lrint, 1073741824.01, 1073741824);
3950 # if LONG_MAX > 281474976710656
3951 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3960 lrint_test_tonearest (void)
3962 int save_round_mode;
3963 START (lrint_tonearest);
3965 save_round_mode = fegetround ();
3967 if (!fesetround (FE_TONEAREST))
3969 TEST_f_l (lrint, 0.0, 0);
3970 TEST_f_l (lrint, minus_zero, 0);
3971 TEST_f_l (lrint, 0.2L, 0);
3972 TEST_f_l (lrint, -0.2L, 0);
3973 TEST_f_l (lrint, 0.5L, 0);
3974 TEST_f_l (lrint, -0.5L, 0);
3975 TEST_f_l (lrint, 0.8L, 1);
3976 TEST_f_l (lrint, -0.8L, -1);
3978 TEST_f_l (lrint, 1.4L, 1);
3979 TEST_f_l (lrint, -1.4L, -1);
3981 TEST_f_l (lrint, 8388600.3L, 8388600);
3982 TEST_f_l (lrint, -8388600.3L, -8388600);
3984 TEST_f_l (lrint, 1071930.0008, 1071930);
3986 TEST_f_l (lrint, 1073741824.01, 1073741824);
3987 # if LONG_MAX > 281474976710656
3988 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3993 fesetround (save_round_mode);
3995 END (lrint_tonearest);
4000 lrint_test_towardzero (void)
4002 int save_round_mode;
4003 START (lrint_towardzero);
4005 save_round_mode = fegetround ();
4007 if (!fesetround (FE_TOWARDZERO))
4009 TEST_f_l (lrint, 0.0, 0);
4010 TEST_f_l (lrint, minus_zero, 0);
4011 TEST_f_l (lrint, 0.2L, 0);
4012 TEST_f_l (lrint, -0.2L, 0);
4013 TEST_f_l (lrint, 0.5L, 0);
4014 TEST_f_l (lrint, -0.5L, 0);
4015 TEST_f_l (lrint, 0.8L, 0);
4016 TEST_f_l (lrint, -0.8L, 0);
4018 TEST_f_l (lrint, 1.4L, 1);
4019 TEST_f_l (lrint, -1.4L, -1);
4021 TEST_f_l (lrint, 8388600.3L, 8388600);
4022 TEST_f_l (lrint, -8388600.3L, -8388600);
4024 TEST_f_l (lrint, 1071930.0008, 1071930);
4026 TEST_f_l (lrint, 1073741824.01, 1073741824);
4027 # if LONG_MAX > 281474976710656
4028 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4033 fesetround (save_round_mode);
4035 END (lrint_towardzero);
4040 lrint_test_downward (void)
4042 int save_round_mode;
4043 START (lrint_downward);
4045 save_round_mode = fegetround ();
4047 if (!fesetround (FE_DOWNWARD))
4049 TEST_f_l (lrint, 0.0, 0);
4050 TEST_f_l (lrint, minus_zero, 0);
4051 TEST_f_l (lrint, 0.2L, 0);
4052 TEST_f_l (lrint, -0.2L, -1);
4053 TEST_f_l (lrint, 0.5L, 0);
4054 TEST_f_l (lrint, -0.5L, -1);
4055 TEST_f_l (lrint, 0.8L, 0);
4056 TEST_f_l (lrint, -0.8L, -1);
4058 TEST_f_l (lrint, 1.4L, 1);
4059 TEST_f_l (lrint, -1.4L, -2);
4061 TEST_f_l (lrint, 8388600.3L, 8388600);
4062 TEST_f_l (lrint, -8388600.3L, -8388601);
4064 TEST_f_l (lrint, 1071930.0008, 1071930);
4066 TEST_f_l (lrint, 1073741824.01, 1073741824);
4067 # if LONG_MAX > 281474976710656
4068 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4073 fesetround (save_round_mode);
4075 END (lrint_downward);
4080 lrint_test_upward (void)
4082 int save_round_mode;
4083 START (lrint_upward);
4085 save_round_mode = fegetround ();
4087 if (!fesetround (FE_UPWARD))
4089 TEST_f_l (lrint, 0.0, 0);
4090 TEST_f_l (lrint, minus_zero, 0);
4091 TEST_f_l (lrint, 0.2L, 1);
4092 TEST_f_l (lrint, -0.2L, 0);
4093 TEST_f_l (lrint, 0.5L, 1);
4094 TEST_f_l (lrint, -0.5L, 0);
4095 TEST_f_l (lrint, 0.8L, 1);
4096 TEST_f_l (lrint, -0.8L, 0);
4098 TEST_f_l (lrint, 1.4L, 2);
4099 TEST_f_l (lrint, -1.4L, -1);
4101 TEST_f_l (lrint, 8388600.3L, 8388601);
4102 TEST_f_l (lrint, -8388600.3L, -8388600);
4105 TEST_f_l (lrint, 1071930.0008, 1071931);
4106 TEST_f_l (lrint, 1073741824.01, 1073741825);
4107 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
4108 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4113 fesetround (save_round_mode);
4122 /* XXX this test is incomplete. We need to have a way to specifiy
4123 the rounding method and test the critical cases. So far, only
4124 unproblematic numbers are tested. */
4128 TEST_f_L (llrint, 0.0, 0);
4129 TEST_f_L (llrint, minus_zero, 0);
4130 TEST_f_L (llrint, 0.2L, 0);
4131 TEST_f_L (llrint, -0.2L, 0);
4133 TEST_f_L (llrint, 1.4L, 1);
4134 TEST_f_L (llrint, -1.4L, -1);
4136 TEST_f_L (llrint, 8388600.3L, 8388600);
4137 TEST_f_L (llrint, -8388600.3L, -8388600);
4139 TEST_f_l (llrint, 1071930.0008, 1071930);
4141 /* Test boundary conditions. */
4143 TEST_f_L (llrint, 2097151.0,2097151LL);
4145 TEST_f_L (llrint, 8388608.0, 8388608LL);
4147 TEST_f_L (llrint, 16777216.0, 16777216LL);
4149 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4151 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4152 /* 0x1000000000000 */
4153 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4154 /* 0x10000000000000 */
4155 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4156 /* 0x10000080000000 */
4157 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4158 /* 0x20000000000000 */
4159 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4160 /* 0x80000000000000 */
4161 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4162 /* 0x100000000000000 */
4163 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4165 /* The input can only be represented in long double. */
4166 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4167 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4168 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4169 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4170 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4172 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4173 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4174 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4175 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4176 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4178 # if LDBL_MANT_DIG > 100
4179 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4180 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4181 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4182 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4183 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4184 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4186 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4187 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4188 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4189 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4190 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4191 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4194 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4195 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4196 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4197 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4198 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4200 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4201 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4202 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4203 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4204 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4206 # if LDBL_MANT_DIG > 100
4207 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4208 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4209 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4210 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4211 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4212 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4214 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4215 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4216 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4217 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4218 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4219 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4222 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4223 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4224 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4225 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4226 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4228 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4229 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4230 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4231 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4232 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4234 # if LDBL_MANT_DIG > 100
4235 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4236 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4237 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4238 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4239 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4240 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4241 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4242 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4243 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4244 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4245 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4246 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4254 llrint_test_tonearest (void)
4256 int save_round_mode;
4257 START (llrint_tonearest);
4259 save_round_mode = fegetround ();
4261 if (!fesetround (FE_TONEAREST))
4263 TEST_f_L (llrint, 0.0, 0);
4264 TEST_f_L (llrint, minus_zero, 0);
4265 TEST_f_L (llrint, 0.2L, 0);
4266 TEST_f_L (llrint, -0.2L, 0);
4268 TEST_f_L (llrint, 1.4L, 1);
4269 TEST_f_L (llrint, -1.4L, -1);
4271 TEST_f_L (llrint, 8388600.3L, 8388600);
4272 TEST_f_L (llrint, -8388600.3L, -8388600);
4274 TEST_f_l (llrint, 1071930.0008, 1071930);
4276 /* Test boundary conditions. */
4278 TEST_f_L (llrint, 2097151.0,2097151LL);
4280 TEST_f_L (llrint, 8388608.0, 8388608LL);
4282 TEST_f_L (llrint, 16777216.0, 16777216LL);
4284 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4286 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4287 /* 0x1000000000000 */
4288 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4289 /* 0x10000000000000 */
4290 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4291 /* 0x10000080000000 */
4292 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4293 /* 0x20000000000000 */
4294 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4295 /* 0x80000000000000 */
4296 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4297 /* 0x100000000000000 */
4298 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4300 /* The input can only be represented in long double. */
4301 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4302 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4303 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4304 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4305 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4307 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4308 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4309 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4310 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4311 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4313 # if LDBL_MANT_DIG > 100
4314 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4315 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4316 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4317 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4318 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4319 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4321 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4322 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4323 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4324 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4325 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4326 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4329 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4330 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4331 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4332 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4333 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4335 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4336 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4337 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4338 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4339 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4341 # if LDBL_MANT_DIG > 100
4342 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4343 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4344 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4345 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4346 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4347 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4349 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4350 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4351 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4352 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4353 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4354 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4357 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4358 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4359 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4360 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4361 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4363 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4364 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4365 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4366 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4367 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4369 # if LDBL_MANT_DIG > 100
4370 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4371 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4372 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4373 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4374 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4375 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4376 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4377 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4378 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4379 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4380 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4381 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4386 fesetround (save_round_mode);
4388 END (llrint_tonearest);
4392 llrint_test_towardzero (void)
4394 int save_round_mode;
4395 START (llrint_towardzero);
4397 save_round_mode = fegetround ();
4399 if (!fesetround (FE_TOWARDZERO))
4401 TEST_f_L (llrint, 0.0, 0);
4402 TEST_f_L (llrint, minus_zero, 0);
4403 TEST_f_L (llrint, 0.2L, 0);
4404 TEST_f_L (llrint, -0.2L, 0);
4406 TEST_f_L (llrint, 1.4L, 1);
4407 TEST_f_L (llrint, -1.4L, -1);
4409 TEST_f_L (llrint, 8388600.3L, 8388600);
4410 TEST_f_L (llrint, -8388600.3L, -8388600);
4412 TEST_f_l (llrint, 1071930.0008, 1071930);
4414 /* Test boundary conditions. */
4416 TEST_f_L (llrint, 2097151.0,2097151LL);
4418 TEST_f_L (llrint, 8388608.0, 8388608LL);
4420 TEST_f_L (llrint, 16777216.0, 16777216LL);
4422 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4424 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4425 /* 0x1000000000000 */
4426 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4427 /* 0x10000000000000 */
4428 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4429 /* 0x10000080000000 */
4430 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4431 /* 0x20000000000000 */
4432 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4433 /* 0x80000000000000 */
4434 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4435 /* 0x100000000000000 */
4436 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4438 /* The input can only be represented in long double. */
4439 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4440 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4441 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4442 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4443 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4445 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4446 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4447 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4448 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4449 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4451 # if LDBL_MANT_DIG > 100
4452 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4453 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4454 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4455 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4456 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4457 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4459 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4460 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4461 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4462 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4463 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4464 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4467 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4468 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4469 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4470 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4471 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4473 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4474 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4475 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4476 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4477 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4479 # if LDBL_MANT_DIG > 100
4480 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4481 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4482 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4483 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4484 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4485 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4487 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4488 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4489 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4490 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4491 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4492 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4495 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4496 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4497 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4498 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4499 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4501 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4502 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4503 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4504 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4505 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4507 # if LDBL_MANT_DIG > 100
4508 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4509 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4510 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4511 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4512 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4513 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4514 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4515 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4516 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4517 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4518 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4519 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4524 fesetround (save_round_mode);
4526 END (llrint_towardzero);
4530 llrint_test_downward (void)
4532 int save_round_mode;
4533 START (llrint_downward);
4535 save_round_mode = fegetround ();
4537 if (!fesetround (FE_DOWNWARD))
4539 TEST_f_L (llrint, 0.0, 0);
4540 TEST_f_L (llrint, minus_zero, 0);
4541 TEST_f_L (llrint, 0.2L, 0);
4542 TEST_f_L (llrint, -0.2L, -1);
4544 TEST_f_L (llrint, 1.4L, 1);
4545 TEST_f_L (llrint, -1.4L, -2);
4547 TEST_f_L (llrint, 8388600.3L, 8388600);
4548 TEST_f_L (llrint, -8388600.3L, -8388601);
4550 TEST_f_l (llrint, 1071930.0008, 1071930);
4552 /* Test boundary conditions. */
4554 TEST_f_L (llrint, 2097151.0,2097151LL);
4556 TEST_f_L (llrint, 8388608.0, 8388608LL);
4558 TEST_f_L (llrint, 16777216.0, 16777216LL);
4560 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4562 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4563 /* 0x1000000000000 */
4564 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4565 /* 0x10000000000000 */
4566 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4567 /* 0x10000080000000 */
4568 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4569 /* 0x20000000000000 */
4570 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4571 /* 0x80000000000000 */
4572 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4573 /* 0x100000000000000 */
4574 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4576 /* The input can only be represented in long double. */
4577 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4578 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4579 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4580 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4581 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4583 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4584 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4585 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4586 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4587 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4588 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4590 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4591 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
4592 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
4593 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4594 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4596 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
4597 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
4598 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
4599 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4600 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4601 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4603 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4604 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4605 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4606 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4607 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4609 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4610 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4611 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4612 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4613 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4614 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4616 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4617 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
4618 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
4619 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4620 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4622 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
4623 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
4624 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
4625 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4626 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4627 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4629 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4630 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4631 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4632 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4633 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4635 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4636 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
4637 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
4638 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4639 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4641 # if LDBL_MANT_DIG > 100
4642 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4643 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4644 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4645 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4646 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4647 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
4648 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4649 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
4650 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4651 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4652 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4653 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4658 fesetround (save_round_mode);
4660 END (llrint_downward);
4664 llrint_test_upward (void)
4666 int save_round_mode;
4667 START (llrint_upward);
4669 save_round_mode = fegetround ();
4671 if (!fesetround (FE_UPWARD))
4673 TEST_f_L (llrint, 0.0, 0);
4674 TEST_f_L (llrint, minus_zero, 0);
4675 TEST_f_L (llrint, 0.2L, 1);
4676 TEST_f_L (llrint, -0.2L, 0);
4678 TEST_f_L (llrint, 1.4L, 2);
4679 TEST_f_L (llrint, -1.4L, -1);
4681 TEST_f_L (llrint, 8388600.3L, 8388601);
4682 TEST_f_L (llrint, -8388600.3L, -8388600);
4684 TEST_f_l (llrint, 1071930.0008, 1071931);
4686 /* Test boundary conditions. */
4688 TEST_f_L (llrint, 2097151.0,2097151LL);
4690 TEST_f_L (llrint, 8388608.0, 8388608LL);
4692 TEST_f_L (llrint, 16777216.0, 16777216LL);
4694 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4696 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4697 /* 0x1000000000000 */
4698 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4699 /* 0x10000000000000 */
4700 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4701 /* 0x10000080000000 */
4702 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4703 /* 0x20000000000000 */
4704 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4705 /* 0x80000000000000 */
4706 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4707 /* 0x100000000000000 */
4708 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4710 /* The input can only be represented in long double. */
4711 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4712 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
4713 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
4714 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4715 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4717 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
4718 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
4719 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
4720 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4721 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4722 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4724 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4725 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4726 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4727 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4728 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4730 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4731 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4732 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4733 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4734 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4735 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4737 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4738 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
4739 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
4740 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4741 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4743 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
4744 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
4745 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
4746 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4747 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4748 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4750 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4751 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4752 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4753 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4754 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4756 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4757 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4758 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4759 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4760 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4761 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4763 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4764 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
4765 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
4766 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4767 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4769 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4770 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4771 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4772 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4773 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4775 # if LDBL_MANT_DIG > 100
4776 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4777 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4778 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4779 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4780 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
4781 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4782 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
4783 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4784 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4785 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4786 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4787 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4792 fesetround (save_round_mode);
4794 END (llrint_upward);
4803 if (errno == ENOSYS)
4804 /* Function not implemented. */
4808 TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4809 TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4811 TEST_f_f (log, 1, 0);
4813 TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
4814 TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
4815 TEST_f_f (log, plus_infty, plus_infty);
4816 TEST_f_f (log, nan_value, nan_value);
4818 TEST_f_f (log, M_El, 1);
4819 TEST_f_f (log, 1.0 / M_El, -1);
4820 TEST_f_f (log, 2, M_LN2l);
4821 TEST_f_f (log, 10, M_LN10l);
4822 TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
4833 if (errno == ENOSYS)
4834 /* Function not implemented. */
4839 TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4840 TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4842 TEST_f_f (log10, 1, 0);
4844 /* log10 (x) == NaN plus invalid exception if x < 0. */
4845 TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
4846 TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
4848 TEST_f_f (log10, plus_infty, plus_infty);
4849 TEST_f_f (log10, nan_value, nan_value);
4851 TEST_f_f (log10, 0.1L, -1);
4852 TEST_f_f (log10, 10.0, 1);
4853 TEST_f_f (log10, 100.0, 2);
4854 TEST_f_f (log10, 10000.0, 4);
4855 TEST_f_f (log10, M_El, M_LOG10El);
4856 TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
4867 if (errno == ENOSYS)
4868 /* Function not implemented. */
4873 TEST_f_f (log1p, 0, 0);
4874 TEST_f_f (log1p, minus_zero, minus_zero);
4876 TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4877 TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
4878 TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
4880 TEST_f_f (log1p, plus_infty, plus_infty);
4881 TEST_f_f (log1p, nan_value, nan_value);
4883 TEST_f_f (log1p, M_El - 1.0, 1);
4885 TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
4886 TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
4897 if (errno == ENOSYS)
4898 /* Function not implemented. */
4903 TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4904 TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4906 TEST_f_f (log2, 1, 0);
4908 TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
4909 TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
4911 TEST_f_f (log2, plus_infty, plus_infty);
4912 TEST_f_f (log2, nan_value, nan_value);
4914 TEST_f_f (log2, M_El, M_LOG2El);
4915 TEST_f_f (log2, 2.0, 1);
4916 TEST_f_f (log2, 16.0, 4);
4917 TEST_f_f (log2, 256.0, 8);
4918 TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
4929 TEST_f_f (logb, plus_infty, plus_infty);
4930 TEST_f_f (logb, minus_infty, plus_infty);
4932 TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4934 TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4935 TEST_f_f (logb, nan_value, nan_value);
4937 TEST_f_f (logb, 1, 0);
4938 TEST_f_f (logb, M_El, 1);
4939 TEST_f_f (logb, 1024, 10);
4940 TEST_f_f (logb, -2000, 10);
4951 TEST_f_l (lround, 0, 0);
4952 TEST_f_l (lround, minus_zero, 0);
4953 TEST_f_l (lround, 0.2L, 0.0);
4954 TEST_f_l (lround, -0.2L, 0);
4955 TEST_f_l (lround, 0.5, 1);
4956 TEST_f_l (lround, -0.5, -1);
4957 TEST_f_l (lround, 0.8L, 1);
4958 TEST_f_l (lround, -0.8L, -1);
4959 TEST_f_l (lround, 1.5, 2);
4960 TEST_f_l (lround, -1.5, -2);
4961 TEST_f_l (lround, 22514.5, 22515);
4962 TEST_f_l (lround, -22514.5, -22515);
4963 TEST_f_l (lround, 1071930.0008, 1071930);
4965 TEST_f_l (lround, 1073741824.01, 1073741824);
4966 # if LONG_MAX > 281474976710656
4967 TEST_f_l (lround, 281474976710656.025, 281474976710656);
4968 TEST_f_l (lround, 18014398509481974, 18014398509481974);
4970 TEST_f_l (lround, 2097152.5, 2097153);
4971 TEST_f_l (lround, -2097152.5, -2097153);
4972 /* nextafter(0.5,-1) */
4973 TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
4974 /* nextafter(-0.5,1) */
4975 TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
4977 /* nextafter(0.5,-1) */
4978 TEST_f_l (lround, 0x1.fffffp-2, 0);
4979 /* nextafter(-0.5,1) */
4980 TEST_f_l (lround, -0x1.fffffp-2, 0);
4981 TEST_f_l (lround, 0x1.fffffep+23, 16777215);
4982 TEST_f_l (lround, -0x1.fffffep+23, -16777215);
4993 TEST_f_L (llround, 0, 0);
4994 TEST_f_L (llround, minus_zero, 0);
4995 TEST_f_L (llround, 0.2L, 0.0);
4996 TEST_f_L (llround, -0.2L, 0);
4997 TEST_f_L (llround, 0.5, 1);
4998 TEST_f_L (llround, -0.5, -1);
4999 TEST_f_L (llround, 0.8L, 1);
5000 TEST_f_L (llround, -0.8L, -1);
5001 TEST_f_L (llround, 1.5, 2);
5002 TEST_f_L (llround, -1.5, -2);
5003 TEST_f_L (llround, 22514.5, 22515);
5004 TEST_f_L (llround, -22514.5, -22515);
5005 TEST_f_l (llround, 1071930.0008, 1071930);
5007 TEST_f_L (llround, 2097152.5, 2097153);
5008 TEST_f_L (llround, -2097152.5, -2097153);
5009 TEST_f_L (llround, 34359738368.5, 34359738369ll);
5010 TEST_f_L (llround, -34359738368.5, -34359738369ll);
5011 TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
5014 /* Test boundary conditions. */
5016 TEST_f_L (llround, 2097151.0, 2097151LL);
5018 TEST_f_L (llround, 8388608.0, 8388608LL);
5020 TEST_f_L (llround, 16777216.0, 16777216LL);
5022 TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
5024 TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
5025 /* 0x1000000000000 */
5026 TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
5027 /* 0x10000000000000 */
5028 TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
5029 /* 0x10000080000000 */
5030 TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
5031 /* 0x20000000000000 */
5032 TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
5033 /* 0x80000000000000 */
5034 TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
5035 /* 0x100000000000000 */
5036 TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
5040 TEST_f_L (llround, 4294967295.5, 4294967296LL);
5042 TEST_f_L (llround, 8589934591.5, 8589934592LL);
5044 /* nextafter(0.5,-1) */
5045 TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
5046 /* nextafter(-0.5,1) */
5047 TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
5048 /* On PowerPC an exponent of '52' is the largest incrementally
5049 * representable sequence of whole-numbers in the 'double' range. We test
5050 * lround to make sure that a guard bit set during the lround operation
5051 * hasn't forced an erroneous shift giving us an incorrect result. The odd
5052 * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
5053 * rightmost bit set. */
5055 TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
5056 TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
5057 /* +-(2^53-1): Input is the last (positive and negative) incrementally
5058 * representable whole-number in the 'double' range that might round
5060 TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
5061 TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
5063 /* nextafter(0.5,-1) */
5064 TEST_f_L (llround, 0x1.fffffep-2, 0);
5065 /* nextafter(-0.5,1) */
5066 TEST_f_L (llround, -0x1.fffffep-2, 0);
5067 /* As above, on PowerPC an exponent of '23' is the largest incrementally
5068 * representable sequence of whole-numbers in the 'float' range.
5069 * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
5070 TEST_f_L (llround, 0x1.000002p+23,8388609);
5071 TEST_f_L (llround, -0x1.000002p+23,-8388609);
5072 TEST_f_L (llround, 0x1.fffffep+23, 16777215);
5073 TEST_f_L (llround, -0x1.fffffep+23, -16777215);
5078 /* The input can only be represented in long double. */
5079 TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
5080 TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
5081 TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
5082 TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
5083 TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
5085 # if LDBL_MANT_DIG > 100
5086 TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
5087 TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
5088 TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
5089 TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
5090 TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
5091 TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
5093 TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
5094 TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
5095 TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
5096 TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
5097 TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
5098 TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
5101 TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
5102 TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
5103 TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
5104 TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
5105 TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
5107 TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
5108 TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
5109 TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
5110 TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
5111 TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
5113 # if LDBL_MANT_DIG > 100
5114 TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
5115 TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
5116 TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
5117 TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
5118 TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
5119 TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
5121 TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
5122 TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
5123 TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
5124 TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
5125 TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
5126 TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
5129 TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
5130 TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
5131 TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
5132 TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
5133 TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
5135 TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
5136 TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
5137 TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
5138 TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
5139 TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
5141 TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
5142 TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
5143 TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
5144 TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
5145 TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
5147 TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
5148 TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
5149 TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
5150 TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
5151 TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
5152 TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
5165 TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
5166 TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
5167 TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
5168 TEST_fF_f1 (modf, 0, 0, 0);
5169 TEST_fF_f1 (modf, 1.5, 0.5, 1);
5170 TEST_fF_f1 (modf, 2.5, 0.5, 2);
5171 TEST_fF_f1 (modf, -2.5, -0.5, -2);
5172 TEST_fF_f1 (modf, 20, 0, 20);
5173 TEST_fF_f1 (modf, 21, 0, 21);
5174 TEST_fF_f1 (modf, 89.5, 0.5, 89);
5181 nearbyint_test (void)
5185 TEST_f_f (nearbyint, 0.0, 0.0);
5186 TEST_f_f (nearbyint, minus_zero, minus_zero);
5187 TEST_f_f (nearbyint, plus_infty, plus_infty);
5188 TEST_f_f (nearbyint, minus_infty, minus_infty);
5189 TEST_f_f (nearbyint, nan_value, nan_value);
5191 /* Subnormal values */
5192 TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
5193 TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
5195 /* Default rounding mode is round to nearest. */
5196 TEST_f_f (nearbyint, 0.5, 0.0);
5197 TEST_f_f (nearbyint, 1.5, 2.0);
5198 TEST_f_f (nearbyint, -0.5, minus_zero);
5199 TEST_f_f (nearbyint, -1.5, -2.0);
5201 TEST_f_f (nearbyint, 262144.75, 262145.0);
5202 TEST_f_f (nearbyint, 262142.75, 262143.0);
5203 TEST_f_f (nearbyint, 524286.75, 524287.0);
5204 TEST_f_f (nearbyint, 524288.75, 524289.0);
5206 TEST_f_f (nearbyint, 1048576.75, 1048577.0);
5207 TEST_f_f (nearbyint, 2097152.75, 2097153.0);
5208 TEST_f_f (nearbyint, 2492472.75, 2492473.0);
5209 TEST_f_f (nearbyint, 2886220.75, 2886221.0);
5210 TEST_f_f (nearbyint, 3058792.75, 3058793.0);
5211 TEST_f_f (nearbyint, -1048576.75, -1048577.0);
5212 TEST_f_f (nearbyint, -2097152.75, -2097153.0);
5213 TEST_f_f (nearbyint, -2492472.75, -2492473.0);
5214 TEST_f_f (nearbyint, -2886220.75, -2886221.0);
5215 TEST_f_f (nearbyint, -3058792.75, -3058793.0);
5217 TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
5218 TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
5219 TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
5220 TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
5221 TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
5222 TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
5223 TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
5224 TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
5225 TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
5226 TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
5233 nextafter_test (void)
5238 TEST_ff_f (nextafter, 0, 0, 0);
5239 TEST_ff_f (nextafter, minus_zero, 0, 0);
5240 TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
5241 TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
5243 TEST_ff_f (nextafter, 9, 9, 9);
5244 TEST_ff_f (nextafter, -9, -9, -9);
5245 TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
5246 TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
5248 TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
5249 TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
5250 TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
5252 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
5253 LDBL_MAX, DBL_MAX, FLT_MAX);
5254 TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
5255 TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty, OVERFLOW_EXCEPTION);
5258 // XXX Enable once gcc is fixed.
5259 //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
5262 /* XXX We need the hexadecimal FP number representation here for further
5270 nexttoward_test (void)
5273 TEST_ff_f (nexttoward, 0, 0, 0);
5274 TEST_ff_f (nexttoward, minus_zero, 0, 0);
5275 TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
5276 TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
5278 TEST_ff_f (nexttoward, 9, 9, 9);
5279 TEST_ff_f (nexttoward, -9, -9, -9);
5280 TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
5281 TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
5283 TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
5284 TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
5285 TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
5287 /* XXX We need the hexadecimal FP number representation here for further
5300 if (errno == ENOSYS)
5301 /* Function not implemented. */
5306 TEST_ff_f (pow, 0, 0, 1);
5307 TEST_ff_f (pow, 0, minus_zero, 1);
5308 TEST_ff_f (pow, minus_zero, 0, 1);
5309 TEST_ff_f (pow, minus_zero, minus_zero, 1);
5311 TEST_ff_f (pow, 10, 0, 1);
5312 TEST_ff_f (pow, 10, minus_zero, 1);
5313 TEST_ff_f (pow, -10, 0, 1);
5314 TEST_ff_f (pow, -10, minus_zero, 1);
5316 TEST_ff_f (pow, nan_value, 0, 1);
5317 TEST_ff_f (pow, nan_value, minus_zero, 1);
5321 TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
5322 TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
5323 TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
5324 TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
5326 TEST_ff_f (pow, 0.9L, plus_infty, 0);
5327 TEST_ff_f (pow, 1e-7L, plus_infty, 0);
5328 TEST_ff_f (pow, -0.9L, plus_infty, 0);
5329 TEST_ff_f (pow, -1e-7L, plus_infty, 0);
5331 TEST_ff_f (pow, 1.1L, minus_infty, 0);
5332 TEST_ff_f (pow, plus_infty, minus_infty, 0);
5333 TEST_ff_f (pow, -1.1L, minus_infty, 0);
5334 TEST_ff_f (pow, minus_infty, minus_infty, 0);
5336 TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
5337 TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
5338 TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
5339 TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
5341 TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
5342 TEST_ff_f (pow, plus_infty, 1, plus_infty);
5343 TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
5345 TEST_ff_f (pow, plus_infty, -1e-7L, 0);
5346 TEST_ff_f (pow, plus_infty, -1, 0);
5347 TEST_ff_f (pow, plus_infty, -1e7L, 0);
5349 TEST_ff_f (pow, minus_infty, 1, minus_infty);
5350 TEST_ff_f (pow, minus_infty, 11, minus_infty);
5351 TEST_ff_f (pow, minus_infty, 1001, minus_infty);
5353 TEST_ff_f (pow, minus_infty, 2, plus_infty);
5354 TEST_ff_f (pow, minus_infty, 12, plus_infty);
5355 TEST_ff_f (pow, minus_infty, 1002, plus_infty);
5356 TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
5357 TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
5358 TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
5359 TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
5361 TEST_ff_f (pow, minus_infty, -1, minus_zero);
5362 TEST_ff_f (pow, minus_infty, -11, minus_zero);
5363 TEST_ff_f (pow, minus_infty, -1001, minus_zero);
5365 TEST_ff_f (pow, minus_infty, -2, 0);
5366 TEST_ff_f (pow, minus_infty, -12, 0);
5367 TEST_ff_f (pow, minus_infty, -1002, 0);
5368 TEST_ff_f (pow, minus_infty, -0.1L, 0);
5369 TEST_ff_f (pow, minus_infty, -1.1L, 0);
5370 TEST_ff_f (pow, minus_infty, -11.1L, 0);
5371 TEST_ff_f (pow, minus_infty, -1001.1L, 0);
5374 TEST_ff_f (pow, nan_value, nan_value, nan_value);
5375 TEST_ff_f (pow, 0, nan_value, nan_value);
5376 TEST_ff_f (pow, 1, nan_value, 1);
5377 TEST_ff_f (pow, -1, nan_value, nan_value);
5378 TEST_ff_f (pow, nan_value, 1, nan_value);
5379 TEST_ff_f (pow, nan_value, -1, nan_value);
5381 /* pow (x, NaN) == NaN. */
5382 TEST_ff_f (pow, 3.0, nan_value, nan_value);
5383 TEST_ff_f (pow, minus_zero, nan_value, nan_value);
5384 TEST_ff_f (pow, plus_infty, nan_value, nan_value);
5385 TEST_ff_f (pow, -3.0, nan_value, nan_value);
5386 TEST_ff_f (pow, minus_infty, nan_value, nan_value);
5388 TEST_ff_f (pow, nan_value, 3.0, nan_value);
5389 TEST_ff_f (pow, nan_value, -3.0, nan_value);
5390 TEST_ff_f (pow, nan_value, plus_infty, nan_value);
5391 TEST_ff_f (pow, nan_value, minus_infty, nan_value);
5392 TEST_ff_f (pow, nan_value, 2.5, nan_value);
5393 TEST_ff_f (pow, nan_value, -2.5, nan_value);
5395 TEST_ff_f (pow, 1, plus_infty, 1);
5396 TEST_ff_f (pow, -1, plus_infty, 1);
5397 TEST_ff_f (pow, 1, minus_infty, 1);
5398 TEST_ff_f (pow, -1, minus_infty, 1);
5399 TEST_ff_f (pow, 1, 1, 1);
5400 TEST_ff_f (pow, 1, -1, 1);
5401 TEST_ff_f (pow, 1, 1.25, 1);
5402 TEST_ff_f (pow, 1, -1.25, 1);
5403 TEST_ff_f (pow, 1, 0x1p62L, 1);
5404 TEST_ff_f (pow, 1, 0x1p63L, 1);
5405 TEST_ff_f (pow, 1, 0x1p64L, 1);
5406 TEST_ff_f (pow, 1, 0x1p72L, 1);
5408 /* pow (x, +-0) == 1. */
5409 TEST_ff_f (pow, plus_infty, 0, 1);
5410 TEST_ff_f (pow, plus_infty, minus_zero, 1);
5411 TEST_ff_f (pow, minus_infty, 0, 1);
5412 TEST_ff_f (pow, minus_infty, minus_zero, 1);
5413 TEST_ff_f (pow, 32.75L, 0, 1);
5414 TEST_ff_f (pow, 32.75L, minus_zero, 1);
5415 TEST_ff_f (pow, -32.75L, 0, 1);
5416 TEST_ff_f (pow, -32.75L, minus_zero, 1);
5417 TEST_ff_f (pow, 0x1p72L, 0, 1);
5418 TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
5419 TEST_ff_f (pow, 0x1p-72L, 0, 1);
5420 TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
5422 TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5423 TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5424 TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5425 TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5428 TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5429 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5431 TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5432 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5434 TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5435 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5437 TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5438 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5441 TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5442 check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5444 TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5445 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5447 TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5448 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5450 TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5451 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5453 TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty, OVERFLOW_EXCEPTION);
5454 TEST_ff_f (pow, 10, -0x1p72L, 0);
5455 /* Bug 13873: OVERFLOW exception may be missing. */
5456 TEST_ff_f (pow, max_value, max_value, plus_infty, OVERFLOW_EXCEPTION_OK);
5457 /* Bug 13872: spurious OVERFLOW exception may be present. */
5458 TEST_ff_f (pow, 10, -max_value, 0, OVERFLOW_EXCEPTION_OK);
5460 TEST_ff_f (pow, 0, 1, 0);
5461 TEST_ff_f (pow, 0, 11, 0);
5463 TEST_ff_f (pow, minus_zero, 1, minus_zero);
5464 TEST_ff_f (pow, minus_zero, 11, minus_zero);
5466 TEST_ff_f (pow, 0, 2, 0);
5467 TEST_ff_f (pow, 0, 11.1L, 0);
5469 TEST_ff_f (pow, minus_zero, 2, 0);
5470 TEST_ff_f (pow, minus_zero, 11.1L, 0);
5471 TEST_ff_f (pow, 0, plus_infty, 0);
5472 TEST_ff_f (pow, minus_zero, plus_infty, 0);
5475 /* pow (x, +inf) == +inf for |x| > 1. */
5476 TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
5478 /* pow (x, +inf) == +0 for |x| < 1. */
5479 TEST_ff_f (pow, 0.5, plus_infty, 0.0);
5481 /* pow (x, -inf) == +0 for |x| > 1. */
5482 TEST_ff_f (pow, 1.5, minus_infty, 0.0);
5484 /* pow (x, -inf) == +inf for |x| < 1. */
5485 TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
5488 /* pow (+inf, y) == +inf for y > 0. */
5489 TEST_ff_f (pow, plus_infty, 2, plus_infty);
5491 /* pow (+inf, y) == +0 for y < 0. */
5492 TEST_ff_f (pow, plus_infty, -1, 0.0);
5494 /* pow (-inf, y) == -inf for y an odd integer > 0. */
5495 TEST_ff_f (pow, minus_infty, 27, minus_infty);
5497 /* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
5498 TEST_ff_f (pow, minus_infty, 28, plus_infty);
5500 /* pow (-inf, y) == -0 for y an odd integer < 0. */
5501 TEST_ff_f (pow, minus_infty, -3, minus_zero);
5502 /* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
5503 TEST_ff_f (pow, minus_infty, -2.0, 0.0);
5505 /* pow (+0, y) == +0 for y an odd integer > 0. */
5506 TEST_ff_f (pow, 0.0, 27, 0.0);
5508 /* pow (-0, y) == -0 for y an odd integer > 0. */
5509 TEST_ff_f (pow, minus_zero, 27, minus_zero);
5511 /* pow (+0, y) == +0 for y > 0 and not an odd integer. */
5512 TEST_ff_f (pow, 0.0, 4, 0.0);
5514 /* pow (-0, y) == +0 for y > 0 and not an odd integer. */
5515 TEST_ff_f (pow, minus_zero, 4, 0.0);
5517 TEST_ff_f (pow, 16, 0.25L, 2);
5518 TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
5519 TEST_ff_f (pow, 2, 4, 16);
5520 TEST_ff_f (pow, 256, 8, 0x1p64L);
5522 TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
5524 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
5525 TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
5533 pow_test_tonearest (void)
5535 int save_round_mode;
5538 if (errno == ENOSYS)
5539 /* Function not implemented. */
5542 START (pow_tonearest);
5544 save_round_mode = fegetround ();
5546 if (!fesetround (FE_TONEAREST))
5548 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5549 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5552 fesetround (save_round_mode);
5554 END (pow_tonearest);
5559 pow_test_towardzero (void)
5561 int save_round_mode;
5564 if (errno == ENOSYS)
5565 /* Function not implemented. */
5568 START (pow_towardzero);
5570 save_round_mode = fegetround ();
5572 if (!fesetround (FE_TOWARDZERO))
5574 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5575 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5578 fesetround (save_round_mode);
5580 END (pow_towardzero);
5585 pow_test_downward (void)
5587 int save_round_mode;
5590 if (errno == ENOSYS)
5591 /* Function not implemented. */
5594 START (pow_downward);
5596 save_round_mode = fegetround ();
5598 if (!fesetround (FE_DOWNWARD))
5600 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5601 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5604 fesetround (save_round_mode);
5611 pow_test_upward (void)
5613 int save_round_mode;
5616 if (errno == ENOSYS)
5617 /* Function not implemented. */
5622 save_round_mode = fegetround ();
5624 if (!fesetround (FE_UPWARD))
5626 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5627 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5630 fesetround (save_round_mode);
5637 remainder_test (void)
5640 FUNC(remainder) (1.625, 1.0);
5641 if (errno == ENOSYS)
5642 /* Function not implemented. */
5648 TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
5649 check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
5651 TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
5652 check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
5654 TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
5655 check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5657 TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
5658 check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5660 TEST_ff_f (remainder, nan_value, nan_value, nan_value);
5661 check_int ("errno for remainder(NAN, NAN) unchanged", errno, 0, 0, 0, 0);
5663 TEST_ff_f (remainder, 0, nan_value, nan_value);
5664 check_int ("errno for remainder(0, NAN) unchanged", errno, 0, 0, 0, 0);
5666 TEST_ff_f (remainder, nan_value, 0, nan_value);
5667 check_int ("errno for remainder(NaN, 0) unchanged", errno, 0, 0, 0, 0);
5669 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
5670 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
5671 TEST_ff_f (remainder, 1.625, -1.0, -0.375);
5672 TEST_ff_f (remainder, -1.625, -1.0, 0.375);
5673 TEST_ff_f (remainder, 5.0, 2.0, 1.0);
5674 TEST_ff_f (remainder, 3.0, 2.0, -1.0);
5686 FUNC(remquo) (1.625, 1.0, &x);
5687 if (errno == ENOSYS)
5688 /* Function not implemented. */
5693 TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
5694 TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
5695 TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5696 TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5697 TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
5699 TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
5700 TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
5701 TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
5702 TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
5704 TEST_ffI_f1 (remquo, 5, 2, 1, 2);
5705 TEST_ffI_f1 (remquo, 3, 2, -1, 2);
5715 TEST_f_f (rint, 0.0, 0.0);
5716 TEST_f_f (rint, minus_zero, minus_zero);
5717 TEST_f_f (rint, plus_infty, plus_infty);
5718 TEST_f_f (rint, minus_infty, minus_infty);
5720 /* Default rounding mode is round to even. */
5721 TEST_f_f (rint, 0.5, 0.0);
5722 TEST_f_f (rint, 1.5, 2.0);
5723 TEST_f_f (rint, 2.5, 2.0);
5724 TEST_f_f (rint, 3.5, 4.0);
5725 TEST_f_f (rint, 4.5, 4.0);
5726 TEST_f_f (rint, -0.5, -0.0);
5727 TEST_f_f (rint, -1.5, -2.0);
5728 TEST_f_f (rint, -2.5, -2.0);
5729 TEST_f_f (rint, -3.5, -4.0);
5730 TEST_f_f (rint, -4.5, -4.0);
5731 TEST_f_f (rint, 0.1, 0.0);
5732 TEST_f_f (rint, 0.25, 0.0);
5733 TEST_f_f (rint, 0.625, 1.0);
5734 TEST_f_f (rint, -0.1, -0.0);
5735 TEST_f_f (rint, -0.25, -0.0);
5736 TEST_f_f (rint, -0.625, -1.0);
5737 TEST_f_f (rint, 262144.75, 262145.0);
5738 TEST_f_f (rint, 262142.75, 262143.0);
5739 TEST_f_f (rint, 524286.75, 524287.0);
5740 TEST_f_f (rint, 524288.75, 524289.0);
5741 TEST_f_f (rint, 1048576.75, 1048577.0);
5742 TEST_f_f (rint, 2097152.75, 2097153.0);
5743 TEST_f_f (rint, -1048576.75, -1048577.0);
5744 TEST_f_f (rint, -2097152.75, -2097153.0);
5746 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5747 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5748 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5749 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5750 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5751 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5752 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5753 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5754 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5755 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5758 /* The result can only be represented in long double. */
5759 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5760 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5761 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5762 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5763 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5765 # if LDBL_MANT_DIG > 100
5766 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5767 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5768 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5771 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5772 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5773 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5774 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5775 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5777 # if LDBL_MANT_DIG > 100
5778 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5779 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5780 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5782 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5783 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5784 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5785 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5786 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5787 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5789 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5790 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5791 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5792 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5793 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5794 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5797 TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
5798 TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
5799 TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
5800 TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
5801 TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
5803 TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
5804 TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
5805 TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
5806 TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
5807 TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
5809 TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
5810 TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
5811 TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
5812 TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
5813 TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
5815 TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
5816 TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
5817 TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
5818 TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
5819 TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
5821 TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5822 TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5823 TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
5824 TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5825 TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5832 rint_test_tonearest (void)
5834 int save_round_mode;
5835 START (rint_tonearest);
5837 save_round_mode = fegetround ();
5839 if (!fesetround (FE_TONEAREST))
5841 TEST_f_f (rint, 2.0, 2.0);
5842 TEST_f_f (rint, 1.5, 2.0);
5843 TEST_f_f (rint, 1.0, 1.0);
5844 TEST_f_f (rint, 0.5, 0.0);
5845 TEST_f_f (rint, 0.0, 0.0);
5846 TEST_f_f (rint, minus_zero, minus_zero);
5847 TEST_f_f (rint, -0.5, -0.0);
5848 TEST_f_f (rint, -1.0, -1.0);
5849 TEST_f_f (rint, -1.5, -2.0);
5850 TEST_f_f (rint, -2.0, -2.0);
5851 TEST_f_f (rint, 0.1, 0.0);
5852 TEST_f_f (rint, 0.25, 0.0);
5853 TEST_f_f (rint, 0.625, 1.0);
5854 TEST_f_f (rint, -0.1, -0.0);
5855 TEST_f_f (rint, -0.25, -0.0);
5856 TEST_f_f (rint, -0.625, -1.0);
5857 TEST_f_f (rint, 1048576.75, 1048577.0);
5858 TEST_f_f (rint, 2097152.75, 2097153.0);
5859 TEST_f_f (rint, -1048576.75, -1048577.0);
5860 TEST_f_f (rint, -2097152.75, -2097153.0);
5862 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5863 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5864 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5865 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5866 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5867 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5868 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5869 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5870 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5871 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5874 /* The result can only be represented in long double. */
5875 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5876 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5877 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5878 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5879 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5880 # if LDBL_MANT_DIG > 100
5881 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5882 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5883 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5885 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5886 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5887 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5888 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5889 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5890 # if LDBL_MANT_DIG > 100
5891 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5892 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5893 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5895 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5896 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5897 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5898 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5899 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5900 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5902 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5903 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5904 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5905 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5906 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5907 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5912 fesetround (save_round_mode);
5914 END (rint_tonearest);
5918 rint_test_towardzero (void)
5920 int save_round_mode;
5921 START (rint_towardzero);
5923 save_round_mode = fegetround ();
5925 if (!fesetround (FE_TOWARDZERO))
5927 TEST_f_f (rint, 2.0, 2.0);
5928 TEST_f_f (rint, 1.5, 1.0);
5929 TEST_f_f (rint, 1.0, 1.0);
5930 TEST_f_f (rint, 0.5, 0.0);
5931 TEST_f_f (rint, 0.0, 0.0);
5932 TEST_f_f (rint, minus_zero, minus_zero);
5933 TEST_f_f (rint, -0.5, -0.0);
5934 TEST_f_f (rint, -1.0, -1.0);
5935 TEST_f_f (rint, -1.5, -1.0);
5936 TEST_f_f (rint, -2.0, -2.0);
5937 TEST_f_f (rint, 0.1, 0.0);
5938 TEST_f_f (rint, 0.25, 0.0);
5939 TEST_f_f (rint, 0.625, 0.0);
5940 TEST_f_f (rint, -0.1, -0.0);
5941 TEST_f_f (rint, -0.25, -0.0);
5942 TEST_f_f (rint, -0.625, -0.0);
5943 TEST_f_f (rint, 1048576.75, 1048576.0);
5944 TEST_f_f (rint, 2097152.75, 2097152.0);
5945 TEST_f_f (rint, -1048576.75, -1048576.0);
5946 TEST_f_f (rint, -2097152.75, -2097152.0);
5948 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5949 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5950 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5951 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5952 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5953 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
5954 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
5955 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
5956 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
5957 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
5960 /* The result can only be represented in long double. */
5961 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5962 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5963 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5964 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5965 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5966 # if LDBL_MANT_DIG > 100
5967 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5968 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5969 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5971 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5972 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5973 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5974 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5975 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5976 # if LDBL_MANT_DIG > 100
5977 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5978 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5979 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5981 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5982 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5983 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5984 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5985 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5986 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5988 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5989 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5990 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5991 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5992 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5993 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5998 fesetround (save_round_mode);
6000 END (rint_towardzero);
6004 rint_test_downward (void)
6006 int save_round_mode;
6007 START (rint_downward);
6009 save_round_mode = fegetround ();
6011 if (!fesetround (FE_DOWNWARD))
6013 TEST_f_f (rint, 2.0, 2.0);
6014 TEST_f_f (rint, 1.5, 1.0);
6015 TEST_f_f (rint, 1.0, 1.0);
6016 TEST_f_f (rint, 0.5, 0.0);
6017 TEST_f_f (rint, 0.0, 0.0);
6018 TEST_f_f (rint, minus_zero, minus_zero);
6019 TEST_f_f (rint, -0.5, -1.0);
6020 TEST_f_f (rint, -1.0, -1.0);
6021 TEST_f_f (rint, -1.5, -2.0);
6022 TEST_f_f (rint, -2.0, -2.0);
6023 TEST_f_f (rint, 0.1, 0.0);
6024 TEST_f_f (rint, 0.25, 0.0);
6025 TEST_f_f (rint, 0.625, 0.0);
6026 TEST_f_f (rint, -0.1, -1.0);
6027 TEST_f_f (rint, -0.25, -1.0);
6028 TEST_f_f (rint, -0.625, -1.0);
6029 TEST_f_f (rint, 1048576.75, 1048576.0);
6030 TEST_f_f (rint, 2097152.75, 2097152.0);
6031 TEST_f_f (rint, -1048576.75, -1048577.0);
6032 TEST_f_f (rint, -2097152.75, -2097153.0);
6034 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
6035 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
6036 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
6037 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
6038 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
6039 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
6040 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
6041 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
6042 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
6043 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
6046 /* The result can only be represented in long double. */
6047 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
6048 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
6049 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
6050 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
6051 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
6052 # if LDBL_MANT_DIG > 100
6053 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
6054 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
6055 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
6057 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
6058 TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
6059 TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
6060 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
6061 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
6062 # if LDBL_MANT_DIG > 100
6063 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
6064 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
6065 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
6067 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
6068 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
6069 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
6070 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
6071 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
6072 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
6074 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
6075 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
6076 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
6077 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
6078 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
6079 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
6084 fesetround (save_round_mode);
6086 END (rint_downward);
6090 rint_test_upward (void)
6092 int save_round_mode;
6093 START (rint_upward);
6095 save_round_mode = fegetround ();
6097 if (!fesetround (FE_UPWARD))
6099 TEST_f_f (rint, 2.0, 2.0);
6100 TEST_f_f (rint, 1.5, 2.0);
6101 TEST_f_f (rint, 1.0, 1.0);
6102 TEST_f_f (rint, 0.5, 1.0);
6103 TEST_f_f (rint, 0.0, 0.0);
6104 TEST_f_f (rint, minus_zero, minus_zero);
6105 TEST_f_f (rint, -0.5, -0.0);
6106 TEST_f_f (rint, -1.0, -1.0);
6107 TEST_f_f (rint, -1.5, -1.0);
6108 TEST_f_f (rint, -2.0, -2.0);
6109 TEST_f_f (rint, 0.1, 1.0);
6110 TEST_f_f (rint, 0.25, 1.0);
6111 TEST_f_f (rint, 0.625, 1.0);
6112 TEST_f_f (rint, -0.1, -0.0);
6113 TEST_f_f (rint, -0.25, -0.0);
6114 TEST_f_f (rint, -0.625, -0.0);
6115 TEST_f_f (rint, 1048576.75, 1048577.0);
6116 TEST_f_f (rint, 2097152.75, 2097153.0);
6117 TEST_f_f (rint, -1048576.75, -1048576.0);
6118 TEST_f_f (rint, -2097152.75, -2097152.0);
6120 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
6121 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
6122 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
6123 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
6124 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
6125 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
6126 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
6127 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
6128 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
6129 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
6132 /* The result can only be represented in long double. */
6133 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
6134 TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
6135 TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
6136 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
6137 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
6138 # if LDBL_MANT_DIG > 100
6139 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
6140 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
6141 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
6143 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
6144 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
6145 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
6146 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
6147 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
6148 # if LDBL_MANT_DIG > 100
6149 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
6150 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
6151 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
6153 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
6154 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
6155 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
6156 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
6157 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
6158 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
6160 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
6161 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
6162 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
6163 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
6164 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
6165 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
6170 fesetround (save_round_mode);
6180 TEST_f_f (round, 0, 0);
6181 TEST_f_f (round, minus_zero, minus_zero);
6182 TEST_f_f (round, 0.2L, 0.0);
6183 TEST_f_f (round, -0.2L, minus_zero);
6184 TEST_f_f (round, 0.5, 1.0);
6185 TEST_f_f (round, -0.5, -1.0);
6186 TEST_f_f (round, 0.8L, 1.0);
6187 TEST_f_f (round, -0.8L, -1.0);
6188 TEST_f_f (round, 1.5, 2.0);
6189 TEST_f_f (round, -1.5, -2.0);
6190 TEST_f_f (round, 0.1, 0.0);
6191 TEST_f_f (round, 0.25, 0.0);
6192 TEST_f_f (round, 0.625, 1.0);
6193 TEST_f_f (round, -0.1, -0.0);
6194 TEST_f_f (round, -0.25, -0.0);
6195 TEST_f_f (round, -0.625, -1.0);
6196 TEST_f_f (round, 2097152.5, 2097153);
6197 TEST_f_f (round, -2097152.5, -2097153);
6200 /* The result can only be represented in long double. */
6201 TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
6202 TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
6203 TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
6204 TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
6205 TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
6206 # if LDBL_MANT_DIG > 100
6207 TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
6208 TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
6209 TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
6212 TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
6213 TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
6214 TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
6215 TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
6216 TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
6217 # if LDBL_MANT_DIG > 100
6218 TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
6219 TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
6220 TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
6223 TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
6224 TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
6225 TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
6226 TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
6227 TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
6229 TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
6230 TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
6231 TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
6232 TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
6233 TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
6235 # if LDBL_MANT_DIG > 100
6236 TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
6237 TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
6238 TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
6239 TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
6240 TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
6241 TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
6243 TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
6244 TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
6245 TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
6246 TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
6247 TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
6248 TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
6251 TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
6252 TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
6253 TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
6254 TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
6255 TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
6257 TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
6258 TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
6259 TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
6260 TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
6261 TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
6263 TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
6264 TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
6265 TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
6266 TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
6267 TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
6280 TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
6281 TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
6283 TEST_ff_f (scalb, 0, nan_value, nan_value);
6284 TEST_ff_f (scalb, 1, nan_value, nan_value);
6286 TEST_ff_f (scalb, 1, 0, 1);
6287 TEST_ff_f (scalb, -1, 0, -1);
6289 TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
6290 TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
6292 TEST_ff_f (scalb, 0, 2, 0);
6293 TEST_ff_f (scalb, minus_zero, -4, minus_zero);
6294 TEST_ff_f (scalb, 0, 0, 0);
6295 TEST_ff_f (scalb, minus_zero, 0, minus_zero);
6296 TEST_ff_f (scalb, 0, -1, 0);
6297 TEST_ff_f (scalb, minus_zero, -10, minus_zero);
6298 TEST_ff_f (scalb, 0, minus_infty, 0);
6299 TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
6301 TEST_ff_f (scalb, plus_infty, -1, plus_infty);
6302 TEST_ff_f (scalb, minus_infty, -10, minus_infty);
6303 TEST_ff_f (scalb, plus_infty, 0, plus_infty);
6304 TEST_ff_f (scalb, minus_infty, 0, minus_infty);
6305 TEST_ff_f (scalb, plus_infty, 2, plus_infty);
6306 TEST_ff_f (scalb, minus_infty, 100, minus_infty);
6308 TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
6309 TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
6311 TEST_ff_f (scalb, 1, plus_infty, plus_infty);
6312 TEST_ff_f (scalb, -1, plus_infty, minus_infty);
6313 TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
6314 TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
6316 TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6317 TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6319 TEST_ff_f (scalb, nan_value, 1, nan_value);
6320 TEST_ff_f (scalb, 1, nan_value, nan_value);
6321 TEST_ff_f (scalb, nan_value, 0, nan_value);
6322 TEST_ff_f (scalb, 0, nan_value, nan_value);
6323 TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
6324 TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
6325 TEST_ff_f (scalb, nan_value, nan_value, nan_value);
6327 TEST_ff_f (scalb, 0.8L, 4, 12.8L);
6328 TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
6340 TEST_fi_f (scalbn, 0, 0, 0);
6341 TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
6343 TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
6344 TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
6345 TEST_fi_f (scalbn, nan_value, 1, nan_value);
6347 TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
6348 TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
6350 TEST_fi_f (scalbn, 1, 0L, 1);
6352 TEST_fi_f (scalbn, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6353 TEST_fi_f (scalbn, 1, INT_MIN, plus_zero);
6354 TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6355 TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero);
6356 TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6357 TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero);
6358 TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6359 TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero);
6371 TEST_fl_f (scalbln, 0, 0, 0);
6372 TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
6374 TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
6375 TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
6376 TEST_fl_f (scalbln, nan_value, 1, nan_value);
6378 TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
6379 TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
6381 TEST_fl_f (scalbln, 1, 0L, 1);
6383 TEST_fi_f (scalbln, 1, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6384 TEST_fi_f (scalbln, 1, INT_MIN, plus_zero);
6385 TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6386 TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero);
6387 TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6388 TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero);
6389 TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty, OVERFLOW_EXCEPTION);
6390 TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero);
6392 TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
6393 TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero);
6394 TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
6395 TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero);
6396 TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
6397 TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero);
6398 TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty, OVERFLOW_EXCEPTION);
6399 TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero);
6401 #if LONG_MAX >= 0x100000000
6402 TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
6403 TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero);
6404 TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
6405 TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero);
6406 TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
6407 TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero);
6408 TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty, OVERFLOW_EXCEPTION);
6409 TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero);
6422 TEST_f_b (signbit, 0, 0);
6423 TEST_f_b (signbit, minus_zero, 1);
6424 TEST_f_b (signbit, plus_infty, 0);
6425 TEST_f_b (signbit, minus_infty, 1);
6427 /* signbit (x) != 0 for x < 0. */
6428 TEST_f_b (signbit, -1, 1);
6429 /* signbit (x) == 0 for x >= 0. */
6430 TEST_f_b (signbit, 1, 0);
6441 if (errno == ENOSYS)
6442 /* Function not implemented. */
6447 TEST_f_f (sin, 0, 0);
6448 TEST_f_f (sin, minus_zero, minus_zero);
6450 TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
6451 check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
6453 TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
6454 check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
6456 TEST_f_f (sin, nan_value, nan_value);
6457 check_int ("errno for sin(NaN) unchanged", errno, 0, 0, 0, 0);
6459 TEST_f_f (sin, M_PI_6l, 0.5);
6460 TEST_f_f (sin, -M_PI_6l, -0.5);
6461 TEST_f_f (sin, M_PI_2l, 1);
6462 TEST_f_f (sin, -M_PI_2l, -1);
6463 TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
6465 TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
6466 TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
6469 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
6470 TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
6474 TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
6475 TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
6478 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6479 TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
6488 sin_test_tonearest (void)
6490 int save_round_mode;
6493 if (errno == ENOSYS)
6494 /* Function not implemented. */
6497 START (sin_tonearest);
6499 save_round_mode = fegetround ();
6501 if (!fesetround (FE_TONEAREST))
6503 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6504 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6505 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6506 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6507 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6508 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6509 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6510 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6511 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6512 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6515 fesetround (save_round_mode);
6517 END (sin_tonearest);
6522 sin_test_towardzero (void)
6524 int save_round_mode;
6527 if (errno == ENOSYS)
6528 /* Function not implemented. */
6531 START (sin_towardzero);
6533 save_round_mode = fegetround ();
6535 if (!fesetround (FE_TOWARDZERO))
6537 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6538 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6539 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6540 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6541 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6542 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6543 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6544 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6545 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6546 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6549 fesetround (save_round_mode);
6551 END (sin_towardzero);
6556 sin_test_downward (void)
6558 int save_round_mode;
6561 if (errno == ENOSYS)
6562 /* Function not implemented. */
6565 START (sin_downward);
6567 save_round_mode = fegetround ();
6569 if (!fesetround (FE_DOWNWARD))
6571 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6572 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6573 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6574 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6575 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6576 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6577 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6578 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6579 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6580 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6583 fesetround (save_round_mode);
6590 sin_test_upward (void)
6592 int save_round_mode;
6595 if (errno == ENOSYS)
6596 /* Function not implemented. */
6601 save_round_mode = fegetround ();
6603 if (!fesetround (FE_UPWARD))
6605 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6606 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6607 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6608 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6609 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6610 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6611 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6612 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6613 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6614 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6617 fesetround (save_round_mode);
6626 FLOAT sin_res, cos_res;
6629 FUNC(sincos) (0, &sin_res, &cos_res);
6630 if (errno == ENOSYS)
6631 /* Function not implemented. */
6636 /* sincos is treated differently because it returns void. */
6637 TEST_extra (sincos, 0, 0, 1);
6639 TEST_extra (sincos, minus_zero, minus_zero, 1);
6640 TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6641 TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6642 TEST_extra (sincos, nan_value, nan_value, nan_value);
6644 TEST_extra (sincos, M_PI_2l, 1, 0);
6645 TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
6646 TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
6647 TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
6649 TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6650 TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6653 TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
6657 TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
6658 TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
6661 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6662 TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
6673 if (errno == ENOSYS)
6674 /* Function not implemented. */
6678 TEST_f_f (sinh, 0, 0);
6679 TEST_f_f (sinh, minus_zero, minus_zero);
6682 TEST_f_f (sinh, plus_infty, plus_infty);
6683 TEST_f_f (sinh, minus_infty, minus_infty);
6685 TEST_f_f (sinh, nan_value, nan_value);
6687 TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
6688 TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
6695 sinh_test_tonearest (void)
6697 int save_round_mode;
6700 if (errno == ENOSYS)
6701 /* Function not implemented. */
6704 START (sinh_tonearest);
6706 save_round_mode = fegetround ();
6708 if (!fesetround (FE_TONEAREST))
6710 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6711 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6712 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6715 fesetround (save_round_mode);
6717 END (sinh_tonearest);
6722 sinh_test_towardzero (void)
6724 int save_round_mode;
6727 if (errno == ENOSYS)
6728 /* Function not implemented. */
6731 START (sinh_towardzero);
6733 save_round_mode = fegetround ();
6735 if (!fesetround (FE_TOWARDZERO))
6737 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6738 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6739 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6742 fesetround (save_round_mode);
6744 END (sinh_towardzero);
6749 sinh_test_downward (void)
6751 int save_round_mode;
6754 if (errno == ENOSYS)
6755 /* Function not implemented. */
6758 START (sinh_downward);
6760 save_round_mode = fegetround ();
6762 if (!fesetround (FE_DOWNWARD))
6764 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6765 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6766 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6769 fesetround (save_round_mode);
6771 END (sinh_downward);
6776 sinh_test_upward (void)
6778 int save_round_mode;
6781 if (errno == ENOSYS)
6782 /* Function not implemented. */
6785 START (sinh_upward);
6787 save_round_mode = fegetround ();
6789 if (!fesetround (FE_UPWARD))
6791 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6792 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6793 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6796 fesetround (save_round_mode);
6807 if (errno == ENOSYS)
6808 /* Function not implemented. */
6813 TEST_f_f (sqrt, 0, 0);
6814 TEST_f_f (sqrt, nan_value, nan_value);
6815 TEST_f_f (sqrt, plus_infty, plus_infty);
6817 TEST_f_f (sqrt, minus_zero, minus_zero);
6819 /* sqrt (x) == NaN plus invalid exception for x < 0. */
6820 TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
6821 TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
6822 TEST_f_f (sqrt, nan_value, nan_value);
6824 TEST_f_f (sqrt, 2209, 47);
6825 TEST_f_f (sqrt, 4, 2);
6826 TEST_f_f (sqrt, 2, M_SQRT2l);
6827 TEST_f_f (sqrt, 0.25, 0.5);
6828 TEST_f_f (sqrt, 6642.25, 81.5);
6829 TEST_f_f (sqrt, 15190.5625L, 123.25L);
6830 TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
6841 if (errno == ENOSYS)
6842 /* Function not implemented. */
6847 TEST_f_f (tan, 0, 0);
6848 TEST_f_f (tan, minus_zero, minus_zero);
6850 TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
6851 check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
6853 TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
6854 check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
6856 TEST_f_f (tan, nan_value, nan_value);
6857 check_int ("errno for tan(NaN) == 0", errno, 0, 0, 0, 0);
6859 TEST_f_f (tan, M_PI_4l, 1);
6860 TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
6862 TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
6863 TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
6866 TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
6867 TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
6870 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6871 TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
6879 tan_test_tonearest (void)
6881 int save_round_mode;
6884 if (errno == ENOSYS)
6885 /* Function not implemented. */
6888 START (tan_tonearest);
6890 save_round_mode = fegetround ();
6892 if (!fesetround (FE_TONEAREST))
6894 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6895 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6896 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6897 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6898 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6899 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6900 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6901 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6902 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6903 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6906 fesetround (save_round_mode);
6908 END (tan_tonearest);
6913 tan_test_towardzero (void)
6915 int save_round_mode;
6918 if (errno == ENOSYS)
6919 /* Function not implemented. */
6922 START (tan_towardzero);
6924 save_round_mode = fegetround ();
6926 if (!fesetround (FE_TOWARDZERO))
6928 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6929 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6930 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6931 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6932 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6933 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6934 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6935 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6936 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6937 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6940 fesetround (save_round_mode);
6942 END (tan_towardzero);
6947 tan_test_downward (void)
6949 int save_round_mode;
6952 if (errno == ENOSYS)
6953 /* Function not implemented. */
6956 START (tan_downward);
6958 save_round_mode = fegetround ();
6960 if (!fesetround (FE_DOWNWARD))
6962 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6963 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6964 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6965 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6966 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6967 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6968 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6969 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6970 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6971 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6974 fesetround (save_round_mode);
6981 tan_test_upward (void)
6983 int save_round_mode;
6986 if (errno == ENOSYS)
6987 /* Function not implemented. */
6992 save_round_mode = fegetround ();
6994 if (!fesetround (FE_UPWARD))
6996 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6997 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6998 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6999 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
7000 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
7001 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
7002 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
7003 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
7004 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
7005 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
7008 fesetround (save_round_mode);
7019 if (errno == ENOSYS)
7020 /* Function not implemented. */
7025 TEST_f_f (tanh, 0, 0);
7026 TEST_f_f (tanh, minus_zero, minus_zero);
7029 TEST_f_f (tanh, plus_infty, 1);
7030 TEST_f_f (tanh, minus_infty, -1);
7032 TEST_f_f (tanh, nan_value, nan_value);
7034 TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
7035 TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
7037 TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
7038 TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
7041 TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
7051 if (errno == ENOSYS)
7052 /* Function not implemented. */
7054 feclearexcept (FE_ALL_EXCEPT);
7058 TEST_f_f (tgamma, plus_infty, plus_infty);
7059 TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7060 TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7061 /* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
7062 TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
7063 TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
7064 TEST_f_f (tgamma, nan_value, nan_value);
7066 TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
7067 TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
7069 TEST_f_f (tgamma, 1, 1);
7070 TEST_f_f (tgamma, 4, 6);
7072 TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
7073 TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
7084 TEST_f_f (trunc, plus_infty, plus_infty);
7085 TEST_f_f (trunc, minus_infty, minus_infty);
7086 TEST_f_f (trunc, nan_value, nan_value);
7088 TEST_f_f (trunc, 0, 0);
7089 TEST_f_f (trunc, minus_zero, minus_zero);
7090 TEST_f_f (trunc, 0.1, 0);
7091 TEST_f_f (trunc, 0.25, 0);
7092 TEST_f_f (trunc, 0.625, 0);
7093 TEST_f_f (trunc, -0.1, minus_zero);
7094 TEST_f_f (trunc, -0.25, minus_zero);
7095 TEST_f_f (trunc, -0.625, minus_zero);
7096 TEST_f_f (trunc, 1, 1);
7097 TEST_f_f (trunc, -1, -1);
7098 TEST_f_f (trunc, 1.625, 1);
7099 TEST_f_f (trunc, -1.625, -1);
7101 TEST_f_f (trunc, 1048580.625L, 1048580L);
7102 TEST_f_f (trunc, -1048580.625L, -1048580L);
7104 TEST_f_f (trunc, 8388610.125L, 8388610.0L);
7105 TEST_f_f (trunc, -8388610.125L, -8388610.0L);
7107 TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
7108 TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
7111 /* The result can only be represented in long double. */
7112 TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
7113 TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
7114 TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
7115 TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
7116 TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
7118 # if LDBL_MANT_DIG > 100
7119 TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
7120 TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
7121 TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
7124 TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
7125 TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
7126 TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
7127 TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
7128 TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
7130 # if LDBL_MANT_DIG > 100
7131 TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
7132 TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
7133 TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
7136 TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
7137 TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
7138 TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
7139 TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
7140 TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
7142 # if LDBL_MANT_DIG > 100
7143 TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
7144 TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
7145 TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
7146 TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
7147 TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
7148 TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
7151 TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
7152 TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
7153 TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
7154 TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
7155 TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
7157 # if LDBL_MANT_DIG > 100
7158 TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
7159 TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
7160 TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
7161 TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
7162 TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
7163 TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
7166 TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
7167 TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
7168 TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
7169 TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
7170 TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
7172 TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
7173 TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
7174 TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
7175 TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
7176 TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
7178 TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7179 TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7180 TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7181 TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7182 TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7193 FUNC (sincos) (0, &s, &c);
7194 if (errno == ENOSYS)
7195 /* Required function not implemented. */
7198 if (errno == ENOSYS)
7199 /* Function not implemented. */
7202 /* y0 is the Bessel function of the second kind of order 0 */
7205 TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
7206 TEST_f_f (y0, 0.0, minus_infty);
7207 TEST_f_f (y0, nan_value, nan_value);
7208 TEST_f_f (y0, plus_infty, 0);
7210 TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
7211 TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
7212 TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
7213 TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
7214 TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
7215 TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
7216 TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
7218 TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
7221 TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
7233 FUNC (sincos) (0, &s, &c);
7234 if (errno == ENOSYS)
7235 /* Required function not implemented. */
7238 if (errno == ENOSYS)
7239 /* Function not implemented. */
7242 /* y1 is the Bessel function of the second kind of order 1 */
7245 TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
7246 TEST_f_f (y1, 0.0, minus_infty);
7247 TEST_f_f (y1, plus_infty, 0);
7248 TEST_f_f (y1, nan_value, nan_value);
7250 TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
7251 TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
7252 TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
7253 TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
7254 TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
7255 TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
7256 TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
7258 TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
7261 TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
7273 FUNC (sincos) (0, &s, &c);
7274 if (errno == ENOSYS)
7275 /* Required function not implemented. */
7278 if (errno == ENOSYS)
7279 /* Function not implemented. */
7282 /* yn is the Bessel function of the second kind of order n */
7285 /* yn (0, x) == y0 (x) */
7286 TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
7287 TEST_ff_f (yn, 0, 0.0, minus_infty);
7288 TEST_ff_f (yn, 0, nan_value, nan_value);
7289 TEST_ff_f (yn, 0, plus_infty, 0);
7291 TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
7292 TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
7293 TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
7294 TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
7295 TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
7296 TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
7297 TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
7299 /* yn (1, x) == y1 (x) */
7300 TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
7301 TEST_ff_f (yn, 1, 0.0, minus_infty);
7302 TEST_ff_f (yn, 1, plus_infty, 0);
7303 TEST_ff_f (yn, 1, nan_value, nan_value);
7305 TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
7306 TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
7307 TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
7308 TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
7309 TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
7310 TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
7311 TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
7314 TEST_ff_f (yn, 3, plus_infty, 0);
7315 TEST_ff_f (yn, 3, nan_value, nan_value);
7317 TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
7318 TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
7319 TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
7320 TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
7321 TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
7324 TEST_ff_f (yn, 10, plus_infty, 0);
7325 TEST_ff_f (yn, 10, nan_value, nan_value);
7327 TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
7328 TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
7329 TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
7330 TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
7331 TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
7339 significand_test (void)
7341 /* significand returns the mantissa of the exponential representation. */
7342 START (significand);
7344 TEST_f_f (significand, 4.0, 1.0);
7345 TEST_f_f (significand, 6.0, 1.5);
7346 TEST_f_f (significand, 8.0, 1.0);
7355 fpstack_test ("start *init*");
7357 nan_value = plus_zero / plus_zero; /* Suppress GCC warning */
7359 minus_zero = FUNC(copysign) (0.0, -1.0);
7360 plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
7361 HUGE_VALL, HUGE_VAL, HUGE_VALF);
7362 minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
7363 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
7364 max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7365 LDBL_MAX, DBL_MAX, FLT_MAX);
7366 min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
7367 LDBL_MIN, DBL_MIN, FLT_MIN);
7373 (void) &minus_infty;
7377 /* Clear all exceptions. From now on we must not get random exceptions. */
7378 feclearexcept (FE_ALL_EXCEPT);
7380 /* Test to make sure we start correctly. */
7381 fpstack_test ("end *init*");
7384 /* Definitions of arguments for argp functions. */
7385 static const struct argp_option options[] =
7387 { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
7388 { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
7389 { "no-max-error", 'f', NULL, 0,
7390 "Don't output maximal errors of functions"},
7391 { "no-points", 'p', NULL, 0,
7392 "Don't output results of functions invocations"},
7393 { "ignore-max-ulp", 'i', "yes/no", 0,
7394 "Ignore given maximal errors"},
7395 { NULL, 0, NULL, 0, NULL }
7398 /* Short description of program. */
7399 static const char doc[] = "Math test suite: " TEST_MSG ;
7401 /* Prototype for option handler. */
7402 static error_t parse_opt (int key, char *arg, struct argp_state *state);
7404 /* Data structure to communicate with argp functions. */
7405 static struct argp argp =
7407 options, parse_opt, NULL, doc,
7411 /* Handle program arguments. */
7413 parse_opt (int key, char *arg, struct argp_state *state)
7418 output_max_error = 0;
7421 if (strcmp (arg, "yes") == 0)
7423 else if (strcmp (arg, "no") == 0)
7434 verbose = (unsigned int) strtoul (optarg, NULL, 0);
7439 return ARGP_ERR_UNKNOWN;
7445 /* function to check our ulp calculation. */
7452 /* This gives one ulp. */
7453 u = FUNC(nextafter) (10, 20);
7454 check_equal (10.0, u, 1, &diff, &ulp);
7455 printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
7457 /* This gives one more ulp. */
7458 u = FUNC(nextafter) (u, 20);
7459 check_equal (10.0, u, 2, &diff, &ulp);
7460 printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
7462 /* And now calculate 100 ulp. */
7463 for (i = 2; i < 100; i++)
7464 u = FUNC(nextafter) (u, 20);
7465 check_equal (10.0, u, 100, &diff, &ulp);
7466 printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
7471 main (int argc, char **argv)
7478 output_max_error = 1;
7480 /* XXX set to 0 for releases. */
7483 /* Parse and process arguments. */
7484 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
7486 if (remaining != argc)
7488 fprintf (stderr, "wrong number of arguments");
7489 argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
7490 exit (EXIT_FAILURE);
7495 ulps_file = fopen ("ULPs", "a");
7496 if (ulps_file == NULL)
7498 perror ("can't open file `ULPs' for writing: ");
7511 /* Keep the tests a wee bit ordered (according to ISO C99). */
7512 /* Classification macros: */
7518 /* Trigonometric functions: */
7524 cos_test_tonearest ();
7525 cos_test_towardzero ();
7526 cos_test_downward ();
7529 sin_test_tonearest ();
7530 sin_test_towardzero ();
7531 sin_test_downward ();
7535 tan_test_tonearest ();
7536 tan_test_towardzero ();
7537 tan_test_downward ();
7540 /* Hyperbolic functions: */
7545 cosh_test_tonearest ();
7546 cosh_test_towardzero ();
7547 cosh_test_downward ();
7548 cosh_test_upward ();
7550 sinh_test_tonearest ();
7551 sinh_test_towardzero ();
7552 sinh_test_downward ();
7553 sinh_test_upward ();
7556 /* Exponential and logarithmic functions: */
7558 exp_test_tonearest ();
7559 exp_test_towardzero ();
7560 exp_test_downward ();
7577 significand_test ();
7579 /* Power and absolute value functions: */
7584 pow_test_tonearest ();
7585 pow_test_towardzero ();
7586 pow_test_downward ();
7590 /* Error and gamma functions: */
7597 /* Nearest integer functions: */
7602 rint_test_tonearest ();
7603 rint_test_towardzero ();
7604 rint_test_downward ();
7605 rint_test_upward ();
7607 lrint_test_tonearest ();
7608 lrint_test_towardzero ();
7609 lrint_test_downward ();
7610 lrint_test_upward ();
7612 llrint_test_tonearest ();
7613 llrint_test_towardzero ();
7614 llrint_test_downward ();
7615 llrint_test_upward ();
7621 /* Remainder functions: */
7626 /* Manipulation functions: */
7631 /* maximum, minimum and positive difference functions */
7636 /* Multiply and add: */
7639 /* Complex functions: */
7664 /* Bessel functions: */
7675 printf ("\nTest suite completed:\n");
7676 printf (" %d test cases plus %d tests for exception flags executed.\n",
7677 noTests, noExcTests);
7679 printf (" %d expected failures occurred.\n", noXFails);
7681 printf (" %d unexpected passes occurred.\n", noXPasses);
7684 printf (" %d errors occurred.\n", noErrors);
7687 printf (" All tests passed successfully.\n");