#define END_COMPLEX \
print_complex_max_error (this_func)
+/* Run tests for a given function in all rounding modes. */
+#define ALL_RM_TEST(FUNC, EXACT, ARRAY, LOOP_MACRO, END_MACRO, ...) \
+ do \
+ { \
+ do \
+ { \
+ START (FUNC, EXACT); \
+ LOOP_MACRO (FUNC, ARRAY, , ## __VA_ARGS__); \
+ END_MACRO; \
+ } \
+ while (0); \
+ do \
+ { \
+ START (FUNC ## _downward, EXACT); \
+ LOOP_MACRO (FUNC, ARRAY, FE_DOWNWARD, ## __VA_ARGS__); \
+ END_MACRO; \
+ } \
+ while (0); \
+ do \
+ { \
+ START (FUNC ## _towardzero, EXACT); \
+ LOOP_MACRO (FUNC, ARRAY, FE_TOWARDZERO, ## __VA_ARGS__); \
+ END_MACRO; \
+ } \
+ while (0); \
+ do \
+ { \
+ START (FUNC ## _upward, EXACT); \
+ LOOP_MACRO (FUNC, ARRAY, FE_UPWARD, ## __VA_ARGS__); \
+ END_MACRO; \
+ } \
+ while (0); \
+ } \
+ while (0);
+
/* This is to prevent messages from the SVID libm emulation. */
int
matherr (struct exception *x __attribute__ ((unused)))
static void
ceil_test (void)
{
- START (ceil, 1);
- RUN_TEST_LOOP_f_f (ceil, ceil_test_data, );
- END;
+ ALL_RM_TEST (ceil, 1, ceil_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
cimag_test (void)
{
- START (cimag, 1);
- RUN_TEST_LOOP_c_f (cimag, cimag_test_data, );
- END;
+ ALL_RM_TEST (cimag, 1, cimag_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data clog_test_data[] =
static void
conj_test (void)
{
- START (conj, 1);
- RUN_TEST_LOOP_c_c (conj, conj_test_data, );
- END_COMPLEX;
+ ALL_RM_TEST (conj, 1, conj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static void
copysign_test (void)
{
- START (copysign, 1);
- RUN_TEST_LOOP_ff_f (copysign, copysign_test_data, );
- END;
+ ALL_RM_TEST (copysign, 1, copysign_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
cproj_test (void)
{
- START (cproj, 1);
- RUN_TEST_LOOP_c_c (cproj, cproj_test_data, );
- END_COMPLEX;
+ ALL_RM_TEST (cproj, 1, cproj_test_data, RUN_TEST_LOOP_c_c, END_COMPLEX);
}
static void
creal_test (void)
{
- START (creal, 1);
- RUN_TEST_LOOP_c_f (creal, creal_test_data, );
- END;
+ ALL_RM_TEST (creal, 1, creal_test_data, RUN_TEST_LOOP_c_f, END);
}
static const struct test_c_c_data csin_test_data[] =
static void
fabs_test (void)
{
- START (fabs, 1);
- RUN_TEST_LOOP_f_f (fabs, fabs_test_data, );
- END;
+ ALL_RM_TEST (fabs, 1, fabs_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
floor_test (void)
{
- START (floor, 1);
- RUN_TEST_LOOP_f_f (floor, floor_test_data, );
- END;
+ ALL_RM_TEST (floor, 1, floor_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
fmax_test (void)
{
- START (fmax, 1);
- RUN_TEST_LOOP_ff_f (fmax, fmax_test_data, );
- END;
+ ALL_RM_TEST (fmax, 1, fmax_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
fmin_test (void)
{
- START (fmin, 1);
- RUN_TEST_LOOP_ff_f (fmin, fmin_test_data, );
- END;
+ ALL_RM_TEST (fmin, 1, fmin_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
fmod_test (void)
{
- START (fmod, 1);
- RUN_TEST_LOOP_ff_f (fmod, fmod_test_data, );
- END;
+ ALL_RM_TEST (fmod, 1, fmod_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
fpclassify_test (void)
{
- START (fpclassify, 1);
- RUN_TEST_LOOP_f_i_tg (fpclassify, fpclassify_test_data, );
- END;
+ ALL_RM_TEST (fpclassify, 1, fpclassify_test_data, RUN_TEST_LOOP_f_i_tg, END);
}
{
int x;
- START (frexp, 1);
- RUN_TEST_LOOP_fI_f1 (frexp, frexp_test_data, , x);
- END;
+ ALL_RM_TEST (frexp, 1, frexp_test_data, RUN_TEST_LOOP_fI_f1, END, x);
}
static const struct test_ff_f_data hypot_test_data[] =
static void
ilogb_test (void)
{
- START (ilogb, 1);
- RUN_TEST_LOOP_f_i (ilogb, ilogb_test_data, );
- END;
+ ALL_RM_TEST (ilogb, 1, ilogb_test_data, RUN_TEST_LOOP_f_i, END);
}
static const struct test_f_i_data isfinite_test_data[] =
static void
isfinite_test (void)
{
- START (isfinite, 1);
- RUN_TEST_LOOP_f_b_tg (isfinite, isfinite_test_data, );
- END;
+ ALL_RM_TEST (isfinite, 1, isfinite_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static void
finite_test (void)
{
- START (finite, 1);
/* finite uses the same test data as isfinite. */
- RUN_TEST_LOOP_f_b (finite, isfinite_test_data, );
- END;
+ ALL_RM_TEST (finite, 1, isfinite_test_data, RUN_TEST_LOOP_f_b, END);
}
static const struct test_ff_i_data isgreater_test_data[] =
static void
isgreater_test (void)
{
- START (isgreater, 1);
- RUN_TEST_LOOP_ff_i_tg (isgreater, isgreater_test_data, );
- END;
+ ALL_RM_TEST (isgreater, 1, isgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data isgreaterequal_test_data[] =
static void
isgreaterequal_test (void)
{
- START (isgreaterequal, 1);
- RUN_TEST_LOOP_ff_i_tg (isgreaterequal, isgreaterequal_test_data, );
- END;
+ ALL_RM_TEST (isgreaterequal, 1, isgreaterequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_i_data isinf_test_data[] =
static void
isinf_test (void)
{
- START (isinf, 1);
- RUN_TEST_LOOP_f_b_tg (isinf, isinf_test_data, );
- END;
+ ALL_RM_TEST (isinf, 1, isinf_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_ff_i_data isless_test_data[] =
static void
isless_test (void)
{
- START (isless, 1);
- RUN_TEST_LOOP_ff_i_tg (isless, isless_test_data, );
- END;
+ ALL_RM_TEST (isless, 1, isless_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data islessequal_test_data[] =
static void
islessequal_test (void)
{
- START (islessequal, 1);
- RUN_TEST_LOOP_ff_i_tg (islessequal, islessequal_test_data, );
- END;
+ ALL_RM_TEST (islessequal, 1, islessequal_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_ff_i_data islessgreater_test_data[] =
static void
islessgreater_test (void)
{
- START (islessgreater, 1);
- RUN_TEST_LOOP_ff_i_tg (islessgreater, islessgreater_test_data, );
- END;
+ ALL_RM_TEST (islessgreater, 1, islessgreater_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_i_data isnan_test_data[] =
static void
isnan_test (void)
{
- START (isnan, 1);
- RUN_TEST_LOOP_f_b_tg (isnan, isnan_test_data, );
- END;
+ ALL_RM_TEST (isnan, 1, isnan_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_f_i_data isnormal_test_data[] =
static void
isnormal_test (void)
{
- START (isnormal, 1);
- RUN_TEST_LOOP_f_b_tg (isnormal, isnormal_test_data, );
- END;
+ ALL_RM_TEST (isnormal, 1, isnormal_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_f_i_data issignaling_test_data[] =
static void
issignaling_test (void)
{
- START (issignaling, 1);
- RUN_TEST_LOOP_f_b_tg (issignaling, issignaling_test_data, );
- END;
+ ALL_RM_TEST (issignaling, 1, issignaling_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static const struct test_ff_i_data isunordered_test_data[] =
static void
isunordered_test (void)
{
- START (isunordered, 1);
- RUN_TEST_LOOP_ff_i_tg (isunordered, isunordered_test_data, );
- END;
+ ALL_RM_TEST (isunordered, 1, isunordered_test_data, RUN_TEST_LOOP_ff_i_tg, END);
}
static const struct test_f_f_data j0_test_data[] =
static void
logb_test (void)
{
- START (logb, 1);
- RUN_TEST_LOOP_f_f (logb, logb_test_data, );
- END;
-}
-
-static const struct test_f_f_data logb_downward_test_data[] =
- {
- /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.". Libm
- should not return -0 from logb in any rounding mode. PowerPC32 has
- failed with this test for power4 logb (and logbl on all PowerPC
- platforms) in the past due to instruction selection. GCC PR 52775
- provides the availability of the fcfid insn in 32-bit mode which
- eliminates the use of fsub in this instance and prevents the negative
- signed 0.0. */
-
- /* BZ #887 */
- TEST_f_f (logb, 1.000e+0, plus_zero, NO_INEXACT_EXCEPTION),
- };
-
-static void
-logb_test_downward (void)
-{
- START (logb_downward, 1);
- RUN_TEST_LOOP_f_f (logb, logb_downward_test_data, FE_DOWNWARD);
- END;
+ ALL_RM_TEST (logb, 1, logb_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_l_data lround_test_data[] =
static void
lround_test (void)
{
- START (lround, 1);
- RUN_TEST_LOOP_f_l (lround, lround_test_data, );
- END;
+ ALL_RM_TEST (lround, 1, lround_test_data, RUN_TEST_LOOP_f_l, END);
}
static void
llround_test (void)
{
- START (llround, 1);
- RUN_TEST_LOOP_f_L (llround, llround_test_data, );
- END;
+ ALL_RM_TEST (llround, 1, llround_test_data, RUN_TEST_LOOP_f_L, END);
}
static const struct test_fF_f1_data modf_test_data[] =
{
FLOAT x;
- START (modf, 1);
- RUN_TEST_LOOP_fF_f1 (modf, modf_test_data, , x);
- END;
+ ALL_RM_TEST (modf, 1, modf_test_data, RUN_TEST_LOOP_fF_f1, END, x);
}
static void
nexttoward_test (void)
{
- START (nexttoward, 1);
- RUN_TEST_LOOP_ff_f (nexttoward, nexttoward_test_data, );
- END;
+ ALL_RM_TEST (nexttoward, 1, nexttoward_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
remainder_test (void)
{
- START (remainder, 1);
- RUN_TEST_LOOP_ff_f (remainder, remainder_test_data, );
- END;
+ ALL_RM_TEST (remainder, 1, remainder_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
drem_test (void)
{
- START (drem, 1);
- /* drem uses the same test data as remainder. */
- RUN_TEST_LOOP_ff_f (drem, remainder_test_data, );
- END;
-}
-
-
-static const struct test_ff_f_data remainder_tonearest_test_data[] =
- {
- TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, 1, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 7.0, plus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 7.0, minus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 1.625, 1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, 1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 1.625, -1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, -1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 5.0, 2.0, 1.0, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION),
- };
-
-static void
-remainder_test_tonearest (void)
-{
- START (remainder_tonearest, 1);
- RUN_TEST_LOOP_ff_f (remainder, remainder_tonearest_test_data, FE_TONEAREST);
- END;
-}
-
-static void
-drem_test_tonearest (void)
-{
- START (drem_tonearest, 1);
- /* drem uses the same test data as remainder. */
- RUN_TEST_LOOP_ff_f (drem, remainder_tonearest_test_data, FE_TONEAREST);
- END;
-}
-
-
-static const struct test_ff_f_data remainder_towardzero_test_data[] =
- {
- TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, 1, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 7.0, plus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 7.0, minus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 1.625, 1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, 1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 1.625, -1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, -1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 5.0, 2.0, 1.0, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION),
- };
-
-static void
-remainder_test_towardzero (void)
-{
- START (remainder_towardzero, 1);
- RUN_TEST_LOOP_ff_f (remainder, remainder_towardzero_test_data, FE_TOWARDZERO);
- END;
-}
-
-static void
-drem_test_towardzero (void)
-{
- START (drem_towardzero, 1);
- /* drem uses the same test data as remainder. */
- RUN_TEST_LOOP_ff_f (drem, remainder_towardzero_test_data, FE_TOWARDZERO);
- END;
-}
-
-
-static const struct test_ff_f_data remainder_downward_test_data[] =
- {
- TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, 1, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 7.0, plus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 7.0, minus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 1.625, 1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, 1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 1.625, -1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, -1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 5.0, 2.0, 1.0, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION),
- };
-
-static void
-remainder_test_downward (void)
-{
- START (remainder_downward, 1);
- RUN_TEST_LOOP_ff_f (remainder, remainder_downward_test_data, FE_DOWNWARD);
- END;
-}
-
-static void
-drem_test_downward (void)
-{
- START (drem_downward, 1);
/* drem uses the same test data as remainder. */
- RUN_TEST_LOOP_ff_f (drem, remainder_downward_test_data, FE_DOWNWARD);
- END;
-}
-
-
-static const struct test_ff_f_data remainder_upward_test_data[] =
- {
- TEST_ff_f (remainder, 1, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, 1, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, plus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 0, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 1, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, minus_infty, 2, qnan_value, NO_INEXACT_EXCEPTION|INVALID_EXCEPTION|ERRNO_EDOM),
- TEST_ff_f (remainder, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 0, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, qnan_value, 0, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 7.0, plus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
- TEST_ff_f (remainder, 7.0, minus_infty, 7.0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
-
- TEST_ff_f (remainder, 1.625, 1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, 1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 1.625, -1.0, -0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, -1.625, -1.0, 0.375, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 5.0, 2.0, 1.0, NO_INEXACT_EXCEPTION),
- TEST_ff_f (remainder, 3.0, 2.0, -1.0, NO_INEXACT_EXCEPTION),
- };
-
-static void
-remainder_test_upward (void)
-{
- START (remainder_upward, 1);
- RUN_TEST_LOOP_ff_f (remainder, remainder_upward_test_data, FE_UPWARD);
- END;
+ ALL_RM_TEST (drem, 1, remainder_test_data, RUN_TEST_LOOP_ff_f, END);
}
-static void
-drem_test_upward (void)
-{
- START (drem_upward, 1);
- /* drem uses the same test data as remainder. */
- RUN_TEST_LOOP_ff_f (drem, remainder_upward_test_data, FE_UPWARD);
- END;
-}
static const struct test_ffI_f1_data remquo_test_data[] =
{
static void
remquo_test (void)
{
- /* x is needed. */
int x;
- START (remquo, 1);
- RUN_TEST_LOOP_ffI_f1 (remquo, remquo_test_data, , x);
- END;
+ ALL_RM_TEST (remquo, 1, remquo_test_data, RUN_TEST_LOOP_ffI_f1, END, x);
}
static const struct test_f_f_data rint_test_data[] =
static void
round_test (void)
{
- START (round, 1);
- RUN_TEST_LOOP_f_f (round, round_test_data, );
- END;
+ ALL_RM_TEST (round, 1, round_test_data, RUN_TEST_LOOP_f_f, END);
}
static void
signbit_test (void)
{
- START (signbit, 1);
- RUN_TEST_LOOP_f_b_tg (signbit, signbit_test_data, );
- END;
+ ALL_RM_TEST (signbit, 1, signbit_test_data, RUN_TEST_LOOP_f_b_tg, END);
}
static void
trunc_test (void)
{
- START (trunc, 1);
- RUN_TEST_LOOP_f_f (trunc, trunc_test_data, );
- END;
+ ALL_RM_TEST (trunc, 1, trunc_test_data, RUN_TEST_LOOP_f_f, END);
}
static const struct test_f_f_data y0_test_data[] =
static void
significand_test (void)
{
- START (significand, 1);
- RUN_TEST_LOOP_f_f (significand, significand_test_data, );
- END;
+ ALL_RM_TEST (significand, 1, significand_test_data, RUN_TEST_LOOP_f_f, END);
}
log1p_test ();
log2_test ();
logb_test ();
- logb_test_downward ();
modf_test ();
pow10_test ();
ilogb_test ();
/* Remainder functions: */
drem_test ();
- drem_test_tonearest ();
- drem_test_towardzero ();
- drem_test_downward ();
- drem_test_upward ();
fmod_test ();
remainder_test ();
- remainder_test_tonearest ();
- remainder_test_towardzero ();
- remainder_test_downward ();
- remainder_test_upward ();
remquo_test ();
/* Manipulation functions: */