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 and invalid
82 exceptions are tested. Overflow/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 /* The next flags signals that those exceptions are allowed but not required. */
136 #define INVALID_EXCEPTION_OK 0x4
137 #define DIVIDE_BY_ZERO_EXCEPTION_OK 0x8
138 #define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
139 /* Some special test flags, passed togther with exceptions. */
140 #define IGNORE_ZERO_INF_SIGN 0x10
142 /* Various constants (we must supply them precalculated for accuracy). */
143 #define M_PI_6l .52359877559829887307710723054658383L
144 #define M_E2l 7.389056098930650227230427460575008L
145 #define M_E3l 20.085536923187667740928529654581719L
146 #define M_2_SQRT_PIl 3.5449077018110320545963349666822903L /* 2 sqrt (M_PIl) */
147 #define M_SQRT_PIl 1.7724538509055160272981674833411451L /* sqrt (M_PIl) */
148 #define M_LOG_SQRT_PIl 0.57236494292470008707171367567652933L /* log(sqrt(M_PIl)) */
149 #define M_LOG_2_SQRT_PIl 1.265512123484645396488945797134706L /* log(2*sqrt(M_PIl)) */
150 #define M_PI_34l (M_PIl - M_PI_4l) /* 3*pi/4 */
151 #define M_PI_34_LOG10El (M_PIl - M_PI_4l) * M_LOG10El
152 #define M_PI2_LOG10El M_PI_2l * M_LOG10El
153 #define M_PI4_LOG10El M_PI_4l * M_LOG10El
154 #define M_PI_LOG10El M_PIl * M_LOG10El
155 #define M_SQRT_2_2 0.70710678118654752440084436210484903L /* sqrt (2) / 2 */
157 static FILE *ulps_file; /* File to document difference. */
158 static int output_ulps; /* Should ulps printed? */
160 static int noErrors; /* number of errors */
161 static int noTests; /* number of tests (without testing exceptions) */
162 static int noExcTests; /* number of tests for exception flags */
163 static int noXFails; /* number of expected failures. */
164 static int noXPasses; /* number of unexpected passes. */
167 static int output_max_error; /* Should the maximal errors printed? */
168 static int output_points; /* Should the single function results printed? */
169 static int ignore_max_ulp; /* Should we ignore max_ulp? */
171 static FLOAT minus_zero, plus_zero;
172 static FLOAT plus_infty, minus_infty, nan_value, max_value, min_value;
174 static FLOAT max_error, real_max_error, imag_max_error;
177 #define BUILD_COMPLEX(real, imag) \
178 ({ __complex__ FLOAT __retval; \
179 __real__ __retval = (real); \
180 __imag__ __retval = (imag); \
183 #define BUILD_COMPLEX_INT(real, imag) \
184 ({ __complex__ int __retval; \
185 __real__ __retval = (real); \
186 __imag__ __retval = (imag); \
190 #define MANT_DIG CHOOSE ((LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1), \
191 (LDBL_MANT_DIG-1), (DBL_MANT_DIG-1), (FLT_MANT_DIG-1))
194 init_max_error (void)
199 feclearexcept (FE_ALL_EXCEPT);
203 set_max_error (FLOAT current, FLOAT *curr_max_error)
205 if (current > *curr_max_error)
206 *curr_max_error = current;
210 /* Should the message print to screen? This depends on the verbose flag,
211 and the test status. */
213 print_screen (int ok, int xfail)
217 || (verbose == 1 && ok == xfail)))
223 /* Should the message print to screen? This depends on the verbose flag,
224 and the test status. */
226 print_screen_max_error (int ok, int xfail)
230 || ((verbose == 1) && (ok == xfail))))
235 /* Update statistic counters. */
237 update_stats (int ok, int xfail)
242 else if (!ok && xfail)
244 else if (!ok && !xfail)
249 print_ulps (const char *test_name, FLOAT ulp)
253 fprintf (ulps_file, "Test \"%s\":\n", test_name);
254 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
255 CHOOSE("ldouble", "double", "float",
256 "ildouble", "idouble", "ifloat"),
262 print_function_ulps (const char *function_name, FLOAT ulp)
266 fprintf (ulps_file, "Function: \"%s\":\n", function_name);
267 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
268 CHOOSE("ldouble", "double", "float",
269 "ildouble", "idouble", "ifloat"),
276 print_complex_function_ulps (const char *function_name, FLOAT real_ulp,
283 fprintf (ulps_file, "Function: Real part of \"%s\":\n", function_name);
284 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
285 CHOOSE("ldouble", "double", "float",
286 "ildouble", "idouble", "ifloat"),
287 FUNC(ceil) (real_ulp));
291 fprintf (ulps_file, "Function: Imaginary part of \"%s\":\n", function_name);
292 fprintf (ulps_file, "%s: %.0" PRINTF_NEXPR "\n",
293 CHOOSE("ldouble", "double", "float",
294 "ildouble", "idouble", "ifloat"),
295 FUNC(ceil) (imag_ulp));
304 /* Test if Floating-Point stack hasn't changed */
306 fpstack_test (const char *test_name)
309 static int old_stack;
312 asm ("fnstsw" : "=a" (sw));
318 printf ("FP-Stack wrong after test %s (%d, should be %d)\n",
319 test_name, sw, old_stack);
328 print_max_error (const char *func_name, FLOAT allowed, int xfail)
332 if (max_error == 0.0 || (max_error <= allowed && !ignore_max_ulp))
338 print_function_ulps (func_name, max_error);
341 if (print_screen_max_error (ok, xfail))
343 printf ("Maximal error of `%s'\n", func_name);
344 printf (" is : %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (max_error));
345 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n", FUNC(ceil) (allowed));
348 update_stats (ok, xfail);
353 print_complex_max_error (const char *func_name, __complex__ FLOAT allowed,
354 __complex__ int xfail)
358 if ((real_max_error == 0 && imag_max_error == 0)
359 || (real_max_error <= __real__ allowed
360 && imag_max_error <= __imag__ allowed
367 print_complex_function_ulps (func_name, real_max_error, imag_max_error);
370 if (print_screen_max_error (ok, xfail))
372 printf ("Maximal error of real part of: %s\n", func_name);
373 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
374 FUNC(ceil) (real_max_error));
375 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
376 FUNC(ceil) (__real__ allowed));
377 printf ("Maximal error of imaginary part of: %s\n", func_name);
378 printf (" is : %.0" PRINTF_NEXPR " ulp\n",
379 FUNC(ceil) (imag_max_error));
380 printf (" accepted: %.0" PRINTF_NEXPR " ulp\n",
381 FUNC(ceil) (__imag__ allowed));
384 update_stats (ok, xfail);
388 /* Test whether a given exception was raised. */
390 test_single_exception (const char *test_name,
394 const char *flag_name)
398 if (exception & exc_flag)
400 if (fetestexcept (fe_flag))
402 if (print_screen (1, 0))
403 printf ("Pass: %s: Exception \"%s\" set\n", test_name, flag_name);
408 if (print_screen (0, 0))
409 printf ("Failure: %s: Exception \"%s\" not set\n",
410 test_name, flag_name);
415 if (fetestexcept (fe_flag))
418 if (print_screen (0, 0))
419 printf ("Failure: %s: Exception \"%s\" set\n",
420 test_name, flag_name);
424 if (print_screen (1, 0))
425 printf ("%s: Exception \"%s\" not set\n", test_name,
436 /* Test whether exceptions given by EXCEPTION are raised. Ignore thereby
437 allowed but not required exceptions.
440 test_exceptions (const char *test_name, int exception)
444 if ((exception & DIVIDE_BY_ZERO_EXCEPTION_OK) == 0)
445 test_single_exception (test_name, exception,
446 DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
450 if ((exception & INVALID_EXCEPTION_OK) == 0)
451 test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
452 "Invalid operation");
454 feclearexcept (FE_ALL_EXCEPT);
459 check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
460 FLOAT max_ulp, int xfail, int exceptions,
461 FLOAT *curr_max_error)
468 test_exceptions (test_name, exceptions);
469 if (isnan (computed) && isnan (expected))
471 else if (isinf (computed) && isinf (expected))
473 /* Test for sign of infinities. */
474 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
475 && signbit (computed) != signbit (expected))
478 printf ("infinity has wrong sign.\n");
483 /* Don't calc ulp for NaNs or infinities. */
484 else if (isinf (computed) || isnan (computed) || isinf (expected) || isnan (expected))
488 diff = FUNC(fabs) (computed - expected);
489 switch (fpclassify (expected))
492 /* ilogb (0) isn't allowed. */
493 ulp = diff / FUNC(ldexp) (1.0, - MANT_DIG);
496 ulp = diff / FUNC(ldexp) (1.0, FUNC(ilogb) (expected) - MANT_DIG);
499 ulp = (FUNC(ldexp) (diff, MANT_DIG)
500 / FUNC(ldexp) (1.0, FUNC(ilogb) (expected)));
503 /* It should never happen. */
507 set_max_error (ulp, curr_max_error);
509 if ((exceptions & IGNORE_ZERO_INF_SIGN) == 0
510 && computed == 0.0 && expected == 0.0
511 && signbit(computed) != signbit (expected))
513 else if (ulp <= 0.5 || (ulp <= max_ulp && !ignore_max_ulp))
518 print_ulps (test_name, ulp);
522 if (print_screen (ok, xfail))
525 printf ("Failure: ");
526 printf ("Test: %s\n", test_name);
527 printf ("Result:\n");
528 printf (" is: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
530 printf (" should be: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR "\n",
534 printf (" difference: % .20" PRINTF_EXPR " % .20" PRINTF_XEXPR
536 printf (" ulp : % .4" PRINTF_NEXPR "\n", ulp);
537 printf (" max.ulp : % .4" PRINTF_NEXPR "\n", max_ulp);
540 update_stats (ok, xfail);
542 fpstack_test (test_name);
547 check_float (const char *test_name, FLOAT computed, FLOAT expected,
548 FLOAT max_ulp, int xfail, int exceptions)
550 check_float_internal (test_name, computed, expected, max_ulp, xfail,
551 exceptions, &max_error);
556 check_complex (const char *test_name, __complex__ FLOAT computed,
557 __complex__ FLOAT expected,
558 __complex__ FLOAT max_ulp, __complex__ int xfail,
561 FLOAT part_comp, part_exp, part_max_ulp;
565 sprintf (str, "Real part of: %s", test_name);
566 part_comp = __real__ computed;
567 part_exp = __real__ expected;
568 part_max_ulp = __real__ max_ulp;
569 part_xfail = __real__ xfail;
571 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
572 exception, &real_max_error);
574 sprintf (str, "Imaginary part of: %s", test_name);
575 part_comp = __imag__ computed;
576 part_exp = __imag__ expected;
577 part_max_ulp = __imag__ max_ulp;
578 part_xfail = __imag__ xfail;
580 /* Don't check again for exceptions, just pass through the
581 zero/inf sign test. */
582 check_float_internal (str, part_comp, part_exp, part_max_ulp, part_xfail,
583 exception & IGNORE_ZERO_INF_SIGN,
588 /* Check that computed and expected values are equal (int values). */
590 check_int (const char *test_name, int computed, int expected, int max_ulp,
591 int xfail, int exceptions)
593 int diff = computed - expected;
596 test_exceptions (test_name, exceptions);
598 if (abs (diff) <= max_ulp)
602 print_ulps (test_name, diff);
604 if (print_screen (ok, xfail))
607 printf ("Failure: ");
608 printf ("Test: %s\n", test_name);
609 printf ("Result:\n");
610 printf (" is: %d\n", computed);
611 printf (" should be: %d\n", expected);
614 update_stats (ok, xfail);
615 fpstack_test (test_name);
619 /* Check that computed and expected values are equal (long int values). */
621 check_long (const char *test_name, long int computed, long int expected,
622 long int max_ulp, int xfail, int exceptions)
624 long int diff = computed - expected;
627 test_exceptions (test_name, exceptions);
629 if (labs (diff) <= max_ulp)
633 print_ulps (test_name, diff);
635 if (print_screen (ok, xfail))
638 printf ("Failure: ");
639 printf ("Test: %s\n", test_name);
640 printf ("Result:\n");
641 printf (" is: %ld\n", computed);
642 printf (" should be: %ld\n", expected);
645 update_stats (ok, xfail);
646 fpstack_test (test_name);
650 /* Check that computed value is true/false. */
652 check_bool (const char *test_name, int computed, int expected,
653 long int max_ulp, int xfail, int exceptions)
657 test_exceptions (test_name, exceptions);
659 if ((computed == 0) == (expected == 0))
662 if (print_screen (ok, xfail))
665 printf ("Failure: ");
666 printf ("Test: %s\n", test_name);
667 printf ("Result:\n");
668 printf (" is: %d\n", computed);
669 printf (" should be: %d\n", expected);
672 update_stats (ok, xfail);
673 fpstack_test (test_name);
677 /* check that computed and expected values are equal (long int values) */
679 check_longlong (const char *test_name, long long int computed,
680 long long int expected,
681 long long int max_ulp, int xfail,
684 long long int diff = computed - expected;
687 test_exceptions (test_name, exceptions);
689 if (llabs (diff) <= max_ulp)
693 print_ulps (test_name, diff);
695 if (print_screen (ok, xfail))
699 printf ("Test: %s\n", test_name);
700 printf ("Result:\n");
701 printf (" is: %lld\n", computed);
702 printf (" should be: %lld\n", expected);
705 update_stats (ok, xfail);
706 fpstack_test (test_name);
711 /* This is to prevent messages from the SVID libm emulation. */
713 matherr (struct exception *x __attribute__ ((unused)))
719 /****************************************************************************
720 Tests for single functions of libm.
721 Please keep them alphabetically sorted!
722 ****************************************************************************/
730 /* Function not implemented. */
735 TEST_f_f (acos, plus_infty, nan_value, INVALID_EXCEPTION);
736 TEST_f_f (acos, minus_infty, nan_value, INVALID_EXCEPTION);
737 TEST_f_f (acos, nan_value, nan_value);
740 TEST_f_f (acos, 1.125L, nan_value, INVALID_EXCEPTION);
741 TEST_f_f (acos, -1.125L, nan_value, INVALID_EXCEPTION);
743 TEST_f_f (acos, 0, M_PI_2l);
744 TEST_f_f (acos, minus_zero, M_PI_2l);
745 TEST_f_f (acos, 1, 0);
746 TEST_f_f (acos, -1, M_PIl);
747 TEST_f_f (acos, 0.5, M_PI_6l*2.0);
748 TEST_f_f (acos, -0.5, M_PI_6l*4.0);
749 TEST_f_f (acos, 0.75L, 0.722734247813415611178377352641333362L);
750 TEST_f_f (acos, 2e-17L, 1.57079632679489659923132169163975144L);
751 TEST_f_f (acos, 0.0625L, 1.50825556499840522843072005474337068L);
761 /* Function not implemented. */
766 TEST_f_f (acosh, plus_infty, plus_infty);
767 TEST_f_f (acosh, minus_infty, nan_value, INVALID_EXCEPTION);
770 TEST_f_f (acosh, -1.125L, nan_value, INVALID_EXCEPTION);
772 TEST_f_f (acosh, 1, 0);
773 TEST_f_f (acosh, 7, 2.63391579384963341725009269461593689L);
784 /* Function not implemented. */
789 TEST_f_f (asin, plus_infty, nan_value, INVALID_EXCEPTION);
790 TEST_f_f (asin, minus_infty, nan_value, INVALID_EXCEPTION);
791 TEST_f_f (asin, nan_value, nan_value);
793 /* asin x == NaN plus invalid exception for |x| > 1. */
794 TEST_f_f (asin, 1.125L, nan_value, INVALID_EXCEPTION);
795 TEST_f_f (asin, -1.125L, nan_value, INVALID_EXCEPTION);
797 TEST_f_f (asin, 0, 0);
798 TEST_f_f (asin, minus_zero, minus_zero);
799 TEST_f_f (asin, 0.5, M_PI_6l);
800 TEST_f_f (asin, -0.5, -M_PI_6l);
801 TEST_f_f (asin, 1.0, M_PI_2l);
802 TEST_f_f (asin, -1.0, -M_PI_2l);
803 TEST_f_f (asin, 0.75L, 0.848062078981481008052944338998418080L);
814 /* Function not implemented. */
819 TEST_f_f (asinh, 0, 0);
820 TEST_f_f (asinh, minus_zero, minus_zero);
822 TEST_f_f (asinh, plus_infty, plus_infty);
823 TEST_f_f (asinh, minus_infty, minus_infty);
825 TEST_f_f (asinh, nan_value, nan_value);
826 TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L);
837 /* Function not implemented. */
842 TEST_f_f (atan, 0, 0);
843 TEST_f_f (atan, minus_zero, minus_zero);
845 TEST_f_f (atan, plus_infty, M_PI_2l);
846 TEST_f_f (atan, minus_infty, -M_PI_2l);
847 TEST_f_f (atan, nan_value, nan_value);
849 TEST_f_f (atan, 1, M_PI_4l);
850 TEST_f_f (atan, -1, -M_PI_4l);
852 TEST_f_f (atan, 0.75L, 0.643501108793284386802809228717322638L);
865 /* Function not implemented. */
871 TEST_f_f (atanh, 0, 0);
872 TEST_f_f (atanh, minus_zero, minus_zero);
874 TEST_f_f (atanh, 1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
875 TEST_f_f (atanh, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
876 TEST_f_f (atanh, nan_value, nan_value);
878 /* atanh (x) == NaN plus invalid exception if |x| > 1. */
879 TEST_f_f (atanh, 1.125L, nan_value, INVALID_EXCEPTION);
880 TEST_f_f (atanh, -1.125L, nan_value, INVALID_EXCEPTION);
882 TEST_f_f (atanh, 0.75L, 0.972955074527656652552676371721589865L);
893 /* Function not implemented. */
898 /* atan2 (0,x) == 0 for x > 0. */
899 TEST_ff_f (atan2, 0, 1, 0);
901 /* atan2 (-0,x) == -0 for x > 0. */
902 TEST_ff_f (atan2, minus_zero, 1, minus_zero);
904 TEST_ff_f (atan2, 0, 0, 0);
905 TEST_ff_f (atan2, minus_zero, 0, minus_zero);
907 /* atan2 (+0,x) == +pi for x < 0. */
908 TEST_ff_f (atan2, 0, -1, M_PIl);
910 /* atan2 (-0,x) == -pi for x < 0. */
911 TEST_ff_f (atan2, minus_zero, -1, -M_PIl);
913 TEST_ff_f (atan2, 0, minus_zero, M_PIl);
914 TEST_ff_f (atan2, minus_zero, minus_zero, -M_PIl);
916 /* atan2 (y,+0) == pi/2 for y > 0. */
917 TEST_ff_f (atan2, 1, 0, M_PI_2l);
919 /* atan2 (y,-0) == pi/2 for y > 0. */
920 TEST_ff_f (atan2, 1, minus_zero, M_PI_2l);
922 /* atan2 (y,+0) == -pi/2 for y < 0. */
923 TEST_ff_f (atan2, -1, 0, -M_PI_2l);
925 /* atan2 (y,-0) == -pi/2 for y < 0. */
926 TEST_ff_f (atan2, -1, minus_zero, -M_PI_2l);
928 /* atan2 (y,inf) == +0 for finite y > 0. */
929 TEST_ff_f (atan2, 1, plus_infty, 0);
931 /* atan2 (y,inf) == -0 for finite y < 0. */
932 TEST_ff_f (atan2, -1, plus_infty, minus_zero);
934 /* atan2(+inf, x) == pi/2 for finite x. */
935 TEST_ff_f (atan2, plus_infty, -1, M_PI_2l);
937 /* atan2(-inf, x) == -pi/2 for finite x. */
938 TEST_ff_f (atan2, minus_infty, 1, -M_PI_2l);
940 /* atan2 (y,-inf) == +pi for finite y > 0. */
941 TEST_ff_f (atan2, 1, minus_infty, M_PIl);
943 /* atan2 (y,-inf) == -pi for finite y < 0. */
944 TEST_ff_f (atan2, -1, minus_infty, -M_PIl);
946 TEST_ff_f (atan2, plus_infty, plus_infty, M_PI_4l);
947 TEST_ff_f (atan2, minus_infty, plus_infty, -M_PI_4l);
948 TEST_ff_f (atan2, plus_infty, minus_infty, M_PI_34l);
949 TEST_ff_f (atan2, minus_infty, minus_infty, -M_PI_34l);
950 TEST_ff_f (atan2, nan_value, nan_value, nan_value);
952 TEST_ff_f (atan2, max_value, max_value, M_PI_4l);
954 TEST_ff_f (atan2, 0.75L, 1, 0.643501108793284386802809228717322638L);
955 TEST_ff_f (atan2, -0.75L, 1.0L, -0.643501108793284386802809228717322638L);
956 TEST_ff_f (atan2, 0.75L, -1.0L, 2.49809154479650885165983415456218025L);
957 TEST_ff_f (atan2, -0.75L, -1.0L, -2.49809154479650885165983415456218025L);
958 TEST_ff_f (atan2, 0.390625L, .00029L, 1.57005392693128974780151246612928941L);
959 TEST_ff_f (atan2, 1.390625L, 0.9296875L, 0.981498387184244311516296577615519772L);
961 TEST_ff_f (atan2, -0.00756827042671106339L, -.001792735857538728036L, -1.80338464113663849327153994379639112L);
970 FUNC(cabs) (BUILD_COMPLEX (0.7L, 12.4L));
972 /* Function not implemented. */
977 /* cabs (x + iy) is specified as hypot (x,y) */
979 /* cabs (+inf + i x) == +inf. */
980 TEST_c_f (cabs, plus_infty, 1.0, plus_infty);
981 /* cabs (-inf + i x) == +inf. */
982 TEST_c_f (cabs, minus_infty, 1.0, plus_infty);
984 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
985 TEST_c_f (cabs, minus_infty, nan_value, plus_infty);
987 TEST_c_f (cabs, nan_value, nan_value, nan_value);
989 /* cabs (x,y) == cabs (y,x). */
990 TEST_c_f (cabs, 0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
991 /* cabs (x,y) == cabs (-x,y). */
992 TEST_c_f (cabs, -12.390625L, 0.75L, 12.4133028598606664302388810868156657L);
993 /* cabs (x,y) == cabs (-y,x). */
994 TEST_c_f (cabs, -0.75L, 12.390625L, 12.4133028598606664302388810868156657L);
995 /* cabs (x,y) == cabs (-x,-y). */
996 TEST_c_f (cabs, -12.390625L, -0.75L, 12.4133028598606664302388810868156657L);
997 /* cabs (x,y) == cabs (-y,-x). */
998 TEST_c_f (cabs, -0.75L, -12.390625L, 12.4133028598606664302388810868156657L);
999 /* cabs (x,0) == fabs (x). */
1000 TEST_c_f (cabs, -0.75L, 0, 0.75L);
1001 TEST_c_f (cabs, 0.75L, 0, 0.75L);
1002 TEST_c_f (cabs, -1.0L, 0, 1.0L);
1003 TEST_c_f (cabs, 1.0L, 0, 1.0L);
1004 TEST_c_f (cabs, -5.7e7L, 0, 5.7e7L);
1005 TEST_c_f (cabs, 5.7e7L, 0, 5.7e7L);
1007 TEST_c_f (cabs, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
1017 FUNC(cacos) (BUILD_COMPLEX (0.7L, 1.2L));
1018 if (errno == ENOSYS)
1019 /* Function not implemented. */
1025 TEST_c_c (cacos, 0, 0, M_PI_2l, minus_zero);
1026 TEST_c_c (cacos, minus_zero, 0, M_PI_2l, minus_zero);
1027 TEST_c_c (cacos, minus_zero, minus_zero, M_PI_2l, 0.0);
1028 TEST_c_c (cacos, 0, minus_zero, M_PI_2l, 0.0);
1030 TEST_c_c (cacos, minus_infty, plus_infty, M_PI_34l, minus_infty);
1031 TEST_c_c (cacos, minus_infty, minus_infty, M_PI_34l, plus_infty);
1033 TEST_c_c (cacos, plus_infty, plus_infty, M_PI_4l, minus_infty);
1034 TEST_c_c (cacos, plus_infty, minus_infty, M_PI_4l, plus_infty);
1036 TEST_c_c (cacos, -10.0, plus_infty, M_PI_2l, minus_infty);
1037 TEST_c_c (cacos, -10.0, minus_infty, M_PI_2l, plus_infty);
1038 TEST_c_c (cacos, 0, plus_infty, M_PI_2l, minus_infty);
1039 TEST_c_c (cacos, 0, minus_infty, M_PI_2l, plus_infty);
1040 TEST_c_c (cacos, 0.1L, plus_infty, M_PI_2l, minus_infty);
1041 TEST_c_c (cacos, 0.1L, minus_infty, M_PI_2l, plus_infty);
1043 TEST_c_c (cacos, minus_infty, 0, M_PIl, minus_infty);
1044 TEST_c_c (cacos, minus_infty, minus_zero, M_PIl, plus_infty);
1045 TEST_c_c (cacos, minus_infty, 100, M_PIl, minus_infty);
1046 TEST_c_c (cacos, minus_infty, -100, M_PIl, plus_infty);
1048 TEST_c_c (cacos, plus_infty, 0, 0.0, minus_infty);
1049 TEST_c_c (cacos, plus_infty, minus_zero, 0.0, plus_infty);
1050 TEST_c_c (cacos, plus_infty, 0.5, 0.0, minus_infty);
1051 TEST_c_c (cacos, plus_infty, -0.5, 0.0, plus_infty);
1053 TEST_c_c (cacos, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1054 TEST_c_c (cacos, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1056 TEST_c_c (cacos, 0, nan_value, M_PI_2l, nan_value);
1057 TEST_c_c (cacos, minus_zero, nan_value, M_PI_2l, nan_value);
1059 TEST_c_c (cacos, nan_value, plus_infty, nan_value, minus_infty);
1060 TEST_c_c (cacos, nan_value, minus_infty, nan_value, plus_infty);
1062 TEST_c_c (cacos, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1063 TEST_c_c (cacos, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1065 TEST_c_c (cacos, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1066 TEST_c_c (cacos, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1068 TEST_c_c (cacos, nan_value, nan_value, nan_value, nan_value);
1070 TEST_c_c (cacos, plus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1071 TEST_c_c (cacos, minus_zero, -1.5L, M_PI_2l, 1.194763217287109304111930828519090523536L);
1072 TEST_c_c (cacos, plus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1073 TEST_c_c (cacos, minus_zero, -1.0L, M_PI_2l, 0.8813735870195430252326093249797923090282L);
1074 TEST_c_c (cacos, plus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1075 TEST_c_c (cacos, minus_zero, -0.5L, M_PI_2l, 0.4812118250596034474977589134243684231352L);
1076 TEST_c_c (cacos, plus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1077 TEST_c_c (cacos, minus_zero, 0.5L, M_PI_2l, -0.4812118250596034474977589134243684231352L);
1078 TEST_c_c (cacos, plus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1079 TEST_c_c (cacos, minus_zero, 1.0L, M_PI_2l, -0.8813735870195430252326093249797923090282L);
1080 TEST_c_c (cacos, plus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1081 TEST_c_c (cacos, minus_zero, 1.5L, M_PI_2l, -1.194763217287109304111930828519090523536L);
1083 TEST_c_c (cacos, -1.5L, plus_zero, M_PIl, -0.9624236501192068949955178268487368462704L);
1084 TEST_c_c (cacos, -1.5L, minus_zero, M_PIl, 0.9624236501192068949955178268487368462704L);
1085 TEST_c_c (cacos, -1.0L, plus_zero, M_PIl, minus_zero);
1086 TEST_c_c (cacos, -1.0L, minus_zero, M_PIl, plus_zero);
1087 TEST_c_c (cacos, -0.5L, plus_zero, 2.094395102393195492308428922186335256131L, minus_zero);
1088 TEST_c_c (cacos, -0.5L, minus_zero, 2.094395102393195492308428922186335256131L, plus_zero);
1089 TEST_c_c (cacos, 0.5L, plus_zero, 1.047197551196597746154214461093167628066L, minus_zero);
1090 TEST_c_c (cacos, 0.5L, minus_zero, 1.047197551196597746154214461093167628066L, plus_zero);
1091 TEST_c_c (cacos, 1.0L, plus_zero, plus_zero, minus_zero);
1092 TEST_c_c (cacos, 1.0L, minus_zero, plus_zero, plus_zero);
1093 TEST_c_c (cacos, 1.5L, plus_zero, plus_zero, -0.9624236501192068949955178268487368462704L);
1094 TEST_c_c (cacos, 1.5L, minus_zero, plus_zero, 0.9624236501192068949955178268487368462704L);
1096 TEST_c_c (cacos, 0.75L, 1.25L, 1.11752014915610270578240049553777969L, -1.13239363160530819522266333696834467L);
1097 TEST_c_c (cacos, -2, -3, 2.1414491111159960199416055713254211L, 1.9833870299165354323470769028940395L);
1099 END (cacos, complex);
1106 FUNC(cacosh) (BUILD_COMPLEX (0.7L, 1.2L));
1107 if (errno == ENOSYS)
1108 /* Function not implemented. */
1114 TEST_c_c (cacosh, 0, 0, 0.0, M_PI_2l);
1115 TEST_c_c (cacosh, minus_zero, 0, 0.0, M_PI_2l);
1116 TEST_c_c (cacosh, 0, minus_zero, 0.0, -M_PI_2l);
1117 TEST_c_c (cacosh, minus_zero, minus_zero, 0.0, -M_PI_2l);
1118 TEST_c_c (cacosh, minus_infty, plus_infty, plus_infty, M_PI_34l);
1119 TEST_c_c (cacosh, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1121 TEST_c_c (cacosh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1122 TEST_c_c (cacosh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1124 TEST_c_c (cacosh, -10.0, plus_infty, plus_infty, M_PI_2l);
1125 TEST_c_c (cacosh, -10.0, minus_infty, plus_infty, -M_PI_2l);
1126 TEST_c_c (cacosh, 0, plus_infty, plus_infty, M_PI_2l);
1127 TEST_c_c (cacosh, 0, minus_infty, plus_infty, -M_PI_2l);
1128 TEST_c_c (cacosh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1129 TEST_c_c (cacosh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1131 TEST_c_c (cacosh, minus_infty, 0, plus_infty, M_PIl);
1132 TEST_c_c (cacosh, minus_infty, minus_zero, plus_infty, -M_PIl);
1133 TEST_c_c (cacosh, minus_infty, 100, plus_infty, M_PIl);
1134 TEST_c_c (cacosh, minus_infty, -100, plus_infty, -M_PIl);
1136 TEST_c_c (cacosh, plus_infty, 0, plus_infty, 0.0);
1137 TEST_c_c (cacosh, plus_infty, minus_zero, plus_infty, minus_zero);
1138 TEST_c_c (cacosh, plus_infty, 0.5, plus_infty, 0.0);
1139 TEST_c_c (cacosh, plus_infty, -0.5, plus_infty, minus_zero);
1141 TEST_c_c (cacosh, plus_infty, nan_value, plus_infty, nan_value);
1142 TEST_c_c (cacosh, minus_infty, nan_value, plus_infty, nan_value);
1144 TEST_c_c (cacosh, 0, nan_value, nan_value, nan_value);
1145 TEST_c_c (cacosh, minus_zero, nan_value, nan_value, nan_value);
1147 TEST_c_c (cacosh, nan_value, plus_infty, plus_infty, nan_value);
1148 TEST_c_c (cacosh, nan_value, minus_infty, plus_infty, nan_value);
1150 TEST_c_c (cacosh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1151 TEST_c_c (cacosh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1153 TEST_c_c (cacosh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1154 TEST_c_c (cacosh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1156 TEST_c_c (cacosh, nan_value, nan_value, nan_value, nan_value);
1158 TEST_c_c (cacosh, plus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1159 TEST_c_c (cacosh, minus_zero, -1.5L, 1.194763217287109304111930828519090523536L, -M_PI_2l);
1160 TEST_c_c (cacosh, plus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1161 TEST_c_c (cacosh, minus_zero, -1.0L, 0.8813735870195430252326093249797923090282L, -M_PI_2l);
1162 TEST_c_c (cacosh, plus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1163 TEST_c_c (cacosh, minus_zero, -0.5L, 0.4812118250596034474977589134243684231352L, -M_PI_2l);
1164 TEST_c_c (cacosh, plus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1165 TEST_c_c (cacosh, minus_zero, 0.5L, 0.4812118250596034474977589134243684231352L, M_PI_2l);
1166 TEST_c_c (cacosh, plus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1167 TEST_c_c (cacosh, minus_zero, 1.0L, 0.8813735870195430252326093249797923090282L, M_PI_2l);
1168 TEST_c_c (cacosh, plus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1169 TEST_c_c (cacosh, minus_zero, 1.5L, 1.194763217287109304111930828519090523536L, M_PI_2l);
1171 TEST_c_c (cacosh, -1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, M_PIl);
1172 TEST_c_c (cacosh, -1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, -M_PIl);
1173 TEST_c_c (cacosh, -1.0L, plus_zero, plus_zero, M_PIl);
1174 TEST_c_c (cacosh, -1.0L, minus_zero, plus_zero, -M_PIl);
1175 TEST_c_c (cacosh, -0.5L, plus_zero, plus_zero, 2.094395102393195492308428922186335256131L);
1176 TEST_c_c (cacosh, -0.5L, minus_zero, plus_zero, -2.094395102393195492308428922186335256131L);
1177 TEST_c_c (cacosh, 0.5L, plus_zero, plus_zero, 1.047197551196597746154214461093167628066L);
1178 TEST_c_c (cacosh, 0.5L, minus_zero, plus_zero, -1.047197551196597746154214461093167628066L);
1179 TEST_c_c (cacosh, 1.0L, plus_zero, plus_zero, plus_zero);
1180 TEST_c_c (cacosh, 1.0L, minus_zero, plus_zero, minus_zero);
1181 TEST_c_c (cacosh, 1.5L, plus_zero, 0.9624236501192068949955178268487368462704L, plus_zero);
1182 TEST_c_c (cacosh, 1.5L, minus_zero, 0.9624236501192068949955178268487368462704L, minus_zero);
1184 TEST_c_c (cacosh, 0.75L, 1.25L, 1.13239363160530819522266333696834467L, 1.11752014915610270578240049553777969L);
1185 TEST_c_c (cacosh, -2, -3, 1.9833870299165354323470769028940395L, -2.1414491111159960199416055713254211L);
1187 END (cacosh, complex);
1196 /* carg (x + iy) is specified as atan2 (y, x) */
1198 /* carg (x + i 0) == 0 for x > 0. */
1199 TEST_c_f (carg, 2.0, 0, 0);
1200 /* carg (x - i 0) == -0 for x > 0. */
1201 TEST_c_f (carg, 2.0, minus_zero, minus_zero);
1203 TEST_c_f (carg, 0, 0, 0);
1204 TEST_c_f (carg, 0, minus_zero, minus_zero);
1206 /* carg (x + i 0) == +pi for x < 0. */
1207 TEST_c_f (carg, -2.0, 0, M_PIl);
1209 /* carg (x - i 0) == -pi for x < 0. */
1210 TEST_c_f (carg, -2.0, minus_zero, -M_PIl);
1212 TEST_c_f (carg, minus_zero, 0, M_PIl);
1213 TEST_c_f (carg, minus_zero, minus_zero, -M_PIl);
1215 /* carg (+0 + i y) == pi/2 for y > 0. */
1216 TEST_c_f (carg, 0, 2.0, M_PI_2l);
1218 /* carg (-0 + i y) == pi/2 for y > 0. */
1219 TEST_c_f (carg, minus_zero, 2.0, M_PI_2l);
1221 /* carg (+0 + i y) == -pi/2 for y < 0. */
1222 TEST_c_f (carg, 0, -2.0, -M_PI_2l);
1224 /* carg (-0 + i y) == -pi/2 for y < 0. */
1225 TEST_c_f (carg, minus_zero, -2.0, -M_PI_2l);
1227 /* carg (inf + i y) == +0 for finite y > 0. */
1228 TEST_c_f (carg, plus_infty, 2.0, 0);
1230 /* carg (inf + i y) == -0 for finite y < 0. */
1231 TEST_c_f (carg, plus_infty, -2.0, minus_zero);
1233 /* carg(x + i inf) == pi/2 for finite x. */
1234 TEST_c_f (carg, 10.0, plus_infty, M_PI_2l);
1236 /* carg(x - i inf) == -pi/2 for finite x. */
1237 TEST_c_f (carg, 10.0, minus_infty, -M_PI_2l);
1239 /* carg (-inf + i y) == +pi for finite y > 0. */
1240 TEST_c_f (carg, minus_infty, 10.0, M_PIl);
1242 /* carg (-inf + i y) == -pi for finite y < 0. */
1243 TEST_c_f (carg, minus_infty, -10.0, -M_PIl);
1245 TEST_c_f (carg, plus_infty, plus_infty, M_PI_4l);
1247 TEST_c_f (carg, plus_infty, minus_infty, -M_PI_4l);
1249 TEST_c_f (carg, minus_infty, plus_infty, 3 * M_PI_4l);
1251 TEST_c_f (carg, minus_infty, minus_infty, -3 * M_PI_4l);
1253 TEST_c_f (carg, nan_value, nan_value, nan_value);
1262 FUNC(casin) (BUILD_COMPLEX (0.7L, 1.2L));
1263 if (errno == ENOSYS)
1264 /* Function not implemented. */
1269 TEST_c_c (casin, 0, 0, 0.0, 0.0);
1270 TEST_c_c (casin, minus_zero, 0, minus_zero, 0.0);
1271 TEST_c_c (casin, 0, minus_zero, 0.0, minus_zero);
1272 TEST_c_c (casin, minus_zero, minus_zero, minus_zero, minus_zero);
1274 TEST_c_c (casin, plus_infty, plus_infty, M_PI_4l, plus_infty);
1275 TEST_c_c (casin, plus_infty, minus_infty, M_PI_4l, minus_infty);
1276 TEST_c_c (casin, minus_infty, plus_infty, -M_PI_4l, plus_infty);
1277 TEST_c_c (casin, minus_infty, minus_infty, -M_PI_4l, minus_infty);
1279 TEST_c_c (casin, -10.0, plus_infty, minus_zero, plus_infty);
1280 TEST_c_c (casin, -10.0, minus_infty, minus_zero, minus_infty);
1281 TEST_c_c (casin, 0, plus_infty, 0.0, plus_infty);
1282 TEST_c_c (casin, 0, minus_infty, 0.0, minus_infty);
1283 TEST_c_c (casin, minus_zero, plus_infty, minus_zero, plus_infty);
1284 TEST_c_c (casin, minus_zero, minus_infty, minus_zero, minus_infty);
1285 TEST_c_c (casin, 0.1L, plus_infty, 0.0, plus_infty);
1286 TEST_c_c (casin, 0.1L, minus_infty, 0.0, minus_infty);
1288 TEST_c_c (casin, minus_infty, 0, -M_PI_2l, plus_infty);
1289 TEST_c_c (casin, minus_infty, minus_zero, -M_PI_2l, minus_infty);
1290 TEST_c_c (casin, minus_infty, 100, -M_PI_2l, plus_infty);
1291 TEST_c_c (casin, minus_infty, -100, -M_PI_2l, minus_infty);
1293 TEST_c_c (casin, plus_infty, 0, M_PI_2l, plus_infty);
1294 TEST_c_c (casin, plus_infty, minus_zero, M_PI_2l, minus_infty);
1295 TEST_c_c (casin, plus_infty, 0.5, M_PI_2l, plus_infty);
1296 TEST_c_c (casin, plus_infty, -0.5, M_PI_2l, minus_infty);
1298 TEST_c_c (casin, nan_value, plus_infty, nan_value, plus_infty);
1299 TEST_c_c (casin, nan_value, minus_infty, nan_value, minus_infty);
1301 TEST_c_c (casin, 0.0, nan_value, 0.0, nan_value);
1302 TEST_c_c (casin, minus_zero, nan_value, minus_zero, nan_value);
1304 TEST_c_c (casin, plus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1305 TEST_c_c (casin, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
1307 TEST_c_c (casin, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1308 TEST_c_c (casin, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1310 TEST_c_c (casin, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1311 TEST_c_c (casin, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1313 TEST_c_c (casin, nan_value, nan_value, nan_value, nan_value);
1315 TEST_c_c (casin, plus_zero, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L);
1316 TEST_c_c (casin, minus_zero, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L);
1317 TEST_c_c (casin, plus_zero, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L);
1318 TEST_c_c (casin, minus_zero, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L);
1319 TEST_c_c (casin, plus_zero, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L);
1320 TEST_c_c (casin, minus_zero, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L);
1321 TEST_c_c (casin, plus_zero, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L);
1322 TEST_c_c (casin, minus_zero, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L);
1323 TEST_c_c (casin, plus_zero, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L);
1324 TEST_c_c (casin, minus_zero, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L);
1325 TEST_c_c (casin, plus_zero, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L);
1326 TEST_c_c (casin, minus_zero, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L);
1328 TEST_c_c (casin, -1.5L, plus_zero, -M_PI_2l, 0.9624236501192068949955178268487368462704L);
1329 TEST_c_c (casin, -1.5L, minus_zero, -M_PI_2l, -0.9624236501192068949955178268487368462704L);
1330 TEST_c_c (casin, -1.0L, plus_zero, -M_PI_2l, plus_zero);
1331 TEST_c_c (casin, -1.0L, minus_zero, -M_PI_2l, minus_zero);
1332 TEST_c_c (casin, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L, plus_zero);
1333 TEST_c_c (casin, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L, minus_zero);
1334 TEST_c_c (casin, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L, plus_zero);
1335 TEST_c_c (casin, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L, minus_zero);
1336 TEST_c_c (casin, 1.0L, plus_zero, M_PI_2l, plus_zero);
1337 TEST_c_c (casin, 1.0L, minus_zero, M_PI_2l, minus_zero);
1338 TEST_c_c (casin, 1.5L, plus_zero, M_PI_2l, 0.9624236501192068949955178268487368462704L);
1339 TEST_c_c (casin, 1.5L, minus_zero, M_PI_2l, -0.9624236501192068949955178268487368462704L);
1341 TEST_c_c (casin, 0.75L, 1.25L, 0.453276177638793913448921196101971749L, 1.13239363160530819522266333696834467L);
1342 TEST_c_c (casin, -2, -3, -0.57065278432109940071028387968566963L, -1.9833870299165354323470769028940395L);
1344 END (casin, complex);
1352 FUNC(casinh) (BUILD_COMPLEX (0.7L, 1.2L));
1353 if (errno == ENOSYS)
1354 /* Function not implemented. */
1359 TEST_c_c (casinh, 0, 0, 0.0, 0.0);
1360 TEST_c_c (casinh, minus_zero, 0, minus_zero, 0);
1361 TEST_c_c (casinh, 0, minus_zero, 0.0, minus_zero);
1362 TEST_c_c (casinh, minus_zero, minus_zero, minus_zero, minus_zero);
1364 TEST_c_c (casinh, plus_infty, plus_infty, plus_infty, M_PI_4l);
1365 TEST_c_c (casinh, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1366 TEST_c_c (casinh, minus_infty, plus_infty, minus_infty, M_PI_4l);
1367 TEST_c_c (casinh, minus_infty, minus_infty, minus_infty, -M_PI_4l);
1369 TEST_c_c (casinh, -10.0, plus_infty, minus_infty, M_PI_2l);
1370 TEST_c_c (casinh, -10.0, minus_infty, minus_infty, -M_PI_2l);
1371 TEST_c_c (casinh, 0, plus_infty, plus_infty, M_PI_2l);
1372 TEST_c_c (casinh, 0, minus_infty, plus_infty, -M_PI_2l);
1373 TEST_c_c (casinh, minus_zero, plus_infty, minus_infty, M_PI_2l);
1374 TEST_c_c (casinh, minus_zero, minus_infty, minus_infty, -M_PI_2l);
1375 TEST_c_c (casinh, 0.1L, plus_infty, plus_infty, M_PI_2l);
1376 TEST_c_c (casinh, 0.1L, minus_infty, plus_infty, -M_PI_2l);
1378 TEST_c_c (casinh, minus_infty, 0, minus_infty, 0.0);
1379 TEST_c_c (casinh, minus_infty, minus_zero, minus_infty, minus_zero);
1380 TEST_c_c (casinh, minus_infty, 100, minus_infty, 0.0);
1381 TEST_c_c (casinh, minus_infty, -100, minus_infty, minus_zero);
1383 TEST_c_c (casinh, plus_infty, 0, plus_infty, 0.0);
1384 TEST_c_c (casinh, plus_infty, minus_zero, plus_infty, minus_zero);
1385 TEST_c_c (casinh, plus_infty, 0.5, plus_infty, 0.0);
1386 TEST_c_c (casinh, plus_infty, -0.5, plus_infty, minus_zero);
1388 TEST_c_c (casinh, plus_infty, nan_value, plus_infty, nan_value);
1389 TEST_c_c (casinh, minus_infty, nan_value, minus_infty, nan_value);
1391 TEST_c_c (casinh, nan_value, 0, nan_value, 0.0);
1392 TEST_c_c (casinh, nan_value, minus_zero, nan_value, minus_zero);
1394 TEST_c_c (casinh, nan_value, plus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1395 TEST_c_c (casinh, nan_value, minus_infty, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
1397 TEST_c_c (casinh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1398 TEST_c_c (casinh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1400 TEST_c_c (casinh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1401 TEST_c_c (casinh, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1403 TEST_c_c (casinh, nan_value, nan_value, nan_value, nan_value);
1405 TEST_c_c (casinh, plus_zero, -1.5L, 0.9624236501192068949955178268487368462704L, -M_PI_2l);
1406 TEST_c_c (casinh, minus_zero, -1.5L, -0.9624236501192068949955178268487368462704L, -M_PI_2l);
1407 TEST_c_c (casinh, plus_zero, -1.0L, plus_zero, -M_PI_2l);
1408 TEST_c_c (casinh, minus_zero, -1.0L, minus_zero, -M_PI_2l);
1409 TEST_c_c (casinh, plus_zero, -0.5L, plus_zero, -0.5235987755982988730771072305465838140329L);
1410 TEST_c_c (casinh, minus_zero, -0.5L, minus_zero, -0.5235987755982988730771072305465838140329L);
1411 TEST_c_c (casinh, plus_zero, 0.5L, plus_zero, 0.5235987755982988730771072305465838140329L);
1412 TEST_c_c (casinh, minus_zero, 0.5L, minus_zero, 0.5235987755982988730771072305465838140329L);
1413 TEST_c_c (casinh, plus_zero, 1.0L, plus_zero, M_PI_2l);
1414 TEST_c_c (casinh, minus_zero, 1.0L, minus_zero, M_PI_2l);
1415 TEST_c_c (casinh, plus_zero, 1.5L, 0.9624236501192068949955178268487368462704L, M_PI_2l);
1416 TEST_c_c (casinh, minus_zero, 1.5L, -0.9624236501192068949955178268487368462704L, M_PI_2l);
1418 TEST_c_c (casinh, -1.5L, plus_zero, -1.194763217287109304111930828519090523536L, plus_zero);
1419 TEST_c_c (casinh, -1.5L, minus_zero, -1.194763217287109304111930828519090523536L, minus_zero);
1420 TEST_c_c (casinh, -1.0L, plus_zero, -0.8813735870195430252326093249797923090282L, plus_zero);
1421 TEST_c_c (casinh, -1.0L, minus_zero, -0.8813735870195430252326093249797923090282L, minus_zero);
1422 TEST_c_c (casinh, -0.5L, plus_zero, -0.4812118250596034474977589134243684231352L, plus_zero);
1423 TEST_c_c (casinh, -0.5L, minus_zero, -0.4812118250596034474977589134243684231352L, minus_zero);
1424 TEST_c_c (casinh, 0.5L, plus_zero, 0.4812118250596034474977589134243684231352L, plus_zero);
1425 TEST_c_c (casinh, 0.5L, minus_zero, 0.4812118250596034474977589134243684231352L, minus_zero);
1426 TEST_c_c (casinh, 1.0L, plus_zero, 0.8813735870195430252326093249797923090282L, plus_zero);
1427 TEST_c_c (casinh, 1.0L, minus_zero, 0.8813735870195430252326093249797923090282L, minus_zero);
1428 TEST_c_c (casinh, 1.5L, plus_zero, 1.194763217287109304111930828519090523536L, plus_zero);
1429 TEST_c_c (casinh, 1.5L, minus_zero, 1.194763217287109304111930828519090523536L, minus_zero);
1431 TEST_c_c (casinh, 0.75L, 1.25L, 1.03171853444778027336364058631006594L, 0.911738290968487636358489564316731207L);
1432 TEST_c_c (casinh, -2, -3, -1.9686379257930962917886650952454982L, -0.96465850440760279204541105949953237L);
1434 END (casinh, complex);
1442 FUNC(catan) (BUILD_COMPLEX (0.7L, 1.2L));
1443 if (errno == ENOSYS)
1444 /* Function not implemented. */
1449 TEST_c_c (catan, 0, 0, 0, 0);
1450 TEST_c_c (catan, minus_zero, 0, minus_zero, 0);
1451 TEST_c_c (catan, 0, minus_zero, 0, minus_zero);
1452 TEST_c_c (catan, minus_zero, minus_zero, minus_zero, minus_zero);
1454 TEST_c_c (catan, plus_infty, plus_infty, M_PI_2l, 0);
1455 TEST_c_c (catan, plus_infty, minus_infty, M_PI_2l, minus_zero);
1456 TEST_c_c (catan, minus_infty, plus_infty, -M_PI_2l, 0);
1457 TEST_c_c (catan, minus_infty, minus_infty, -M_PI_2l, minus_zero);
1460 TEST_c_c (catan, plus_infty, -10.0, M_PI_2l, minus_zero);
1461 TEST_c_c (catan, minus_infty, -10.0, -M_PI_2l, minus_zero);
1462 TEST_c_c (catan, plus_infty, minus_zero, M_PI_2l, minus_zero);
1463 TEST_c_c (catan, minus_infty, minus_zero, -M_PI_2l, minus_zero);
1464 TEST_c_c (catan, plus_infty, 0.0, M_PI_2l, 0);
1465 TEST_c_c (catan, minus_infty, 0.0, -M_PI_2l, 0);
1466 TEST_c_c (catan, plus_infty, 0.1L, M_PI_2l, 0);
1467 TEST_c_c (catan, minus_infty, 0.1L, -M_PI_2l, 0);
1469 TEST_c_c (catan, 0.0, minus_infty, M_PI_2l, minus_zero);
1470 TEST_c_c (catan, minus_zero, minus_infty, -M_PI_2l, minus_zero);
1471 TEST_c_c (catan, 100.0, minus_infty, M_PI_2l, minus_zero);
1472 TEST_c_c (catan, -100.0, minus_infty, -M_PI_2l, minus_zero);
1474 TEST_c_c (catan, 0.0, plus_infty, M_PI_2l, 0);
1475 TEST_c_c (catan, minus_zero, plus_infty, -M_PI_2l, 0);
1476 TEST_c_c (catan, 0.5, plus_infty, M_PI_2l, 0);
1477 TEST_c_c (catan, -0.5, plus_infty, -M_PI_2l, 0);
1479 TEST_c_c (catan, nan_value, 0.0, nan_value, 0);
1480 TEST_c_c (catan, nan_value, minus_zero, nan_value, minus_zero);
1482 TEST_c_c (catan, nan_value, plus_infty, nan_value, 0);
1483 TEST_c_c (catan, nan_value, minus_infty, nan_value, minus_zero);
1485 TEST_c_c (catan, 0.0, nan_value, nan_value, nan_value);
1486 TEST_c_c (catan, minus_zero, nan_value, nan_value, nan_value);
1488 TEST_c_c (catan, plus_infty, nan_value, M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1489 TEST_c_c (catan, minus_infty, nan_value, -M_PI_2l, 0, IGNORE_ZERO_INF_SIGN);
1491 TEST_c_c (catan, nan_value, 10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1492 TEST_c_c (catan, nan_value, -10.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1494 TEST_c_c (catan, 0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1495 TEST_c_c (catan, -0.75, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1497 TEST_c_c (catan, nan_value, nan_value, nan_value, nan_value);
1499 TEST_c_c (catan, 0.75L, 1.25L, 1.10714871779409050301706546017853704L, 0.549306144334054845697622618461262852L);
1500 TEST_c_c (catan, -2, -3, -1.4099210495965755225306193844604208L, -0.22907268296853876629588180294200276L);
1502 END (catan, complex);
1509 FUNC(catanh) (BUILD_COMPLEX (0.7L, 1.2L));
1510 if (errno == ENOSYS)
1511 /* Function not implemented. */
1516 TEST_c_c (catanh, 0, 0, 0.0, 0.0);
1517 TEST_c_c (catanh, minus_zero, 0, minus_zero, 0.0);
1518 TEST_c_c (catanh, 0, minus_zero, 0.0, minus_zero);
1519 TEST_c_c (catanh, minus_zero, minus_zero, minus_zero, minus_zero);
1521 TEST_c_c (catanh, plus_infty, plus_infty, 0.0, M_PI_2l);
1522 TEST_c_c (catanh, plus_infty, minus_infty, 0.0, -M_PI_2l);
1523 TEST_c_c (catanh, minus_infty, plus_infty, minus_zero, M_PI_2l);
1524 TEST_c_c (catanh, minus_infty, minus_infty, minus_zero, -M_PI_2l);
1526 TEST_c_c (catanh, -10.0, plus_infty, minus_zero, M_PI_2l);
1527 TEST_c_c (catanh, -10.0, minus_infty, minus_zero, -M_PI_2l);
1528 TEST_c_c (catanh, minus_zero, plus_infty, minus_zero, M_PI_2l);
1529 TEST_c_c (catanh, minus_zero, minus_infty, minus_zero, -M_PI_2l);
1530 TEST_c_c (catanh, 0, plus_infty, 0.0, M_PI_2l);
1531 TEST_c_c (catanh, 0, minus_infty, 0.0, -M_PI_2l);
1532 TEST_c_c (catanh, 0.1L, plus_infty, 0.0, M_PI_2l);
1533 TEST_c_c (catanh, 0.1L, minus_infty, 0.0, -M_PI_2l);
1535 TEST_c_c (catanh, minus_infty, 0, minus_zero, M_PI_2l);
1536 TEST_c_c (catanh, minus_infty, minus_zero, minus_zero, -M_PI_2l);
1537 TEST_c_c (catanh, minus_infty, 100, minus_zero, M_PI_2l);
1538 TEST_c_c (catanh, minus_infty, -100, minus_zero, -M_PI_2l);
1540 TEST_c_c (catanh, plus_infty, 0, 0.0, M_PI_2l);
1541 TEST_c_c (catanh, plus_infty, minus_zero, 0.0, -M_PI_2l);
1542 TEST_c_c (catanh, plus_infty, 0.5, 0.0, M_PI_2l);
1543 TEST_c_c (catanh, plus_infty, -0.5, 0.0, -M_PI_2l);
1545 TEST_c_c (catanh, 0, nan_value, 0.0, nan_value);
1546 TEST_c_c (catanh, minus_zero, nan_value, minus_zero, nan_value);
1548 TEST_c_c (catanh, plus_infty, nan_value, 0.0, nan_value);
1549 TEST_c_c (catanh, minus_infty, nan_value, minus_zero, nan_value);
1551 TEST_c_c (catanh, nan_value, 0, nan_value, nan_value);
1552 TEST_c_c (catanh, nan_value, minus_zero, nan_value, nan_value);
1554 TEST_c_c (catanh, nan_value, plus_infty, 0.0, M_PI_2l, IGNORE_ZERO_INF_SIGN);
1555 TEST_c_c (catanh, nan_value, minus_infty, 0.0, -M_PI_2l, IGNORE_ZERO_INF_SIGN);
1557 TEST_c_c (catanh, 10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1558 TEST_c_c (catanh, -10.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1560 TEST_c_c (catanh, nan_value, 0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1561 TEST_c_c (catanh, nan_value, -0.75, nan_value, nan_value, INVALID_EXCEPTION_OK);
1563 TEST_c_c (catanh, nan_value, nan_value, nan_value, nan_value);
1565 TEST_c_c (catanh, 0.75L, 1.25L, 0.261492138795671927078652057366532140L, 0.996825126463918666098902241310446708L);
1566 TEST_c_c (catanh, -2, -3, -0.14694666622552975204743278515471595L, -1.3389725222944935611241935759091443L);
1568 END (catanh, complex);
1576 if (errno == ENOSYS)
1577 /* Function not implemented. */
1582 TEST_f_f (cbrt, 0.0, 0.0);
1583 TEST_f_f (cbrt, minus_zero, minus_zero);
1585 TEST_f_f (cbrt, plus_infty, plus_infty);
1586 TEST_f_f (cbrt, minus_infty, minus_infty);
1587 TEST_f_f (cbrt, nan_value, nan_value);
1589 TEST_f_f (cbrt, -0.001L, -0.1L);
1590 TEST_f_f (cbrt, 8, 2);
1591 TEST_f_f (cbrt, -27.0, -3.0);
1592 TEST_f_f (cbrt, 0.9921875L, 0.997389022060725270579075195353955217L);
1593 TEST_f_f (cbrt, 0.75L, 0.908560296416069829445605878163630251L);
1603 FUNC(ccos) (BUILD_COMPLEX (0, 0));
1604 if (errno == ENOSYS)
1605 /* Function not implemented. */
1610 TEST_c_c (ccos, 0.0, 0.0, 1.0, minus_zero);
1611 TEST_c_c (ccos, minus_zero, 0.0, 1.0, 0.0);
1612 TEST_c_c (ccos, 0.0, minus_zero, 1.0, 0.0);
1613 TEST_c_c (ccos, minus_zero, minus_zero, 1.0, minus_zero);
1615 TEST_c_c (ccos, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1616 TEST_c_c (ccos, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1617 TEST_c_c (ccos, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1618 TEST_c_c (ccos, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1620 TEST_c_c (ccos, 0.0, plus_infty, plus_infty, minus_zero);
1621 TEST_c_c (ccos, 0.0, minus_infty, plus_infty, 0.0);
1622 TEST_c_c (ccos, minus_zero, plus_infty, plus_infty, 0.0);
1623 TEST_c_c (ccos, minus_zero, minus_infty, plus_infty, minus_zero);
1625 TEST_c_c (ccos, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1626 TEST_c_c (ccos, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1627 TEST_c_c (ccos, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1628 TEST_c_c (ccos, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1630 TEST_c_c (ccos, 4.625, plus_infty, minus_infty, plus_infty);
1631 TEST_c_c (ccos, 4.625, minus_infty, minus_infty, minus_infty);
1632 TEST_c_c (ccos, -4.625, plus_infty, minus_infty, minus_infty);
1633 TEST_c_c (ccos, -4.625, minus_infty, minus_infty, plus_infty);
1635 TEST_c_c (ccos, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1636 TEST_c_c (ccos, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1637 TEST_c_c (ccos, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
1638 TEST_c_c (ccos, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
1640 TEST_c_c (ccos, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1641 TEST_c_c (ccos, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1643 TEST_c_c (ccos, nan_value, plus_infty, plus_infty, nan_value);
1644 TEST_c_c (ccos, nan_value, minus_infty, plus_infty, nan_value);
1646 TEST_c_c (ccos, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1647 TEST_c_c (ccos, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1649 TEST_c_c (ccos, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1650 TEST_c_c (ccos, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1652 TEST_c_c (ccos, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1653 TEST_c_c (ccos, -10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1655 TEST_c_c (ccos, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1656 TEST_c_c (ccos, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1658 TEST_c_c (ccos, nan_value, nan_value, nan_value, nan_value);
1660 TEST_c_c (ccos, 0.75L, 1.25L, 1.38173873063425888530729933139078645L, -1.09193013555397466170919531722024128L);
1661 TEST_c_c (ccos, -2, -3, -4.18962569096880723013255501961597373L, -9.10922789375533659797919726277886212L);
1663 END (ccos, complex);
1671 FUNC(ccosh) (BUILD_COMPLEX (0.7L, 1.2L));
1672 if (errno == ENOSYS)
1673 /* Function not implemented. */
1678 TEST_c_c (ccosh, 0.0, 0.0, 1.0, 0.0);
1679 TEST_c_c (ccosh, minus_zero, 0.0, 1.0, minus_zero);
1680 TEST_c_c (ccosh, 0.0, minus_zero, 1.0, minus_zero);
1681 TEST_c_c (ccosh, minus_zero, minus_zero, 1.0, 0.0);
1683 TEST_c_c (ccosh, 0.0, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1684 TEST_c_c (ccosh, minus_zero, plus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1685 TEST_c_c (ccosh, 0.0, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1686 TEST_c_c (ccosh, minus_zero, minus_infty, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1688 TEST_c_c (ccosh, plus_infty, 0.0, plus_infty, 0.0);
1689 TEST_c_c (ccosh, minus_infty, 0.0, plus_infty, minus_zero);
1690 TEST_c_c (ccosh, plus_infty, minus_zero, plus_infty, minus_zero);
1691 TEST_c_c (ccosh, minus_infty, minus_zero, plus_infty, 0.0);
1693 TEST_c_c (ccosh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1694 TEST_c_c (ccosh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1695 TEST_c_c (ccosh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1696 TEST_c_c (ccosh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
1698 TEST_c_c (ccosh, plus_infty, 4.625, minus_infty, minus_infty);
1699 TEST_c_c (ccosh, minus_infty, 4.625, minus_infty, plus_infty);
1700 TEST_c_c (ccosh, plus_infty, -4.625, minus_infty, plus_infty);
1701 TEST_c_c (ccosh, minus_infty, -4.625, minus_infty, minus_infty);
1703 TEST_c_c (ccosh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1704 TEST_c_c (ccosh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1705 TEST_c_c (ccosh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1706 TEST_c_c (ccosh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1708 TEST_c_c (ccosh, 0.0, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1709 TEST_c_c (ccosh, minus_zero, nan_value, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1711 TEST_c_c (ccosh, plus_infty, nan_value, plus_infty, nan_value);
1712 TEST_c_c (ccosh, minus_infty, nan_value, plus_infty, nan_value);
1714 TEST_c_c (ccosh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1715 TEST_c_c (ccosh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1717 TEST_c_c (ccosh, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1718 TEST_c_c (ccosh, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
1720 TEST_c_c (ccosh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1721 TEST_c_c (ccosh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1723 TEST_c_c (ccosh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1724 TEST_c_c (ccosh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1726 TEST_c_c (ccosh, nan_value, nan_value, nan_value, nan_value);
1728 TEST_c_c (ccosh, 0.75L, 1.25L, 0.408242591877968807788852146397499084L, 0.780365930845853240391326216300863152L);
1730 TEST_c_c (ccosh, -2, -3, -3.72454550491532256547397070325597253L, 0.511822569987384608834463849801875634L);
1732 END (ccosh, complex);
1741 TEST_f_f (ceil, 0.0, 0.0);
1742 TEST_f_f (ceil, minus_zero, minus_zero);
1743 TEST_f_f (ceil, plus_infty, plus_infty);
1744 TEST_f_f (ceil, minus_infty, minus_infty);
1745 TEST_f_f (ceil, nan_value, nan_value);
1747 TEST_f_f (ceil, M_PIl, 4.0);
1748 TEST_f_f (ceil, -M_PIl, -3.0);
1749 TEST_f_f (ceil, 0.1, 1.0);
1750 TEST_f_f (ceil, 0.25, 1.0);
1751 TEST_f_f (ceil, 0.625, 1.0);
1752 TEST_f_f (ceil, -0.1, minus_zero);
1753 TEST_f_f (ceil, -0.25, minus_zero);
1754 TEST_f_f (ceil, -0.625, minus_zero);
1757 /* The result can only be represented in long double. */
1758 TEST_f_f (ceil, 4503599627370495.5L, 4503599627370496.0L);
1759 TEST_f_f (ceil, 4503599627370496.25L, 4503599627370497.0L);
1760 TEST_f_f (ceil, 4503599627370496.5L, 4503599627370497.0L);
1761 TEST_f_f (ceil, 4503599627370496.75L, 4503599627370497.0L);
1762 TEST_f_f (ceil, 4503599627370497.5L, 4503599627370498.0L);
1764 TEST_f_f (ceil, -4503599627370495.5L, -4503599627370495.0L);
1765 TEST_f_f (ceil, -4503599627370496.25L, -4503599627370496.0L);
1766 TEST_f_f (ceil, -4503599627370496.5L, -4503599627370496.0L);
1767 TEST_f_f (ceil, -4503599627370496.75L, -4503599627370496.0L);
1768 TEST_f_f (ceil, -4503599627370497.5L, -4503599627370497.0L);
1770 # if LDBL_MANT_DIG > 100
1771 TEST_f_f (ceil, 4503599627370494.5000000000001L, 4503599627370495.0L);
1772 TEST_f_f (ceil, 4503599627370495.5000000000001L, 4503599627370496.0L);
1773 TEST_f_f (ceil, 4503599627370496.5000000000001L, 4503599627370497.0L);
1774 TEST_f_f (ceil, -4503599627370494.5000000000001L, -4503599627370494.0L);
1775 TEST_f_f (ceil, -4503599627370495.5000000000001L, -4503599627370495.0L);
1776 TEST_f_f (ceil, -4503599627370496.5000000000001L, -4503599627370496.0L);
1779 TEST_f_f (ceil, 9007199254740991.5L, 9007199254740992.0L);
1780 TEST_f_f (ceil, 9007199254740992.25L, 9007199254740993.0L);
1781 TEST_f_f (ceil, 9007199254740992.5L, 9007199254740993.0L);
1782 TEST_f_f (ceil, 9007199254740992.75L, 9007199254740993.0L);
1783 TEST_f_f (ceil, 9007199254740993.5L, 9007199254740994.0L);
1785 TEST_f_f (ceil, -9007199254740991.5L, -9007199254740991.0L);
1786 TEST_f_f (ceil, -9007199254740992.25L, -9007199254740992.0L);
1787 TEST_f_f (ceil, -9007199254740992.5L, -9007199254740992.0L);
1788 TEST_f_f (ceil, -9007199254740992.75L, -9007199254740992.0L);
1789 TEST_f_f (ceil, -9007199254740993.5L, -9007199254740993.0L);
1791 # if LDBL_MANT_DIG > 100
1792 TEST_f_f (ceil, 9007199254740991.0000000000001L, 9007199254740992.0L);
1793 TEST_f_f (ceil, 9007199254740992.0000000000001L, 9007199254740993.0L);
1794 TEST_f_f (ceil, 9007199254740993.0000000000001L, 9007199254740994.0L);
1795 TEST_f_f (ceil, 9007199254740991.5000000000001L, 9007199254740992.0L);
1796 TEST_f_f (ceil, 9007199254740992.5000000000001L, 9007199254740993.0L);
1797 TEST_f_f (ceil, 9007199254740993.5000000000001L, 9007199254740994.0L);
1799 TEST_f_f (ceil, -9007199254740991.0000000000001L, -9007199254740991.0L);
1800 TEST_f_f (ceil, -9007199254740992.0000000000001L, -9007199254740992.0L);
1801 TEST_f_f (ceil, -9007199254740993.0000000000001L, -9007199254740993.0L);
1802 TEST_f_f (ceil, -9007199254740991.5000000000001L, -9007199254740991.0L);
1803 TEST_f_f (ceil, -9007199254740992.5000000000001L, -9007199254740992.0L);
1804 TEST_f_f (ceil, -9007199254740993.5000000000001L, -9007199254740993.0L);
1807 TEST_f_f (ceil, 72057594037927935.5L, 72057594037927936.0L);
1808 TEST_f_f (ceil, 72057594037927936.25L, 72057594037927937.0L);
1809 TEST_f_f (ceil, 72057594037927936.5L, 72057594037927937.0L);
1810 TEST_f_f (ceil, 72057594037927936.75L, 72057594037927937.0L);
1811 TEST_f_f (ceil, 72057594037927937.5L, 72057594037927938.0L);
1813 TEST_f_f (ceil, -72057594037927935.5L, -72057594037927935.0L);
1814 TEST_f_f (ceil, -72057594037927936.25L, -72057594037927936.0L);
1815 TEST_f_f (ceil, -72057594037927936.5L, -72057594037927936.0L);
1816 TEST_f_f (ceil, -72057594037927936.75L, -72057594037927936.0L);
1817 TEST_f_f (ceil, -72057594037927937.5L, -72057594037927937.0L);
1819 TEST_f_f (ceil, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
1820 TEST_f_f (ceil, 10141204801825835211973625643008.25L, 10141204801825835211973625643009.0L);
1821 TEST_f_f (ceil, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
1822 TEST_f_f (ceil, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
1823 TEST_f_f (ceil, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
1834 FUNC(cexp) (BUILD_COMPLEX (0, 0));
1835 if (errno == ENOSYS)
1836 /* Function not implemented. */
1841 TEST_c_c (cexp, plus_zero, plus_zero, 1, 0.0);
1842 TEST_c_c (cexp, minus_zero, plus_zero, 1, 0.0);
1843 TEST_c_c (cexp, plus_zero, minus_zero, 1, minus_zero);
1844 TEST_c_c (cexp, minus_zero, minus_zero, 1, minus_zero);
1846 TEST_c_c (cexp, plus_infty, plus_zero, plus_infty, 0.0);
1847 TEST_c_c (cexp, plus_infty, minus_zero, plus_infty, minus_zero);
1849 TEST_c_c (cexp, minus_infty, plus_zero, 0.0, 0.0);
1850 TEST_c_c (cexp, minus_infty, minus_zero, 0.0, minus_zero);
1852 TEST_c_c (cexp, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1853 TEST_c_c (cexp, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1855 TEST_c_c (cexp, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1856 TEST_c_c (cexp, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1858 TEST_c_c (cexp, 100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1859 TEST_c_c (cexp, -100.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1861 TEST_c_c (cexp, 100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1862 TEST_c_c (cexp, -100.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
1864 TEST_c_c (cexp, minus_infty, 2.0, minus_zero, 0.0);
1865 TEST_c_c (cexp, minus_infty, 4.0, minus_zero, minus_zero);
1866 TEST_c_c (cexp, plus_infty, 2.0, minus_infty, plus_infty);
1867 TEST_c_c (cexp, plus_infty, 4.0, minus_infty, minus_infty);
1869 TEST_c_c (cexp, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1870 TEST_c_c (cexp, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
1872 TEST_c_c (cexp, minus_infty, plus_infty, 0.0, 0.0, IGNORE_ZERO_INF_SIGN);
1873 TEST_c_c (cexp, minus_infty, minus_infty, 0.0, minus_zero, IGNORE_ZERO_INF_SIGN);
1875 TEST_c_c (cexp, minus_infty, nan_value, 0, 0, IGNORE_ZERO_INF_SIGN);
1877 TEST_c_c (cexp, plus_infty, nan_value, plus_infty, nan_value);
1879 TEST_c_c (cexp, nan_value, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1880 TEST_c_c (cexp, nan_value, 1.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1882 TEST_c_c (cexp, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
1883 TEST_c_c (cexp, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1884 TEST_c_c (cexp, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1885 TEST_c_c (cexp, nan_value, nan_value, nan_value, nan_value);
1887 TEST_c_c (cexp, 0.75L, 1.25L, 0.667537446429131586942201977015932112L, 2.00900045494094876258347228145863909L);
1888 TEST_c_c (cexp, -2.0, -3.0, -0.13398091492954261346140525546115575L, -0.019098516261135196432576240858800925L);
1890 END (cexp, complex);
1898 TEST_c_f (cimag, 1.0, 0.0, 0.0);
1899 TEST_c_f (cimag, 1.0, minus_zero, minus_zero);
1900 TEST_c_f (cimag, 1.0, nan_value, nan_value);
1901 TEST_c_f (cimag, nan_value, nan_value, nan_value);
1902 TEST_c_f (cimag, 1.0, plus_infty, plus_infty);
1903 TEST_c_f (cimag, 1.0, minus_infty, minus_infty);
1904 TEST_c_f (cimag, 2.0, 3.0, 3.0);
1913 FUNC(clog) (BUILD_COMPLEX (-2, -3));
1914 if (errno == ENOSYS)
1915 /* Function not implemented. */
1920 TEST_c_c (clog, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1921 TEST_c_c (clog, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1923 TEST_c_c (clog, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1924 TEST_c_c (clog, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1926 TEST_c_c (clog, minus_infty, plus_infty, plus_infty, M_PI_34l);
1927 TEST_c_c (clog, minus_infty, minus_infty, plus_infty, -M_PI_34l);
1929 TEST_c_c (clog, plus_infty, plus_infty, plus_infty, M_PI_4l);
1930 TEST_c_c (clog, plus_infty, minus_infty, plus_infty, -M_PI_4l);
1932 TEST_c_c (clog, 0, plus_infty, plus_infty, M_PI_2l);
1933 TEST_c_c (clog, 3, plus_infty, plus_infty, M_PI_2l);
1934 TEST_c_c (clog, minus_zero, plus_infty, plus_infty, M_PI_2l);
1935 TEST_c_c (clog, -3, plus_infty, plus_infty, M_PI_2l);
1936 TEST_c_c (clog, 0, minus_infty, plus_infty, -M_PI_2l);
1937 TEST_c_c (clog, 3, minus_infty, plus_infty, -M_PI_2l);
1938 TEST_c_c (clog, minus_zero, minus_infty, plus_infty, -M_PI_2l);
1939 TEST_c_c (clog, -3, minus_infty, plus_infty, -M_PI_2l);
1941 TEST_c_c (clog, minus_infty, 0, plus_infty, M_PIl);
1942 TEST_c_c (clog, minus_infty, 1, plus_infty, M_PIl);
1943 TEST_c_c (clog, minus_infty, minus_zero, plus_infty, -M_PIl);
1944 TEST_c_c (clog, minus_infty, -1, plus_infty, -M_PIl);
1946 TEST_c_c (clog, plus_infty, 0, plus_infty, 0.0);
1947 TEST_c_c (clog, plus_infty, 1, plus_infty, 0.0);
1948 TEST_c_c (clog, plus_infty, minus_zero, plus_infty, minus_zero);
1949 TEST_c_c (clog, plus_infty, -1, plus_infty, minus_zero);
1951 TEST_c_c (clog, plus_infty, nan_value, plus_infty, nan_value);
1952 TEST_c_c (clog, minus_infty, nan_value, plus_infty, nan_value);
1954 TEST_c_c (clog, nan_value, plus_infty, plus_infty, nan_value);
1955 TEST_c_c (clog, nan_value, minus_infty, plus_infty, nan_value);
1957 TEST_c_c (clog, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1958 TEST_c_c (clog, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1959 TEST_c_c (clog, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1960 TEST_c_c (clog, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
1962 TEST_c_c (clog, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
1963 TEST_c_c (clog, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1964 TEST_c_c (clog, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
1965 TEST_c_c (clog, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
1967 TEST_c_c (clog, nan_value, nan_value, nan_value, nan_value);
1969 TEST_c_c (clog, 0.75L, 1.25L, 0.376885901188190075998919126749298416L, 1.03037682652431246378774332703115153L);
1970 TEST_c_c (clog, -2, -3, 1.2824746787307683680267437207826593L, -2.1587989303424641704769327722648368L);
1972 END (clog, complex);
1980 FUNC(clog10) (BUILD_COMPLEX (0.7L, 1.2L));
1981 if (errno == ENOSYS)
1982 /* Function not implemented. */
1987 TEST_c_c (clog10, minus_zero, 0, minus_infty, M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1988 TEST_c_c (clog10, minus_zero, minus_zero, minus_infty, -M_PIl, DIVIDE_BY_ZERO_EXCEPTION);
1990 TEST_c_c (clog10, 0, 0, minus_infty, 0.0, DIVIDE_BY_ZERO_EXCEPTION);
1991 TEST_c_c (clog10, 0, minus_zero, minus_infty, minus_zero, DIVIDE_BY_ZERO_EXCEPTION);
1993 TEST_c_c (clog10, minus_infty, plus_infty, plus_infty, M_PI_34_LOG10El);
1995 TEST_c_c (clog10, plus_infty, plus_infty, plus_infty, M_PI4_LOG10El);
1996 TEST_c_c (clog10, plus_infty, minus_infty, plus_infty, -M_PI4_LOG10El);
1998 TEST_c_c (clog10, 0, plus_infty, plus_infty, M_PI2_LOG10El);
1999 TEST_c_c (clog10, 3, plus_infty, plus_infty, M_PI2_LOG10El);
2000 TEST_c_c (clog10, minus_zero, plus_infty, plus_infty, M_PI2_LOG10El);
2001 TEST_c_c (clog10, -3, plus_infty, plus_infty, M_PI2_LOG10El);
2002 TEST_c_c (clog10, 0, minus_infty, plus_infty, -M_PI2_LOG10El);
2003 TEST_c_c (clog10, 3, minus_infty, plus_infty, -M_PI2_LOG10El);
2004 TEST_c_c (clog10, minus_zero, minus_infty, plus_infty, -M_PI2_LOG10El);
2005 TEST_c_c (clog10, -3, minus_infty, plus_infty, -M_PI2_LOG10El);
2007 TEST_c_c (clog10, minus_infty, 0, plus_infty, M_PI_LOG10El);
2008 TEST_c_c (clog10, minus_infty, 1, plus_infty, M_PI_LOG10El);
2009 TEST_c_c (clog10, minus_infty, minus_zero, plus_infty, -M_PI_LOG10El);
2010 TEST_c_c (clog10, minus_infty, -1, plus_infty, -M_PI_LOG10El);
2012 TEST_c_c (clog10, plus_infty, 0, plus_infty, 0.0);
2013 TEST_c_c (clog10, plus_infty, 1, plus_infty, 0.0);
2014 TEST_c_c (clog10, plus_infty, minus_zero, plus_infty, minus_zero);
2015 TEST_c_c (clog10, plus_infty, -1, plus_infty, minus_zero);
2017 TEST_c_c (clog10, plus_infty, nan_value, plus_infty, nan_value);
2018 TEST_c_c (clog10, minus_infty, nan_value, plus_infty, nan_value);
2020 TEST_c_c (clog10, nan_value, plus_infty, plus_infty, nan_value);
2021 TEST_c_c (clog10, nan_value, minus_infty, plus_infty, nan_value);
2023 TEST_c_c (clog10, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2024 TEST_c_c (clog10, 3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2025 TEST_c_c (clog10, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2026 TEST_c_c (clog10, -3, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2028 TEST_c_c (clog10, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2029 TEST_c_c (clog10, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2030 TEST_c_c (clog10, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2031 TEST_c_c (clog10, nan_value, -5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2033 TEST_c_c (clog10, nan_value, nan_value, nan_value, nan_value);
2035 TEST_c_c (clog10, 0.75L, 1.25L, 0.163679467193165171449476605077428975L, 0.447486970040493067069984724340855636L);
2036 TEST_c_c (clog10, -2, -3, 0.556971676153418384603252578971164214L, -0.937554462986374708541507952140189646L);
2038 END (clog10, complex);
2046 TEST_c_c (conj, 0.0, 0.0, 0.0, minus_zero);
2047 TEST_c_c (conj, 0.0, minus_zero, 0.0, 0.0);
2048 TEST_c_c (conj, nan_value, nan_value, nan_value, nan_value);
2049 TEST_c_c (conj, plus_infty, minus_infty, plus_infty, plus_infty);
2050 TEST_c_c (conj, plus_infty, plus_infty, plus_infty, minus_infty);
2051 TEST_c_c (conj, 1.0, 2.0, 1.0, -2.0);
2052 TEST_c_c (conj, 3.0, -4.0, 3.0, 4.0);
2054 END (conj, complex);
2059 copysign_test (void)
2063 TEST_ff_f (copysign, 0, 4, 0);
2064 TEST_ff_f (copysign, 0, -4, minus_zero);
2065 TEST_ff_f (copysign, minus_zero, 4, 0);
2066 TEST_ff_f (copysign, minus_zero, -4, minus_zero);
2068 TEST_ff_f (copysign, plus_infty, 0, plus_infty);
2069 TEST_ff_f (copysign, plus_infty, minus_zero, minus_infty);
2070 TEST_ff_f (copysign, minus_infty, 0, plus_infty);
2071 TEST_ff_f (copysign, minus_infty, minus_zero, minus_infty);
2073 TEST_ff_f (copysign, 0, plus_infty, 0);
2074 TEST_ff_f (copysign, 0, minus_zero, minus_zero);
2075 TEST_ff_f (copysign, minus_zero, plus_infty, 0);
2076 TEST_ff_f (copysign, minus_zero, minus_zero, minus_zero);
2078 /* XXX More correctly we would have to check the sign of the NaN. */
2079 TEST_ff_f (copysign, nan_value, 0, nan_value);
2080 TEST_ff_f (copysign, nan_value, minus_zero, nan_value);
2081 TEST_ff_f (copysign, -nan_value, 0, nan_value);
2082 TEST_ff_f (copysign, -nan_value, minus_zero, nan_value);
2093 if (errno == ENOSYS)
2094 /* Function not implemented. */
2099 TEST_f_f (cos, 0, 1);
2100 TEST_f_f (cos, minus_zero, 1);
2102 TEST_f_f (cos, plus_infty, nan_value, INVALID_EXCEPTION);
2103 check_int ("errno for cos(+inf) == EDOM", errno, EDOM, 0, 0, 0);
2105 TEST_f_f (cos, minus_infty, nan_value, INVALID_EXCEPTION);
2106 check_int ("errno for cos(-inf) == EDOM", errno, EDOM, 0, 0, 0);
2108 TEST_f_f (cos, nan_value, nan_value);
2109 check_int ("errno for cos(NaN) unchanged", errno, 0, 0, 0, 0);
2111 TEST_f_f (cos, M_PI_6l * 2.0, 0.5);
2112 TEST_f_f (cos, M_PI_6l * 4.0, -0.5);
2113 TEST_f_f (cos, M_PI_2l, 0);
2115 TEST_f_f (cos, 0.75L, 0.731688868873820886311838753000084544L);
2117 TEST_f_f (cos, 0x1p65, 0.99888622066058013610642172179340364209972L);
2118 TEST_f_f (cos, -0x1p65, 0.99888622066058013610642172179340364209972L);
2121 TEST_f_f (cos, 0.80190127184058835, 0.69534156199418473);
2125 TEST_f_f (cos, 1e22, 0.5232147853951389454975944733847094921409L);
2126 TEST_f_f (cos, 0x1p1023, -0.826369834614147994500785680811743734805L);
2129 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2130 TEST_f_f (cos, 0x1p16383L, 0.9210843909921906206874509522505756251609L);
2138 cos_test_tonearest (void)
2140 int save_round_mode;
2143 if (errno == ENOSYS)
2144 /* Function not implemented. */
2147 START (cos_tonearest);
2149 save_round_mode = fegetround ();
2151 if (!fesetround (FE_TONEAREST))
2153 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2154 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2155 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2156 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2157 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2158 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2159 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2160 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2161 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2162 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2165 fesetround (save_round_mode);
2167 END (cos_tonearest);
2172 cos_test_towardzero (void)
2174 int save_round_mode;
2177 if (errno == ENOSYS)
2178 /* Function not implemented. */
2181 START (cos_towardzero);
2183 save_round_mode = fegetround ();
2185 if (!fesetround (FE_TOWARDZERO))
2187 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2188 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2189 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2190 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2191 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2192 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2193 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2194 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2195 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2196 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2199 fesetround (save_round_mode);
2201 END (cos_towardzero);
2206 cos_test_downward (void)
2208 int save_round_mode;
2211 if (errno == ENOSYS)
2212 /* Function not implemented. */
2215 START (cos_downward);
2217 save_round_mode = fegetround ();
2219 if (!fesetround (FE_DOWNWARD))
2221 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2222 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2223 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2224 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2225 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2226 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2227 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2228 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2229 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2230 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2233 fesetround (save_round_mode);
2240 cos_test_upward (void)
2242 int save_round_mode;
2245 if (errno == ENOSYS)
2246 /* Function not implemented. */
2251 save_round_mode = fegetround ();
2253 if (!fesetround (FE_UPWARD))
2255 TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
2256 TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
2257 TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
2258 TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
2259 TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
2260 TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
2261 TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
2262 TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
2263 TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
2264 TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
2267 fesetround (save_round_mode);
2278 if (errno == ENOSYS)
2279 /* Function not implemented. */
2283 TEST_f_f (cosh, 0, 1);
2284 TEST_f_f (cosh, minus_zero, 1);
2287 TEST_f_f (cosh, plus_infty, plus_infty);
2288 TEST_f_f (cosh, minus_infty, plus_infty);
2290 TEST_f_f (cosh, nan_value, nan_value);
2292 TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
2299 cosh_test_tonearest (void)
2301 int save_round_mode;
2304 if (errno == ENOSYS)
2305 /* Function not implemented. */
2308 START (cosh_tonearest);
2310 save_round_mode = fegetround ();
2312 if (!fesetround (FE_TONEAREST))
2314 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2315 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2316 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2319 fesetround (save_round_mode);
2321 END (cosh_tonearest);
2326 cosh_test_towardzero (void)
2328 int save_round_mode;
2331 if (errno == ENOSYS)
2332 /* Function not implemented. */
2335 START (cosh_towardzero);
2337 save_round_mode = fegetround ();
2339 if (!fesetround (FE_TOWARDZERO))
2341 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2342 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2343 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2346 fesetround (save_round_mode);
2348 END (cosh_towardzero);
2353 cosh_test_downward (void)
2355 int save_round_mode;
2358 if (errno == ENOSYS)
2359 /* Function not implemented. */
2362 START (cosh_downward);
2364 save_round_mode = fegetround ();
2366 if (!fesetround (FE_DOWNWARD))
2368 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2369 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2370 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2373 fesetround (save_round_mode);
2375 END (cosh_downward);
2380 cosh_test_upward (void)
2382 int save_round_mode;
2385 if (errno == ENOSYS)
2386 /* Function not implemented. */
2389 START (cosh_upward);
2391 save_round_mode = fegetround ();
2393 if (!fesetround (FE_UPWARD))
2395 TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
2396 TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
2397 TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
2400 fesetround (save_round_mode);
2410 FUNC(cpow) (BUILD_COMPLEX (1, 0), BUILD_COMPLEX (0, 0));
2411 if (errno == ENOSYS)
2412 /* Function not implemented. */
2417 TEST_cc_c (cpow, 1, 0, 0, 0, 1.0, 0.0);
2418 TEST_cc_c (cpow, 2, 0, 10, 0, 1024.0, 0.0);
2420 TEST_cc_c (cpow, M_El, 0, 0, 2 * M_PIl, 1.0, 0.0);
2421 TEST_cc_c (cpow, 2, 3, 4, 0, -119.0, -120.0);
2423 TEST_cc_c (cpow, nan_value, nan_value, nan_value, nan_value, nan_value, nan_value);
2425 TEST_cc_c (cpow, 0.75L, 1.25L, 0.75L, 1.25L, 0.117506293914473555420279832210420483L, 0.346552747708338676483025352060418001L);
2426 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 1.0L, 0.0846958290317209430433805274189191353L, 0.513285749182902449043287190519090481L);
2427 TEST_cc_c (cpow, 0.75L, 1.25L, 1.0L, 0.0L, 0.75L, 1.25L);
2428 TEST_cc_c (cpow, 0.75L, 1.25L, 0.0L, 1.0L, 0.331825439177608832276067945276730566L, 0.131338600281188544930936345230903032L);
2430 END (cpow, complex);
2438 TEST_c_c (cproj, 0.0, 0.0, 0.0, 0.0);
2439 TEST_c_c (cproj, minus_zero, minus_zero, minus_zero, minus_zero);
2440 TEST_c_c (cproj, 0.0, minus_zero, 0.0, minus_zero);
2441 TEST_c_c (cproj, minus_zero, 0.0, minus_zero, 0.0);
2443 TEST_c_c (cproj, nan_value, nan_value, nan_value, nan_value);
2445 TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0);
2446 TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero);
2447 TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0);
2448 TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero);
2450 TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0);
2451 TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0);
2453 END (cproj, complex);
2461 TEST_c_f (creal, 0.0, 1.0, 0.0);
2462 TEST_c_f (creal, minus_zero, 1.0, minus_zero);
2463 TEST_c_f (creal, nan_value, 1.0, nan_value);
2464 TEST_c_f (creal, nan_value, nan_value, nan_value);
2465 TEST_c_f (creal, plus_infty, 1.0, plus_infty);
2466 TEST_c_f (creal, minus_infty, 1.0, minus_infty);
2467 TEST_c_f (creal, 2.0, 3.0, 2.0);
2476 FUNC(csin) (BUILD_COMPLEX (0.7L, 1.2L));
2477 if (errno == ENOSYS)
2478 /* Function not implemented. */
2483 TEST_c_c (csin, 0.0, 0.0, 0.0, 0.0);
2484 TEST_c_c (csin, minus_zero, 0.0, minus_zero, 0.0);
2485 TEST_c_c (csin, 0.0, minus_zero, 0, minus_zero);
2486 TEST_c_c (csin, minus_zero, minus_zero, minus_zero, minus_zero);
2488 TEST_c_c (csin, 0.0, plus_infty, 0.0, plus_infty);
2489 TEST_c_c (csin, minus_zero, plus_infty, minus_zero, plus_infty);
2490 TEST_c_c (csin, 0.0, minus_infty, 0.0, minus_infty);
2491 TEST_c_c (csin, minus_zero, minus_infty, minus_zero, minus_infty);
2493 TEST_c_c (csin, plus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2494 TEST_c_c (csin, minus_infty, 0.0, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2495 TEST_c_c (csin, plus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2496 TEST_c_c (csin, minus_infty, minus_zero, nan_value, 0.0, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2498 TEST_c_c (csin, plus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2499 TEST_c_c (csin, minus_infty, plus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2500 TEST_c_c (csin, plus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2501 TEST_c_c (csin, minus_infty, minus_infty, nan_value, plus_infty, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2503 TEST_c_c (csin, plus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2504 TEST_c_c (csin, plus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2505 TEST_c_c (csin, minus_infty, 6.75, nan_value, nan_value, INVALID_EXCEPTION);
2506 TEST_c_c (csin, minus_infty, -6.75, nan_value, nan_value, INVALID_EXCEPTION);
2508 TEST_c_c (csin, 4.625, plus_infty, minus_infty, minus_infty);
2509 TEST_c_c (csin, 4.625, minus_infty, minus_infty, plus_infty);
2510 TEST_c_c (csin, -4.625, plus_infty, plus_infty, minus_infty);
2511 TEST_c_c (csin, -4.625, minus_infty, plus_infty, plus_infty);
2513 TEST_c_c (csin, nan_value, 0.0, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2514 TEST_c_c (csin, nan_value, minus_zero, nan_value, 0.0, IGNORE_ZERO_INF_SIGN);
2516 TEST_c_c (csin, nan_value, plus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2517 TEST_c_c (csin, nan_value, minus_infty, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2519 TEST_c_c (csin, nan_value, 9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2520 TEST_c_c (csin, nan_value, -9.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2522 TEST_c_c (csin, 0.0, nan_value, 0.0, nan_value);
2523 TEST_c_c (csin, minus_zero, nan_value, minus_zero, nan_value);
2525 TEST_c_c (csin, 10.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2526 TEST_c_c (csin, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2528 TEST_c_c (csin, plus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2529 TEST_c_c (csin, minus_infty, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2531 TEST_c_c (csin, nan_value, nan_value, nan_value, nan_value);
2533 TEST_c_c (csin, 0.75L, 1.25L, 1.28722291002649188575873510790565441L, 1.17210635989270256101081285116138863L);
2534 TEST_c_c (csin, -2, -3, -9.15449914691142957346729954460983256L, 4.16890695996656435075481305885375484L);
2536 END (csin, complex);
2544 FUNC(csinh) (BUILD_COMPLEX (0.7L, 1.2L));
2545 if (errno == ENOSYS)
2546 /* Function not implemented. */
2551 TEST_c_c (csinh, 0.0, 0.0, 0.0, 0.0);
2552 TEST_c_c (csinh, minus_zero, 0.0, minus_zero, 0.0);
2553 TEST_c_c (csinh, 0.0, minus_zero, 0.0, minus_zero);
2554 TEST_c_c (csinh, minus_zero, minus_zero, minus_zero, minus_zero);
2556 TEST_c_c (csinh, 0.0, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2557 TEST_c_c (csinh, minus_zero, plus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2558 TEST_c_c (csinh, 0.0, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2559 TEST_c_c (csinh, minus_zero, minus_infty, 0.0, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2561 TEST_c_c (csinh, plus_infty, 0.0, plus_infty, 0.0);
2562 TEST_c_c (csinh, minus_infty, 0.0, minus_infty, 0.0);
2563 TEST_c_c (csinh, plus_infty, minus_zero, plus_infty, minus_zero);
2564 TEST_c_c (csinh, minus_infty, minus_zero, minus_infty, minus_zero);
2566 TEST_c_c (csinh, plus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2567 TEST_c_c (csinh, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2568 TEST_c_c (csinh, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2569 TEST_c_c (csinh, minus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION|IGNORE_ZERO_INF_SIGN);
2571 TEST_c_c (csinh, plus_infty, 4.625, minus_infty, minus_infty);
2572 TEST_c_c (csinh, minus_infty, 4.625, plus_infty, minus_infty);
2573 TEST_c_c (csinh, plus_infty, -4.625, minus_infty, plus_infty);
2574 TEST_c_c (csinh, minus_infty, -4.625, plus_infty, plus_infty);
2576 TEST_c_c (csinh, 6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2577 TEST_c_c (csinh, -6.75, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2578 TEST_c_c (csinh, 6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2579 TEST_c_c (csinh, -6.75, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2581 TEST_c_c (csinh, 0.0, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2582 TEST_c_c (csinh, minus_zero, nan_value, 0.0, nan_value, IGNORE_ZERO_INF_SIGN);
2584 TEST_c_c (csinh, plus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2585 TEST_c_c (csinh, minus_infty, nan_value, plus_infty, nan_value, IGNORE_ZERO_INF_SIGN);
2587 TEST_c_c (csinh, 9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2588 TEST_c_c (csinh, -9.0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2590 TEST_c_c (csinh, nan_value, 0.0, nan_value, 0.0);
2591 TEST_c_c (csinh, nan_value, minus_zero, nan_value, minus_zero);
2593 TEST_c_c (csinh, nan_value, 10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2594 TEST_c_c (csinh, nan_value, -10.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2596 TEST_c_c (csinh, nan_value, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2597 TEST_c_c (csinh, nan_value, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
2599 TEST_c_c (csinh, nan_value, nan_value, nan_value, nan_value);
2601 TEST_c_c (csinh, 0.75L, 1.25L, 0.259294854551162779153349830618433028L, 1.22863452409509552219214606515777594L);
2602 TEST_c_c (csinh, -2, -3, 3.59056458998577995201256544779481679L, -0.530921086248519805267040090660676560L);
2604 END (csinh, complex);
2612 FUNC(csqrt) (BUILD_COMPLEX (-1, 0));
2613 if (errno == ENOSYS)
2614 /* Function not implemented. */
2619 TEST_c_c (csqrt, 0, 0, 0.0, 0.0);
2620 TEST_c_c (csqrt, 0, minus_zero, 0, minus_zero);
2621 TEST_c_c (csqrt, minus_zero, 0, 0.0, 0.0);
2622 TEST_c_c (csqrt, minus_zero, minus_zero, 0.0, minus_zero);
2624 TEST_c_c (csqrt, minus_infty, 0, 0.0, plus_infty);
2625 TEST_c_c (csqrt, minus_infty, 6, 0.0, plus_infty);
2626 TEST_c_c (csqrt, minus_infty, minus_zero, 0.0, minus_infty);
2627 TEST_c_c (csqrt, minus_infty, -6, 0.0, minus_infty);
2629 TEST_c_c (csqrt, plus_infty, 0, plus_infty, 0.0);
2630 TEST_c_c (csqrt, plus_infty, 6, plus_infty, 0.0);
2631 TEST_c_c (csqrt, plus_infty, minus_zero, plus_infty, minus_zero);
2632 TEST_c_c (csqrt, plus_infty, -6, plus_infty, minus_zero);
2634 TEST_c_c (csqrt, 0, plus_infty, plus_infty, plus_infty);
2635 TEST_c_c (csqrt, 4, plus_infty, plus_infty, plus_infty);
2636 TEST_c_c (csqrt, plus_infty, plus_infty, plus_infty, plus_infty);
2637 TEST_c_c (csqrt, minus_zero, plus_infty, plus_infty, plus_infty);
2638 TEST_c_c (csqrt, -4, plus_infty, plus_infty, plus_infty);
2639 TEST_c_c (csqrt, minus_infty, plus_infty, plus_infty, plus_infty);
2640 TEST_c_c (csqrt, 0, minus_infty, plus_infty, minus_infty);
2641 TEST_c_c (csqrt, 4, minus_infty, plus_infty, minus_infty);
2642 TEST_c_c (csqrt, plus_infty, minus_infty, plus_infty, minus_infty);
2643 TEST_c_c (csqrt, minus_zero, minus_infty, plus_infty, minus_infty);
2644 TEST_c_c (csqrt, -4, minus_infty, plus_infty, minus_infty);
2645 TEST_c_c (csqrt, minus_infty, minus_infty, plus_infty, minus_infty);
2647 TEST_c_c (csqrt, minus_infty, nan_value, nan_value, plus_infty, IGNORE_ZERO_INF_SIGN);
2649 TEST_c_c (csqrt, plus_infty, nan_value, plus_infty, nan_value);
2651 TEST_c_c (csqrt, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2652 TEST_c_c (csqrt, 1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2653 TEST_c_c (csqrt, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2654 TEST_c_c (csqrt, -1, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2656 TEST_c_c (csqrt, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2657 TEST_c_c (csqrt, nan_value, 8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2658 TEST_c_c (csqrt, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2659 TEST_c_c (csqrt, nan_value, -8, nan_value, nan_value, INVALID_EXCEPTION_OK);
2661 TEST_c_c (csqrt, nan_value, nan_value, nan_value, nan_value);
2663 TEST_c_c (csqrt, 16.0, -30.0, 5.0, -3.0);
2664 TEST_c_c (csqrt, -1, 0, 0.0, 1.0);
2665 TEST_c_c (csqrt, 0, 2, 1.0, 1.0);
2666 TEST_c_c (csqrt, 119, 120, 12.0, 5.0);
2667 TEST_c_c (csqrt, 0.75L, 1.25L, 1.05065169626078392338656675760808326L, 0.594868882070379067881984030639932657L);
2668 TEST_c_c (csqrt, -2, -3, 0.89597747612983812471573375529004348L, -1.6741492280355400404480393008490519L);
2669 TEST_c_c (csqrt, -2, 3, 0.89597747612983812471573375529004348L, 1.6741492280355400404480393008490519L);
2670 /* Principal square root should be returned (i.e., non-negative real
2672 TEST_c_c (csqrt, 0, -1, M_SQRT_2_2, -M_SQRT_2_2);
2674 TEST_c_c (csqrt, 0x1.fffffep+127L, 0x1.fffffep+127L, 2.026714405498316804978751017492482558075e+19L, 8.394925938143272988211878516208015586281e+18L);
2675 TEST_c_c (csqrt, 0x1.fffffep+127L, 1.0L, 1.844674352395372953599975585936590505260e+19L, 2.710505511993121390769065968615872097053e-20L);
2676 TEST_c_c (csqrt, 0x1p-149L, 0x1p-149L, 4.112805464342778798097003462770175200803e-23L, 1.703579802732953750368659735601389709551e-23L);
2677 TEST_c_c (csqrt, 0x1p-147L, 0x1p-147L, 8.225610928685557596194006925540350401606e-23L, 3.407159605465907500737319471202779419102e-23L);
2680 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1.fffffffffffffp+1023L, 1.473094556905565378990473658199034571917e+154L, 6.101757441282702188537080005372547713595e+153L);
2681 TEST_c_c (csqrt, 0x1.fffffffffffffp+1023L, 0x1p+1023L, 1.379778091031440685006200821918878702861e+154L, 3.257214233483129514781233066898042490248e+153L);
2682 TEST_c_c (csqrt, 0x1p-1074L, 0x1p-1074L, 2.442109726130830256743814843868934877597e-162L, 1.011554969366634726113090867589031782487e-162L);
2683 TEST_c_c (csqrt, 0x1p-1073L, 0x1p-1073L, 3.453664695497464982856905711457966660085e-162L, 1.430554756764195530630723976279903095110e-162L);
2686 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
2687 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1.fp+16383L, 1.179514222452201722651836720466795901016e+2466L, 4.885707879516577666702435054303191575148e+2465L);
2688 TEST_c_c (csqrt, 0x1.fp+16383L, 0x1p+16383L, 1.106698967236475180613254276996359485630e+2466L, 2.687568007603946993388538156299100955642e+2465L);
2689 TEST_c_c (csqrt, 0x1p-16440L, 0x1p-16441L, 3.514690655930285351254618340783294558136e-2475L, 8.297059146828716918029689466551384219370e-2476L);
2692 END (csqrt, complex);
2699 FUNC(ctan) (BUILD_COMPLEX (0.7L, 1.2L));
2700 if (errno == ENOSYS)
2701 /* Function not implemented. */
2706 TEST_c_c (ctan, 0, 0, 0.0, 0.0);
2707 TEST_c_c (ctan, 0, minus_zero, 0.0, minus_zero);
2708 TEST_c_c (ctan, minus_zero, 0, minus_zero, 0.0);
2709 TEST_c_c (ctan, minus_zero, minus_zero, minus_zero, minus_zero);
2711 TEST_c_c (ctan, 0, plus_infty, 0.0, 1.0);
2712 TEST_c_c (ctan, 1, plus_infty, 0.0, 1.0);
2713 TEST_c_c (ctan, minus_zero, plus_infty, minus_zero, 1.0);
2714 TEST_c_c (ctan, -1, plus_infty, minus_zero, 1.0);
2716 TEST_c_c (ctan, 0, minus_infty, 0.0, -1.0);
2717 TEST_c_c (ctan, 1, minus_infty, 0.0, -1.0);
2718 TEST_c_c (ctan, minus_zero, minus_infty, minus_zero, -1.0);
2719 TEST_c_c (ctan, -1, minus_infty, minus_zero, -1.0);
2721 TEST_c_c (ctan, plus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2722 TEST_c_c (ctan, plus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2723 TEST_c_c (ctan, minus_infty, 0, nan_value, nan_value, INVALID_EXCEPTION);
2724 TEST_c_c (ctan, minus_infty, 2, nan_value, nan_value, INVALID_EXCEPTION);
2725 TEST_c_c (ctan, plus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2726 TEST_c_c (ctan, plus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2727 TEST_c_c (ctan, minus_infty, minus_zero, nan_value, nan_value, INVALID_EXCEPTION);
2728 TEST_c_c (ctan, minus_infty, -2, nan_value, nan_value, INVALID_EXCEPTION);
2730 TEST_c_c (ctan, nan_value, plus_infty, 0.0, 1.0, IGNORE_ZERO_INF_SIGN);
2731 TEST_c_c (ctan, nan_value, minus_infty, 0.0, -1.0, IGNORE_ZERO_INF_SIGN);
2733 TEST_c_c (ctan, 0, nan_value, 0.0, nan_value);
2734 TEST_c_c (ctan, minus_zero, nan_value, minus_zero, nan_value);
2736 TEST_c_c (ctan, 0.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2737 TEST_c_c (ctan, -4.5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2739 TEST_c_c (ctan, nan_value, 0, nan_value, nan_value, INVALID_EXCEPTION_OK);
2740 TEST_c_c (ctan, nan_value, 5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2741 TEST_c_c (ctan, nan_value, minus_zero, nan_value, nan_value, INVALID_EXCEPTION_OK);
2742 TEST_c_c (ctan, nan_value, -0.25, nan_value, nan_value, INVALID_EXCEPTION_OK);
2744 TEST_c_c (ctan, nan_value, nan_value, nan_value, nan_value);
2746 TEST_c_c (ctan, 0.75L, 1.25L, 0.160807785916206426725166058173438663L, 0.975363285031235646193581759755216379L);
2747 TEST_c_c (ctan, -2, -3, 0.376402564150424829275122113032269084e-2L, -1.00323862735360980144635859782192726L);
2749 END (ctan, complex);
2757 FUNC(ctanh) (BUILD_COMPLEX (0, 0));
2758 if (errno == ENOSYS)
2759 /* Function not implemented. */
2764 TEST_c_c (ctanh, 0, 0, 0.0, 0.0);
2765 TEST_c_c (ctanh, 0, minus_zero, 0.0, minus_zero);
2766 TEST_c_c (ctanh, minus_zero, 0, minus_zero, 0.0);
2767 TEST_c_c (ctanh, minus_zero, minus_zero, minus_zero, minus_zero);
2769 TEST_c_c (ctanh, plus_infty, 0, 1.0, 0.0);
2770 TEST_c_c (ctanh, plus_infty, 1, 1.0, 0.0);
2771 TEST_c_c (ctanh, plus_infty, minus_zero, 1.0, minus_zero);
2772 TEST_c_c (ctanh, plus_infty, -1, 1.0, minus_zero);
2773 TEST_c_c (ctanh, minus_infty, 0, -1.0, 0.0);
2774 TEST_c_c (ctanh, minus_infty, 1, -1.0, 0.0);
2775 TEST_c_c (ctanh, minus_infty, minus_zero, -1.0, minus_zero);
2776 TEST_c_c (ctanh, minus_infty, -1, -1.0, minus_zero);
2778 TEST_c_c (ctanh, 0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2779 TEST_c_c (ctanh, 2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2780 TEST_c_c (ctanh, 0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2781 TEST_c_c (ctanh, 2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2782 TEST_c_c (ctanh, minus_zero, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2783 TEST_c_c (ctanh, -2, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2784 TEST_c_c (ctanh, minus_zero, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2785 TEST_c_c (ctanh, -2, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
2787 TEST_c_c (ctanh, plus_infty, nan_value, 1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2788 TEST_c_c (ctanh, minus_infty, nan_value, -1.0, 0.0, IGNORE_ZERO_INF_SIGN);
2790 TEST_c_c (ctanh, nan_value, 0, nan_value, 0.0);
2791 TEST_c_c (ctanh, nan_value, minus_zero, nan_value, minus_zero);
2793 TEST_c_c (ctanh, nan_value, 0.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2794 TEST_c_c (ctanh, nan_value, -4.5, nan_value, nan_value, INVALID_EXCEPTION_OK);
2796 TEST_c_c (ctanh, 0, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2797 TEST_c_c (ctanh, 5, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2798 TEST_c_c (ctanh, minus_zero, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2799 TEST_c_c (ctanh, -0.25, nan_value, nan_value, nan_value, INVALID_EXCEPTION_OK);
2801 TEST_c_c (ctanh, nan_value, nan_value, nan_value, nan_value);
2803 TEST_c_c (ctanh, 0, M_PI_4l, 0.0, 1.0);
2805 TEST_c_c (ctanh, 0.75L, 1.25L, 1.37260757053378320258048606571226857L, 0.385795952609750664177596760720790220L);
2806 TEST_c_c (ctanh, -2, -3, -0.965385879022133124278480269394560686L, 0.988437503832249372031403430350121098e-2L);
2808 END (ctanh, complex);
2817 if (errno == ENOSYS)
2818 /* Function not implemented. */
2823 TEST_f_f (erf, 0, 0);
2824 TEST_f_f (erf, minus_zero, minus_zero);
2825 TEST_f_f (erf, plus_infty, 1);
2826 TEST_f_f (erf, minus_infty, -1);
2827 TEST_f_f (erf, nan_value, nan_value);
2829 TEST_f_f (erf, 0.125L, 0.140316204801333817393029446521623398L);
2830 TEST_f_f (erf, 0.75L, 0.711155633653515131598937834591410777L);
2831 TEST_f_f (erf, 1.25L, 0.922900128256458230136523481197281140L);
2832 TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
2833 TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
2834 TEST_f_f (erf, 27.0L, 1.0L);
2845 if (errno == ENOSYS)
2846 /* Function not implemented. */
2851 TEST_f_f (erfc, plus_infty, 0.0);
2852 TEST_f_f (erfc, minus_infty, 2.0);
2853 TEST_f_f (erfc, 0.0, 1.0);
2854 TEST_f_f (erfc, minus_zero, 1.0);
2855 TEST_f_f (erfc, nan_value, nan_value);
2857 TEST_f_f (erfc, 0.125L, 0.859683795198666182606970553478376602L);
2858 TEST_f_f (erfc, 0.75L, 0.288844366346484868401062165408589223L);
2859 TEST_f_f (erfc, 1.25L, 0.0770998717435417698634765188027188596L);
2860 TEST_f_f (erfc, 2.0L, 0.00467773498104726583793074363274707139L);
2861 TEST_f_f (erfc, 0x1.f7303cp+1L, 2.705500297238986897105236321218861842255e-8L);
2862 TEST_f_f (erfc, 4.125L, 0.542340079956506600531223408575531062e-8L);
2863 TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
2864 TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
2866 /* The result can only be represented in long double. */
2867 # if LDBL_MIN_10_EXP < -319
2868 TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
2870 # if LDBL_MANT_DIG >= 106
2871 TEST_f_f (erfc, 0x1.ffff56789abcdef0123456789a8p+2L, 1.123161416304655390092138725253789378459e-29L);
2884 if (errno == ENOSYS)
2885 /* Function not implemented. */
2890 TEST_f_f (exp, 0, 1);
2891 TEST_f_f (exp, minus_zero, 1);
2894 TEST_f_f (exp, plus_infty, plus_infty);
2895 TEST_f_f (exp, minus_infty, 0);
2897 TEST_f_f (exp, nan_value, nan_value);
2898 TEST_f_f (exp, 1, M_El);
2900 TEST_f_f (exp, 2, M_E2l);
2901 TEST_f_f (exp, 3, M_E3l);
2902 TEST_f_f (exp, 0.75L, 2.11700001661267466854536981983709561L);
2903 TEST_f_f (exp, 50.0L, 5184705528587072464087.45332293348538L);
2904 TEST_f_f (exp, 88.72269439697265625L, 3.40233126623160774937554134772290447915e38L);
2905 #if defined TEST_LDOUBLE && __LDBL_MAX_EXP__ > 1024
2906 /* The result can only be represented in sane long double. */
2907 TEST_f_f (exp, 1000.0L, 0.197007111401704699388887935224332313e435L);
2915 exp_test_tonearest (void)
2917 int save_round_mode;
2920 if (errno == ENOSYS)
2921 /* Function not implemented. */
2924 START (exp_tonearest);
2926 save_round_mode = fegetround ();
2928 if (!fesetround (FE_TONEAREST))
2930 TEST_f_f (exp, 1, M_El);
2931 TEST_f_f (exp, 2, M_E2l);
2932 TEST_f_f (exp, 3, M_E3l);
2935 fesetround (save_round_mode);
2937 END (exp_tonearest);
2942 exp_test_towardzero (void)
2944 int save_round_mode;
2947 if (errno == ENOSYS)
2948 /* Function not implemented. */
2951 START (exp_towardzero);
2953 save_round_mode = fegetround ();
2955 if (!fesetround (FE_TOWARDZERO))
2957 TEST_f_f (exp, 1, M_El);
2958 TEST_f_f (exp, 2, M_E2l);
2959 TEST_f_f (exp, 3, M_E3l);
2962 fesetround (save_round_mode);
2964 END (exp_towardzero);
2969 exp_test_downward (void)
2971 int save_round_mode;
2974 if (errno == ENOSYS)
2975 /* Function not implemented. */
2978 START (exp_downward);
2980 save_round_mode = fegetround ();
2982 if (!fesetround (FE_DOWNWARD))
2984 TEST_f_f (exp, 1, M_El);
2985 TEST_f_f (exp, 2, M_E2l);
2986 TEST_f_f (exp, 3, M_E3l);
2989 fesetround (save_round_mode);
2996 exp_test_upward (void)
2998 int save_round_mode;
3001 if (errno == ENOSYS)
3002 /* Function not implemented. */
3007 save_round_mode = fegetround ();
3009 if (!fesetround (FE_UPWARD))
3011 TEST_f_f (exp, 1, M_El);
3012 TEST_f_f (exp, 2, M_E2l);
3013 TEST_f_f (exp, 3, M_E3l);
3016 fesetround (save_round_mode);
3027 if (errno == ENOSYS)
3028 /* Function not implemented. */
3033 TEST_f_f (exp10, 0, 1);
3034 TEST_f_f (exp10, minus_zero, 1);
3036 TEST_f_f (exp10, plus_infty, plus_infty);
3037 TEST_f_f (exp10, minus_infty, 0);
3038 TEST_f_f (exp10, nan_value, nan_value);
3039 TEST_f_f (exp10, 3, 1000);
3040 TEST_f_f (exp10, -1, 0.1L);
3041 TEST_f_f (exp10, 1e6, plus_infty);
3042 TEST_f_f (exp10, -1e6, 0);
3043 TEST_f_f (exp10, 0.75L, 5.62341325190349080394951039776481231L);
3054 if (errno == ENOSYS)
3055 /* Function not implemented. */
3060 TEST_f_f (exp2, 0, 1);
3061 TEST_f_f (exp2, minus_zero, 1);
3062 TEST_f_f (exp2, plus_infty, plus_infty);
3063 TEST_f_f (exp2, minus_infty, 0);
3064 TEST_f_f (exp2, nan_value, nan_value);
3066 TEST_f_f (exp2, 10, 1024);
3067 TEST_f_f (exp2, -1, 0.5);
3068 TEST_f_f (exp2, 1e6, plus_infty);
3069 TEST_f_f (exp2, -1e6, 0);
3070 TEST_f_f (exp2, 0.75L, 1.68179283050742908606225095246642979L);
3081 if (errno == ENOSYS)
3082 /* Function not implemented. */
3087 TEST_f_f (expm1, 0, 0);
3088 TEST_f_f (expm1, minus_zero, minus_zero);
3091 TEST_f_f (expm1, plus_infty, plus_infty);
3092 TEST_f_f (expm1, minus_infty, -1);
3094 TEST_f_f (expm1, nan_value, nan_value);
3096 TEST_f_f (expm1, 1, M_El - 1.0);
3097 TEST_f_f (expm1, 0.75L, 1.11700001661267466854536981983709561L);
3099 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
3100 TEST_f_f (expm1, 11356.25L, 9.05128237311923300051376115753226014206e+4931L);
3104 TEST_f_f (expm1, 100000.0, plus_infty);
3105 check_int ("errno for expm1(large) == ERANGE", errno, ERANGE, 0, 0, 0);
3116 TEST_f_f (fabs, 0, 0);
3117 TEST_f_f (fabs, minus_zero, 0);
3119 TEST_f_f (fabs, plus_infty, plus_infty);
3120 TEST_f_f (fabs, minus_infty, plus_infty);
3121 TEST_f_f (fabs, nan_value, nan_value);
3123 TEST_f_f (fabs, 38.0, 38.0);
3124 TEST_f_f (fabs, -M_El, M_El);
3135 TEST_ff_f (fdim, 0, 0, 0);
3136 TEST_ff_f (fdim, 9, 0, 9);
3137 TEST_ff_f (fdim, 0, 9, 0);
3138 TEST_ff_f (fdim, -9, 0, 0);
3139 TEST_ff_f (fdim, 0, -9, 9);
3141 TEST_ff_f (fdim, plus_infty, 9, plus_infty);
3142 TEST_ff_f (fdim, plus_infty, -9, plus_infty);
3143 TEST_ff_f (fdim, minus_infty, 9, 0);
3144 TEST_ff_f (fdim, minus_infty, -9, 0);
3145 TEST_ff_f (fdim, 9, minus_infty, plus_infty);
3146 TEST_ff_f (fdim, -9, minus_infty, plus_infty);
3147 TEST_ff_f (fdim, 9, plus_infty, 0);
3148 TEST_ff_f (fdim, -9, plus_infty, 0);
3150 TEST_ff_f (fdim, 0, nan_value, nan_value);
3151 TEST_ff_f (fdim, 9, nan_value, nan_value);
3152 TEST_ff_f (fdim, -9, nan_value, nan_value);
3153 TEST_ff_f (fdim, nan_value, 9, nan_value);
3154 TEST_ff_f (fdim, nan_value, -9, nan_value);
3155 TEST_ff_f (fdim, plus_infty, nan_value, nan_value);
3156 TEST_ff_f (fdim, minus_infty, nan_value, nan_value);
3157 TEST_ff_f (fdim, nan_value, plus_infty, nan_value);
3158 TEST_ff_f (fdim, nan_value, minus_infty, nan_value);
3159 TEST_ff_f (fdim, nan_value, nan_value, nan_value);
3161 TEST_ff_f (fdim, plus_infty, plus_infty, 0);
3172 TEST_f_f (floor, 0.0, 0.0);
3173 TEST_f_f (floor, minus_zero, minus_zero);
3174 TEST_f_f (floor, plus_infty, plus_infty);
3175 TEST_f_f (floor, minus_infty, minus_infty);
3176 TEST_f_f (floor, nan_value, nan_value);
3178 TEST_f_f (floor, M_PIl, 3.0);
3179 TEST_f_f (floor, -M_PIl, -4.0);
3181 TEST_f_f (floor, 0.1, 0.0);
3182 TEST_f_f (floor, 0.25, 0.0);
3183 TEST_f_f (floor, 0.625, 0.0);
3184 TEST_f_f (floor, -0.1, -1.0);
3185 TEST_f_f (floor, -0.25, -1.0);
3186 TEST_f_f (floor, -0.625, -1.0);
3189 /* The result can only be represented in long double. */
3190 TEST_f_f (floor, 4503599627370495.5L, 4503599627370495.0L);
3191 TEST_f_f (floor, 4503599627370496.25L, 4503599627370496.0L);
3192 TEST_f_f (floor, 4503599627370496.5L, 4503599627370496.0L);
3193 TEST_f_f (floor, 4503599627370496.75L, 4503599627370496.0L);
3194 TEST_f_f (floor, 4503599627370497.5L, 4503599627370497.0L);
3195 # if LDBL_MANT_DIG > 100
3196 TEST_f_f (floor, 4503599627370494.5000000000001L, 4503599627370494.0L);
3197 TEST_f_f (floor, 4503599627370495.5000000000001L, 4503599627370495.0L);
3198 TEST_f_f (floor, 4503599627370496.5000000000001L, 4503599627370496.0L);
3201 TEST_f_f (floor, -4503599627370495.5L, -4503599627370496.0L);
3202 TEST_f_f (floor, -4503599627370496.25L, -4503599627370497.0L);
3203 TEST_f_f (floor, -4503599627370496.5L, -4503599627370497.0L);
3204 TEST_f_f (floor, -4503599627370496.75L, -4503599627370497.0L);
3205 TEST_f_f (floor, -4503599627370497.5L, -4503599627370498.0L);
3206 # if LDBL_MANT_DIG > 100
3207 TEST_f_f (floor, -4503599627370494.5000000000001L, -4503599627370495.0L);
3208 TEST_f_f (floor, -4503599627370495.5000000000001L, -4503599627370496.0L);
3209 TEST_f_f (floor, -4503599627370496.5000000000001L, -4503599627370497.0L);
3212 TEST_f_f (floor, 9007199254740991.5L, 9007199254740991.0L);
3213 TEST_f_f (floor, 9007199254740992.25L, 9007199254740992.0L);
3214 TEST_f_f (floor, 9007199254740992.5L, 9007199254740992.0L);
3215 TEST_f_f (floor, 9007199254740992.75L, 9007199254740992.0L);
3216 TEST_f_f (floor, 9007199254740993.5L, 9007199254740993.0L);
3218 # if LDBL_MANT_DIG > 100
3219 TEST_f_f (floor, 9007199254740991.0000000000001L, 9007199254740991.0L);
3220 TEST_f_f (floor, 9007199254740992.0000000000001L, 9007199254740992.0L);
3221 TEST_f_f (floor, 9007199254740993.0000000000001L, 9007199254740993.0L);
3222 TEST_f_f (floor, 9007199254740991.5000000000001L, 9007199254740991.0L);
3223 TEST_f_f (floor, 9007199254740992.5000000000001L, 9007199254740992.0L);
3224 TEST_f_f (floor, 9007199254740993.5000000000001L, 9007199254740993.0L);
3227 TEST_f_f (floor, -9007199254740991.5L, -9007199254740992.0L);
3228 TEST_f_f (floor, -9007199254740992.25L, -9007199254740993.0L);
3229 TEST_f_f (floor, -9007199254740992.5L, -9007199254740993.0L);
3230 TEST_f_f (floor, -9007199254740992.75L, -9007199254740993.0L);
3231 TEST_f_f (floor, -9007199254740993.5L, -9007199254740994.0L);
3233 # if LDBL_MANT_DIG > 100
3234 TEST_f_f (floor, -9007199254740991.0000000000001L, -9007199254740992.0L);
3235 TEST_f_f (floor, -9007199254740992.0000000000001L, -9007199254740993.0L);
3236 TEST_f_f (floor, -9007199254740993.0000000000001L, -9007199254740994.0L);
3237 TEST_f_f (floor, -9007199254740991.5000000000001L, -9007199254740992.0L);
3238 TEST_f_f (floor, -9007199254740992.5000000000001L, -9007199254740993.0L);
3239 TEST_f_f (floor, -9007199254740993.5000000000001L, -9007199254740994.0L);
3242 TEST_f_f (floor, 72057594037927935.5L, 72057594037927935.0L);
3243 TEST_f_f (floor, 72057594037927936.25L, 72057594037927936.0L);
3244 TEST_f_f (floor, 72057594037927936.5L, 72057594037927936.0L);
3245 TEST_f_f (floor, 72057594037927936.75L, 72057594037927936.0L);
3246 TEST_f_f (floor, 72057594037927937.5L, 72057594037927937.0L);
3248 TEST_f_f (floor, -72057594037927935.5L, -72057594037927936.0L);
3249 TEST_f_f (floor, -72057594037927936.25L, -72057594037927937.0L);
3250 TEST_f_f (floor, -72057594037927936.5L, -72057594037927937.0L);
3251 TEST_f_f (floor, -72057594037927936.75L, -72057594037927937.0L);
3252 TEST_f_f (floor, -72057594037927937.5L, -72057594037927938.0L);
3254 TEST_f_f (floor, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
3255 TEST_f_f (floor, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
3256 TEST_f_f (floor, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
3257 TEST_f_f (floor, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
3258 TEST_f_f (floor, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
3270 TEST_fff_f (fma, 1.0, 2.0, 3.0, 5.0);
3271 TEST_fff_f (fma, nan_value, 2.0, 3.0, nan_value);
3272 TEST_fff_f (fma, 1.0, nan_value, 3.0, nan_value);
3273 TEST_fff_f (fma, 1.0, 2.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3274 TEST_fff_f (fma, plus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3275 TEST_fff_f (fma, minus_infty, 0.0, nan_value, nan_value, INVALID_EXCEPTION_OK);
3276 TEST_fff_f (fma, 0.0, plus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3277 TEST_fff_f (fma, 0.0, minus_infty, nan_value, nan_value, INVALID_EXCEPTION_OK);
3278 TEST_fff_f (fma, plus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3279 TEST_fff_f (fma, minus_infty, 0.0, 1.0, nan_value, INVALID_EXCEPTION);
3280 TEST_fff_f (fma, 0.0, plus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3281 TEST_fff_f (fma, 0.0, minus_infty, 1.0, nan_value, INVALID_EXCEPTION);
3283 TEST_fff_f (fma, plus_infty, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3284 TEST_fff_f (fma, minus_infty, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3285 TEST_fff_f (fma, plus_infty, minus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3286 TEST_fff_f (fma, minus_infty, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
3287 TEST_fff_f (fma, plus_infty, 3.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3288 TEST_fff_f (fma, minus_infty, -7.5L, minus_infty, nan_value, INVALID_EXCEPTION);
3289 TEST_fff_f (fma, -13.5L, plus_infty, plus_infty, nan_value, INVALID_EXCEPTION);
3290 TEST_fff_f (fma, minus_infty, 7.5L, plus_infty, nan_value, INVALID_EXCEPTION);
3292 TEST_fff_f (fma, 1.25L, 0.75L, 0.0625L, 1.0L);
3294 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
3295 LDBL_MAX, DBL_MAX, FLT_MAX);
3296 TEST_fff_f (fma, -fltmax, -fltmax, minus_infty, minus_infty);
3297 TEST_fff_f (fma, fltmax / 2, fltmax / 2, minus_infty, minus_infty);
3298 TEST_fff_f (fma, -fltmax, fltmax, plus_infty, plus_infty);
3299 TEST_fff_f (fma, fltmax / 2, -fltmax / 4, plus_infty, plus_infty);
3300 TEST_fff_f (fma, plus_infty, 4, plus_infty, plus_infty);
3301 TEST_fff_f (fma, 2, minus_infty, minus_infty, minus_infty);
3302 TEST_fff_f (fma, minus_infty, minus_infty, plus_infty, plus_infty);
3303 TEST_fff_f (fma, plus_infty, minus_infty, minus_infty, minus_infty);
3305 #if defined (TEST_FLOAT) && FLT_MANT_DIG == 24
3306 TEST_fff_f (fma, 0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24, 0x1.7ff802p+13);
3307 TEST_fff_f (fma, 0x1.fffp+0, 0x1.00001p+0, -0x1.fffp+0, 0x1.fffp-20);
3308 TEST_fff_f (fma, 0x1.9abcdep+127, 0x0.9abcdep-126, -0x1.f08948p+0, 0x1.bb421p-25);
3309 TEST_fff_f (fma, 0x1.9abcdep+100, 0x0.9abcdep-126, -0x1.f08948p-27, 0x1.bb421p-52);
3310 TEST_fff_f (fma, 0x1.fffffep+127, 0x1.001p+0, -0x1.fffffep+127, 0x1.fffffep+115);
3311 TEST_fff_f (fma, -0x1.fffffep+127, 0x1.fffffep+0, 0x1.fffffep+127, -0x1.fffffap+127);
3312 TEST_fff_f (fma, 0x1.fffffep+127, 2.0, -0x1.fffffep+127, 0x1.fffffep+127);
3314 #if defined (TEST_DOUBLE) && DBL_MANT_DIG == 53
3315 TEST_fff_f (fma, 0x1.7fp+13, 0x1.0000000000001p+0, 0x1.ffep-48, 0x1.7f00000000001p+13);
3316 TEST_fff_f (fma, 0x1.fffp+0, 0x1.0000000000001p+0, -0x1.fffp+0, 0x1.fffp-52);
3317 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, 0x1p-300, 1.0);
3318 TEST_fff_f (fma, 0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300, 0x1.fffffffffffffp-1);
3319 TEST_fff_f (fma, 0x1.deadbeef2feedp+1023, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp+1, 0x1.0989687bc9da4p-53);
3320 TEST_fff_f (fma, 0x1.deadbeef2feedp+900, 0x0.deadbeef2feedp-1022, -0x1.a05f8c01a4bfbp-122, 0x1.0989687bc9da4p-176);
3321 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 0x1.001p+0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1011);
3322 TEST_fff_f (fma, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+0, 0x1.fffffffffffffp+1023, -0x1.ffffffffffffdp+1023);
3323 TEST_fff_f (fma, 0x1.fffffffffffffp+1023, 2.0, -0x1.fffffffffffffp+1023, 0x1.fffffffffffffp+1023);
3324 TEST_fff_f (fma, 0x1.6a09e667f3bccp-538, 0x1.6a09e667f3bccp-538, 0.0, 0.0);
3325 TEST_fff_f (fma, 0x1.deadbeef2feedp-495, 0x1.deadbeef2feedp-495, -0x1.bf86a5786a574p-989, 0x0.0000042625a1fp-1022);
3326 TEST_fff_f (fma, 0x1.deadbeef2feedp-503, 0x1.deadbeef2feedp-503, -0x1.bf86a5786a574p-1005, 0x0.0000000004262p-1022);
3327 TEST_fff_f (fma, 0x1p-537, 0x1p-538, 0x1p-1074, 0x0.0000000000002p-1022);
3328 TEST_fff_f (fma, 0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000001p-1022);
3329 TEST_fff_f (fma, 0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022, 0x0.0000010000003p-1022);
3330 TEST_fff_f (fma, 0x1.4p-967, -0x1p-106, -0x0.000001p-1022, -0x0.0000010000002p-1022);
3331 TEST_fff_f (fma, -0x1.19cab66d73e17p-959, 0x1.c7108a8c5ff51p-107, -0x0.80b0ad65d9b64p-1022, -0x0.80b0ad65d9d59p-1022);
3332 TEST_fff_f (fma, -0x1.d2eaed6e8e9d3p-979, -0x1.4e066c62ac9ddp-63, -0x0.9245e6b003454p-1022, -0x0.9245c09c5fb5dp-1022);
3333 TEST_fff_f (fma, 0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022, -0x0.b22757123bbe9p-1022);
3334 TEST_fff_f (fma, -0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983, 0x1.7ffffe00007ffp-983);
3336 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 64
3337 TEST_fff_f (fma, -0x8.03fcp+3696L, 0xf.fffffffffffffffp-6140L, 0x8.3ffffffffffffffp-2450L, -0x8.01ecp-2440L);
3338 TEST_fff_f (fma, 0x9.fcp+2033L, -0x8.000e1f000ff800fp-3613L, -0xf.fffffffffffc0ffp-1579L, -0xd.fc119fb093ed092p-1577L);
3339 TEST_fff_f (fma, 0xc.7fc000003ffffffp-1194L, 0x8.1e0003fffffffffp+15327L, -0x8.fffep+14072L, 0xc.ae9f164020effffp+14136L);
3340 TEST_fff_f (fma, -0x8.0001fc000000003p+1798L, 0xcp-2230L, 0x8.f7e000000000007p-468L, -0xc.0002f9ffee10404p-429L);
3341 TEST_fff_f (fma, 0xc.0000000000007ffp+10130L, -0x8.000000000000001p+4430L, 0xc.07000000001ffffp+14513L, -0xb.fffffffffffd7e4p+14563L);
3342 TEST_fff_f (fma, 0xb.ffffp-4777L, 0x8.000000fffffffffp-11612L, -0x0.3800fff8p-16385L, 0x5.c7fe80c7ffeffffp-16385L);
3344 #if defined (TEST_LDOUBLE) && LDBL_MANT_DIG == 113
3345 TEST_fff_f (fma, 0x1.bb2de33e02ccbbfa6e245a7c1f71p-2584L, -0x1.6b500daf0580d987f1bc0cadfcddp-13777L, 0x1.613cd91d9fed34b33820e5ab9d8dp-16378L, -0x1.3a79fb50eb9ce887cffa0f09bd9fp-16360L);
3346 TEST_fff_f (fma, -0x1.f949b880cacb0f0c61540105321dp-5954L, -0x1.3876cec84b4140f3bd6198731b7ep-10525L, -0x0.a5dc1c6cfbc498c54fb0b504bf19p-16382L, -0x0.a5dc1c6cfbc498c54fb0b5038abbp-16382L);
3347 TEST_fff_f (fma, -0x1.0000fffffffffp-16221L, 0x1.0000001fffff8007fep-239L, 0x0.ff87ffffffffffffe000003fffffp-16382L, 0x0.ff87ffffffffffffdffc003bff7fp-16382L);
3348 TEST_fff_f (fma, -0x1.ac79c9376ef447f3827c9e9de008p-2228L, -0x1.5ba830022b6139e21fbe7270cad8p-6314L, 0x1.e8282b6a26bb6a9daf5c8e73e9f9p-8616L, 0x1.22f14a0253878a730cd1aee373adp-8541L);
3349 TEST_fff_f (fma, -0x1.c69749ec574caaa2ab8e97ddb9f3p+2652L, 0x1.f34235ff9d095449c29b4831b62dp+3311L, 0x1.fbe4302df23354dbd0c4d3cfe606p+5879L, -0x1.bb473bfdfb7a6e18886ce6e57eafp+5964L);
3350 TEST_fff_f (fma, -0x1.ca8835fc6ecfb5398625fc891be5p-1686L, 0x1.621e1972bbe2180e5be9dd7d8df5p-7671L, -0x1.7d2d21b73b52cf20dec2a83902a4p-9395L, -0x1.3d2322191c9c88bc68a62ab8042cp-9356L);
3351 TEST_fff_f (fma, -0x1.55cff679ec49c2541fab41fc843ep-11819L, 0x1.e60e9f464f9e8df0509647c7c971p+12325L, 0x1.eaa2a7649d765c2f564f7a5beca7p+454L, -0x1.447e29fa7e406a285f4e350fcf86p+507L);
3352 TEST_fff_f (fma, 0x1.f0e7b1454908576f2537d863cf9bp+11432L, 0x1.cdce52f09d4ca76e68706f34b5d5p-1417L, -0x1.2e986187c70f146235ea2066e486p+9979L, 0x1.c030dad3cc5643f3dd0f5619f661p+10016L);
3353 TEST_fff_f (fma, 0x1.f102f7da4a57a3a4aab620e29452p-3098L, -0x1.cc06a4ff40248f9e2dcc4b6afd84p-11727L, 0x1.d512a11126b5ac8ed8973b8580c8p-14849L, -0x1.be8f1cf737ab4d1c31c54f5ec23bp-14824L);
3354 TEST_fff_f (fma, -0x1.fc47ac7434b993cd8dcb2b431f25p-3816L, 0x1.fbc9750da8468852d84558e1db6dp-5773L, -0x1.00a98abf783f75c40fe5b7a37d86p-9607L, -0x1.f81917b166f45e763cfcc057e2adp-9588L);
3355 TEST_fff_f (fma, 0x1.00000000000007ffffffffffffffp-9045L, -0x1.ffffffffffff80000001ffffffffp+4773L, -0x1.f8p-4316L, -0x1.00000000000f88000000fffffdffp-4271L);
3356 TEST_fff_f (fma, 0x1.4e922764c90701d4a2f21d01893dp-8683L, -0x1.955a12e2d7c9447c27fa022fc865p+212L, -0x1.e9634462eaef96528b90b6944578p-8521L, -0x1.08e1783184a371943d3598e10865p-8470L);
3357 TEST_fff_f (fma, 0x1.801181509c03bdbef10d6165588cp-15131L, 0x1.ad86f8e57d3d40bfa8007780af63p-368L, -0x1.6e9df0dab1c9f1d7a6043c390741p-15507L, 0x1.417c9b2b15e2ad57dc9e0e920844p-15498L);
3369 TEST_ff_f (fmax, 0, 0, 0);
3370 TEST_ff_f (fmax, minus_zero, minus_zero, minus_zero);
3371 TEST_ff_f (fmax, 9, 0, 9);
3372 TEST_ff_f (fmax, 0, 9, 9);
3373 TEST_ff_f (fmax, -9, 0, 0);
3374 TEST_ff_f (fmax, 0, -9, 0);
3376 TEST_ff_f (fmax, plus_infty, 9, plus_infty);
3377 TEST_ff_f (fmax, 0, plus_infty, plus_infty);
3378 TEST_ff_f (fmax, -9, plus_infty, plus_infty);
3379 TEST_ff_f (fmax, plus_infty, -9, plus_infty);
3381 TEST_ff_f (fmax, minus_infty, 9, 9);
3382 TEST_ff_f (fmax, minus_infty, -9, -9);
3383 TEST_ff_f (fmax, 9, minus_infty, 9);
3384 TEST_ff_f (fmax, -9, minus_infty, -9);
3386 TEST_ff_f (fmax, 0, nan_value, 0);
3387 TEST_ff_f (fmax, 9, nan_value, 9);
3388 TEST_ff_f (fmax, -9, nan_value, -9);
3389 TEST_ff_f (fmax, nan_value, 0, 0);
3390 TEST_ff_f (fmax, nan_value, 9, 9);
3391 TEST_ff_f (fmax, nan_value, -9, -9);
3392 TEST_ff_f (fmax, plus_infty, nan_value, plus_infty);
3393 TEST_ff_f (fmax, minus_infty, nan_value, minus_infty);
3394 TEST_ff_f (fmax, nan_value, plus_infty, plus_infty);
3395 TEST_ff_f (fmax, nan_value, minus_infty, minus_infty);
3396 TEST_ff_f (fmax, nan_value, nan_value, nan_value);
3407 TEST_ff_f (fmin, 0, 0, 0);
3408 TEST_ff_f (fmin, minus_zero, minus_zero, minus_zero);
3409 TEST_ff_f (fmin, 9, 0, 0);
3410 TEST_ff_f (fmin, 0, 9, 0);
3411 TEST_ff_f (fmin, -9, 0, -9);
3412 TEST_ff_f (fmin, 0, -9, -9);
3414 TEST_ff_f (fmin, plus_infty, 9, 9);
3415 TEST_ff_f (fmin, 9, plus_infty, 9);
3416 TEST_ff_f (fmin, plus_infty, -9, -9);
3417 TEST_ff_f (fmin, -9, plus_infty, -9);
3418 TEST_ff_f (fmin, minus_infty, 9, minus_infty);
3419 TEST_ff_f (fmin, minus_infty, -9, minus_infty);
3420 TEST_ff_f (fmin, 9, minus_infty, minus_infty);
3421 TEST_ff_f (fmin, -9, minus_infty, minus_infty);
3423 TEST_ff_f (fmin, 0, nan_value, 0);
3424 TEST_ff_f (fmin, 9, nan_value, 9);
3425 TEST_ff_f (fmin, -9, nan_value, -9);
3426 TEST_ff_f (fmin, nan_value, 0, 0);
3427 TEST_ff_f (fmin, nan_value, 9, 9);
3428 TEST_ff_f (fmin, nan_value, -9, -9);
3429 TEST_ff_f (fmin, plus_infty, nan_value, plus_infty);
3430 TEST_ff_f (fmin, minus_infty, nan_value, minus_infty);
3431 TEST_ff_f (fmin, nan_value, plus_infty, plus_infty);
3432 TEST_ff_f (fmin, nan_value, minus_infty, minus_infty);
3433 TEST_ff_f (fmin, nan_value, nan_value, nan_value);
3443 FUNC(fmod) (6.5, 2.3L);
3444 if (errno == ENOSYS)
3445 /* Function not implemented. */
3450 /* fmod (+0, y) == +0 for y != 0. */
3451 TEST_ff_f (fmod, 0, 3, 0);
3453 /* fmod (-0, y) == -0 for y != 0. */
3454 TEST_ff_f (fmod, minus_zero, 3, minus_zero);
3456 /* fmod (+inf, y) == NaN plus invalid exception. */
3458 TEST_ff_f (fmod, plus_infty, 3, nan_value, INVALID_EXCEPTION);
3459 check_int ("errno for fmod(Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3460 /* fmod (-inf, y) == NaN plus invalid exception. */
3462 TEST_ff_f (fmod, minus_infty, 3, nan_value, INVALID_EXCEPTION);
3463 check_int ("errno for fmod(-Inf,3) unchanged", errno, EDOM, 0, 0, 0);
3464 /* fmod (x, +0) == NaN plus invalid exception. */
3466 TEST_ff_f (fmod, 3, 0, nan_value, INVALID_EXCEPTION);
3467 check_int ("errno for fmod(3,0) unchanged", errno, EDOM, 0, 0, 0);
3468 /* fmod (x, -0) == NaN plus invalid exception. */
3469 TEST_ff_f (fmod, 3, minus_zero, nan_value, INVALID_EXCEPTION);
3471 /* fmod (x, +inf) == x for x not infinite. */
3472 TEST_ff_f (fmod, 3.0, plus_infty, 3.0);
3473 /* fmod (x, -inf) == x for x not infinite. */
3474 TEST_ff_f (fmod, 3.0, minus_infty, 3.0);
3476 TEST_ff_f (fmod, nan_value, nan_value, nan_value);
3478 TEST_ff_f (fmod, 6.5, 2.25L, 2.0L);
3479 TEST_ff_f (fmod, -6.5, 2.25L, -2.0L);
3480 TEST_ff_f (fmod, 6.5, -2.25L, 2.0L);
3481 TEST_ff_f (fmod, -6.5, -2.25L, -2.0L);
3488 fpclassify_test (void)
3492 TEST_f_i (fpclassify, nan_value, FP_NAN);
3493 TEST_f_i (fpclassify, plus_infty, FP_INFINITE);
3494 TEST_f_i (fpclassify, minus_infty, FP_INFINITE);
3495 TEST_f_i (fpclassify, plus_zero, FP_ZERO);
3496 TEST_f_i (fpclassify, minus_zero, FP_ZERO);
3497 TEST_f_i (fpclassify, 1000, FP_NORMAL);
3510 TEST_fI_f1 (frexp, plus_infty, plus_infty, IGNORE);
3511 TEST_fI_f1 (frexp, minus_infty, minus_infty, IGNORE);
3512 TEST_fI_f1 (frexp, nan_value, nan_value, IGNORE);
3514 TEST_fI_f1 (frexp, 0.0, 0.0, 0.0);
3515 TEST_fI_f1 (frexp, minus_zero, minus_zero, 0.0);
3517 TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
3518 TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
3530 if (errno == ENOSYS)
3531 /* Function not implemented. */
3533 feclearexcept (FE_ALL_EXCEPT);
3537 TEST_f_f (gamma, plus_infty, plus_infty);
3538 TEST_f_f (gamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3539 TEST_f_f (gamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3540 TEST_f_f (gamma, minus_infty, plus_infty);
3541 TEST_f_f (gamma, nan_value, nan_value);
3543 TEST_f_f1 (gamma, 1, 0, 1);
3544 TEST_f_f1 (gamma, 3, M_LN2l, 1);
3546 TEST_f_f1 (gamma, 0.5, M_LOG_SQRT_PIl, 1);
3547 TEST_f_f1 (gamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3556 FUNC(hypot) (0.7L, 12.4L);
3557 if (errno == ENOSYS)
3558 /* Function not implemented. */
3563 TEST_ff_f (hypot, plus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3564 TEST_ff_f (hypot, minus_infty, 1, plus_infty, IGNORE_ZERO_INF_SIGN);
3567 TEST_ff_f (hypot, plus_infty, nan_value, plus_infty);
3568 TEST_ff_f (hypot, minus_infty, nan_value, plus_infty);
3569 TEST_ff_f (hypot, nan_value, plus_infty, plus_infty);
3570 TEST_ff_f (hypot, nan_value, minus_infty, plus_infty);
3573 TEST_ff_f (hypot, nan_value, nan_value, nan_value);
3575 /* hypot (x,y) == hypot (+-x, +-y) */
3576 TEST_ff_f (hypot, 0.7L, 12.4L, 12.419742348374220601176836866763271L);
3577 TEST_ff_f (hypot, -0.7L, 12.4L, 12.419742348374220601176836866763271L);
3578 TEST_ff_f (hypot, 0.7L, -12.4L, 12.419742348374220601176836866763271L);
3579 TEST_ff_f (hypot, -0.7L, -12.4L, 12.419742348374220601176836866763271L);
3580 TEST_ff_f (hypot, 12.4L, 0.7L, 12.419742348374220601176836866763271L);
3581 TEST_ff_f (hypot, -12.4L, 0.7L, 12.419742348374220601176836866763271L);
3582 TEST_ff_f (hypot, 12.4L, -0.7L, 12.419742348374220601176836866763271L);
3583 TEST_ff_f (hypot, -12.4L, -0.7L, 12.419742348374220601176836866763271L);
3585 /* hypot (x,0) == fabs (x) */
3586 TEST_ff_f (hypot, 0.75L, 0, 0.75L);
3587 TEST_ff_f (hypot, -0.75L, 0, 0.75L);
3588 TEST_ff_f (hypot, -5.7e7, 0, 5.7e7L);
3590 TEST_ff_f (hypot, 0.75L, 1.25L, 1.45773797371132511771853821938639577L);
3592 #if !(defined TEST_FLOAT && defined TEST_INLINE)
3593 TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L);
3594 TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L);
3598 TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L);
3601 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
3602 TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L);
3614 TEST_f_i (ilogb, 1, 0);
3615 TEST_f_i (ilogb, M_El, 1);
3616 TEST_f_i (ilogb, 1024, 10);
3617 TEST_f_i (ilogb, -2000, 10);
3619 /* XXX We have a problem here: the standard does not tell us whether
3620 exceptions are allowed/required. ignore them for now. */
3622 TEST_f_i (ilogb, 0.0, FP_ILOGB0, EXCEPTIONS_OK);
3623 TEST_f_i (ilogb, nan_value, FP_ILOGBNAN, EXCEPTIONS_OK);
3624 TEST_f_i (ilogb, plus_infty, INT_MAX, EXCEPTIONS_OK);
3625 TEST_f_i (ilogb, minus_infty, INT_MAX, EXCEPTIONS_OK);
3631 isfinite_test (void)
3635 TEST_f_b (isfinite, 0, 1);
3636 TEST_f_b (isfinite, minus_zero, 1);
3637 TEST_f_b (isfinite, 10, 1);
3638 TEST_f_b (isfinite, plus_infty, 0);
3639 TEST_f_b (isfinite, minus_infty, 0);
3640 TEST_f_b (isfinite, nan_value, 0);
3646 isnormal_test (void)
3650 TEST_f_b (isnormal, 0, 0);
3651 TEST_f_b (isnormal, minus_zero, 0);
3652 TEST_f_b (isnormal, 10, 1);
3653 TEST_f_b (isnormal, plus_infty, 0);
3654 TEST_f_b (isnormal, minus_infty, 0);
3655 TEST_f_b (isnormal, nan_value, 0);
3665 FUNC (sincos) (0, &s, &c);
3666 if (errno == ENOSYS)
3667 /* Required function not implemented. */
3670 if (errno == ENOSYS)
3671 /* Function not implemented. */
3676 /* j0 is the Bessel function of the first kind of order 0 */
3677 TEST_f_f (j0, nan_value, nan_value);
3678 TEST_f_f (j0, plus_infty, 0);
3679 TEST_f_f (j0, -1.0, 0.765197686557966551449717526102663221L);
3680 TEST_f_f (j0, 0.0, 1.0);
3681 TEST_f_f (j0, 0.125L, 0.996097563041985204620768999453174712L);
3682 TEST_f_f (j0, 0.75L, 0.864242275166648623555731103820923211L);
3683 TEST_f_f (j0, 1.0, 0.765197686557966551449717526102663221L);
3684 TEST_f_f (j0, 1.5, 0.511827671735918128749051744283411720L);
3685 TEST_f_f (j0, 2.0, 0.223890779141235668051827454649948626L);
3686 TEST_f_f (j0, 8.0, 0.171650807137553906090869407851972001L);
3687 TEST_f_f (j0, 10.0, -0.245935764451348335197760862485328754L);
3688 TEST_f_f (j0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3689 TEST_f_f (j0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3691 TEST_f_f (j0, 0x1.d7ce3ap+107L, 2.775523647291230802651040996274861694514e-17L);
3694 TEST_f_f (j0, -0x1.001000001p+593L, -3.927269966354206207832593635798954916263e-90L);
3706 FUNC (sincos) (0, &s, &c);
3707 if (errno == ENOSYS)
3708 /* Required function not implemented. */
3711 if (errno == ENOSYS)
3712 /* Function not implemented. */
3715 /* j1 is the Bessel function of the first kind of order 1 */
3719 TEST_f_f (j1, nan_value, nan_value);
3720 TEST_f_f (j1, plus_infty, 0);
3722 TEST_f_f (j1, -1.0, -0.440050585744933515959682203718914913L);
3723 TEST_f_f (j1, 0.0, 0.0);
3724 TEST_f_f (j1, 0.125L, 0.0623780091344946810942311355879361177L);
3725 TEST_f_f (j1, 0.75L, 0.349243602174862192523281016426251335L);
3726 TEST_f_f (j1, 1.0, 0.440050585744933515959682203718914913L);
3727 TEST_f_f (j1, 1.5, 0.557936507910099641990121213156089400L);
3728 TEST_f_f (j1, 2.0, 0.576724807756873387202448242269137087L);
3729 TEST_f_f (j1, 8.0, 0.234636346853914624381276651590454612L);
3730 TEST_f_f (j1, 10.0, 0.0434727461688614366697487680258592883L);
3732 TEST_f_f (j1, 0x1.3ffp+74L, 1.818984347516051243459364437186082741567e-12L);
3735 TEST_f_f (j1, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
3746 FUNC (sincos) (0, &s, &c);
3747 if (errno == ENOSYS)
3748 /* Required function not implemented. */
3751 if (errno == ENOSYS)
3752 /* Function not implemented. */
3755 /* jn is the Bessel function of the first kind of order n. */
3758 /* jn (0, x) == j0 (x) */
3759 TEST_ff_f (jn, 0, nan_value, nan_value);
3760 TEST_ff_f (jn, 0, plus_infty, 0);
3761 TEST_ff_f (jn, 0, -1.0, 0.765197686557966551449717526102663221L);
3762 TEST_ff_f (jn, 0, 0.0, 1.0);
3763 TEST_ff_f (jn, 0, 0.125L, 0.996097563041985204620768999453174712L);
3764 TEST_ff_f (jn, 0, 0.75L, 0.864242275166648623555731103820923211L);
3765 TEST_ff_f (jn, 0, 1.0, 0.765197686557966551449717526102663221L);
3766 TEST_ff_f (jn, 0, 1.5, 0.511827671735918128749051744283411720L);
3767 TEST_ff_f (jn, 0, 2.0, 0.223890779141235668051827454649948626L);
3768 TEST_ff_f (jn, 0, 8.0, 0.171650807137553906090869407851972001L);
3769 TEST_ff_f (jn, 0, 10.0, -0.245935764451348335197760862485328754L);
3770 TEST_ff_f (jn, 0, 4.0, -3.9714980986384737228659076845169804197562E-1L);
3771 TEST_ff_f (jn, 0, -4.0, -3.9714980986384737228659076845169804197562E-1L);
3773 /* jn (1, x) == j1 (x) */
3774 TEST_ff_f (jn, 1, nan_value, nan_value);
3775 TEST_ff_f (jn, 1, plus_infty, 0);
3776 TEST_ff_f (jn, 1, -1.0, -0.440050585744933515959682203718914913L);
3777 TEST_ff_f (jn, 1, 0.0, 0.0);
3778 TEST_ff_f (jn, 1, 0.125L, 0.0623780091344946810942311355879361177L);
3779 TEST_ff_f (jn, 1, 0.75L, 0.349243602174862192523281016426251335L);
3780 TEST_ff_f (jn, 1, 1.0, 0.440050585744933515959682203718914913L);
3781 TEST_ff_f (jn, 1, 1.5, 0.557936507910099641990121213156089400L);
3782 TEST_ff_f (jn, 1, 2.0, 0.576724807756873387202448242269137087L);
3783 TEST_ff_f (jn, 1, 8.0, 0.234636346853914624381276651590454612L);
3784 TEST_ff_f (jn, 1, 10.0, 0.0434727461688614366697487680258592883L);
3787 TEST_ff_f (jn, 3, nan_value, nan_value);
3788 TEST_ff_f (jn, 3, plus_infty, 0);
3790 TEST_ff_f (jn, 3, -1.0, -0.0195633539826684059189053216217515083L);
3791 TEST_ff_f (jn, 3, 0.0, 0.0);
3792 TEST_ff_f (jn, 3, 0.125L, 0.406503832554912875023029337653442868e-4L);
3793 TEST_ff_f (jn, 3, 0.75L, 0.848438342327410884392755236884386804e-2L);
3794 TEST_ff_f (jn, 3, 1.0, 0.0195633539826684059189053216217515083L);
3795 TEST_ff_f (jn, 3, 2.0, 0.128943249474402051098793332969239835L);
3796 TEST_ff_f (jn, 3, 10.0, 0.0583793793051868123429354784103409563L);
3799 TEST_ff_f (jn, 10, nan_value, nan_value);
3800 TEST_ff_f (jn, 10, plus_infty, 0);
3802 TEST_ff_f (jn, 10, -1.0, 0.263061512368745320699785368779050294e-9L);
3803 TEST_ff_f (jn, 10, 0.0, 0.0);
3804 TEST_ff_f (jn, 10, 0.125L, 0.250543369809369890173993791865771547e-18L);
3805 TEST_ff_f (jn, 10, 0.75L, 0.149621713117596814698712483621682835e-10L);
3806 TEST_ff_f (jn, 10, 1.0, 0.263061512368745320699785368779050294e-9L);
3807 TEST_ff_f (jn, 10, 2.0, 0.251538628271673670963516093751820639e-6L);
3808 TEST_ff_f (jn, 10, 10.0, 0.207486106633358857697278723518753428L);
3811 TEST_ff_f (jn, 2, 2.4048255576957729L, 0.43175480701968038399746111312430703L);
3812 TEST_ff_f (jn, 3, 2.4048255576957729L, 0.19899990535769083404042146764530813L);
3813 TEST_ff_f (jn, 4, 2.4048255576957729L, 0.647466661641779720084932282551219891E-1L);
3814 TEST_ff_f (jn, 5, 2.4048255576957729L, 0.163892432048058525099230549946147698E-1L);
3815 TEST_ff_f (jn, 6, 2.4048255576957729L, 0.34048184720278336646673682895929161E-2L);
3816 TEST_ff_f (jn, 7, 2.4048255576957729L, 0.60068836573295394221291569249883076E-3L);
3817 TEST_ff_f (jn, 8, 2.4048255576957729L, 0.92165786705344923232879022467054148E-4L);
3818 TEST_ff_f (jn, 9, 2.4048255576957729L, 0.12517270977961513005428966643852564E-4L);
3820 TEST_ff_f (jn, 2, 0x1.ffff62p+99L, -4.43860668048170034334926693188979974489e-16L);
3829 TEST_ff_f (ldexp, 0, 0, 0);
3830 TEST_ff_f (ldexp, minus_zero, 0, minus_zero);
3832 TEST_ff_f (ldexp, plus_infty, 1, plus_infty);
3833 TEST_ff_f (ldexp, minus_infty, 1, minus_infty);
3834 TEST_ff_f (ldexp, nan_value, 1, nan_value);
3836 TEST_ff_f (ldexp, 0.8L, 4, 12.8L);
3837 TEST_ff_f (ldexp, -0.854375L, 5, -27.34L);
3839 /* ldexp (x, 0) == x. */
3840 TEST_ff_f (ldexp, 1.0L, 0L, 1.0L);
3849 if (errno == ENOSYS)
3850 /* Function not implemented. */
3852 feclearexcept (FE_ALL_EXCEPT);
3856 TEST_f_f (lgamma, plus_infty, plus_infty);
3857 TEST_f_f (lgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3858 check_int ("signgam for lgamma(0) == 1", signgam, 1, 0, 0, 0);
3859 TEST_f_f (lgamma, minus_zero, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3860 check_int ("signgam for lgamma(-0) == -1", signgam, -1, 0, 0, 0);
3861 TEST_f_f (lgamma, nan_value, nan_value);
3863 /* lgamma (x) == +inf plus divide by zero exception for integer x <= 0. */
3865 TEST_f_f (lgamma, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
3866 check_int ("errno for lgamma(-integer) == ERANGE", errno, ERANGE, 0, 0, 0);
3867 TEST_f_f (lgamma, minus_infty, plus_infty);
3869 TEST_f_f1 (lgamma, 1, 0, 1);
3871 TEST_f_f1 (lgamma, 3, M_LN2l, 1);
3873 TEST_f_f1 (lgamma, 0.5, M_LOG_SQRT_PIl, 1);
3874 TEST_f_f1 (lgamma, -0.5, M_LOG_2_SQRT_PIl, -1);
3875 TEST_f_f1 (lgamma, 0.7L, 0.260867246531666514385732417016759578L, 1);
3876 TEST_f_f1 (lgamma, 1.2L, -0.853740900033158497197028392998854470e-1L, 1);
3885 /* XXX this test is incomplete. We need to have a way to specifiy
3886 the rounding method and test the critical cases. So far, only
3887 unproblematic numbers are tested. */
3891 TEST_f_l (lrint, 0.0, 0);
3892 TEST_f_l (lrint, minus_zero, 0);
3893 TEST_f_l (lrint, 0.2L, 0);
3894 TEST_f_l (lrint, -0.2L, 0);
3896 TEST_f_l (lrint, 1.4L, 1);
3897 TEST_f_l (lrint, -1.4L, -1);
3899 TEST_f_l (lrint, 8388600.3L, 8388600);
3900 TEST_f_l (lrint, -8388600.3L, -8388600);
3902 TEST_f_l (lrint, 1071930.0008, 1071930);
3904 TEST_f_l (lrint, 1073741824.01, 1073741824);
3905 # if LONG_MAX > 281474976710656
3906 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3915 lrint_test_tonearest (void)
3917 int save_round_mode;
3918 START (lrint_tonearest);
3920 save_round_mode = fegetround ();
3922 if (!fesetround (FE_TONEAREST))
3924 TEST_f_l (lrint, 0.0, 0);
3925 TEST_f_l (lrint, minus_zero, 0);
3926 TEST_f_l (lrint, 0.2L, 0);
3927 TEST_f_l (lrint, -0.2L, 0);
3928 TEST_f_l (lrint, 0.5L, 0);
3929 TEST_f_l (lrint, -0.5L, 0);
3930 TEST_f_l (lrint, 0.8L, 1);
3931 TEST_f_l (lrint, -0.8L, -1);
3933 TEST_f_l (lrint, 1.4L, 1);
3934 TEST_f_l (lrint, -1.4L, -1);
3936 TEST_f_l (lrint, 8388600.3L, 8388600);
3937 TEST_f_l (lrint, -8388600.3L, -8388600);
3939 TEST_f_l (lrint, 1071930.0008, 1071930);
3941 TEST_f_l (lrint, 1073741824.01, 1073741824);
3942 # if LONG_MAX > 281474976710656
3943 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3948 fesetround (save_round_mode);
3950 END (lrint_tonearest);
3955 lrint_test_towardzero (void)
3957 int save_round_mode;
3958 START (lrint_towardzero);
3960 save_round_mode = fegetround ();
3962 if (!fesetround (FE_TOWARDZERO))
3964 TEST_f_l (lrint, 0.0, 0);
3965 TEST_f_l (lrint, minus_zero, 0);
3966 TEST_f_l (lrint, 0.2L, 0);
3967 TEST_f_l (lrint, -0.2L, 0);
3968 TEST_f_l (lrint, 0.5L, 0);
3969 TEST_f_l (lrint, -0.5L, 0);
3970 TEST_f_l (lrint, 0.8L, 0);
3971 TEST_f_l (lrint, -0.8L, 0);
3973 TEST_f_l (lrint, 1.4L, 1);
3974 TEST_f_l (lrint, -1.4L, -1);
3976 TEST_f_l (lrint, 8388600.3L, 8388600);
3977 TEST_f_l (lrint, -8388600.3L, -8388600);
3979 TEST_f_l (lrint, 1071930.0008, 1071930);
3981 TEST_f_l (lrint, 1073741824.01, 1073741824);
3982 # if LONG_MAX > 281474976710656
3983 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
3988 fesetround (save_round_mode);
3990 END (lrint_towardzero);
3995 lrint_test_downward (void)
3997 int save_round_mode;
3998 START (lrint_downward);
4000 save_round_mode = fegetround ();
4002 if (!fesetround (FE_DOWNWARD))
4004 TEST_f_l (lrint, 0.0, 0);
4005 TEST_f_l (lrint, minus_zero, 0);
4006 TEST_f_l (lrint, 0.2L, 0);
4007 TEST_f_l (lrint, -0.2L, -1);
4008 TEST_f_l (lrint, 0.5L, 0);
4009 TEST_f_l (lrint, -0.5L, -1);
4010 TEST_f_l (lrint, 0.8L, 0);
4011 TEST_f_l (lrint, -0.8L, -1);
4013 TEST_f_l (lrint, 1.4L, 1);
4014 TEST_f_l (lrint, -1.4L, -2);
4016 TEST_f_l (lrint, 8388600.3L, 8388600);
4017 TEST_f_l (lrint, -8388600.3L, -8388601);
4019 TEST_f_l (lrint, 1071930.0008, 1071930);
4021 TEST_f_l (lrint, 1073741824.01, 1073741824);
4022 # if LONG_MAX > 281474976710656
4023 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4028 fesetround (save_round_mode);
4030 END (lrint_downward);
4035 lrint_test_upward (void)
4037 int save_round_mode;
4038 START (lrint_upward);
4040 save_round_mode = fegetround ();
4042 if (!fesetround (FE_UPWARD))
4044 TEST_f_l (lrint, 0.0, 0);
4045 TEST_f_l (lrint, minus_zero, 0);
4046 TEST_f_l (lrint, 0.2L, 1);
4047 TEST_f_l (lrint, -0.2L, 0);
4048 TEST_f_l (lrint, 0.5L, 1);
4049 TEST_f_l (lrint, -0.5L, 0);
4050 TEST_f_l (lrint, 0.8L, 1);
4051 TEST_f_l (lrint, -0.8L, 0);
4053 TEST_f_l (lrint, 1.4L, 2);
4054 TEST_f_l (lrint, -1.4L, -1);
4056 TEST_f_l (lrint, 8388600.3L, 8388601);
4057 TEST_f_l (lrint, -8388600.3L, -8388600);
4060 TEST_f_l (lrint, 1071930.0008, 1071931);
4061 TEST_f_l (lrint, 1073741824.01, 1073741825);
4062 # if LONG_MAX > 281474976710656 && defined (TEST_LDOUBLE)
4063 TEST_f_l (lrint, 281474976710656.025, 281474976710656);
4068 fesetround (save_round_mode);
4077 /* XXX this test is incomplete. We need to have a way to specifiy
4078 the rounding method and test the critical cases. So far, only
4079 unproblematic numbers are tested. */
4083 TEST_f_L (llrint, 0.0, 0);
4084 TEST_f_L (llrint, minus_zero, 0);
4085 TEST_f_L (llrint, 0.2L, 0);
4086 TEST_f_L (llrint, -0.2L, 0);
4088 TEST_f_L (llrint, 1.4L, 1);
4089 TEST_f_L (llrint, -1.4L, -1);
4091 TEST_f_L (llrint, 8388600.3L, 8388600);
4092 TEST_f_L (llrint, -8388600.3L, -8388600);
4094 TEST_f_l (llrint, 1071930.0008, 1071930);
4096 /* Test boundary conditions. */
4098 TEST_f_L (llrint, 2097151.0,2097151LL);
4100 TEST_f_L (llrint, 8388608.0, 8388608LL);
4102 TEST_f_L (llrint, 16777216.0, 16777216LL);
4104 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4106 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4107 /* 0x1000000000000 */
4108 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4109 /* 0x10000000000000 */
4110 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4111 /* 0x10000080000000 */
4112 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4113 /* 0x20000000000000 */
4114 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4115 /* 0x80000000000000 */
4116 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4117 /* 0x100000000000000 */
4118 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4120 /* The input can only be represented in long double. */
4121 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4122 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4123 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4124 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4125 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4127 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4128 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4129 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4130 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4131 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4133 # if LDBL_MANT_DIG > 100
4134 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4135 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4136 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4137 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4138 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4139 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4141 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4142 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4143 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4144 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4145 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4146 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4149 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4150 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4151 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4152 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4153 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4155 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4156 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4157 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4158 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4159 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4161 # if LDBL_MANT_DIG > 100
4162 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4163 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4164 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4165 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4166 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4167 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4169 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4170 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4171 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4172 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4173 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4174 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4177 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4178 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4179 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4180 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4181 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4183 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4184 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4185 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4186 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4187 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4189 # if LDBL_MANT_DIG > 100
4190 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4191 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4192 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4193 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4194 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4195 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4196 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4197 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4198 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4199 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4200 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4201 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4209 llrint_test_tonearest (void)
4211 int save_round_mode;
4212 START (llrint_tonearest);
4214 save_round_mode = fegetround ();
4216 if (!fesetround (FE_TONEAREST))
4218 TEST_f_L (llrint, 0.0, 0);
4219 TEST_f_L (llrint, minus_zero, 0);
4220 TEST_f_L (llrint, 0.2L, 0);
4221 TEST_f_L (llrint, -0.2L, 0);
4223 TEST_f_L (llrint, 1.4L, 1);
4224 TEST_f_L (llrint, -1.4L, -1);
4226 TEST_f_L (llrint, 8388600.3L, 8388600);
4227 TEST_f_L (llrint, -8388600.3L, -8388600);
4229 TEST_f_l (llrint, 1071930.0008, 1071930);
4231 /* Test boundary conditions. */
4233 TEST_f_L (llrint, 2097151.0,2097151LL);
4235 TEST_f_L (llrint, 8388608.0, 8388608LL);
4237 TEST_f_L (llrint, 16777216.0, 16777216LL);
4239 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4241 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4242 /* 0x1000000000000 */
4243 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4244 /* 0x10000000000000 */
4245 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4246 /* 0x10000080000000 */
4247 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4248 /* 0x20000000000000 */
4249 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4250 /* 0x80000000000000 */
4251 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4252 /* 0x100000000000000 */
4253 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4255 /* The input can only be represented in long double. */
4256 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4257 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4258 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4259 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4260 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4262 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4263 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4264 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4265 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4266 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4268 # if LDBL_MANT_DIG > 100
4269 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4270 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4271 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4272 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4273 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4274 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4276 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4277 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4278 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4279 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4280 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4281 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4284 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4285 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4286 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4287 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4288 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4290 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4291 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4292 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4293 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4294 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4296 # if LDBL_MANT_DIG > 100
4297 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4298 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4299 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4300 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4301 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4302 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4304 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4305 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4306 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4307 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4308 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4309 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4312 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4313 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4314 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4315 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4316 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4318 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4319 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4320 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4321 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4322 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4324 # if LDBL_MANT_DIG > 100
4325 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4326 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4327 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4328 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4329 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4330 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4331 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4332 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4333 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4334 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4335 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4336 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4341 fesetround (save_round_mode);
4343 END (llrint_tonearest);
4347 llrint_test_towardzero (void)
4349 int save_round_mode;
4350 START (llrint_towardzero);
4352 save_round_mode = fegetround ();
4354 if (!fesetround (FE_TOWARDZERO))
4356 TEST_f_L (llrint, 0.0, 0);
4357 TEST_f_L (llrint, minus_zero, 0);
4358 TEST_f_L (llrint, 0.2L, 0);
4359 TEST_f_L (llrint, -0.2L, 0);
4361 TEST_f_L (llrint, 1.4L, 1);
4362 TEST_f_L (llrint, -1.4L, -1);
4364 TEST_f_L (llrint, 8388600.3L, 8388600);
4365 TEST_f_L (llrint, -8388600.3L, -8388600);
4367 TEST_f_l (llrint, 1071930.0008, 1071930);
4369 /* Test boundary conditions. */
4371 TEST_f_L (llrint, 2097151.0,2097151LL);
4373 TEST_f_L (llrint, 8388608.0, 8388608LL);
4375 TEST_f_L (llrint, 16777216.0, 16777216LL);
4377 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4379 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4380 /* 0x1000000000000 */
4381 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4382 /* 0x10000000000000 */
4383 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4384 /* 0x10000080000000 */
4385 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4386 /* 0x20000000000000 */
4387 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4388 /* 0x80000000000000 */
4389 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4390 /* 0x100000000000000 */
4391 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4393 /* The input can only be represented in long double. */
4394 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4395 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4396 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4397 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4398 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4400 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4401 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4402 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4403 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4404 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4406 # if LDBL_MANT_DIG > 100
4407 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4408 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4409 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4410 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4411 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4412 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4414 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4415 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4416 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4417 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4418 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4419 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4422 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4423 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4424 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4425 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4426 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4428 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4429 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4430 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4431 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4432 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4434 # if LDBL_MANT_DIG > 100
4435 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4436 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4437 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4438 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4439 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4440 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4442 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4443 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4444 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4445 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4446 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4447 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4450 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4451 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4452 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4453 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4454 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4456 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4457 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4458 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4459 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4460 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4462 # if LDBL_MANT_DIG > 100
4463 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4464 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4465 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4466 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4467 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4468 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4469 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4470 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4471 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4472 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4473 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4474 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4479 fesetround (save_round_mode);
4481 END (llrint_towardzero);
4485 llrint_test_downward (void)
4487 int save_round_mode;
4488 START (llrint_downward);
4490 save_round_mode = fegetround ();
4492 if (!fesetround (FE_DOWNWARD))
4494 TEST_f_L (llrint, 0.0, 0);
4495 TEST_f_L (llrint, minus_zero, 0);
4496 TEST_f_L (llrint, 0.2L, 0);
4497 TEST_f_L (llrint, -0.2L, -1);
4499 TEST_f_L (llrint, 1.4L, 1);
4500 TEST_f_L (llrint, -1.4L, -2);
4502 TEST_f_L (llrint, 8388600.3L, 8388600);
4503 TEST_f_L (llrint, -8388600.3L, -8388601);
4505 TEST_f_l (llrint, 1071930.0008, 1071930);
4507 /* Test boundary conditions. */
4509 TEST_f_L (llrint, 2097151.0,2097151LL);
4511 TEST_f_L (llrint, 8388608.0, 8388608LL);
4513 TEST_f_L (llrint, 16777216.0, 16777216LL);
4515 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4517 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4518 /* 0x1000000000000 */
4519 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4520 /* 0x10000000000000 */
4521 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4522 /* 0x10000080000000 */
4523 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4524 /* 0x20000000000000 */
4525 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4526 /* 0x80000000000000 */
4527 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4528 /* 0x100000000000000 */
4529 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4531 /* The input can only be represented in long double. */
4532 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370495LL);
4533 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370496LL);
4534 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370496LL);
4535 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370496LL);
4536 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370497LL);
4538 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370495LL);
4539 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370496LL);
4540 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370497LL);
4541 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370494LL);
4542 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370495LL);
4543 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370496LL);
4545 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370496LL);
4546 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370497LL);
4547 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370497LL);
4548 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370497LL);
4549 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370498LL);
4551 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370496LL);
4552 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370497LL);
4553 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370498LL);
4554 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370495LL);
4555 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370496LL);
4556 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370497LL);
4558 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740991LL);
4559 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740992LL);
4560 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740992LL);
4561 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740992LL);
4562 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740993LL);
4564 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740991LL);
4565 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740992LL);
4566 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740993LL);
4567 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740991LL);
4568 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740992LL);
4569 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740993LL);
4571 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740992LL);
4572 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740993LL);
4573 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740993LL);
4574 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740993LL);
4575 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740994LL);
4577 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740992LL);
4578 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740993LL);
4579 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740994LL);
4580 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740992LL);
4581 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740993LL);
4582 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740994LL);
4584 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927935LL);
4585 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927936LL);
4586 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927936LL);
4587 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927936LL);
4588 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927937LL);
4590 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927936LL);
4591 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927937LL);
4592 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927937LL);
4593 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927937LL);
4594 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927938LL);
4596 # if LDBL_MANT_DIG > 100
4597 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775805LL);
4598 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775806LL);
4599 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4600 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4601 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775806LL);
4602 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775807LL);
4603 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775806L);
4604 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775807LL);
4605 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775806LL);
4606 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775807LL);
4607 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4608 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4613 fesetround (save_round_mode);
4615 END (llrint_downward);
4619 llrint_test_upward (void)
4621 int save_round_mode;
4622 START (llrint_upward);
4624 save_round_mode = fegetround ();
4626 if (!fesetround (FE_UPWARD))
4628 TEST_f_L (llrint, 0.0, 0);
4629 TEST_f_L (llrint, minus_zero, 0);
4630 TEST_f_L (llrint, 0.2L, 1);
4631 TEST_f_L (llrint, -0.2L, 0);
4633 TEST_f_L (llrint, 1.4L, 2);
4634 TEST_f_L (llrint, -1.4L, -1);
4636 TEST_f_L (llrint, 8388600.3L, 8388601);
4637 TEST_f_L (llrint, -8388600.3L, -8388600);
4639 TEST_f_l (llrint, 1071930.0008, 1071931);
4641 /* Test boundary conditions. */
4643 TEST_f_L (llrint, 2097151.0,2097151LL);
4645 TEST_f_L (llrint, 8388608.0, 8388608LL);
4647 TEST_f_L (llrint, 16777216.0, 16777216LL);
4649 TEST_f_L (llrint, 2199023255552.0, 2199023255552LL);
4651 TEST_f_L (llrint, 4398046511104.0, 4398046511104LL);
4652 /* 0x1000000000000 */
4653 TEST_f_L (llrint, 281474976710656.0, 281474976710656LL);
4654 /* 0x10000000000000 */
4655 TEST_f_L (llrint, 4503599627370496.0, 4503599627370496LL);
4656 /* 0x10000080000000 */
4657 TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
4658 /* 0x20000000000000 */
4659 TEST_f_L (llrint, 9007199254740992.0, 9007199254740992LL);
4660 /* 0x80000000000000 */
4661 TEST_f_L (llrint, 36028797018963968.0, 36028797018963968LL);
4662 /* 0x100000000000000 */
4663 TEST_f_L (llrint, 72057594037927936.0, 72057594037927936LL);
4665 /* The input can only be represented in long double. */
4666 TEST_f_L (llrint, 4503599627370495.5L, 4503599627370496LL);
4667 TEST_f_L (llrint, 4503599627370496.25L, 4503599627370497LL);
4668 TEST_f_L (llrint, 4503599627370496.5L, 4503599627370497LL);
4669 TEST_f_L (llrint, 4503599627370496.75L, 4503599627370497LL);
4670 TEST_f_L (llrint, 4503599627370497.5L, 4503599627370498LL);
4672 TEST_f_L (llrint, 4503599627370495.4999999999999L, 4503599627370496LL);
4673 TEST_f_L (llrint, 4503599627370496.4999999999999L, 4503599627370497LL);
4674 TEST_f_L (llrint, 4503599627370497.4999999999999L, 4503599627370498LL);
4675 TEST_f_L (llrint, 4503599627370494.5000000000001L, 4503599627370495LL);
4676 TEST_f_L (llrint, 4503599627370495.5000000000001L, 4503599627370496LL);
4677 TEST_f_L (llrint, 4503599627370496.5000000000001L, 4503599627370497LL);
4679 TEST_f_L (llrint, -4503599627370495.5L, -4503599627370495LL);
4680 TEST_f_L (llrint, -4503599627370496.25L, -4503599627370496LL);
4681 TEST_f_L (llrint, -4503599627370496.5L, -4503599627370496LL);
4682 TEST_f_L (llrint, -4503599627370496.75L, -4503599627370496LL);
4683 TEST_f_L (llrint, -4503599627370497.5L, -4503599627370497LL);
4685 TEST_f_L (llrint, -4503599627370495.4999999999999L, -4503599627370495LL);
4686 TEST_f_L (llrint, -4503599627370496.4999999999999L, -4503599627370496LL);
4687 TEST_f_L (llrint, -4503599627370497.4999999999999L, -4503599627370497LL);
4688 TEST_f_L (llrint, -4503599627370494.5000000000001L, -4503599627370494LL);
4689 TEST_f_L (llrint, -4503599627370495.5000000000001L, -4503599627370495LL);
4690 TEST_f_L (llrint, -4503599627370496.5000000000001L, -4503599627370496LL);
4692 TEST_f_L (llrint, 9007199254740991.5L, 9007199254740992LL);
4693 TEST_f_L (llrint, 9007199254740992.25L, 9007199254740993LL);
4694 TEST_f_L (llrint, 9007199254740992.5L, 9007199254740993LL);
4695 TEST_f_L (llrint, 9007199254740992.75L, 9007199254740993LL);
4696 TEST_f_L (llrint, 9007199254740993.5L, 9007199254740994LL);
4698 TEST_f_L (llrint, 9007199254740991.4999999999999L, 9007199254740992LL);
4699 TEST_f_L (llrint, 9007199254740992.4999999999999L, 9007199254740993LL);
4700 TEST_f_L (llrint, 9007199254740993.4999999999999L, 9007199254740994LL);
4701 TEST_f_L (llrint, 9007199254740991.5000000000001L, 9007199254740992LL);
4702 TEST_f_L (llrint, 9007199254740992.5000000000001L, 9007199254740993LL);
4703 TEST_f_L (llrint, 9007199254740993.5000000000001L, 9007199254740994LL);
4705 TEST_f_L (llrint, -9007199254740991.5L, -9007199254740991LL);
4706 TEST_f_L (llrint, -9007199254740992.25L, -9007199254740992LL);
4707 TEST_f_L (llrint, -9007199254740992.5L, -9007199254740992LL);
4708 TEST_f_L (llrint, -9007199254740992.75L, -9007199254740992LL);
4709 TEST_f_L (llrint, -9007199254740993.5L, -9007199254740993LL);
4711 TEST_f_L (llrint, -9007199254740991.4999999999999L, -9007199254740991LL);
4712 TEST_f_L (llrint, -9007199254740992.4999999999999L, -9007199254740992LL);
4713 TEST_f_L (llrint, -9007199254740993.4999999999999L, -9007199254740993LL);
4714 TEST_f_L (llrint, -9007199254740991.5000000000001L, -9007199254740991LL);
4715 TEST_f_L (llrint, -9007199254740992.5000000000001L, -9007199254740992LL);
4716 TEST_f_L (llrint, -9007199254740993.5000000000001L, -9007199254740993LL);
4718 TEST_f_L (llrint, 72057594037927935.5L, 72057594037927936LL);
4719 TEST_f_L (llrint, 72057594037927936.25L, 72057594037927937LL);
4720 TEST_f_L (llrint, 72057594037927936.5L, 72057594037927937LL);
4721 TEST_f_L (llrint, 72057594037927936.75L, 72057594037927937LL);
4722 TEST_f_L (llrint, 72057594037927937.5L, 72057594037927938LL);
4724 TEST_f_L (llrint, -72057594037927935.5L, -72057594037927935LL);
4725 TEST_f_L (llrint, -72057594037927936.25L, -72057594037927936LL);
4726 TEST_f_L (llrint, -72057594037927936.5L, -72057594037927936LL);
4727 TEST_f_L (llrint, -72057594037927936.75L, -72057594037927936LL);
4728 TEST_f_L (llrint, -72057594037927937.5L, -72057594037927937LL);
4730 # if LDBL_MANT_DIG > 100
4731 TEST_f_L (llrint, 9223372036854775805.5L, 9223372036854775806LL);
4732 TEST_f_L (llrint, -9223372036854775805.5L, -9223372036854775805LL);
4733 TEST_f_L (llrint, 9223372036854775806.0L, 9223372036854775806LL);
4734 TEST_f_L (llrint, -9223372036854775806.0L, -9223372036854775806LL);
4735 TEST_f_L (llrint, 9223372036854775806.25L, 9223372036854775807LL);
4736 TEST_f_L (llrint, -9223372036854775806.25L, -9223372036854775806LL);
4737 TEST_f_L (llrint, 9223372036854775806.5L, 9223372036854775807L);
4738 TEST_f_L (llrint, -9223372036854775806.5L, -9223372036854775806LL);
4739 TEST_f_L (llrint, 9223372036854775806.75L, 9223372036854775807LL);
4740 TEST_f_L (llrint, -9223372036854775806.75L, -9223372036854775806LL);
4741 TEST_f_L (llrint, 9223372036854775807.0L, 9223372036854775807LL);
4742 TEST_f_L (llrint, -9223372036854775807.0L, -9223372036854775807LL);
4747 fesetround (save_round_mode);
4749 END (llrint_upward);
4758 if (errno == ENOSYS)
4759 /* Function not implemented. */
4763 TEST_f_f (log, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4764 TEST_f_f (log, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4766 TEST_f_f (log, 1, 0);
4768 TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
4769 TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
4770 TEST_f_f (log, plus_infty, plus_infty);
4771 TEST_f_f (log, nan_value, nan_value);
4773 TEST_f_f (log, M_El, 1);
4774 TEST_f_f (log, 1.0 / M_El, -1);
4775 TEST_f_f (log, 2, M_LN2l);
4776 TEST_f_f (log, 10, M_LN10l);
4777 TEST_f_f (log, 0.75L, -0.287682072451780927439219005993827432L);
4788 if (errno == ENOSYS)
4789 /* Function not implemented. */
4794 TEST_f_f (log10, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4795 TEST_f_f (log10, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4797 TEST_f_f (log10, 1, 0);
4799 /* log10 (x) == NaN plus invalid exception if x < 0. */
4800 TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
4801 TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
4803 TEST_f_f (log10, plus_infty, plus_infty);
4804 TEST_f_f (log10, nan_value, nan_value);
4806 TEST_f_f (log10, 0.1L, -1);
4807 TEST_f_f (log10, 10.0, 1);
4808 TEST_f_f (log10, 100.0, 2);
4809 TEST_f_f (log10, 10000.0, 4);
4810 TEST_f_f (log10, M_El, M_LOG10El);
4811 TEST_f_f (log10, 0.75L, -0.124938736608299953132449886193870744L);
4822 if (errno == ENOSYS)
4823 /* Function not implemented. */
4828 TEST_f_f (log1p, 0, 0);
4829 TEST_f_f (log1p, minus_zero, minus_zero);
4831 TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4832 TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
4833 TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
4835 TEST_f_f (log1p, plus_infty, plus_infty);
4836 TEST_f_f (log1p, nan_value, nan_value);
4838 TEST_f_f (log1p, M_El - 1.0, 1);
4840 TEST_f_f (log1p, -0.25L, -0.287682072451780927439219005993827432L);
4841 TEST_f_f (log1p, -0.875, -2.07944154167983592825169636437452970L);
4852 if (errno == ENOSYS)
4853 /* Function not implemented. */
4858 TEST_f_f (log2, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4859 TEST_f_f (log2, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4861 TEST_f_f (log2, 1, 0);
4863 TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
4864 TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
4866 TEST_f_f (log2, plus_infty, plus_infty);
4867 TEST_f_f (log2, nan_value, nan_value);
4869 TEST_f_f (log2, M_El, M_LOG2El);
4870 TEST_f_f (log2, 2.0, 1);
4871 TEST_f_f (log2, 16.0, 4);
4872 TEST_f_f (log2, 256.0, 8);
4873 TEST_f_f (log2, 0.75L, -.415037499278843818546261056052183492L);
4884 TEST_f_f (logb, plus_infty, plus_infty);
4885 TEST_f_f (logb, minus_infty, plus_infty);
4887 TEST_f_f (logb, 0, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4889 TEST_f_f (logb, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
4890 TEST_f_f (logb, nan_value, nan_value);
4892 TEST_f_f (logb, 1, 0);
4893 TEST_f_f (logb, M_El, 1);
4894 TEST_f_f (logb, 1024, 10);
4895 TEST_f_f (logb, -2000, 10);
4906 TEST_f_l (lround, 0, 0);
4907 TEST_f_l (lround, minus_zero, 0);
4908 TEST_f_l (lround, 0.2L, 0.0);
4909 TEST_f_l (lround, -0.2L, 0);
4910 TEST_f_l (lround, 0.5, 1);
4911 TEST_f_l (lround, -0.5, -1);
4912 TEST_f_l (lround, 0.8L, 1);
4913 TEST_f_l (lround, -0.8L, -1);
4914 TEST_f_l (lround, 1.5, 2);
4915 TEST_f_l (lround, -1.5, -2);
4916 TEST_f_l (lround, 22514.5, 22515);
4917 TEST_f_l (lround, -22514.5, -22515);
4918 TEST_f_l (lround, 1071930.0008, 1071930);
4920 TEST_f_l (lround, 1073741824.01, 1073741824);
4921 # if LONG_MAX > 281474976710656
4922 TEST_f_l (lround, 281474976710656.025, 281474976710656);
4923 TEST_f_l (lround, 18014398509481974, 18014398509481974);
4925 TEST_f_l (lround, 2097152.5, 2097153);
4926 TEST_f_l (lround, -2097152.5, -2097153);
4927 /* nextafter(0.5,-1) */
4928 TEST_f_l (lround, 0x1.fffffffffffffp-2, 0);
4929 /* nextafter(-0.5,1) */
4930 TEST_f_l (lround, -0x1.fffffffffffffp-2, 0);
4932 /* nextafter(0.5,-1) */
4933 TEST_f_l (lround, 0x1.fffffp-2, 0);
4934 /* nextafter(-0.5,1) */
4935 TEST_f_l (lround, -0x1.fffffp-2, 0);
4936 TEST_f_l (lround, 0x1.fffffep+23, 16777215);
4937 TEST_f_l (lround, -0x1.fffffep+23, -16777215);
4948 TEST_f_L (llround, 0, 0);
4949 TEST_f_L (llround, minus_zero, 0);
4950 TEST_f_L (llround, 0.2L, 0.0);
4951 TEST_f_L (llround, -0.2L, 0);
4952 TEST_f_L (llround, 0.5, 1);
4953 TEST_f_L (llround, -0.5, -1);
4954 TEST_f_L (llround, 0.8L, 1);
4955 TEST_f_L (llround, -0.8L, -1);
4956 TEST_f_L (llround, 1.5, 2);
4957 TEST_f_L (llround, -1.5, -2);
4958 TEST_f_L (llround, 22514.5, 22515);
4959 TEST_f_L (llround, -22514.5, -22515);
4960 TEST_f_l (llround, 1071930.0008, 1071930);
4962 TEST_f_L (llround, 2097152.5, 2097153);
4963 TEST_f_L (llround, -2097152.5, -2097153);
4964 TEST_f_L (llround, 34359738368.5, 34359738369ll);
4965 TEST_f_L (llround, -34359738368.5, -34359738369ll);
4966 TEST_f_L (llround, -3.65309740835E17, -365309740835000000LL);
4969 /* Test boundary conditions. */
4971 TEST_f_L (llround, 2097151.0, 2097151LL);
4973 TEST_f_L (llround, 8388608.0, 8388608LL);
4975 TEST_f_L (llround, 16777216.0, 16777216LL);
4977 TEST_f_L (llround, 2199023255552.0, 2199023255552LL);
4979 TEST_f_L (llround, 4398046511104.0, 4398046511104LL);
4980 /* 0x1000000000000 */
4981 TEST_f_L (llround, 281474976710656.0, 281474976710656LL);
4982 /* 0x10000000000000 */
4983 TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
4984 /* 0x10000080000000 */
4985 TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
4986 /* 0x20000000000000 */
4987 TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
4988 /* 0x80000000000000 */
4989 TEST_f_L (llround, 36028797018963968.0, 36028797018963968LL);
4990 /* 0x100000000000000 */
4991 TEST_f_L (llround, 72057594037927936.0, 72057594037927936LL);
4995 TEST_f_L (llround, 4294967295.5, 4294967296LL);
4997 TEST_f_L (llround, 8589934591.5, 8589934592LL);
4999 /* nextafter(0.5,-1) */
5000 TEST_f_L (llround, 0x1.fffffffffffffp-2, 0);
5001 /* nextafter(-0.5,1) */
5002 TEST_f_L (llround, -0x1.fffffffffffffp-2, 0);
5003 /* On PowerPC an exponent of '52' is the largest incrementally
5004 * representable sequence of whole-numbers in the 'double' range. We test
5005 * lround to make sure that a guard bit set during the lround operation
5006 * hasn't forced an erroneous shift giving us an incorrect result. The odd
5007 * numbers between +-(2^52+1 and 2^53-1) are affected since they have the
5008 * rightmost bit set. */
5010 TEST_f_L (llround, 0x1.0000000000001p+52,4503599627370497LL);
5011 TEST_f_L (llround, -0x1.0000000000001p+52,-4503599627370497LL);
5012 /* +-(2^53-1): Input is the last (positive and negative) incrementally
5013 * representable whole-number in the 'double' range that might round
5015 TEST_f_L (llround, 0x1.fffffffffffffp+52, 9007199254740991LL);
5016 TEST_f_L (llround, -0x1.fffffffffffffp+52, -9007199254740991LL);
5018 /* nextafter(0.5,-1) */
5019 TEST_f_L (llround, 0x1.fffffep-2, 0);
5020 /* nextafter(-0.5,1) */
5021 TEST_f_L (llround, -0x1.fffffep-2, 0);
5022 /* As above, on PowerPC an exponent of '23' is the largest incrementally
5023 * representable sequence of whole-numbers in the 'float' range.
5024 * Likewise, numbers between +-(2^23+1 and 2^24-1) are affected. */
5025 TEST_f_L (llround, 0x1.000002p+23,8388609);
5026 TEST_f_L (llround, -0x1.000002p+23,-8388609);
5027 TEST_f_L (llround, 0x1.fffffep+23, 16777215);
5028 TEST_f_L (llround, -0x1.fffffep+23, -16777215);
5033 /* The input can only be represented in long double. */
5034 TEST_f_L (llround, 4503599627370495.5L, 4503599627370496LL);
5035 TEST_f_L (llround, 4503599627370496.25L, 4503599627370496LL);
5036 TEST_f_L (llround, 4503599627370496.5L, 4503599627370497LL);
5037 TEST_f_L (llround, 4503599627370496.75L, 4503599627370497LL);
5038 TEST_f_L (llround, 4503599627370497.5L, 4503599627370498LL);
5040 # if LDBL_MANT_DIG > 100
5041 TEST_f_L (llround, 4503599627370495.4999999999999L, 4503599627370495LL);
5042 TEST_f_L (llround, 4503599627370496.4999999999999L, 4503599627370496LL);
5043 TEST_f_L (llround, 4503599627370497.4999999999999L, 4503599627370497LL);
5044 TEST_f_L (llround, 4503599627370494.5000000000001L, 4503599627370495LL);
5045 TEST_f_L (llround, 4503599627370495.5000000000001L, 4503599627370496LL);
5046 TEST_f_L (llround, 4503599627370496.5000000000001L, 4503599627370497LL);
5048 TEST_f_L (llround, -4503599627370495.4999999999999L, -4503599627370495LL);
5049 TEST_f_L (llround, -4503599627370496.4999999999999L, -4503599627370496LL);
5050 TEST_f_L (llround, -4503599627370497.4999999999999L, -4503599627370497LL);
5051 TEST_f_L (llround, -4503599627370494.5000000000001L, -4503599627370495LL);
5052 TEST_f_L (llround, -4503599627370495.5000000000001L, -4503599627370496LL);
5053 TEST_f_L (llround, -4503599627370496.5000000000001L, -4503599627370497LL);
5056 TEST_f_L (llround, -4503599627370495.5L, -4503599627370496LL);
5057 TEST_f_L (llround, -4503599627370496.25L, -4503599627370496LL);
5058 TEST_f_L (llround, -4503599627370496.5L, -4503599627370497LL);
5059 TEST_f_L (llround, -4503599627370496.75L, -4503599627370497LL);
5060 TEST_f_L (llround, -4503599627370497.5L, -4503599627370498LL);
5062 TEST_f_L (llround, 9007199254740991.5L, 9007199254740992LL);
5063 TEST_f_L (llround, 9007199254740992.25L, 9007199254740992LL);
5064 TEST_f_L (llround, 9007199254740992.5L, 9007199254740993LL);
5065 TEST_f_L (llround, 9007199254740992.75L, 9007199254740993LL);
5066 TEST_f_L (llround, 9007199254740993.5L, 9007199254740994LL);
5068 # if LDBL_MANT_DIG > 100
5069 TEST_f_L (llround, 9007199254740991.4999999999999L, 9007199254740991LL);
5070 TEST_f_L (llround, 9007199254740992.4999999999999L, 9007199254740992LL);
5071 TEST_f_L (llround, 9007199254740993.4999999999999L, 9007199254740993LL);
5072 TEST_f_L (llround, 9007199254740991.5000000000001L, 9007199254740992LL);
5073 TEST_f_L (llround, 9007199254740992.5000000000001L, 9007199254740993LL);
5074 TEST_f_L (llround, 9007199254740993.5000000000001L, 9007199254740994LL);
5076 TEST_f_L (llround, -9007199254740991.4999999999999L, -9007199254740991LL);
5077 TEST_f_L (llround, -9007199254740992.4999999999999L, -9007199254740992LL);
5078 TEST_f_L (llround, -9007199254740993.4999999999999L, -9007199254740993LL);
5079 TEST_f_L (llround, -9007199254740991.5000000000001L, -9007199254740992LL);
5080 TEST_f_L (llround, -9007199254740992.5000000000001L, -9007199254740993LL);
5081 TEST_f_L (llround, -9007199254740993.5000000000001L, -9007199254740994LL);
5084 TEST_f_L (llround, -9007199254740991.5L, -9007199254740992LL);
5085 TEST_f_L (llround, -9007199254740992.25L, -9007199254740992LL);
5086 TEST_f_L (llround, -9007199254740992.5L, -9007199254740993LL);
5087 TEST_f_L (llround, -9007199254740992.75L, -9007199254740993LL);
5088 TEST_f_L (llround, -9007199254740993.5L, -9007199254740994LL);
5090 TEST_f_L (llround, 72057594037927935.5L, 72057594037927936LL);
5091 TEST_f_L (llround, 72057594037927936.25L, 72057594037927936LL);
5092 TEST_f_L (llround, 72057594037927936.5L, 72057594037927937LL);
5093 TEST_f_L (llround, 72057594037927936.75L, 72057594037927937LL);
5094 TEST_f_L (llround, 72057594037927937.5L, 72057594037927938LL);
5096 TEST_f_L (llround, -72057594037927935.5L, -72057594037927936LL);
5097 TEST_f_L (llround, -72057594037927936.25L, -72057594037927936LL);
5098 TEST_f_L (llround, -72057594037927936.5L, -72057594037927937LL);
5099 TEST_f_L (llround, -72057594037927936.75L, -72057594037927937LL);
5100 TEST_f_L (llround, -72057594037927937.5L, -72057594037927938LL);
5102 TEST_f_L (llround, 9223372036854775806.25L, 9223372036854775806LL);
5103 TEST_f_L (llround, -9223372036854775806.25L, -9223372036854775806LL);
5104 TEST_f_L (llround, 9223372036854775806.5L, 9223372036854775807LL);
5105 TEST_f_L (llround, -9223372036854775806.5L, -9223372036854775807LL);
5106 TEST_f_L (llround, 9223372036854775807.0L, 9223372036854775807LL);
5107 TEST_f_L (llround, -9223372036854775807.0L, -9223372036854775807LL);
5120 TEST_fF_f1 (modf, plus_infty, 0, plus_infty);
5121 TEST_fF_f1 (modf, minus_infty, minus_zero, minus_infty);
5122 TEST_fF_f1 (modf, nan_value, nan_value, nan_value);
5123 TEST_fF_f1 (modf, 0, 0, 0);
5124 TEST_fF_f1 (modf, 1.5, 0.5, 1);
5125 TEST_fF_f1 (modf, 2.5, 0.5, 2);
5126 TEST_fF_f1 (modf, -2.5, -0.5, -2);
5127 TEST_fF_f1 (modf, 20, 0, 20);
5128 TEST_fF_f1 (modf, 21, 0, 21);
5129 TEST_fF_f1 (modf, 89.5, 0.5, 89);
5136 nearbyint_test (void)
5140 TEST_f_f (nearbyint, 0.0, 0.0);
5141 TEST_f_f (nearbyint, minus_zero, minus_zero);
5142 TEST_f_f (nearbyint, plus_infty, plus_infty);
5143 TEST_f_f (nearbyint, minus_infty, minus_infty);
5144 TEST_f_f (nearbyint, nan_value, nan_value);
5146 /* Subnormal values */
5147 TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
5148 TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
5150 /* Default rounding mode is round to nearest. */
5151 TEST_f_f (nearbyint, 0.5, 0.0);
5152 TEST_f_f (nearbyint, 1.5, 2.0);
5153 TEST_f_f (nearbyint, -0.5, minus_zero);
5154 TEST_f_f (nearbyint, -1.5, -2.0);
5156 TEST_f_f (nearbyint, 262144.75, 262145.0);
5157 TEST_f_f (nearbyint, 262142.75, 262143.0);
5158 TEST_f_f (nearbyint, 524286.75, 524287.0);
5159 TEST_f_f (nearbyint, 524288.75, 524289.0);
5161 TEST_f_f (nearbyint, 1048576.75, 1048577.0);
5162 TEST_f_f (nearbyint, 2097152.75, 2097153.0);
5163 TEST_f_f (nearbyint, 2492472.75, 2492473.0);
5164 TEST_f_f (nearbyint, 2886220.75, 2886221.0);
5165 TEST_f_f (nearbyint, 3058792.75, 3058793.0);
5166 TEST_f_f (nearbyint, -1048576.75, -1048577.0);
5167 TEST_f_f (nearbyint, -2097152.75, -2097153.0);
5168 TEST_f_f (nearbyint, -2492472.75, -2492473.0);
5169 TEST_f_f (nearbyint, -2886220.75, -2886221.0);
5170 TEST_f_f (nearbyint, -3058792.75, -3058793.0);
5172 TEST_f_f (nearbyint, 70368744177664.75, 70368744177665.0);
5173 TEST_f_f (nearbyint, 140737488355328.75, 140737488355329.0);
5174 TEST_f_f (nearbyint, 281474976710656.75, 281474976710657.0);
5175 TEST_f_f (nearbyint, 562949953421312.75, 562949953421313.0);
5176 TEST_f_f (nearbyint, 1125899906842624.75, 1125899906842625.0);
5177 TEST_f_f (nearbyint, -70368744177664.75, -70368744177665.0);
5178 TEST_f_f (nearbyint, -140737488355328.75, -140737488355329.0);
5179 TEST_f_f (nearbyint, -281474976710656.75, -281474976710657.0);
5180 TEST_f_f (nearbyint, -562949953421312.75, -562949953421313.0);
5181 TEST_f_f (nearbyint, -1125899906842624.75, -1125899906842625.0);
5188 nextafter_test (void)
5193 TEST_ff_f (nextafter, 0, 0, 0);
5194 TEST_ff_f (nextafter, minus_zero, 0, 0);
5195 TEST_ff_f (nextafter, 0, minus_zero, minus_zero);
5196 TEST_ff_f (nextafter, minus_zero, minus_zero, minus_zero);
5198 TEST_ff_f (nextafter, 9, 9, 9);
5199 TEST_ff_f (nextafter, -9, -9, -9);
5200 TEST_ff_f (nextafter, plus_infty, plus_infty, plus_infty);
5201 TEST_ff_f (nextafter, minus_infty, minus_infty, minus_infty);
5203 TEST_ff_f (nextafter, nan_value, 1.1L, nan_value);
5204 TEST_ff_f (nextafter, 1.1L, nan_value, nan_value);
5205 TEST_ff_f (nextafter, nan_value, nan_value, nan_value);
5207 FLOAT fltmax = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
5208 LDBL_MAX, DBL_MAX, FLT_MAX);
5209 TEST_ff_f (nextafter, fltmax, plus_infty, plus_infty);
5210 TEST_ff_f (nextafter, -fltmax, minus_infty, minus_infty);
5213 // XXX Enable once gcc is fixed.
5214 //TEST_ff_f (nextafter, 0x0.00000040000000000000p-16385L, -0.1L, 0x0.0000003ffffffff00000p-16385L);
5217 /* XXX We need the hexadecimal FP number representation here for further
5225 nexttoward_test (void)
5228 TEST_ff_f (nexttoward, 0, 0, 0);
5229 TEST_ff_f (nexttoward, minus_zero, 0, 0);
5230 TEST_ff_f (nexttoward, 0, minus_zero, minus_zero);
5231 TEST_ff_f (nexttoward, minus_zero, minus_zero, minus_zero);
5233 TEST_ff_f (nexttoward, 9, 9, 9);
5234 TEST_ff_f (nexttoward, -9, -9, -9);
5235 TEST_ff_f (nexttoward, plus_infty, plus_infty, plus_infty);
5236 TEST_ff_f (nexttoward, minus_infty, minus_infty, minus_infty);
5238 TEST_ff_f (nexttoward, nan_value, 1.1L, nan_value);
5239 TEST_ff_f (nexttoward, 1.1L, nan_value, nan_value);
5240 TEST_ff_f (nexttoward, nan_value, nan_value, nan_value);
5242 /* XXX We need the hexadecimal FP number representation here for further
5255 if (errno == ENOSYS)
5256 /* Function not implemented. */
5261 TEST_ff_f (pow, 0, 0, 1);
5262 TEST_ff_f (pow, 0, minus_zero, 1);
5263 TEST_ff_f (pow, minus_zero, 0, 1);
5264 TEST_ff_f (pow, minus_zero, minus_zero, 1);
5266 TEST_ff_f (pow, 10, 0, 1);
5267 TEST_ff_f (pow, 10, minus_zero, 1);
5268 TEST_ff_f (pow, -10, 0, 1);
5269 TEST_ff_f (pow, -10, minus_zero, 1);
5271 TEST_ff_f (pow, nan_value, 0, 1);
5272 TEST_ff_f (pow, nan_value, minus_zero, 1);
5276 TEST_ff_f (pow, 1.1L, plus_infty, plus_infty);
5277 TEST_ff_f (pow, plus_infty, plus_infty, plus_infty);
5278 TEST_ff_f (pow, -1.1L, plus_infty, plus_infty);
5279 TEST_ff_f (pow, minus_infty, plus_infty, plus_infty);
5281 TEST_ff_f (pow, 0.9L, plus_infty, 0);
5282 TEST_ff_f (pow, 1e-7L, plus_infty, 0);
5283 TEST_ff_f (pow, -0.9L, plus_infty, 0);
5284 TEST_ff_f (pow, -1e-7L, plus_infty, 0);
5286 TEST_ff_f (pow, 1.1L, minus_infty, 0);
5287 TEST_ff_f (pow, plus_infty, minus_infty, 0);
5288 TEST_ff_f (pow, -1.1L, minus_infty, 0);
5289 TEST_ff_f (pow, minus_infty, minus_infty, 0);
5291 TEST_ff_f (pow, 0.9L, minus_infty, plus_infty);
5292 TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty);
5293 TEST_ff_f (pow, -0.9L, minus_infty, plus_infty);
5294 TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty);
5296 TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty);
5297 TEST_ff_f (pow, plus_infty, 1, plus_infty);
5298 TEST_ff_f (pow, plus_infty, 1e7L, plus_infty);
5300 TEST_ff_f (pow, plus_infty, -1e-7L, 0);
5301 TEST_ff_f (pow, plus_infty, -1, 0);
5302 TEST_ff_f (pow, plus_infty, -1e7L, 0);
5304 TEST_ff_f (pow, minus_infty, 1, minus_infty);
5305 TEST_ff_f (pow, minus_infty, 11, minus_infty);
5306 TEST_ff_f (pow, minus_infty, 1001, minus_infty);
5308 TEST_ff_f (pow, minus_infty, 2, plus_infty);
5309 TEST_ff_f (pow, minus_infty, 12, plus_infty);
5310 TEST_ff_f (pow, minus_infty, 1002, plus_infty);
5311 TEST_ff_f (pow, minus_infty, 0.1L, plus_infty);
5312 TEST_ff_f (pow, minus_infty, 1.1L, plus_infty);
5313 TEST_ff_f (pow, minus_infty, 11.1L, plus_infty);
5314 TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty);
5316 TEST_ff_f (pow, minus_infty, -1, minus_zero);
5317 TEST_ff_f (pow, minus_infty, -11, minus_zero);
5318 TEST_ff_f (pow, minus_infty, -1001, minus_zero);
5320 TEST_ff_f (pow, minus_infty, -2, 0);
5321 TEST_ff_f (pow, minus_infty, -12, 0);
5322 TEST_ff_f (pow, minus_infty, -1002, 0);
5323 TEST_ff_f (pow, minus_infty, -0.1L, 0);
5324 TEST_ff_f (pow, minus_infty, -1.1L, 0);
5325 TEST_ff_f (pow, minus_infty, -11.1L, 0);
5326 TEST_ff_f (pow, minus_infty, -1001.1L, 0);
5329 TEST_ff_f (pow, nan_value, nan_value, nan_value);
5330 TEST_ff_f (pow, 0, nan_value, nan_value);
5331 TEST_ff_f (pow, 1, nan_value, 1);
5332 TEST_ff_f (pow, -1, nan_value, nan_value);
5333 TEST_ff_f (pow, nan_value, 1, nan_value);
5334 TEST_ff_f (pow, nan_value, -1, nan_value);
5336 /* pow (x, NaN) == NaN. */
5337 TEST_ff_f (pow, 3.0, nan_value, nan_value);
5338 TEST_ff_f (pow, minus_zero, nan_value, nan_value);
5339 TEST_ff_f (pow, plus_infty, nan_value, nan_value);
5340 TEST_ff_f (pow, -3.0, nan_value, nan_value);
5341 TEST_ff_f (pow, minus_infty, nan_value, nan_value);
5343 TEST_ff_f (pow, nan_value, 3.0, nan_value);
5344 TEST_ff_f (pow, nan_value, -3.0, nan_value);
5345 TEST_ff_f (pow, nan_value, plus_infty, nan_value);
5346 TEST_ff_f (pow, nan_value, minus_infty, nan_value);
5347 TEST_ff_f (pow, nan_value, 2.5, nan_value);
5348 TEST_ff_f (pow, nan_value, -2.5, nan_value);
5350 TEST_ff_f (pow, 1, plus_infty, 1);
5351 TEST_ff_f (pow, -1, plus_infty, 1);
5352 TEST_ff_f (pow, 1, minus_infty, 1);
5353 TEST_ff_f (pow, -1, minus_infty, 1);
5354 TEST_ff_f (pow, 1, 1, 1);
5355 TEST_ff_f (pow, 1, -1, 1);
5356 TEST_ff_f (pow, 1, 1.25, 1);
5357 TEST_ff_f (pow, 1, -1.25, 1);
5358 TEST_ff_f (pow, 1, 0x1p62L, 1);
5359 TEST_ff_f (pow, 1, 0x1p63L, 1);
5360 TEST_ff_f (pow, 1, 0x1p64L, 1);
5361 TEST_ff_f (pow, 1, 0x1p72L, 1);
5363 /* pow (x, +-0) == 1. */
5364 TEST_ff_f (pow, plus_infty, 0, 1);
5365 TEST_ff_f (pow, plus_infty, minus_zero, 1);
5366 TEST_ff_f (pow, minus_infty, 0, 1);
5367 TEST_ff_f (pow, minus_infty, minus_zero, 1);
5368 TEST_ff_f (pow, 32.75L, 0, 1);
5369 TEST_ff_f (pow, 32.75L, minus_zero, 1);
5370 TEST_ff_f (pow, -32.75L, 0, 1);
5371 TEST_ff_f (pow, -32.75L, minus_zero, 1);
5372 TEST_ff_f (pow, 0x1p72L, 0, 1);
5373 TEST_ff_f (pow, 0x1p72L, minus_zero, 1);
5374 TEST_ff_f (pow, 0x1p-72L, 0, 1);
5375 TEST_ff_f (pow, 0x1p-72L, minus_zero, 1);
5377 TEST_ff_f (pow, -0.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5378 TEST_ff_f (pow, -0.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5379 TEST_ff_f (pow, -10.1L, 1.1L, nan_value, INVALID_EXCEPTION);
5380 TEST_ff_f (pow, -10.1L, -1.1L, nan_value, INVALID_EXCEPTION);
5383 TEST_ff_f (pow, 0, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5384 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5386 TEST_ff_f (pow, 0, -11, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5387 check_int ("errno for pow(0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5389 TEST_ff_f (pow, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5390 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5392 TEST_ff_f (pow, minus_zero, -11L, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5393 check_int ("errno for pow(-0,-odd) == ERANGE", errno, ERANGE, 0, 0, 0);
5396 TEST_ff_f (pow, 0, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5397 check_int ("errno for pow(0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5399 TEST_ff_f (pow, 0, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5400 check_int ("errno for pow(0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5402 TEST_ff_f (pow, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5403 check_int ("errno for pow(-0,-even) == ERANGE", errno, ERANGE, 0, 0, 0);
5405 TEST_ff_f (pow, minus_zero, -11.1L, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
5406 check_int ("errno for pow(-0,-num) == ERANGE", errno, ERANGE, 0, 0, 0);
5408 TEST_ff_f (pow, 0x1p72L, 0x1p72L, plus_infty);
5409 TEST_ff_f (pow, 10, -0x1p72L, 0);
5410 TEST_ff_f (pow, max_value, max_value, plus_infty);
5411 TEST_ff_f (pow, 10, -max_value, 0);
5413 TEST_ff_f (pow, 0, 1, 0);
5414 TEST_ff_f (pow, 0, 11, 0);
5416 TEST_ff_f (pow, minus_zero, 1, minus_zero);
5417 TEST_ff_f (pow, minus_zero, 11, minus_zero);
5419 TEST_ff_f (pow, 0, 2, 0);
5420 TEST_ff_f (pow, 0, 11.1L, 0);
5422 TEST_ff_f (pow, minus_zero, 2, 0);
5423 TEST_ff_f (pow, minus_zero, 11.1L, 0);
5424 TEST_ff_f (pow, 0, plus_infty, 0);
5425 TEST_ff_f (pow, minus_zero, plus_infty, 0);
5428 /* pow (x, +inf) == +inf for |x| > 1. */
5429 TEST_ff_f (pow, 1.5, plus_infty, plus_infty);
5431 /* pow (x, +inf) == +0 for |x| < 1. */
5432 TEST_ff_f (pow, 0.5, plus_infty, 0.0);
5434 /* pow (x, -inf) == +0 for |x| > 1. */
5435 TEST_ff_f (pow, 1.5, minus_infty, 0.0);
5437 /* pow (x, -inf) == +inf for |x| < 1. */
5438 TEST_ff_f (pow, 0.5, minus_infty, plus_infty);
5441 /* pow (+inf, y) == +inf for y > 0. */
5442 TEST_ff_f (pow, plus_infty, 2, plus_infty);
5444 /* pow (+inf, y) == +0 for y < 0. */
5445 TEST_ff_f (pow, plus_infty, -1, 0.0);
5447 /* pow (-inf, y) == -inf for y an odd integer > 0. */
5448 TEST_ff_f (pow, minus_infty, 27, minus_infty);
5450 /* pow (-inf, y) == +inf for y > 0 and not an odd integer. */
5451 TEST_ff_f (pow, minus_infty, 28, plus_infty);
5453 /* pow (-inf, y) == -0 for y an odd integer < 0. */
5454 TEST_ff_f (pow, minus_infty, -3, minus_zero);
5455 /* pow (-inf, y) == +0 for y < 0 and not an odd integer. */
5456 TEST_ff_f (pow, minus_infty, -2.0, 0.0);
5458 /* pow (+0, y) == +0 for y an odd integer > 0. */
5459 TEST_ff_f (pow, 0.0, 27, 0.0);
5461 /* pow (-0, y) == -0 for y an odd integer > 0. */
5462 TEST_ff_f (pow, minus_zero, 27, minus_zero);
5464 /* pow (+0, y) == +0 for y > 0 and not an odd integer. */
5465 TEST_ff_f (pow, 0.0, 4, 0.0);
5467 /* pow (-0, y) == +0 for y > 0 and not an odd integer. */
5468 TEST_ff_f (pow, minus_zero, 4, 0.0);
5470 TEST_ff_f (pow, 16, 0.25L, 2);
5471 TEST_ff_f (pow, 0x1p64L, 0.125L, 256);
5472 TEST_ff_f (pow, 2, 4, 16);
5473 TEST_ff_f (pow, 256, 8, 0x1p64L);
5475 TEST_ff_f (pow, 0.75L, 1.25L, 0.697953644326574699205914060237425566L);
5477 #if defined TEST_DOUBLE || defined TEST_LDOUBLE
5478 TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0);
5486 pow_test_tonearest (void)
5488 int save_round_mode;
5491 if (errno == ENOSYS)
5492 /* Function not implemented. */
5495 START (pow_tonearest);
5497 save_round_mode = fegetround ();
5499 if (!fesetround (FE_TONEAREST))
5501 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5502 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5505 fesetround (save_round_mode);
5507 END (pow_tonearest);
5512 pow_test_towardzero (void)
5514 int save_round_mode;
5517 if (errno == ENOSYS)
5518 /* Function not implemented. */
5521 START (pow_towardzero);
5523 save_round_mode = fegetround ();
5525 if (!fesetround (FE_TOWARDZERO))
5527 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5528 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5531 fesetround (save_round_mode);
5533 END (pow_towardzero);
5538 pow_test_downward (void)
5540 int save_round_mode;
5543 if (errno == ENOSYS)
5544 /* Function not implemented. */
5547 START (pow_downward);
5549 save_round_mode = fegetround ();
5551 if (!fesetround (FE_DOWNWARD))
5553 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5554 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5557 fesetround (save_round_mode);
5564 pow_test_upward (void)
5566 int save_round_mode;
5569 if (errno == ENOSYS)
5570 /* Function not implemented. */
5575 save_round_mode = fegetround ();
5577 if (!fesetround (FE_UPWARD))
5579 TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
5580 TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
5583 fesetround (save_round_mode);
5590 remainder_test (void)
5593 FUNC(remainder) (1.625, 1.0);
5594 if (errno == ENOSYS)
5595 /* Function not implemented. */
5601 TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
5602 check_int ("errno for remainder(1, 0) = EDOM ", errno, EDOM, 0, 0, 0);
5604 TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
5605 check_int ("errno for remainder(1, -0) = EDOM ", errno, EDOM, 0, 0, 0);
5607 TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
5608 check_int ("errno for remainder(INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5610 TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
5611 check_int ("errno for remainder(-INF, 1) = EDOM ", errno, EDOM, 0, 0, 0);
5613 TEST_ff_f (remainder, nan_value, nan_value, nan_value);
5614 check_int ("errno for remainder(NAN, NAN) unchanged", errno, 0, 0, 0, 0);
5616 TEST_ff_f (remainder, 0, nan_value, nan_value);
5617 check_int ("errno for remainder(0, NAN) unchanged", errno, 0, 0, 0, 0);
5619 TEST_ff_f (remainder, nan_value, 0, nan_value);
5620 check_int ("errno for remainder(NaN, 0) unchanged", errno, 0, 0, 0, 0);
5622 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
5623 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
5624 TEST_ff_f (remainder, 1.625, -1.0, -0.375);
5625 TEST_ff_f (remainder, -1.625, -1.0, 0.375);
5626 TEST_ff_f (remainder, 5.0, 2.0, 1.0);
5627 TEST_ff_f (remainder, 3.0, 2.0, -1.0);
5639 FUNC(remquo) (1.625, 1.0, &x);
5640 if (errno == ENOSYS)
5641 /* Function not implemented. */
5646 TEST_ffI_f1 (remquo, 1, 0, nan_value, IGNORE, INVALID_EXCEPTION);
5647 TEST_ffI_f1 (remquo, 1, minus_zero, nan_value, IGNORE, INVALID_EXCEPTION);
5648 TEST_ffI_f1 (remquo, plus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5649 TEST_ffI_f1 (remquo, minus_infty, 1, nan_value, IGNORE, INVALID_EXCEPTION);
5650 TEST_ffI_f1 (remquo, nan_value, nan_value, nan_value, IGNORE);
5652 TEST_ffI_f1 (remquo, 1.625, 1.0, -0.375, 2);
5653 TEST_ffI_f1 (remquo, -1.625, 1.0, 0.375, -2);
5654 TEST_ffI_f1 (remquo, 1.625, -1.0, -0.375, -2);
5655 TEST_ffI_f1 (remquo, -1.625, -1.0, 0.375, 2);
5657 TEST_ffI_f1 (remquo, 5, 2, 1, 2);
5658 TEST_ffI_f1 (remquo, 3, 2, -1, 2);
5668 TEST_f_f (rint, 0.0, 0.0);
5669 TEST_f_f (rint, minus_zero, minus_zero);
5670 TEST_f_f (rint, plus_infty, plus_infty);
5671 TEST_f_f (rint, minus_infty, minus_infty);
5673 /* Default rounding mode is round to even. */
5674 TEST_f_f (rint, 0.5, 0.0);
5675 TEST_f_f (rint, 1.5, 2.0);
5676 TEST_f_f (rint, 2.5, 2.0);
5677 TEST_f_f (rint, 3.5, 4.0);
5678 TEST_f_f (rint, 4.5, 4.0);
5679 TEST_f_f (rint, -0.5, -0.0);
5680 TEST_f_f (rint, -1.5, -2.0);
5681 TEST_f_f (rint, -2.5, -2.0);
5682 TEST_f_f (rint, -3.5, -4.0);
5683 TEST_f_f (rint, -4.5, -4.0);
5684 TEST_f_f (rint, 0.1, 0.0);
5685 TEST_f_f (rint, 0.25, 0.0);
5686 TEST_f_f (rint, 0.625, 1.0);
5687 TEST_f_f (rint, -0.1, -0.0);
5688 TEST_f_f (rint, -0.25, -0.0);
5689 TEST_f_f (rint, -0.625, -1.0);
5690 TEST_f_f (rint, 262144.75, 262145.0);
5691 TEST_f_f (rint, 262142.75, 262143.0);
5692 TEST_f_f (rint, 524286.75, 524287.0);
5693 TEST_f_f (rint, 524288.75, 524289.0);
5694 TEST_f_f (rint, 1048576.75, 1048577.0);
5695 TEST_f_f (rint, 2097152.75, 2097153.0);
5696 TEST_f_f (rint, -1048576.75, -1048577.0);
5697 TEST_f_f (rint, -2097152.75, -2097153.0);
5699 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5700 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5701 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5702 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5703 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5704 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5705 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5706 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5707 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5708 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5711 /* The result can only be represented in long double. */
5712 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5713 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5714 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5715 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5716 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5718 # if LDBL_MANT_DIG > 100
5719 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5720 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5721 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5724 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5725 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5726 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5727 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5728 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5730 # if LDBL_MANT_DIG > 100
5731 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5732 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5733 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5735 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5736 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5737 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5738 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5739 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5740 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5742 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5743 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5744 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5745 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5746 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5747 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5750 TEST_f_f (rint, 9007199254740991.5L, 9007199254740992.0L);
5751 TEST_f_f (rint, 9007199254740992.25L, 9007199254740992.0L);
5752 TEST_f_f (rint, 9007199254740992.5L, 9007199254740992.0L);
5753 TEST_f_f (rint, 9007199254740992.75L, 9007199254740993.0L);
5754 TEST_f_f (rint, 9007199254740993.5L, 9007199254740994.0L);
5756 TEST_f_f (rint, -9007199254740991.5L, -9007199254740992.0L);
5757 TEST_f_f (rint, -9007199254740992.25L, -9007199254740992.0L);
5758 TEST_f_f (rint, -9007199254740992.5L, -9007199254740992.0L);
5759 TEST_f_f (rint, -9007199254740992.75L, -9007199254740993.0L);
5760 TEST_f_f (rint, -9007199254740993.5L, -9007199254740994.0L);
5762 TEST_f_f (rint, 72057594037927935.5L, 72057594037927936.0L);
5763 TEST_f_f (rint, 72057594037927936.25L, 72057594037927936.0L);
5764 TEST_f_f (rint, 72057594037927936.5L, 72057594037927936.0L);
5765 TEST_f_f (rint, 72057594037927936.75L, 72057594037927937.0L);
5766 TEST_f_f (rint, 72057594037927937.5L, 72057594037927938.0L);
5768 TEST_f_f (rint, -72057594037927935.5L, -72057594037927936.0L);
5769 TEST_f_f (rint, -72057594037927936.25L, -72057594037927936.0L);
5770 TEST_f_f (rint, -72057594037927936.5L, -72057594037927936.0L);
5771 TEST_f_f (rint, -72057594037927936.75L, -72057594037927937.0L);
5772 TEST_f_f (rint, -72057594037927937.5L, -72057594037927938.0L);
5774 TEST_f_f (rint, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
5775 TEST_f_f (rint, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
5776 TEST_f_f (rint, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
5777 TEST_f_f (rint, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
5778 TEST_f_f (rint, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
5785 rint_test_tonearest (void)
5787 int save_round_mode;
5788 START (rint_tonearest);
5790 save_round_mode = fegetround ();
5792 if (!fesetround (FE_TONEAREST))
5794 TEST_f_f (rint, 2.0, 2.0);
5795 TEST_f_f (rint, 1.5, 2.0);
5796 TEST_f_f (rint, 1.0, 1.0);
5797 TEST_f_f (rint, 0.5, 0.0);
5798 TEST_f_f (rint, 0.0, 0.0);
5799 TEST_f_f (rint, minus_zero, minus_zero);
5800 TEST_f_f (rint, -0.5, -0.0);
5801 TEST_f_f (rint, -1.0, -1.0);
5802 TEST_f_f (rint, -1.5, -2.0);
5803 TEST_f_f (rint, -2.0, -2.0);
5804 TEST_f_f (rint, 0.1, 0.0);
5805 TEST_f_f (rint, 0.25, 0.0);
5806 TEST_f_f (rint, 0.625, 1.0);
5807 TEST_f_f (rint, -0.1, -0.0);
5808 TEST_f_f (rint, -0.25, -0.0);
5809 TEST_f_f (rint, -0.625, -1.0);
5810 TEST_f_f (rint, 1048576.75, 1048577.0);
5811 TEST_f_f (rint, 2097152.75, 2097153.0);
5812 TEST_f_f (rint, -1048576.75, -1048577.0);
5813 TEST_f_f (rint, -2097152.75, -2097153.0);
5815 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
5816 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
5817 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
5818 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
5819 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
5820 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5821 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5822 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5823 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5824 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5827 /* The result can only be represented in long double. */
5828 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
5829 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5830 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5831 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
5832 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
5833 # if LDBL_MANT_DIG > 100
5834 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
5835 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
5836 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
5838 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
5839 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5840 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5841 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
5842 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
5843 # if LDBL_MANT_DIG > 100
5844 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
5845 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
5846 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
5848 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5849 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5850 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5851 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
5852 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
5853 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
5855 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5856 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5857 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5858 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
5859 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
5860 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
5865 fesetround (save_round_mode);
5867 END (rint_tonearest);
5871 rint_test_towardzero (void)
5873 int save_round_mode;
5874 START (rint_towardzero);
5876 save_round_mode = fegetround ();
5878 if (!fesetround (FE_TOWARDZERO))
5880 TEST_f_f (rint, 2.0, 2.0);
5881 TEST_f_f (rint, 1.5, 1.0);
5882 TEST_f_f (rint, 1.0, 1.0);
5883 TEST_f_f (rint, 0.5, 0.0);
5884 TEST_f_f (rint, 0.0, 0.0);
5885 TEST_f_f (rint, minus_zero, minus_zero);
5886 TEST_f_f (rint, -0.5, -0.0);
5887 TEST_f_f (rint, -1.0, -1.0);
5888 TEST_f_f (rint, -1.5, -1.0);
5889 TEST_f_f (rint, -2.0, -2.0);
5890 TEST_f_f (rint, 0.1, 0.0);
5891 TEST_f_f (rint, 0.25, 0.0);
5892 TEST_f_f (rint, 0.625, 0.0);
5893 TEST_f_f (rint, -0.1, -0.0);
5894 TEST_f_f (rint, -0.25, -0.0);
5895 TEST_f_f (rint, -0.625, -0.0);
5896 TEST_f_f (rint, 1048576.75, 1048576.0);
5897 TEST_f_f (rint, 2097152.75, 2097152.0);
5898 TEST_f_f (rint, -1048576.75, -1048576.0);
5899 TEST_f_f (rint, -2097152.75, -2097152.0);
5901 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5902 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5903 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5904 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5905 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5906 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
5907 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
5908 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
5909 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
5910 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
5913 /* The result can only be represented in long double. */
5914 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
5915 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
5916 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
5917 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
5918 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
5919 # if LDBL_MANT_DIG > 100
5920 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
5921 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
5922 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
5924 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
5925 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
5926 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
5927 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
5928 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
5929 # if LDBL_MANT_DIG > 100
5930 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
5931 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
5932 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
5934 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
5935 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
5936 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
5937 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
5938 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
5939 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
5941 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
5942 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
5943 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
5944 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
5945 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
5946 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
5951 fesetround (save_round_mode);
5953 END (rint_towardzero);
5957 rint_test_downward (void)
5959 int save_round_mode;
5960 START (rint_downward);
5962 save_round_mode = fegetround ();
5964 if (!fesetround (FE_DOWNWARD))
5966 TEST_f_f (rint, 2.0, 2.0);
5967 TEST_f_f (rint, 1.5, 1.0);
5968 TEST_f_f (rint, 1.0, 1.0);
5969 TEST_f_f (rint, 0.5, 0.0);
5970 TEST_f_f (rint, 0.0, 0.0);
5971 TEST_f_f (rint, minus_zero, minus_zero);
5972 TEST_f_f (rint, -0.5, -1.0);
5973 TEST_f_f (rint, -1.0, -1.0);
5974 TEST_f_f (rint, -1.5, -2.0);
5975 TEST_f_f (rint, -2.0, -2.0);
5976 TEST_f_f (rint, 0.1, 0.0);
5977 TEST_f_f (rint, 0.25, 0.0);
5978 TEST_f_f (rint, 0.625, 0.0);
5979 TEST_f_f (rint, -0.1, -1.0);
5980 TEST_f_f (rint, -0.25, -1.0);
5981 TEST_f_f (rint, -0.625, -1.0);
5982 TEST_f_f (rint, 1048576.75, 1048576.0);
5983 TEST_f_f (rint, 2097152.75, 2097152.0);
5984 TEST_f_f (rint, -1048576.75, -1048577.0);
5985 TEST_f_f (rint, -2097152.75, -2097153.0);
5987 TEST_f_f (rint, 70368744177664.75, 70368744177664.0);
5988 TEST_f_f (rint, 140737488355328.75, 140737488355328.0);
5989 TEST_f_f (rint, 281474976710656.75, 281474976710656.0);
5990 TEST_f_f (rint, 562949953421312.75, 562949953421312.0);
5991 TEST_f_f (rint, 1125899906842624.75, 1125899906842624.0);
5992 TEST_f_f (rint, -70368744177664.75, -70368744177665.0);
5993 TEST_f_f (rint, -140737488355328.75, -140737488355329.0);
5994 TEST_f_f (rint, -281474976710656.75, -281474976710657.0);
5995 TEST_f_f (rint, -562949953421312.75, -562949953421313.0);
5996 TEST_f_f (rint, -1125899906842624.75, -1125899906842625.0);
5999 /* The result can only be represented in long double. */
6000 TEST_f_f (rint, 4503599627370495.5L, 4503599627370495.0L);
6001 TEST_f_f (rint, 4503599627370496.25L, 4503599627370496.0L);
6002 TEST_f_f (rint, 4503599627370496.5L, 4503599627370496.0L);
6003 TEST_f_f (rint, 4503599627370496.75L, 4503599627370496.0L);
6004 TEST_f_f (rint, 4503599627370497.5L, 4503599627370497.0L);
6005 # if LDBL_MANT_DIG > 100
6006 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370494.0L);
6007 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370495.0L);
6008 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370496.0L);
6010 TEST_f_f (rint, -4503599627370495.5L, -4503599627370496.0L);
6011 TEST_f_f (rint, -4503599627370496.25L, -4503599627370497.0L);
6012 TEST_f_f (rint, -4503599627370496.5L, -4503599627370497.0L);
6013 TEST_f_f (rint, -4503599627370496.75L, -4503599627370497.0L);
6014 TEST_f_f (rint, -4503599627370497.5L, -4503599627370498.0L);
6015 # if LDBL_MANT_DIG > 100
6016 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370495.0L);
6017 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370496.0L);
6018 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370497.0L);
6020 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740991.0L);
6021 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740992.0L);
6022 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740993.0L);
6023 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740991.0L);
6024 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740992.0L);
6025 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740993.0L);
6027 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740992.0L);
6028 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740993.0L);
6029 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740994.0L);
6030 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740992.0L);
6031 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740993.0L);
6032 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740994.0L);
6037 fesetround (save_round_mode);
6039 END (rint_downward);
6043 rint_test_upward (void)
6045 int save_round_mode;
6046 START (rint_upward);
6048 save_round_mode = fegetround ();
6050 if (!fesetround (FE_UPWARD))
6052 TEST_f_f (rint, 2.0, 2.0);
6053 TEST_f_f (rint, 1.5, 2.0);
6054 TEST_f_f (rint, 1.0, 1.0);
6055 TEST_f_f (rint, 0.5, 1.0);
6056 TEST_f_f (rint, 0.0, 0.0);
6057 TEST_f_f (rint, minus_zero, minus_zero);
6058 TEST_f_f (rint, -0.5, -0.0);
6059 TEST_f_f (rint, -1.0, -1.0);
6060 TEST_f_f (rint, -1.5, -1.0);
6061 TEST_f_f (rint, -2.0, -2.0);
6062 TEST_f_f (rint, 0.1, 1.0);
6063 TEST_f_f (rint, 0.25, 1.0);
6064 TEST_f_f (rint, 0.625, 1.0);
6065 TEST_f_f (rint, -0.1, -0.0);
6066 TEST_f_f (rint, -0.25, -0.0);
6067 TEST_f_f (rint, -0.625, -0.0);
6068 TEST_f_f (rint, 1048576.75, 1048577.0);
6069 TEST_f_f (rint, 2097152.75, 2097153.0);
6070 TEST_f_f (rint, -1048576.75, -1048576.0);
6071 TEST_f_f (rint, -2097152.75, -2097152.0);
6073 TEST_f_f (rint, 70368744177664.75, 70368744177665.0);
6074 TEST_f_f (rint, 140737488355328.75, 140737488355329.0);
6075 TEST_f_f (rint, 281474976710656.75, 281474976710657.0);
6076 TEST_f_f (rint, 562949953421312.75, 562949953421313.0);
6077 TEST_f_f (rint, 1125899906842624.75, 1125899906842625.0);
6078 TEST_f_f (rint, -70368744177664.75, -70368744177664.0);
6079 TEST_f_f (rint, -140737488355328.75, -140737488355328.0);
6080 TEST_f_f (rint, -281474976710656.75, -281474976710656.0);
6081 TEST_f_f (rint, -562949953421312.75, -562949953421312.0);
6082 TEST_f_f (rint, -1125899906842624.75, -1125899906842624.0);
6085 /* The result can only be represented in long double. */
6086 TEST_f_f (rint, 4503599627370495.5L, 4503599627370496.0L);
6087 TEST_f_f (rint, 4503599627370496.25L, 4503599627370497.0L);
6088 TEST_f_f (rint, 4503599627370496.5L, 4503599627370497.0L);
6089 TEST_f_f (rint, 4503599627370496.75L, 4503599627370497.0L);
6090 TEST_f_f (rint, 4503599627370497.5L, 4503599627370498.0L);
6091 # if LDBL_MANT_DIG > 100
6092 TEST_f_f (rint, 4503599627370494.5000000000001L, 4503599627370495.0L);
6093 TEST_f_f (rint, 4503599627370495.5000000000001L, 4503599627370496.0L);
6094 TEST_f_f (rint, 4503599627370496.5000000000001L, 4503599627370497.0L);
6096 TEST_f_f (rint, -4503599627370495.5L, -4503599627370495.0L);
6097 TEST_f_f (rint, -4503599627370496.25L, -4503599627370496.0L);
6098 TEST_f_f (rint, -4503599627370496.5L, -4503599627370496.0L);
6099 TEST_f_f (rint, -4503599627370496.75L, -4503599627370496.0L);
6100 TEST_f_f (rint, -4503599627370497.5L, -4503599627370497.0L);
6101 # if LDBL_MANT_DIG > 100
6102 TEST_f_f (rint, -4503599627370494.5000000000001L, -4503599627370494.0L);
6103 TEST_f_f (rint, -4503599627370495.5000000000001L, -4503599627370495.0L);
6104 TEST_f_f (rint, -4503599627370496.5000000000001L, -4503599627370496.0L);
6106 TEST_f_f (rint, 9007199254740991.0000000000001L, 9007199254740992.0L);
6107 TEST_f_f (rint, 9007199254740992.0000000000001L, 9007199254740993.0L);
6108 TEST_f_f (rint, 9007199254740993.0000000000001L, 9007199254740994.0L);
6109 TEST_f_f (rint, 9007199254740991.5000000000001L, 9007199254740992.0L);
6110 TEST_f_f (rint, 9007199254740992.5000000000001L, 9007199254740993.0L);
6111 TEST_f_f (rint, 9007199254740993.5000000000001L, 9007199254740994.0L);
6113 TEST_f_f (rint, -9007199254740991.0000000000001L, -9007199254740991.0L);
6114 TEST_f_f (rint, -9007199254740992.0000000000001L, -9007199254740992.0L);
6115 TEST_f_f (rint, -9007199254740993.0000000000001L, -9007199254740993.0L);
6116 TEST_f_f (rint, -9007199254740991.5000000000001L, -9007199254740991.0L);
6117 TEST_f_f (rint, -9007199254740992.5000000000001L, -9007199254740992.0L);
6118 TEST_f_f (rint, -9007199254740993.5000000000001L, -9007199254740993.0L);
6123 fesetround (save_round_mode);
6133 TEST_f_f (round, 0, 0);
6134 TEST_f_f (round, minus_zero, minus_zero);
6135 TEST_f_f (round, 0.2L, 0.0);
6136 TEST_f_f (round, -0.2L, minus_zero);
6137 TEST_f_f (round, 0.5, 1.0);
6138 TEST_f_f (round, -0.5, -1.0);
6139 TEST_f_f (round, 0.8L, 1.0);
6140 TEST_f_f (round, -0.8L, -1.0);
6141 TEST_f_f (round, 1.5, 2.0);
6142 TEST_f_f (round, -1.5, -2.0);
6143 TEST_f_f (round, 0.1, 0.0);
6144 TEST_f_f (round, 0.25, 0.0);
6145 TEST_f_f (round, 0.625, 1.0);
6146 TEST_f_f (round, -0.1, -0.0);
6147 TEST_f_f (round, -0.25, -0.0);
6148 TEST_f_f (round, -0.625, -1.0);
6149 TEST_f_f (round, 2097152.5, 2097153);
6150 TEST_f_f (round, -2097152.5, -2097153);
6153 /* The result can only be represented in long double. */
6154 TEST_f_f (round, 4503599627370495.5L, 4503599627370496.0L);
6155 TEST_f_f (round, 4503599627370496.25L, 4503599627370496.0L);
6156 TEST_f_f (round, 4503599627370496.5L, 4503599627370497.0L);
6157 TEST_f_f (round, 4503599627370496.75L, 4503599627370497.0L);
6158 TEST_f_f (round, 4503599627370497.5L, 4503599627370498.0L);
6159 # if LDBL_MANT_DIG > 100
6160 TEST_f_f (round, 4503599627370494.5000000000001L, 4503599627370495.0L);
6161 TEST_f_f (round, 4503599627370495.5000000000001L, 4503599627370496.0L);
6162 TEST_f_f (round, 4503599627370496.5000000000001L, 4503599627370497.0L);
6165 TEST_f_f (round, -4503599627370495.5L, -4503599627370496.0L);
6166 TEST_f_f (round, -4503599627370496.25L, -4503599627370496.0L);
6167 TEST_f_f (round, -4503599627370496.5L, -4503599627370497.0L);
6168 TEST_f_f (round, -4503599627370496.75L, -4503599627370497.0L);
6169 TEST_f_f (round, -4503599627370497.5L, -4503599627370498.0L);
6170 # if LDBL_MANT_DIG > 100
6171 TEST_f_f (round, -4503599627370494.5000000000001L, -4503599627370495.0L);
6172 TEST_f_f (round, -4503599627370495.5000000000001L, -4503599627370496.0L);
6173 TEST_f_f (round, -4503599627370496.5000000000001L, -4503599627370497.0L);
6176 TEST_f_f (round, 9007199254740991.5L, 9007199254740992.0L);
6177 TEST_f_f (round, 9007199254740992.25L, 9007199254740992.0L);
6178 TEST_f_f (round, 9007199254740992.5L, 9007199254740993.0L);
6179 TEST_f_f (round, 9007199254740992.75L, 9007199254740993.0L);
6180 TEST_f_f (round, 9007199254740993.5L, 9007199254740994.0L);
6182 TEST_f_f (round, -9007199254740991.5L, -9007199254740992.0L);
6183 TEST_f_f (round, -9007199254740992.25L, -9007199254740992.0L);
6184 TEST_f_f (round, -9007199254740992.5L, -9007199254740993.0L);
6185 TEST_f_f (round, -9007199254740992.75L, -9007199254740993.0L);
6186 TEST_f_f (round, -9007199254740993.5L, -9007199254740994.0L);
6188 # if LDBL_MANT_DIG > 100
6189 TEST_f_f (round, 9007199254740991.0000000000001L, 9007199254740991.0L);
6190 TEST_f_f (round, 9007199254740992.0000000000001L, 9007199254740992.0L);
6191 TEST_f_f (round, 9007199254740993.0000000000001L, 9007199254740993.0L);
6192 TEST_f_f (round, 9007199254740991.5000000000001L, 9007199254740992.0L);
6193 TEST_f_f (round, 9007199254740992.5000000000001L, 9007199254740993.0L);
6194 TEST_f_f (round, 9007199254740993.5000000000001L, 9007199254740994.0L);
6196 TEST_f_f (round, -9007199254740991.0000000000001L, -9007199254740991.0L);
6197 TEST_f_f (round, -9007199254740992.0000000000001L, -9007199254740992.0L);
6198 TEST_f_f (round, -9007199254740993.0000000000001L, -9007199254740993.0L);
6199 TEST_f_f (round, -9007199254740991.5000000000001L, -9007199254740992.0L);
6200 TEST_f_f (round, -9007199254740992.5000000000001L, -9007199254740993.0L);
6201 TEST_f_f (round, -9007199254740993.5000000000001L, -9007199254740994.0L);
6204 TEST_f_f (round, 72057594037927935.5L, 72057594037927936.0L);
6205 TEST_f_f (round, 72057594037927936.25L, 72057594037927936.0L);
6206 TEST_f_f (round, 72057594037927936.5L, 72057594037927937.0L);
6207 TEST_f_f (round, 72057594037927936.75L, 72057594037927937.0L);
6208 TEST_f_f (round, 72057594037927937.5L, 72057594037927938.0L);
6210 TEST_f_f (round, -72057594037927935.5L, -72057594037927936.0L);
6211 TEST_f_f (round, -72057594037927936.25L, -72057594037927936.0L);
6212 TEST_f_f (round, -72057594037927936.5L, -72057594037927937.0L);
6213 TEST_f_f (round, -72057594037927936.75L, -72057594037927937.0L);
6214 TEST_f_f (round, -72057594037927937.5L, -72057594037927938.0L);
6216 TEST_f_f (round, 10141204801825835211973625643007.5L, 10141204801825835211973625643008.0L);
6217 TEST_f_f (round, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
6218 TEST_f_f (round, 10141204801825835211973625643008.5L, 10141204801825835211973625643009.0L);
6219 TEST_f_f (round, 10141204801825835211973625643008.75L, 10141204801825835211973625643009.0L);
6220 TEST_f_f (round, 10141204801825835211973625643009.5L, 10141204801825835211973625643010.0L);
6233 TEST_ff_f (scalb, 2.0, 0.5, nan_value, INVALID_EXCEPTION);
6234 TEST_ff_f (scalb, 3.0, -2.5, nan_value, INVALID_EXCEPTION);
6236 TEST_ff_f (scalb, 0, nan_value, nan_value);
6237 TEST_ff_f (scalb, 1, nan_value, nan_value);
6239 TEST_ff_f (scalb, 1, 0, 1);
6240 TEST_ff_f (scalb, -1, 0, -1);
6242 TEST_ff_f (scalb, 0, plus_infty, nan_value, INVALID_EXCEPTION);
6243 TEST_ff_f (scalb, minus_zero, plus_infty, nan_value, INVALID_EXCEPTION);
6245 TEST_ff_f (scalb, 0, 2, 0);
6246 TEST_ff_f (scalb, minus_zero, -4, minus_zero);
6247 TEST_ff_f (scalb, 0, 0, 0);
6248 TEST_ff_f (scalb, minus_zero, 0, minus_zero);
6249 TEST_ff_f (scalb, 0, -1, 0);
6250 TEST_ff_f (scalb, minus_zero, -10, minus_zero);
6251 TEST_ff_f (scalb, 0, minus_infty, 0);
6252 TEST_ff_f (scalb, minus_zero, minus_infty, minus_zero);
6254 TEST_ff_f (scalb, plus_infty, -1, plus_infty);
6255 TEST_ff_f (scalb, minus_infty, -10, minus_infty);
6256 TEST_ff_f (scalb, plus_infty, 0, plus_infty);
6257 TEST_ff_f (scalb, minus_infty, 0, minus_infty);
6258 TEST_ff_f (scalb, plus_infty, 2, plus_infty);
6259 TEST_ff_f (scalb, minus_infty, 100, minus_infty);
6261 TEST_ff_f (scalb, 0.1L, minus_infty, 0.0);
6262 TEST_ff_f (scalb, -0.1L, minus_infty, minus_zero);
6264 TEST_ff_f (scalb, 1, plus_infty, plus_infty);
6265 TEST_ff_f (scalb, -1, plus_infty, minus_infty);
6266 TEST_ff_f (scalb, plus_infty, plus_infty, plus_infty);
6267 TEST_ff_f (scalb, minus_infty, plus_infty, minus_infty);
6269 TEST_ff_f (scalb, plus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6270 TEST_ff_f (scalb, minus_infty, minus_infty, nan_value, INVALID_EXCEPTION);
6272 TEST_ff_f (scalb, nan_value, 1, nan_value);
6273 TEST_ff_f (scalb, 1, nan_value, nan_value);
6274 TEST_ff_f (scalb, nan_value, 0, nan_value);
6275 TEST_ff_f (scalb, 0, nan_value, nan_value);
6276 TEST_ff_f (scalb, nan_value, plus_infty, nan_value);
6277 TEST_ff_f (scalb, plus_infty, nan_value, nan_value);
6278 TEST_ff_f (scalb, nan_value, nan_value, nan_value);
6280 TEST_ff_f (scalb, 0.8L, 4, 12.8L);
6281 TEST_ff_f (scalb, -0.854375L, 5, -27.34L);
6293 TEST_fi_f (scalbn, 0, 0, 0);
6294 TEST_fi_f (scalbn, minus_zero, 0, minus_zero);
6296 TEST_fi_f (scalbn, plus_infty, 1, plus_infty);
6297 TEST_fi_f (scalbn, minus_infty, 1, minus_infty);
6298 TEST_fi_f (scalbn, nan_value, 1, nan_value);
6300 TEST_fi_f (scalbn, 0.8L, 4, 12.8L);
6301 TEST_fi_f (scalbn, -0.854375L, 5, -27.34L);
6303 TEST_fi_f (scalbn, 1, 0L, 1);
6305 TEST_fi_f (scalbn, 1, INT_MAX, plus_infty);
6306 TEST_fi_f (scalbn, 1, INT_MIN, plus_zero);
6307 TEST_fi_f (scalbn, max_value, INT_MAX, plus_infty);
6308 TEST_fi_f (scalbn, max_value, INT_MIN, plus_zero);
6309 TEST_fi_f (scalbn, min_value, INT_MAX, plus_infty);
6310 TEST_fi_f (scalbn, min_value, INT_MIN, plus_zero);
6311 TEST_fi_f (scalbn, min_value / 4, INT_MAX, plus_infty);
6312 TEST_fi_f (scalbn, min_value / 4, INT_MIN, plus_zero);
6324 TEST_fl_f (scalbln, 0, 0, 0);
6325 TEST_fl_f (scalbln, minus_zero, 0, minus_zero);
6327 TEST_fl_f (scalbln, plus_infty, 1, plus_infty);
6328 TEST_fl_f (scalbln, minus_infty, 1, minus_infty);
6329 TEST_fl_f (scalbln, nan_value, 1, nan_value);
6331 TEST_fl_f (scalbln, 0.8L, 4, 12.8L);
6332 TEST_fl_f (scalbln, -0.854375L, 5, -27.34L);
6334 TEST_fl_f (scalbln, 1, 0L, 1);
6336 TEST_fi_f (scalbln, 1, INT_MAX, plus_infty);
6337 TEST_fi_f (scalbln, 1, INT_MIN, plus_zero);
6338 TEST_fi_f (scalbln, max_value, INT_MAX, plus_infty);
6339 TEST_fi_f (scalbln, max_value, INT_MIN, plus_zero);
6340 TEST_fi_f (scalbln, min_value, INT_MAX, plus_infty);
6341 TEST_fi_f (scalbln, min_value, INT_MIN, plus_zero);
6342 TEST_fi_f (scalbln, min_value / 4, INT_MAX, plus_infty);
6343 TEST_fi_f (scalbln, min_value / 4, INT_MIN, plus_zero);
6345 TEST_fi_f (scalbln, 1, LONG_MAX, plus_infty);
6346 TEST_fi_f (scalbln, 1, LONG_MIN, plus_zero);
6347 TEST_fi_f (scalbln, max_value, LONG_MAX, plus_infty);
6348 TEST_fi_f (scalbln, max_value, LONG_MIN, plus_zero);
6349 TEST_fi_f (scalbln, min_value, LONG_MAX, plus_infty);
6350 TEST_fi_f (scalbln, min_value, LONG_MIN, plus_zero);
6351 TEST_fi_f (scalbln, min_value / 4, LONG_MAX, plus_infty);
6352 TEST_fi_f (scalbln, min_value / 4, LONG_MIN, plus_zero);
6354 #if LONG_MAX >= 0x100000000
6355 TEST_fi_f (scalbln, 1, 0x88000000L, plus_infty);
6356 TEST_fi_f (scalbln, 1, -0x88000000L, plus_zero);
6357 TEST_fi_f (scalbln, max_value, 0x88000000L, plus_infty);
6358 TEST_fi_f (scalbln, max_value, -0x88000000L, plus_zero);
6359 TEST_fi_f (scalbln, min_value, 0x88000000L, plus_infty);
6360 TEST_fi_f (scalbln, min_value, -0x88000000L, plus_zero);
6361 TEST_fi_f (scalbln, min_value / 4, 0x88000000L, plus_infty);
6362 TEST_fi_f (scalbln, min_value / 4, -0x88000000L, plus_zero);
6375 TEST_f_b (signbit, 0, 0);
6376 TEST_f_b (signbit, minus_zero, 1);
6377 TEST_f_b (signbit, plus_infty, 0);
6378 TEST_f_b (signbit, minus_infty, 1);
6380 /* signbit (x) != 0 for x < 0. */
6381 TEST_f_b (signbit, -1, 1);
6382 /* signbit (x) == 0 for x >= 0. */
6383 TEST_f_b (signbit, 1, 0);
6394 if (errno == ENOSYS)
6395 /* Function not implemented. */
6400 TEST_f_f (sin, 0, 0);
6401 TEST_f_f (sin, minus_zero, minus_zero);
6403 TEST_f_f (sin, plus_infty, nan_value, INVALID_EXCEPTION);
6404 check_int ("errno for sin(+inf) == EDOM", errno, EDOM, 0, 0, 0);
6406 TEST_f_f (sin, minus_infty, nan_value, INVALID_EXCEPTION);
6407 check_int ("errno for sin(-inf) == EDOM", errno, EDOM, 0, 0, 0);
6409 TEST_f_f (sin, nan_value, nan_value);
6410 check_int ("errno for sin(NaN) unchanged", errno, 0, 0, 0, 0);
6412 TEST_f_f (sin, M_PI_6l, 0.5);
6413 TEST_f_f (sin, -M_PI_6l, -0.5);
6414 TEST_f_f (sin, M_PI_2l, 1);
6415 TEST_f_f (sin, -M_PI_2l, -1);
6416 TEST_f_f (sin, 0.75L, 0.681638760023334166733241952779893935L);
6418 TEST_f_f (sin, 0x1p65, -0.047183876212354673805106149805700013943218L);
6419 TEST_f_f (sin, -0x1p65, 0.047183876212354673805106149805700013943218L);
6422 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
6423 TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
6427 TEST_f_f (sin, 1e22, -0.8522008497671888017727058937530293682618L);
6428 TEST_f_f (sin, 0x1p1023, 0.5631277798508840134529434079444683477104L);
6431 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6432 TEST_f_f (sin, 0x1p16383L, 0.3893629985894208126948115852610595405563L);
6441 sin_test_tonearest (void)
6443 int save_round_mode;
6446 if (errno == ENOSYS)
6447 /* Function not implemented. */
6450 START (sin_tonearest);
6452 save_round_mode = fegetround ();
6454 if (!fesetround (FE_TONEAREST))
6456 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6457 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6458 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6459 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6460 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6461 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6462 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6463 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6464 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6465 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6468 fesetround (save_round_mode);
6470 END (sin_tonearest);
6475 sin_test_towardzero (void)
6477 int save_round_mode;
6480 if (errno == ENOSYS)
6481 /* Function not implemented. */
6484 START (sin_towardzero);
6486 save_round_mode = fegetround ();
6488 if (!fesetround (FE_TOWARDZERO))
6490 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6491 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6492 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6493 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6494 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6495 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6496 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6497 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6498 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6499 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6502 fesetround (save_round_mode);
6504 END (sin_towardzero);
6509 sin_test_downward (void)
6511 int save_round_mode;
6514 if (errno == ENOSYS)
6515 /* Function not implemented. */
6518 START (sin_downward);
6520 save_round_mode = fegetround ();
6522 if (!fesetround (FE_DOWNWARD))
6524 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6525 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6526 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6527 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6528 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6529 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6530 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6531 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6532 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6533 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6536 fesetround (save_round_mode);
6543 sin_test_upward (void)
6545 int save_round_mode;
6548 if (errno == ENOSYS)
6549 /* Function not implemented. */
6554 save_round_mode = fegetround ();
6556 if (!fesetround (FE_UPWARD))
6558 TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
6559 TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
6560 TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
6561 TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
6562 TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
6563 TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
6564 TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
6565 TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
6566 TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
6567 TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
6570 fesetround (save_round_mode);
6579 FLOAT sin_res, cos_res;
6582 FUNC(sincos) (0, &sin_res, &cos_res);
6583 if (errno == ENOSYS)
6584 /* Function not implemented. */
6589 /* sincos is treated differently because it returns void. */
6590 TEST_extra (sincos, 0, 0, 1);
6592 TEST_extra (sincos, minus_zero, minus_zero, 1);
6593 TEST_extra (sincos, plus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6594 TEST_extra (sincos, minus_infty, nan_value, nan_value, INVALID_EXCEPTION);
6595 TEST_extra (sincos, nan_value, nan_value, nan_value);
6597 TEST_extra (sincos, M_PI_2l, 1, 0);
6598 TEST_extra (sincos, M_PI_6l, 0.5, 0.86602540378443864676372317075293616L);
6599 TEST_extra (sincos, M_PI_6l*2.0, 0.86602540378443864676372317075293616L, 0.5);
6600 TEST_extra (sincos, 0.75L, 0.681638760023334166733241952779893935L, 0.731688868873820886311838753000084544L);
6602 TEST_extra (sincos, 0x1p65, -0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6603 TEST_extra (sincos, -0x1p65, 0.047183876212354673805106149805700013943218L, 0.99888622066058013610642172179340364209972L);
6606 TEST_extra (sincos, 0.80190127184058835, 0.71867942238767868, 0.69534156199418473);
6610 TEST_extra (sincos, 1e22, -0.8522008497671888017727058937530293682618L, 0.5232147853951389454975944733847094921409L);
6611 TEST_extra (sincos, 0x1p1023, 0.5631277798508840134529434079444683477104L, -0.826369834614147994500785680811743734805L);
6614 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6615 TEST_extra (sincos, 0x1p16383L, 0.3893629985894208126948115852610595405563L, 0.9210843909921906206874509522505756251609L);
6626 if (errno == ENOSYS)
6627 /* Function not implemented. */
6631 TEST_f_f (sinh, 0, 0);
6632 TEST_f_f (sinh, minus_zero, minus_zero);
6635 TEST_f_f (sinh, plus_infty, plus_infty);
6636 TEST_f_f (sinh, minus_infty, minus_infty);
6638 TEST_f_f (sinh, nan_value, nan_value);
6640 TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L);
6641 TEST_f_f (sinh, 0x8p-32L, 1.86264514923095703232705808926175479e-9L);
6648 sinh_test_tonearest (void)
6650 int save_round_mode;
6653 if (errno == ENOSYS)
6654 /* Function not implemented. */
6657 START (sinh_tonearest);
6659 save_round_mode = fegetround ();
6661 if (!fesetround (FE_TONEAREST))
6663 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6664 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6665 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6668 fesetround (save_round_mode);
6670 END (sinh_tonearest);
6675 sinh_test_towardzero (void)
6677 int save_round_mode;
6680 if (errno == ENOSYS)
6681 /* Function not implemented. */
6684 START (sinh_towardzero);
6686 save_round_mode = fegetround ();
6688 if (!fesetround (FE_TOWARDZERO))
6690 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6691 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6692 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6695 fesetround (save_round_mode);
6697 END (sinh_towardzero);
6702 sinh_test_downward (void)
6704 int save_round_mode;
6707 if (errno == ENOSYS)
6708 /* Function not implemented. */
6711 START (sinh_downward);
6713 save_round_mode = fegetround ();
6715 if (!fesetround (FE_DOWNWARD))
6717 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6718 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6719 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6722 fesetround (save_round_mode);
6724 END (sinh_downward);
6729 sinh_test_upward (void)
6731 int save_round_mode;
6734 if (errno == ENOSYS)
6735 /* Function not implemented. */
6738 START (sinh_upward);
6740 save_round_mode = fegetround ();
6742 if (!fesetround (FE_UPWARD))
6744 TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
6745 TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
6746 TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
6749 fesetround (save_round_mode);
6760 if (errno == ENOSYS)
6761 /* Function not implemented. */
6766 TEST_f_f (sqrt, 0, 0);
6767 TEST_f_f (sqrt, nan_value, nan_value);
6768 TEST_f_f (sqrt, plus_infty, plus_infty);
6770 TEST_f_f (sqrt, minus_zero, minus_zero);
6772 /* sqrt (x) == NaN plus invalid exception for x < 0. */
6773 TEST_f_f (sqrt, -1, nan_value, INVALID_EXCEPTION);
6774 TEST_f_f (sqrt, minus_infty, nan_value, INVALID_EXCEPTION);
6775 TEST_f_f (sqrt, nan_value, nan_value);
6777 TEST_f_f (sqrt, 2209, 47);
6778 TEST_f_f (sqrt, 4, 2);
6779 TEST_f_f (sqrt, 2, M_SQRT2l);
6780 TEST_f_f (sqrt, 0.25, 0.5);
6781 TEST_f_f (sqrt, 6642.25, 81.5);
6782 TEST_f_f (sqrt, 15190.5625L, 123.25L);
6783 TEST_f_f (sqrt, 0.75L, 0.866025403784438646763723170752936183L);
6794 if (errno == ENOSYS)
6795 /* Function not implemented. */
6800 TEST_f_f (tan, 0, 0);
6801 TEST_f_f (tan, minus_zero, minus_zero);
6803 TEST_f_f (tan, plus_infty, nan_value, INVALID_EXCEPTION);
6804 check_int ("errno for tan(Inf) == EDOM", errno, EDOM, 0, 0, 0);
6806 TEST_f_f (tan, minus_infty, nan_value, INVALID_EXCEPTION);
6807 check_int ("errno for tan(-Inf) == EDOM", errno, EDOM, 0, 0, 0);
6809 TEST_f_f (tan, nan_value, nan_value);
6810 check_int ("errno for tan(NaN) == 0", errno, 0, 0, 0, 0);
6812 TEST_f_f (tan, M_PI_4l, 1);
6813 TEST_f_f (tan, 0.75L, 0.931596459944072461165202756573936428L);
6815 TEST_f_f (tan, 0x1p65, -0.0472364872359047946798414219288370688827L);
6816 TEST_f_f (tan, -0x1p65, 0.0472364872359047946798414219288370688827L);
6819 TEST_f_f (tan, 1e22, -1.628778225606898878549375936939548513545L);
6820 TEST_f_f (tan, 0x1p1023, -0.6814476476066215012854144040167365190368L);
6823 #if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
6824 TEST_f_f (tan, 0x1p16383L, 0.422722393732022337800504160054440141575L);
6832 tan_test_tonearest (void)
6834 int save_round_mode;
6837 if (errno == ENOSYS)
6838 /* Function not implemented. */
6841 START (tan_tonearest);
6843 save_round_mode = fegetround ();
6845 if (!fesetround (FE_TONEAREST))
6847 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6848 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6849 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6850 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6851 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6852 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6853 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6854 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6855 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6856 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6859 fesetround (save_round_mode);
6861 END (tan_tonearest);
6866 tan_test_towardzero (void)
6868 int save_round_mode;
6871 if (errno == ENOSYS)
6872 /* Function not implemented. */
6875 START (tan_towardzero);
6877 save_round_mode = fegetround ();
6879 if (!fesetround (FE_TOWARDZERO))
6881 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6882 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6883 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6884 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6885 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6886 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6887 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6888 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6889 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6890 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6893 fesetround (save_round_mode);
6895 END (tan_towardzero);
6900 tan_test_downward (void)
6902 int save_round_mode;
6905 if (errno == ENOSYS)
6906 /* Function not implemented. */
6909 START (tan_downward);
6911 save_round_mode = fegetround ();
6913 if (!fesetround (FE_DOWNWARD))
6915 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6916 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6917 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6918 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6919 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6920 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6921 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6922 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6923 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6924 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6927 fesetround (save_round_mode);
6934 tan_test_upward (void)
6936 int save_round_mode;
6939 if (errno == ENOSYS)
6940 /* Function not implemented. */
6945 save_round_mode = fegetround ();
6947 if (!fesetround (FE_UPWARD))
6949 TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
6950 TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
6951 TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
6952 TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
6953 TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
6954 TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
6955 TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
6956 TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
6957 TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
6958 TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
6961 fesetround (save_round_mode);
6972 if (errno == ENOSYS)
6973 /* Function not implemented. */
6978 TEST_f_f (tanh, 0, 0);
6979 TEST_f_f (tanh, minus_zero, minus_zero);
6982 TEST_f_f (tanh, plus_infty, 1);
6983 TEST_f_f (tanh, minus_infty, -1);
6985 TEST_f_f (tanh, nan_value, nan_value);
6987 TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L);
6988 TEST_f_f (tanh, -0.75L, -0.635148952387287319214434357312496495L);
6990 TEST_f_f (tanh, 1.0L, 0.7615941559557648881194582826047935904L);
6991 TEST_f_f (tanh, -1.0L, -0.7615941559557648881194582826047935904L);
6994 TEST_f_f (tanh, 0x1p-57L, 6.938893903907228377647697925567626953125e-18L);
7004 if (errno == ENOSYS)
7005 /* Function not implemented. */
7007 feclearexcept (FE_ALL_EXCEPT);
7011 TEST_f_f (tgamma, plus_infty, plus_infty);
7012 TEST_f_f (tgamma, 0, plus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7013 TEST_f_f (tgamma, minus_zero, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
7014 /* tgamma (x) == NaN plus invalid exception for integer x <= 0. */
7015 TEST_f_f (tgamma, -2, nan_value, INVALID_EXCEPTION);
7016 TEST_f_f (tgamma, minus_infty, nan_value, INVALID_EXCEPTION);
7017 TEST_f_f (tgamma, nan_value, nan_value);
7019 TEST_f_f (tgamma, 0.5, M_SQRT_PIl);
7020 TEST_f_f (tgamma, -0.5, -M_2_SQRT_PIl);
7022 TEST_f_f (tgamma, 1, 1);
7023 TEST_f_f (tgamma, 4, 6);
7025 TEST_f_f (tgamma, 0.7L, 1.29805533264755778568117117915281162L);
7026 TEST_f_f (tgamma, 1.2L, 0.918168742399760610640951655185830401L);
7037 TEST_f_f (trunc, plus_infty, plus_infty);
7038 TEST_f_f (trunc, minus_infty, minus_infty);
7039 TEST_f_f (trunc, nan_value, nan_value);
7041 TEST_f_f (trunc, 0, 0);
7042 TEST_f_f (trunc, minus_zero, minus_zero);
7043 TEST_f_f (trunc, 0.1, 0);
7044 TEST_f_f (trunc, 0.25, 0);
7045 TEST_f_f (trunc, 0.625, 0);
7046 TEST_f_f (trunc, -0.1, minus_zero);
7047 TEST_f_f (trunc, -0.25, minus_zero);
7048 TEST_f_f (trunc, -0.625, minus_zero);
7049 TEST_f_f (trunc, 1, 1);
7050 TEST_f_f (trunc, -1, -1);
7051 TEST_f_f (trunc, 1.625, 1);
7052 TEST_f_f (trunc, -1.625, -1);
7054 TEST_f_f (trunc, 1048580.625L, 1048580L);
7055 TEST_f_f (trunc, -1048580.625L, -1048580L);
7057 TEST_f_f (trunc, 8388610.125L, 8388610.0L);
7058 TEST_f_f (trunc, -8388610.125L, -8388610.0L);
7060 TEST_f_f (trunc, 4294967296.625L, 4294967296.0L);
7061 TEST_f_f (trunc, -4294967296.625L, -4294967296.0L);
7064 /* The result can only be represented in long double. */
7065 TEST_f_f (trunc, 4503599627370495.5L, 4503599627370495.0L);
7066 TEST_f_f (trunc, 4503599627370496.25L, 4503599627370496.0L);
7067 TEST_f_f (trunc, 4503599627370496.5L, 4503599627370496.0L);
7068 TEST_f_f (trunc, 4503599627370496.75L, 4503599627370496.0L);
7069 TEST_f_f (trunc, 4503599627370497.5L, 4503599627370497.0L);
7071 # if LDBL_MANT_DIG > 100
7072 TEST_f_f (trunc, 4503599627370494.5000000000001L, 4503599627370494.0L);
7073 TEST_f_f (trunc, 4503599627370495.5000000000001L, 4503599627370495.0L);
7074 TEST_f_f (trunc, 4503599627370496.5000000000001L, 4503599627370496.0L);
7077 TEST_f_f (trunc, -4503599627370495.5L, -4503599627370495.0L);
7078 TEST_f_f (trunc, -4503599627370496.25L, -4503599627370496.0L);
7079 TEST_f_f (trunc, -4503599627370496.5L, -4503599627370496.0L);
7080 TEST_f_f (trunc, -4503599627370496.75L, -4503599627370496.0L);
7081 TEST_f_f (trunc, -4503599627370497.5L, -4503599627370497.0L);
7083 # if LDBL_MANT_DIG > 100
7084 TEST_f_f (trunc, -4503599627370494.5000000000001L, -4503599627370494.0L);
7085 TEST_f_f (trunc, -4503599627370495.5000000000001L, -4503599627370495.0L);
7086 TEST_f_f (trunc, -4503599627370496.5000000000001L, -4503599627370496.0L);
7089 TEST_f_f (trunc, 9007199254740991.5L, 9007199254740991.0L);
7090 TEST_f_f (trunc, 9007199254740992.25L, 9007199254740992.0L);
7091 TEST_f_f (trunc, 9007199254740992.5L, 9007199254740992.0L);
7092 TEST_f_f (trunc, 9007199254740992.75L, 9007199254740992.0L);
7093 TEST_f_f (trunc, 9007199254740993.5L, 9007199254740993.0L);
7095 # if LDBL_MANT_DIG > 100
7096 TEST_f_f (trunc, 9007199254740991.0000000000001L, 9007199254740991.0L);
7097 TEST_f_f (trunc, 9007199254740992.0000000000001L, 9007199254740992.0L);
7098 TEST_f_f (trunc, 9007199254740993.0000000000001L, 9007199254740993.0L);
7099 TEST_f_f (trunc, 9007199254740991.5000000000001L, 9007199254740991.0L);
7100 TEST_f_f (trunc, 9007199254740992.5000000000001L, 9007199254740992.0L);
7101 TEST_f_f (trunc, 9007199254740993.5000000000001L, 9007199254740993.0L);
7104 TEST_f_f (trunc, -9007199254740991.5L, -9007199254740991.0L);
7105 TEST_f_f (trunc, -9007199254740992.25L, -9007199254740992.0L);
7106 TEST_f_f (trunc, -9007199254740992.5L, -9007199254740992.0L);
7107 TEST_f_f (trunc, -9007199254740992.75L, -9007199254740992.0L);
7108 TEST_f_f (trunc, -9007199254740993.5L, -9007199254740993.0L);
7110 # if LDBL_MANT_DIG > 100
7111 TEST_f_f (trunc, -9007199254740991.0000000000001L, -9007199254740991.0L);
7112 TEST_f_f (trunc, -9007199254740992.0000000000001L, -9007199254740992.0L);
7113 TEST_f_f (trunc, -9007199254740993.0000000000001L, -9007199254740993.0L);
7114 TEST_f_f (trunc, -9007199254740991.5000000000001L, -9007199254740991.0L);
7115 TEST_f_f (trunc, -9007199254740992.5000000000001L, -9007199254740992.0L);
7116 TEST_f_f (trunc, -9007199254740993.5000000000001L, -9007199254740993.0L);
7119 TEST_f_f (trunc, 72057594037927935.5L, 72057594037927935.0L);
7120 TEST_f_f (trunc, 72057594037927936.25L, 72057594037927936.0L);
7121 TEST_f_f (trunc, 72057594037927936.5L, 72057594037927936.0L);
7122 TEST_f_f (trunc, 72057594037927936.75L, 72057594037927936.0L);
7123 TEST_f_f (trunc, 72057594037927937.5L, 72057594037927937.0L);
7125 TEST_f_f (trunc, -72057594037927935.5L, -72057594037927935.0L);
7126 TEST_f_f (trunc, -72057594037927936.25L, -72057594037927936.0L);
7127 TEST_f_f (trunc, -72057594037927936.5L, -72057594037927936.0L);
7128 TEST_f_f (trunc, -72057594037927936.75L, -72057594037927936.0L);
7129 TEST_f_f (trunc, -72057594037927937.5L, -72057594037927937.0L);
7131 TEST_f_f (trunc, 10141204801825835211973625643007.5L, 10141204801825835211973625643007.0L);
7132 TEST_f_f (trunc, 10141204801825835211973625643008.25L, 10141204801825835211973625643008.0L);
7133 TEST_f_f (trunc, 10141204801825835211973625643008.5L, 10141204801825835211973625643008.0L);
7134 TEST_f_f (trunc, 10141204801825835211973625643008.75L, 10141204801825835211973625643008.0L);
7135 TEST_f_f (trunc, 10141204801825835211973625643009.5L, 10141204801825835211973625643009.0L);
7146 FUNC (sincos) (0, &s, &c);
7147 if (errno == ENOSYS)
7148 /* Required function not implemented. */
7151 if (errno == ENOSYS)
7152 /* Function not implemented. */
7155 /* y0 is the Bessel function of the second kind of order 0 */
7158 TEST_f_f (y0, -1.0, minus_infty, INVALID_EXCEPTION);
7159 TEST_f_f (y0, 0.0, minus_infty);
7160 TEST_f_f (y0, nan_value, nan_value);
7161 TEST_f_f (y0, plus_infty, 0);
7163 TEST_f_f (y0, 0.125L, -1.38968062514384052915582277745018693L);
7164 TEST_f_f (y0, 0.75L, -0.137172769385772397522814379396581855L);
7165 TEST_f_f (y0, 1.0, 0.0882569642156769579829267660235151628L);
7166 TEST_f_f (y0, 1.5, 0.382448923797758843955068554978089862L);
7167 TEST_f_f (y0, 2.0, 0.510375672649745119596606592727157873L);
7168 TEST_f_f (y0, 8.0, 0.223521489387566220527323400498620359L);
7169 TEST_f_f (y0, 10.0, 0.0556711672835993914244598774101900481L);
7171 TEST_f_f (y0, 0x1.3ffp+74L, 1.818984347516051243459467456433028748678e-12L);
7174 TEST_f_f (y0, 0x1.ff00000000002p+840L, 1.846591691699331493194965158699937660696e-127L);
7186 FUNC (sincos) (0, &s, &c);
7187 if (errno == ENOSYS)
7188 /* Required function not implemented. */
7191 if (errno == ENOSYS)
7192 /* Function not implemented. */
7195 /* y1 is the Bessel function of the second kind of order 1 */
7198 TEST_f_f (y1, -1.0, minus_infty, INVALID_EXCEPTION);
7199 TEST_f_f (y1, 0.0, minus_infty);
7200 TEST_f_f (y1, plus_infty, 0);
7201 TEST_f_f (y1, nan_value, nan_value);
7203 TEST_f_f (y1, 0.125L, -5.19993611253477499595928744876579921L);
7204 TEST_f_f (y1, 0.75L, -1.03759455076928541973767132140642198L);
7205 TEST_f_f (y1, 1.0, -0.781212821300288716547150000047964821L);
7206 TEST_f_f (y1, 1.5, -0.412308626973911295952829820633445323L);
7207 TEST_f_f (y1, 2.0, -0.107032431540937546888370772277476637L);
7208 TEST_f_f (y1, 8.0, -0.158060461731247494255555266187483550L);
7209 TEST_f_f (y1, 10.0, 0.249015424206953883923283474663222803L);
7211 TEST_f_f (y1, 0x1.27e204p+99L, -8.881610148467797208469612080785210013461e-16L);
7214 TEST_f_f (y1, 0x1.001000001p+593L, 3.927269966354206207832593635798954916263e-90L);
7226 FUNC (sincos) (0, &s, &c);
7227 if (errno == ENOSYS)
7228 /* Required function not implemented. */
7231 if (errno == ENOSYS)
7232 /* Function not implemented. */
7235 /* yn is the Bessel function of the second kind of order n */
7238 /* yn (0, x) == y0 (x) */
7239 TEST_ff_f (yn, 0, -1.0, minus_infty, INVALID_EXCEPTION);
7240 TEST_ff_f (yn, 0, 0.0, minus_infty);
7241 TEST_ff_f (yn, 0, nan_value, nan_value);
7242 TEST_ff_f (yn, 0, plus_infty, 0);
7244 TEST_ff_f (yn, 0, 0.125L, -1.38968062514384052915582277745018693L);
7245 TEST_ff_f (yn, 0, 0.75L, -0.137172769385772397522814379396581855L);
7246 TEST_ff_f (yn, 0, 1.0, 0.0882569642156769579829267660235151628L);
7247 TEST_ff_f (yn, 0, 1.5, 0.382448923797758843955068554978089862L);
7248 TEST_ff_f (yn, 0, 2.0, 0.510375672649745119596606592727157873L);
7249 TEST_ff_f (yn, 0, 8.0, 0.223521489387566220527323400498620359L);
7250 TEST_ff_f (yn, 0, 10.0, 0.0556711672835993914244598774101900481L);
7252 /* yn (1, x) == y1 (x) */
7253 TEST_ff_f (yn, 1, -1.0, minus_infty, INVALID_EXCEPTION);
7254 TEST_ff_f (yn, 1, 0.0, minus_infty);
7255 TEST_ff_f (yn, 1, plus_infty, 0);
7256 TEST_ff_f (yn, 1, nan_value, nan_value);
7258 TEST_ff_f (yn, 1, 0.125L, -5.19993611253477499595928744876579921L);
7259 TEST_ff_f (yn, 1, 0.75L, -1.03759455076928541973767132140642198L);
7260 TEST_ff_f (yn, 1, 1.0, -0.781212821300288716547150000047964821L);
7261 TEST_ff_f (yn, 1, 1.5, -0.412308626973911295952829820633445323L);
7262 TEST_ff_f (yn, 1, 2.0, -0.107032431540937546888370772277476637L);
7263 TEST_ff_f (yn, 1, 8.0, -0.158060461731247494255555266187483550L);
7264 TEST_ff_f (yn, 1, 10.0, 0.249015424206953883923283474663222803L);
7267 TEST_ff_f (yn, 3, plus_infty, 0);
7268 TEST_ff_f (yn, 3, nan_value, nan_value);
7270 TEST_ff_f (yn, 3, 0.125L, -2612.69757350066712600220955744091741L);
7271 TEST_ff_f (yn, 3, 0.75L, -12.9877176234475433186319774484809207L);
7272 TEST_ff_f (yn, 3, 1.0, -5.82151760596472884776175706442981440L);
7273 TEST_ff_f (yn, 3, 2.0, -1.12778377684042778608158395773179238L);
7274 TEST_ff_f (yn, 3, 10.0, -0.251362657183837329779204747654240998L);
7277 TEST_ff_f (yn, 10, plus_infty, 0);
7278 TEST_ff_f (yn, 10, nan_value, nan_value);
7280 TEST_ff_f (yn, 10, 0.125L, -127057845771019398.252538486899753195L);
7281 TEST_ff_f (yn, 10, 0.75L, -2133501638.90573424452445412893839236L);
7282 TEST_ff_f (yn, 10, 1.0, -121618014.278689189288130426667971145L);
7283 TEST_ff_f (yn, 10, 2.0, -129184.542208039282635913145923304214L);
7284 TEST_ff_f (yn, 10, 10.0, -0.359814152183402722051986577343560609L);
7292 significand_test (void)
7294 /* significand returns the mantissa of the exponential representation. */
7295 START (significand);
7297 TEST_f_f (significand, 4.0, 1.0);
7298 TEST_f_f (significand, 6.0, 1.5);
7299 TEST_f_f (significand, 8.0, 1.0);
7308 fpstack_test ("start *init*");
7310 nan_value = plus_zero / plus_zero; /* Suppress GCC warning */
7312 minus_zero = FUNC(copysign) (0.0, -1.0);
7313 plus_infty = CHOOSE (HUGE_VALL, HUGE_VAL, HUGE_VALF,
7314 HUGE_VALL, HUGE_VAL, HUGE_VALF);
7315 minus_infty = CHOOSE (-HUGE_VALL, -HUGE_VAL, -HUGE_VALF,
7316 -HUGE_VALL, -HUGE_VAL, -HUGE_VALF);
7317 max_value = CHOOSE (LDBL_MAX, DBL_MAX, FLT_MAX,
7318 LDBL_MAX, DBL_MAX, FLT_MAX);
7319 min_value = CHOOSE (LDBL_MIN, DBL_MIN, FLT_MIN,
7320 LDBL_MIN, DBL_MIN, FLT_MIN);
7326 (void) &minus_infty;
7330 /* Clear all exceptions. From now on we must not get random exceptions. */
7331 feclearexcept (FE_ALL_EXCEPT);
7333 /* Test to make sure we start correctly. */
7334 fpstack_test ("end *init*");
7337 /* Definitions of arguments for argp functions. */
7338 static const struct argp_option options[] =
7340 { "verbose", 'v', "NUMBER", 0, "Level of verbosity (0..3)"},
7341 { "ulps-file", 'u', NULL, 0, "Output ulps to file ULPs"},
7342 { "no-max-error", 'f', NULL, 0,
7343 "Don't output maximal errors of functions"},
7344 { "no-points", 'p', NULL, 0,
7345 "Don't output results of functions invocations"},
7346 { "ignore-max-ulp", 'i', "yes/no", 0,
7347 "Ignore given maximal errors"},
7348 { NULL, 0, NULL, 0, NULL }
7351 /* Short description of program. */
7352 static const char doc[] = "Math test suite: " TEST_MSG ;
7354 /* Prototype for option handler. */
7355 static error_t parse_opt (int key, char *arg, struct argp_state *state);
7357 /* Data structure to communicate with argp functions. */
7358 static struct argp argp =
7360 options, parse_opt, NULL, doc,
7364 /* Handle program arguments. */
7366 parse_opt (int key, char *arg, struct argp_state *state)
7371 output_max_error = 0;
7374 if (strcmp (arg, "yes") == 0)
7376 else if (strcmp (arg, "no") == 0)
7387 verbose = (unsigned int) strtoul (optarg, NULL, 0);
7392 return ARGP_ERR_UNKNOWN;
7398 /* function to check our ulp calculation. */
7405 /* This gives one ulp. */
7406 u = FUNC(nextafter) (10, 20);
7407 check_equal (10.0, u, 1, &diff, &ulp);
7408 printf ("One ulp: % .4" PRINTF_NEXPR "\n", ulp);
7410 /* This gives one more ulp. */
7411 u = FUNC(nextafter) (u, 20);
7412 check_equal (10.0, u, 2, &diff, &ulp);
7413 printf ("two ulp: % .4" PRINTF_NEXPR "\n", ulp);
7415 /* And now calculate 100 ulp. */
7416 for (i = 2; i < 100; i++)
7417 u = FUNC(nextafter) (u, 20);
7418 check_equal (10.0, u, 100, &diff, &ulp);
7419 printf ("100 ulp: % .4" PRINTF_NEXPR "\n", ulp);
7424 main (int argc, char **argv)
7431 output_max_error = 1;
7433 /* XXX set to 0 for releases. */
7436 /* Parse and process arguments. */
7437 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
7439 if (remaining != argc)
7441 fprintf (stderr, "wrong number of arguments");
7442 argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name);
7443 exit (EXIT_FAILURE);
7448 ulps_file = fopen ("ULPs", "a");
7449 if (ulps_file == NULL)
7451 perror ("can't open file `ULPs' for writing: ");
7464 /* Keep the tests a wee bit ordered (according to ISO C99). */
7465 /* Classification macros: */
7471 /* Trigonometric functions: */
7477 cos_test_tonearest ();
7478 cos_test_towardzero ();
7479 cos_test_downward ();
7482 sin_test_tonearest ();
7483 sin_test_towardzero ();
7484 sin_test_downward ();
7488 tan_test_tonearest ();
7489 tan_test_towardzero ();
7490 tan_test_downward ();
7493 /* Hyperbolic functions: */
7498 cosh_test_tonearest ();
7499 cosh_test_towardzero ();
7500 cosh_test_downward ();
7501 cosh_test_upward ();
7503 sinh_test_tonearest ();
7504 sinh_test_towardzero ();
7505 sinh_test_downward ();
7506 sinh_test_upward ();
7509 /* Exponential and logarithmic functions: */
7511 exp_test_tonearest ();
7512 exp_test_towardzero ();
7513 exp_test_downward ();
7530 significand_test ();
7532 /* Power and absolute value functions: */
7537 pow_test_tonearest ();
7538 pow_test_towardzero ();
7539 pow_test_downward ();
7543 /* Error and gamma functions: */
7550 /* Nearest integer functions: */
7555 rint_test_tonearest ();
7556 rint_test_towardzero ();
7557 rint_test_downward ();
7558 rint_test_upward ();
7560 lrint_test_tonearest ();
7561 lrint_test_towardzero ();
7562 lrint_test_downward ();
7563 lrint_test_upward ();
7565 llrint_test_tonearest ();
7566 llrint_test_towardzero ();
7567 llrint_test_downward ();
7568 llrint_test_upward ();
7574 /* Remainder functions: */
7579 /* Manipulation functions: */
7584 /* maximum, minimum and positive difference functions */
7589 /* Multiply and add: */
7592 /* Complex functions: */
7617 /* Bessel functions: */
7628 printf ("\nTest suite completed:\n");
7629 printf (" %d test cases plus %d tests for exception flags executed.\n",
7630 noTests, noExcTests);
7632 printf (" %d expected failures occurred.\n", noXFails);
7634 printf (" %d unexpected passes occurred.\n", noXPasses);
7637 printf (" %d errors occurred.\n", noErrors);
7640 printf (" All tests passed successfully.\n");