Replace libm-test.inc TEST_INLINE conditionals with NO_TEST_INLINE flag.

This commit is contained in:
Joseph Myers 2013-11-16 12:46:52 +00:00
parent ca07f1973b
commit 14407b7e60
3 changed files with 309 additions and 250 deletions

View File

@ -1,5 +1,42 @@
2013-11-16 Joseph Myers <joseph@codesourcery.com>
* math/libm-test.inc (NO_TEST_INLINE): New macro.
(ERRNO_UNCHANGED): Update value.
(ERRNO_EDOM): Likewise.
(ERRNO_ERANGE): Likewise.
(NO_TEST_INLINE_FLOAT): New macro.
(NO_TEST_INLINE_DOUBLE): Likewise.
(enable_test): New function.
(RUN_TEST_f_f): Check enable_test before running test.
(RUN_TEST_2_f): Likewise.
(RUN_TEST_fff_f): Likewise.
(RUN_TEST_c_f): Likewise.
(RUN_TEST_f_f1): Likewise.
(RUN_TEST_fF_f1): Likewise.
(RUN_TEST_fI_f1): Likewise.
(RUN_TEST_ffI_f1): Likewise.
(RUN_TEST_c_c): Likewise.
(RUN_TEST_cc_c): Likewise.
(RUN_TEST_f_i): Likewise.
(RUN_TEST_f_i_tg): Likewise.
(RUN_TEST_ff_i_tg): Likewise.
(RUN_TEST_f_b): Likewise.
(RUN_TEST_f_b_tg): Likewise.
(RUN_TEST_f_l): Likewise.
(RUN_TEST_f_L): Likewise.
(RUN_TEST_fFF_11): Likewise.
(asinh_test_data): Use NO_TEST_INLINE instead of [!TEST_INLINE]
conditionals.
(cosh_test_data): Likewise.
(exp_test_data): Likewise.
(expm1_test_data): Likewise.
(hypot_test_data): Likewise.
(pow_test_data): Likewise.
(sinh_test_data): Likewise.
(tanh_test_data): Likewise.
* math/gen-libm-test.pl (parse_args): Allow NO_TEST_INLINE as
flags argument.
* libm-test.inc (acos_test_data): Disallow inexact exceptions for
tests with quiet NaN input and output.
(acosh_test_data): Likewise.

View File

