aboutsummaryrefslogtreecommitdiff
path: root/math/gen-auto-libm-tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'math/gen-auto-libm-tests.c')
-rw-r--r--math/gen-auto-libm-tests.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/math/gen-auto-libm-tests.c b/math/gen-auto-libm-tests.c
index 2b8d766762..206a5d7475 100644
--- a/math/gen-auto-libm-tests.c
+++ b/math/gen-auto-libm-tests.c
@@ -85,14 +85,17 @@
The flag "no-test-inline" indicates a test is disabled for inline
function testing; "xfail" indicates the test is disabled as
- expected to produce incorrect results. Otherwise, test flags are
- of the form "spurious-<exception>" and "missing-<exception>", for
- any exception ("overflow", "underflow", "inexact", "invalid",
- "divbyzero"), "spurious-errno" and "missing-errno", to indicate
- when tests are expected to deviate from the exception and errno
- settings corresponding to the mathematical results. "xfail",
- "spurious-" and "missing-" flags should be accompanied by a comment
- referring to an open bug in glibc Bugzilla.
+ expected to produce incorrect results, "xfail-rounding" indicates
+ the test is disabled only in rounding modes other than
+ round-to-nearest. Otherwise, test flags are of the form
+ "spurious-<exception>" and "missing-<exception>", for any exception
+ ("overflow", "underflow", "inexact", "invalid", "divbyzero"),
+ "spurious-errno" and "missing-errno", to indicate when tests are
+ expected to deviate from the exception and errno settings
+ corresponding to the mathematical results. "xfail",
+ "xfail-rounding", "spurious-" and "missing-" flags should be
+ accompanied by a comment referring to an open bug in glibc
+ Bugzilla.
The output file auto-libm-test-out contains the test lines from
auto-libm-test-in, and, after the line for a given test, some
@@ -309,6 +312,7 @@ typedef enum
{
flag_no_test_inline,
flag_xfail,
+ flag_xfail_rounding,
/* The "spurious" and "missing" flags must be in the same order as
the fp_exception enumeration. */
flag_spurious_divbyzero,
@@ -335,6 +339,7 @@ static const char *const input_flags[num_input_flag_types] =
{
"no-test-inline",
"xfail",
+ "xfail-rounding",
"spurious-divbyzero",
"spurious-inexact",
"spurious-invalid",
@@ -815,7 +820,7 @@ adjust_real (mpfr_t r, bool inexact)
if (!inexact)
return;
/* NaNs are exact, as are infinities in round-to-zero mode. */
- assert (mpfr_regular_p (r));
+ assert (mpfr_number_p (r));
if (mpfr_cmpabs (r, global_min) < 0)
assert_exact (mpfr_copysign (r, global_min, r, MPFR_RNDN));
else if (mpfr_cmpabs (r, global_max) > 0)
@@ -1591,6 +1596,15 @@ output_for_one_input_case (FILE *fp, const char *filename, test_function *tf,
error (EXIT_FAILURE, errno, "write to '%s'",
filename);
break;
+ case flag_xfail_rounding:
+ if (m != rm_tonearest)
+ if (fprintf (fp, " xfail%s",
+ (it->flags[i].cond
+ ? it->flags[i].cond
+ : "")) < 0)
+ error (EXIT_FAILURE, errno, "write to '%s'",
+ filename);
+ break;
default:
break;
}