aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--math/gen-auto-libm-tests.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/math/gen-auto-libm-tests.c b/math/gen-auto-libm-tests.c
index 1708f4d467..dd216af320 100644
--- a/math/gen-auto-libm-tests.c
+++ b/math/gen-auto-libm-tests.c
@@ -40,9 +40,10 @@
empty lines.
Other lines are test lines, of the form "function input1 input2
- ... [flag1 flag2 ...]". Inputs are either finite real numbers or
- integers, depending on the function under test. Real numbers may
- be in any form acceptable to mpfr_strtofr (base 0); integers in any
+ ... [flag1 flag2 ...]". Inputs are either finite real numbers,
+ positive or negative infinite (in the form of "inf" or "-inf"), or
+ integers, depending on the function under test. Real numbers may be
+ in any form acceptable to mpfr_strtofr (base 0), and integers in any
form acceptable to mpz_set_str (base 0). In addition, real numbers
may be certain special strings such as "pi", as listed in the
special_real_inputs array.
@@ -988,6 +989,27 @@ special_fill_e_minus_1 (mpfr_t res0, mpfr_t res1, fp_format format)
return 2;
}
+/* Set the precision of RES0 based on FORMAT and initialize as an
+ infinite number. */
+static size_t
+special_fill_inf (mpfr_t res0, mpfr_t res1 __attribute__ ((unused)),
+ fp_format format)
+{
+ mpfr_init2 (res0, fp_formats[format].mant_dig);
+ mpfr_set_inf (res0, 0);
+ return 1;
+}
+
+/* Same as special_fill_inf, but set the sign of infinite as negative. */
+static size_t
+special_fill_minus_inf (mpfr_t res0, mpfr_t res1 __attribute__ ((unused)),
+ fp_format format)
+{
+ mpfr_init2 (res0, fp_formats[format].mant_dig);
+ mpfr_set_inf (res0, -1);
+ return 1;
+}
+
/* A special string accepted in input arguments. */
typedef struct
{
@@ -1023,6 +1045,8 @@ static const special_real_input special_real_inputs[] =
{ "e", special_fill_e },
{ "1/e", special_fill_1_e },
{ "e-1", special_fill_e_minus_1 },
+ { "inf", special_fill_inf },
+ { "-inf", special_fill_minus_inf },
};
/* Given a real number R computed in round-to-zero mode, set the
@@ -1069,7 +1093,6 @@ round_real (mpfr_t res[rm_num_modes],
unsigned int exc_after[rm_num_modes],
mpfr_t r, fp_format format)
{
- assert (mpfr_number_p (r));
for (rounding_mode m = rm_first_mode; m < rm_num_modes; m++)
{
mpfr_init2 (res[m], fp_formats[format].mant_dig);