@ -216,7 +216,7 @@ sub parse_args {
# consistency check
if ($current_arg == $#args) {
die ("wrong number of arguments")
unless ($args[$current_arg] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN/);
unless ($args[$current_arg] =~ /EXCEPTION|ERRNO|IGNORE_ZERO_INF_SIGN|NO_TEST_INLINE/);
} elsif ($current_arg < $#args) {
die ("wrong number of arguments");
} elsif ($current_arg > ($#args+1)) {

View File

@ -173,10 +173,11 @@ struct ulp_data
#define EXCEPTIONS_OK INVALID_EXCEPTION_OK+DIVIDE_BY_ZERO_EXCEPTION_OK
/* Some special test flags, passed together with exceptions. */
#define IGNORE_ZERO_INF_SIGN 0x400
#define NO_TEST_INLINE 0x800
/* Indicate errno settings required or disallowed. */
#define ERRNO_UNCHANGED 0x800
#define ERRNO_EDOM 0x1000
#define ERRNO_ERANGE 0x2000
#define ERRNO_UNCHANGED 0x1000
#define ERRNO_EDOM 0x2000
#define ERRNO_ERANGE 0x4000
/* Values underflowing only for float. */
#ifdef TEST_FLOAT
@ -209,6 +210,18 @@ struct ulp_data
? 0 \
: UNDERFLOW_EXCEPTION)
/* Inline tests disabled for particular types. */
#ifdef TEST_FLOAT
# define NO_TEST_INLINE_FLOAT NO_TEST_INLINE
#else
# define NO_TEST_INLINE_FLOAT 0
#endif
#ifdef TEST_DOUBLE
# define NO_TEST_INLINE_DOUBLE NO_TEST_INLINE
#else
# define NO_TEST_INLINE_DOUBLE 0
#endif
/* Various constants (we must supply them precalculated for accuracy). */
#define M_PI_6l .52359877559829887307710723054658383L
#define M_E2l 7.389056098930650227230427460575008L
@ -942,6 +955,17 @@ check_longlong (const char *test_name, long long int computed,
errno = 0;
}
/* Return whether a test with flags EXCEPTIONS should be run. */
static int
enable_test (int exceptions)
{
#ifdef TEST_INLINE
if (exceptions & NO_TEST_INLINE)
return 0;
#endif
return 1;
}
/* Structures for each kind of test. */
struct test_f_f_data
{
@ -1137,15 +1161,16 @@ struct test_fFF_11_data
/* Run an individual test, including any required setup and checking
of results, or loop over all tests in an array. */
#define RUN_TEST_f_f(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
#define RUN_TEST_f_f(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1153,15 +1178,16 @@ struct test_fFF_11_data
RUN_TEST_f_f ((ARRAY)[i].arg_str, FUNC_NAME, (ARRAY)[i].arg, \
(ARRAY)[i].expected, (ARRAY)[i].exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_2_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
#define RUN_TEST_2_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_2_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1181,12 +1207,13 @@ struct test_fFF_11_data
#define RUN_TEST_fff_f(ARG_STR, FUNC_NAME, ARG1, ARG2, ARG3, \
EXPECTED, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, FUNC (FUNC_NAME) (ARG1, ARG2, ARG3), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fff_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1198,13 +1225,14 @@ struct test_fFF_11_data
#define RUN_TEST_c_f(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_float (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1, ARG2)), \
EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_c_f(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1213,21 +1241,22 @@ struct test_fFF_11_data
(ARRAY)[i].argc, (ARRAY)[i].expected, \
(ARRAY)[i].exceptions); \
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
#define RUN_TEST_f_f1(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1241,17 +1270,18 @@ struct test_fFF_11_data
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_float (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_float (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fF_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1265,17 +1295,18 @@ struct test_fFF_11_data
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, FUNC (FUNC_NAME) (ARG, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fI_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, EXTRA_VAR) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1289,18 +1320,19 @@ struct test_fFF_11_data
EXCEPTIONS, EXTRA_VAR, EXTRA_TEST, \
EXTRA_EXPECTED) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, \
FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
(EXTRA_VAR) = (EXTRA_EXPECTED) == 0 ? 1 : 0; \
check_float (test_name, \
FUNC (FUNC_NAME) (ARG1, ARG2, &(EXTRA_VAR)), \
EXPECTED, EXCEPTIONS); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA_TEST) \
check_int (extra1_name, EXTRA_VAR, EXTRA_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_ffI_f1(FUNC_NAME, ARRAY, ROUNDING_MODE, \
EXTRA_VAR) \
@ -1315,13 +1347,14 @@ struct test_fFF_11_data
#define RUN_TEST_c_c(ARG_STR, FUNC_NAME, ARGR, ARGC, EXPR, EXPC, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARGR, ARGC)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_c_c(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1333,14 +1366,15 @@ struct test_fFF_11_data
#define RUN_TEST_cc_c(ARG_STR, FUNC_NAME, ARG1R, ARG1C, ARG2R, ARG2C, \
EXPR, EXPC, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C), \
BUILD_COMPLEX (ARG2R, ARG2C)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_complex (test_name, \
FUNC (FUNC_NAME) (BUILD_COMPLEX (ARG1R, ARG1C), \
BUILD_COMPLEX (ARG2R, ARG2C)), \
BUILD_COMPLEX (EXPR, EXPC), EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_cc_c(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1352,12 +1386,13 @@ struct test_fFF_11_data
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_i(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_i(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1368,11 +1403,12 @@ struct test_fFF_11_data
#define RUN_TEST_f_i_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1383,12 +1419,13 @@ struct test_fFF_11_data
#define RUN_TEST_ff_i_tg(ARG_STR, FUNC_NAME, ARG1, ARG2, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG1, ARG2), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_int (test_name, FUNC_NAME (ARG1, ARG2), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_ff_i_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1399,12 +1436,13 @@ struct test_fFF_11_data
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_b(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_b(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1415,11 +1453,12 @@ struct test_fFF_11_data
#define RUN_TEST_f_b_tg(ARG_STR, FUNC_NAME, ARG, EXPECTED, \
EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_bool (test_name, FUNC_NAME (ARG), EXPECTED, EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_b_tg(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1429,12 +1468,13 @@ struct test_fFF_11_data
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_l(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_long (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_long (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_l(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1444,12 +1484,13 @@ struct test_fFF_11_data
ROUND_RESTORE_ ## ROUNDING_MODE
#define RUN_TEST_f_L(ARG_STR, FUNC_NAME, ARG, EXPECTED, EXCEPTIONS) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_longlong (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
check_longlong (test_name, FUNC (FUNC_NAME) (ARG), EXPECTED, \
EXCEPTIONS); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_f_L(FUNC_NAME, ARRAY, ROUNDING_MODE) \
IF_ROUND_INIT_ ## ROUNDING_MODE \
@ -1462,20 +1503,21 @@ struct test_fFF_11_data
EXTRA1_EXPECTED, EXTRA2_VAR, \
EXTRA2_TEST, EXTRA2_EXPECTED) \
do \
{ \
COMMON_TEST_SETUP (ARG_STR); \
FUNC (FUNC_NAME) (ARG, &(EXTRA1_VAR), &(EXTRA2_VAR)); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA1_TEST) \
check_float (extra1_name, EXTRA1_VAR, EXTRA1_EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 2); \
if (EXTRA2_TEST) \
check_float (extra2_name, EXTRA2_VAR, EXTRA2_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (2); \
COMMON_TEST_CLEANUP; \
} \
if (enable_test (EXCEPTIONS)) \
{ \
COMMON_TEST_SETUP (ARG_STR); \
FUNC (FUNC_NAME) (ARG, &(EXTRA1_VAR), &(EXTRA2_VAR)); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 1); \
if (EXTRA1_TEST) \
check_float (extra1_name, EXTRA1_VAR, EXTRA1_EXPECTED, \
EXCEPTIONS); \
EXTRA_OUTPUT_TEST_CLEANUP (1); \
EXTRA_OUTPUT_TEST_SETUP (ARG_STR, 2); \
if (EXTRA2_TEST) \
check_float (extra2_name, EXTRA2_VAR, EXTRA2_EXPECTED, 0); \
EXTRA_OUTPUT_TEST_CLEANUP (2); \
COMMON_TEST_CLEANUP; \
} \
while (0)
#define RUN_TEST_LOOP_fFF_11(FUNC_NAME, ARRAY, ROUNDING_MODE, \
EXTRA1_VAR, EXTRA2_VAR) \
@ -1774,10 +1816,8 @@ static const struct test_f_f_data asinh_test_data[] =
{
TEST_f_f (asinh, 0, 0),
TEST_f_f (asinh, minus_zero, minus_zero),
#ifndef TEST_INLINE
TEST_f_f (asinh, plus_infty, plus_infty),
TEST_f_f (asinh, minus_infty, minus_infty),
#endif
TEST_f_f (asinh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (asinh, minus_infty, minus_infty, NO_TEST_INLINE),
TEST_f_f (asinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (asinh, 0.75L, 0.693147180559945309417232121458176568L),
};
@ -6952,10 +6992,8 @@ static const struct test_f_f_data cosh_test_data[] =
TEST_f_f (cosh, 0, 1),
TEST_f_f (cosh, minus_zero, 1),
#ifndef TEST_INLINE
TEST_f_f (cosh, plus_infty, plus_infty),
TEST_f_f (cosh, minus_infty, plus_infty),
#endif
TEST_f_f (cosh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (cosh, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (cosh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L),
@ -7890,10 +7928,8 @@ static const struct test_f_f_data exp_test_data[] =
TEST_f_f (exp, 0, 1),
TEST_f_f (exp, minus_zero, 1),
#ifndef TEST_INLINE
TEST_f_f (exp, plus_infty, plus_infty),
TEST_f_f (exp, minus_infty, 0),
#endif
TEST_f_f (exp, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (exp, minus_infty, 0, NO_TEST_INLINE),
TEST_f_f (exp, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (exp, 1, M_El),
@ -8083,10 +8119,8 @@ static const struct test_f_f_data expm1_test_data[] =
TEST_f_f (expm1, 0, 0),
TEST_f_f (expm1, minus_zero, minus_zero),
#ifndef TEST_INLINE
TEST_f_f (expm1, plus_infty, plus_infty),
TEST_f_f (expm1, minus_infty, -1),
#endif
TEST_f_f (expm1, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (expm1, minus_infty, -1, NO_TEST_INLINE),
TEST_f_f (expm1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (expm1, 1, M_El - 1.0),
@ -9430,12 +9464,10 @@ static const struct test_ff_f_data hypot_test_data[] =
TEST_ff_f (hypot, plus_infty, 1, plus_infty),
TEST_ff_f (hypot, minus_infty, 1, plus_infty),
#ifndef TEST_INLINE
TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty),
TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty),
TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty),
TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty),
#endif
TEST_ff_f (hypot, plus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, minus_infty, qnan_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (hypot, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
@ -9462,18 +9494,16 @@ static const struct test_ff_f_data hypot_test_data[] =
TEST_ff_f (hypot, 0x1.23456789abcdef0123456789ab8p-500L, 0x1.23456789abcdef0123456789ab8p-500L, 4.9155782399407039128612180934736799735113e-151L),
#endif
#if !(defined TEST_FLOAT && defined TEST_INLINE)
TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L),
TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L),
TEST_ff_f (hypot, 0x3p125L, 0x4p125L, 0x5p125L, NO_TEST_INLINE_FLOAT),
TEST_ff_f (hypot, 0x1.234566p-126L, 0x1.234566p-126L, 1.891441686191081936598531534017449451173e-38L, NO_TEST_INLINE_FLOAT),
#ifndef TEST_FLOAT
TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L, NO_TEST_INLINE_DOUBLE),
TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L, NO_TEST_INLINE_DOUBLE),
#endif
#if !defined TEST_FLOAT && !(defined TEST_DOUBLE && defined TEST_INLINE)
TEST_ff_f (hypot, 0x3p1021L, 0x4p1021L, 0x5p1021L),
TEST_ff_f (hypot, 0x1p+0L, 0x0.3ep-1022L, 0x1p+0L),
#endif
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384 && !defined TEST_INLINE
TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L),
#if defined TEST_LDOUBLE && LDBL_MAX_EXP >= 16384
TEST_ff_f (hypot, 0x3p16381L, 0x4p16381L, 0x5p16381L, NO_TEST_INLINE),
#endif
TEST_ff_f (hypot, 0x1p-149L, 0x1p-149L, 1.9817352931807469938024533350782879785095e-45L, UNDERFLOW_EXCEPTION_FLOAT),
@ -9482,10 +9512,10 @@ static const struct test_ff_f_data hypot_test_data[] =
TEST_ff_f (hypot, 0x1p-1074L, 0x1p-1074L, 6.9871433705131320800651344656990806305791e-324L, UNDERFLOW_EXCEPTION_DOUBLE),
#endif
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381 && !defined TEST_INLINE
TEST_ff_f (hypot, 0x1p-16445L, 0x1p-16445L, 5.1550906155442528702558159159596215039925e-4951L, UNDERFLOW_EXCEPTION),
#if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
TEST_ff_f (hypot, 0x1p-16445L, 0x1p-16445L, 5.1550906155442528702558159159596215039925e-4951L, UNDERFLOW_EXCEPTION|NO_TEST_INLINE),
# if LDBL_MANT_DIG >= 113
TEST_ff_f (hypot, 0x1p-16494L, 0x1p-16494L, 9.1572804726500807075521065242888978445857e-4966L, UNDERFLOW_EXCEPTION),
TEST_ff_f (hypot, 0x1p-16494L, 0x1p-16494L, 9.1572804726500807075521065242888978445857e-4966L, UNDERFLOW_EXCEPTION|NO_TEST_INLINE),
# endif
#endif
};
@ -11551,63 +11581,61 @@ static const struct test_ff_f_data pow_test_data[] =
TEST_ff_f (pow, qnan_value, 0, 1),
TEST_ff_f (pow, qnan_value, minus_zero, 1),
#ifndef TEST_INLINE
TEST_ff_f (pow, 1.1L, plus_infty, plus_infty),
TEST_ff_f (pow, plus_infty, plus_infty, plus_infty),
TEST_ff_f (pow, -1.1L, plus_infty, plus_infty),
TEST_ff_f (pow, minus_infty, plus_infty, plus_infty),
TEST_ff_f (pow, 1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -1.1L, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, 0.9L, plus_infty, 0),
TEST_ff_f (pow, 1e-7L, plus_infty, 0),
TEST_ff_f (pow, -0.9L, plus_infty, 0),
TEST_ff_f (pow, -1e-7L, plus_infty, 0),
TEST_ff_f (pow, 0.9L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 1e-7L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -0.9L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -1e-7L, plus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 1.1L, minus_infty, 0),
TEST_ff_f (pow, plus_infty, minus_infty, 0),
TEST_ff_f (pow, -1.1L, minus_infty, 0),
TEST_ff_f (pow, minus_infty, minus_infty, 0),
TEST_ff_f (pow, 1.1L, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, -1.1L, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, minus_infty, 0, NO_TEST_INLINE),
TEST_ff_f (pow, 0.9L, minus_infty, plus_infty),
TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty),
TEST_ff_f (pow, -0.9L, minus_infty, plus_infty),
TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty),
TEST_ff_f (pow, 0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, 1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -0.9L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, -1e-7L, minus_infty, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty),
TEST_ff_f (pow, plus_infty, 1, plus_infty),
TEST_ff_f (pow, plus_infty, 1e7L, plus_infty),
TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty),
TEST_ff_f (pow, plus_infty, 1e-7L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, 1e7L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1e-7L, 0),
TEST_ff_f (pow, plus_infty, -1, 0),
TEST_ff_f (pow, plus_infty, -1e7L, 0),
TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0),
TEST_ff_f (pow, plus_infty, -1e-7L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -1e7L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, plus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1, minus_infty),
TEST_ff_f (pow, minus_infty, 11, minus_infty),
TEST_ff_f (pow, minus_infty, 1001, minus_infty),
TEST_ff_f (pow, minus_infty, 1, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 11, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1001, minus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 2, plus_infty),
TEST_ff_f (pow, minus_infty, 12, plus_infty),
TEST_ff_f (pow, minus_infty, 1002, plus_infty),
TEST_ff_f (pow, minus_infty, 0.1L, plus_infty),
TEST_ff_f (pow, minus_infty, 1.1L, plus_infty),
TEST_ff_f (pow, minus_infty, 11.1L, plus_infty),
TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty),
TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty),
TEST_ff_f (pow, minus_infty, 2, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 12, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1002, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 0.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 11.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, 1001.1L, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, min_subnorm_value, plus_infty, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1, minus_zero),
TEST_ff_f (pow, minus_infty, -11, minus_zero),
TEST_ff_f (pow, minus_infty, -1001, minus_zero),
TEST_ff_f (pow, minus_infty, -1, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -11, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1001, minus_zero, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -2, 0),
TEST_ff_f (pow, minus_infty, -12, 0),
TEST_ff_f (pow, minus_infty, -1002, 0),
TEST_ff_f (pow, minus_infty, -0.1L, 0),
TEST_ff_f (pow, minus_infty, -1.1L, 0),
TEST_ff_f (pow, minus_infty, -11.1L, 0),
TEST_ff_f (pow, minus_infty, -1001.1L, 0),
TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0),
#endif
TEST_ff_f (pow, minus_infty, -2, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -12, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1002, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -0.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -11.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -1001.1L, 0, NO_TEST_INLINE),
TEST_ff_f (pow, minus_infty, -min_subnorm_value, 0, NO_TEST_INLINE),
TEST_ff_f (pow, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_ff_f (pow, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
@ -11744,19 +11772,17 @@ static const struct test_ff_f_data pow_test_data[] =
TEST_ff_f (pow, 0, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
TEST_ff_f (pow, minus_zero, minus_infty, plus_infty, DIVIDE_BY_ZERO_EXCEPTION_OK),
#ifndef TEST_INLINE
/* pow (x, +inf) == +inf for |x| > 1. */
TEST_ff_f (pow, 1.5, plus_infty, plus_infty),
TEST_ff_f (pow, 1.5, plus_infty, plus_infty, NO_TEST_INLINE),
/* pow (x, +inf) == +0 for |x| < 1. */
TEST_ff_f (pow, 0.5, plus_infty, 0.0),
TEST_ff_f (pow, 0.5, plus_infty, 0.0, NO_TEST_INLINE),
/* pow (x, -inf) == +0 for |x| > 1. */
TEST_ff_f (pow, 1.5, minus_infty, 0.0),
TEST_ff_f (pow, 1.5, minus_infty, 0.0, NO_TEST_INLINE),
/* pow (x, -inf) == +inf for |x| < 1. */
TEST_ff_f (pow, 0.5, minus_infty, plus_infty),
#endif
TEST_ff_f (pow, 0.5, minus_infty, plus_infty, NO_TEST_INLINE),
/* pow (+inf, y) == +inf for y > 0. */
TEST_ff_f (pow, plus_infty, 2, plus_infty),
@ -13522,10 +13548,8 @@ static const struct test_f_f_data sinh_test_data[] =
TEST_f_f (sinh, 0, 0),
TEST_f_f (sinh, minus_zero, minus_zero),
#ifndef TEST_INLINE
TEST_f_f (sinh, plus_infty, plus_infty),
TEST_f_f (sinh, minus_infty, minus_infty),
#endif
TEST_f_f (sinh, plus_infty, plus_infty, NO_TEST_INLINE),
TEST_f_f (sinh, minus_infty, minus_infty, NO_TEST_INLINE),
TEST_f_f (sinh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (sinh, 0.75L, 0.822316731935829980703661634446913849L),
@ -13804,10 +13828,8 @@ static const struct test_f_f_data tanh_test_data[] =
TEST_f_f (tanh, 0, 0),
TEST_f_f (tanh, minus_zero, minus_zero),
#ifndef TEST_INLINE
TEST_f_f (tanh, plus_infty, 1),
TEST_f_f (tanh, minus_infty, -1),
#endif
TEST_f_f (tanh, plus_infty, 1, NO_TEST_INLINE),
TEST_f_f (tanh, minus_infty, -1, NO_TEST_INLINE),
TEST_f_f (tanh, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
TEST_f_f (tanh, 0.75L, 0.635148952387287319214434357312496495L),