diff options
Diffstat (limited to 'tests/troot.c')
-rw-r--r-- | tests/troot.c | 92 |
1 files changed, 48 insertions, 44 deletions
diff --git a/tests/troot.c b/tests/troot.c index 0337e71b4..b8c86587f 100644 --- a/tests/troot.c +++ b/tests/troot.c @@ -1,4 +1,4 @@ -/* Test file for mpfr_root. +/* Test file for mpfr_root (also used for mpfr_rootn_ui). Copyright 2005-2017 Free Software Foundation, Inc. Contributed by the AriC and Caramba projects, INRIA. @@ -20,6 +20,10 @@ along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifndef TF +# define TF mpfr_root +#endif + #include "mpfr-test.h" #include <time.h> @@ -33,7 +37,7 @@ cputime (void) #define DEFN(N) \ static int root##N (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd) \ - { return mpfr_root (y, x, N, rnd); } \ + { return TF (y, x, N, rnd); } \ static int pow##N (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd) \ { return mpfr_pow_ui (y, x, N, rnd); } @@ -55,7 +59,7 @@ special (void) /* root(NaN) = NaN */ mpfr_set_nan (x); - mpfr_root (y, x, 17, MPFR_RNDN); + TF (y, x, 17, MPFR_RNDN); if (!mpfr_nan_p (y)) { printf ("Error: root(NaN,17) <> NaN\n"); @@ -64,7 +68,7 @@ special (void) /* root(+Inf) = +Inf */ mpfr_set_inf (x, 1); - mpfr_root (y, x, 42, MPFR_RNDN); + TF (y, x, 42, MPFR_RNDN); if (!mpfr_inf_p (y) || mpfr_sgn (y) < 0) { printf ("Error: root(+Inf,42) <> +Inf\n"); @@ -73,7 +77,7 @@ special (void) /* root(-Inf, 17) = -Inf */ mpfr_set_inf (x, -1); - mpfr_root (y, x, 17, MPFR_RNDN); + TF (y, x, 17, MPFR_RNDN); if (!mpfr_inf_p (y) || mpfr_sgn (y) > 0) { printf ("Error: root(-Inf,17) <> -Inf\n"); @@ -81,7 +85,7 @@ special (void) } /* root(-Inf, 42) = NaN */ mpfr_set_inf (x, -1); - mpfr_root (y, x, 42, MPFR_RNDN); + TF (y, x, 42, MPFR_RNDN); if (!mpfr_nan_p (y)) { printf ("Error: root(-Inf,42) <> -Inf\n"); @@ -90,14 +94,14 @@ special (void) /* root(+/-0, k) = +/-0 for k > 0 */ mpfr_set_ui (x, 0, MPFR_RNDN); - mpfr_root (y, x, 17, MPFR_RNDN); + TF (y, x, 17, MPFR_RNDN); if (mpfr_cmp_ui (y, 0) || mpfr_sgn (y) < 0) { printf ("Error: root(+0,17) <> +0\n"); exit (1); } mpfr_neg (x, x, MPFR_RNDN); - mpfr_root (y, x, 42, MPFR_RNDN); + TF (y, x, 42, MPFR_RNDN); if (mpfr_cmp_ui (y, 0) || mpfr_sgn (y) > 0) { printf ("Error: root(-0,42) <> -0\n"); @@ -106,7 +110,7 @@ special (void) mpfr_set_prec (x, 53); mpfr_set_str (x, "8.39005285514734966412e-01", 10, MPFR_RNDN); - mpfr_root (x, x, 3, MPFR_RNDN); + TF (x, x, 3, MPFR_RNDN); if (mpfr_cmp_str1 (x, "9.43166207799662426048e-01")) { printf ("Error in root3 (1)\n"); @@ -119,7 +123,7 @@ special (void) mpfr_set_prec (x, 32); mpfr_set_prec (y, 32); mpfr_set_str_binary (x, "0.10000100001100101001001001011001"); - mpfr_root (x, x, 3, MPFR_RNDN); + TF (x, x, 3, MPFR_RNDN); mpfr_set_str_binary (y, "0.11001101011000100111000111111001"); if (mpfr_cmp (x, y)) { @@ -130,7 +134,7 @@ special (void) mpfr_set_prec (x, 32); mpfr_set_prec (y, 32); mpfr_set_str_binary (x, "-0.1100001110110000010101011001011"); - mpfr_root (x, x, 3, MPFR_RNDD); + TF (x, x, 3, MPFR_RNDD); mpfr_set_str_binary (y, "-0.11101010000100100101000101011001"); if (mpfr_cmp (x, y)) { @@ -141,7 +145,7 @@ special (void) mpfr_set_prec (x, 82); mpfr_set_prec (y, 27); mpfr_set_str_binary (x, "0.1010001111011101011011000111001011001101100011110110010011011011011010011001100101e-7"); - mpfr_root (y, x, 3, MPFR_RNDD); + TF (y, x, 3, MPFR_RNDD); mpfr_set_str_binary (x, "0.101011110001110001000100011E-2"); if (mpfr_cmp (x, y)) { @@ -152,7 +156,7 @@ special (void) mpfr_set_prec (x, 204); mpfr_set_prec (y, 38); mpfr_set_str_binary (x, "0.101000000001101000000001100111111011111001110110100001111000100110100111001101100111110001110001011011010110010011100101111001111100001010010100111011101100000011011000101100010000000011000101001010001001E-5"); - mpfr_root (y, x, 3, MPFR_RNDD); + TF (y, x, 3, MPFR_RNDD); mpfr_set_str_binary (x, "0.10001001111010011011101000010110110010E-1"); if (mpfr_cmp (x, y)) { @@ -164,11 +168,11 @@ special (void) mpfr_set_prec (x, 53); mpfr_set_prec (y, 53); mpfr_set_str_binary (x, "1.0100001101101101001100110001001000000101001101100011E28"); - mpfr_root (y, x, 35, MPFR_RNDN); + TF (y, x, 35, MPFR_RNDN); mpfr_set_str_binary (x, "1.1100000010110101100011101011000010100001101100100011E0"); if (mpfr_cmp (x, y)) { - printf ("Error in mpfr_root (y, x, 35, MPFR_RNDN) for\n" + printf ("Error in rootn (y, x, 35, MPFR_RNDN) for\n" "x = 1.0100001101101101001100110001001000000101001101100011E28\n" "Expected "); mpfr_dump (x); @@ -178,11 +182,11 @@ special (void) } /* Worst cases found on 2006-11-26 */ mpfr_set_str_binary (x, "1.1111010011101110001111010110000101110000110110101100E17"); - mpfr_root (y, x, 36, MPFR_RNDD); + TF (y, x, 36, MPFR_RNDD); mpfr_set_str_binary (x, "1.0110100111010001101001010111001110010100111111000010E0"); if (mpfr_cmp (x, y)) { - printf ("Error in mpfr_root (y, x, 36, MPFR_RNDD) for\n" + printf ("Error in rootn (y, x, 36, MPFR_RNDD) for\n" "x = 1.1111010011101110001111010110000101110000110110101100E17\n" "Expected "); mpfr_dump (x); @@ -191,11 +195,11 @@ special (void) exit (1); } mpfr_set_str_binary (x, "1.1100011101101101100010110001000001110001111110010000E23"); - mpfr_root (y, x, 36, MPFR_RNDU); + TF (y, x, 36, MPFR_RNDU); mpfr_set_str_binary (x, "1.1001010100001110000110111111100011011101110011000100E0"); if (mpfr_cmp (x, y)) { - printf ("Error in mpfr_root (y, x, 36, MPFR_RNDU) for\n" + printf ("Error in rootn (y, x, 36, MPFR_RNDU) for\n" "x = 1.1100011101101101100010110001000001110001111110010000E23\n" "Expected "); mpfr_dump (x); @@ -206,7 +210,7 @@ special (void) /* Check for k = 1 */ mpfr_set_ui (x, 17, MPFR_RNDN); - i = mpfr_root (y, x, 1, MPFR_RNDN); + i = TF (y, x, 1, MPFR_RNDN); if (mpfr_cmp_ui (x, 17) || i != 0) { printf ("Error in root for 17^(1/1)\n"); @@ -214,14 +218,14 @@ special (void) } mpfr_set_ui (x, 0, MPFR_RNDN); - i = mpfr_root (y, x, 0, MPFR_RNDN); + i = TF (y, x, 0, MPFR_RNDN); if (!MPFR_IS_NAN (y) || i != 0) { printf ("Error in root for (+0)^(1/0)\n"); exit (1); } mpfr_neg (x, x, MPFR_RNDN); - i = mpfr_root (y, x, 0, MPFR_RNDN); + i = TF (y, x, 0, MPFR_RNDN); if (!MPFR_IS_NAN (y) || i != 0) { printf ("Error in root for (-0)^(1/0)\n"); @@ -229,7 +233,7 @@ special (void) } mpfr_set_ui (x, 1, MPFR_RNDN); - i = mpfr_root (y, x, 0, MPFR_RNDN); + i = TF (y, x, 0, MPFR_RNDN); if (!MPFR_IS_NAN (y) || i != 0) { printf ("Error in root for 1^(1/0)\n"); @@ -238,7 +242,7 @@ special (void) /* Check for k==2 */ mpfr_set_si (x, -17, MPFR_RNDD); - i = mpfr_root (y, x, 2, MPFR_RNDN); + i = TF (y, x, 2, MPFR_RNDN); if (!MPFR_IS_NAN (y) || i != 0) { printf ("Error in root for (-17)^(1/2)\n"); @@ -265,7 +269,7 @@ bigint (void) mpfr_set_ui (x, 10, MPFR_RNDN); if (sizeof (unsigned long) * CHAR_BIT == 64) { - mpfr_root (x, x, ULONG_MAX, MPFR_RNDN); + TF (x, x, ULONG_MAX, MPFR_RNDN); mpfr_set_ui_2exp (y, 1, -63, MPFR_RNDN); mpfr_add_ui (y, y, 1, MPFR_RNDN); if (! mpfr_equal_p (x, y)) @@ -280,7 +284,7 @@ bigint (void) } mpfr_set_ui (x, 10, MPFR_RNDN); - mpfr_root (x, x, 1234567890, MPFR_RNDN); + TF (x, x, 1234567890, MPFR_RNDN); mpfr_set_str_binary (y, "1.00000000000000000000000000001000000000101011000101000110010001"); if (! mpfr_equal_p (x, y)) @@ -296,7 +300,7 @@ bigint (void) mpfr_clears (x, y, (mpfr_ptr) 0); } -#define TEST_FUNCTION mpfr_root +#define TEST_FUNCTION TF #define INTEGER_TYPE unsigned long #define INT_RAND_FUNCTION() \ (INTEGER_TYPE) (randlimb () & 1 ? randlimb () : randlimb () % 3 + 2) @@ -322,7 +326,7 @@ exact_powers (unsigned long bmax, unsigned long kmax) mpfr_init2 (y, mpz_sizeinbase (z, 2)); for (neg = 0; neg <= 1; neg++) { - inex = mpfr_root (y, x, k, MPFR_RNDN); + inex = TF (y, x, k, MPFR_RNDN); if (inex != 0) { printf ("Error in exact_powers, b=%ld, k=%ld\n", b, k); @@ -386,7 +390,7 @@ cmp_pow (void) inex1 = mpfr_pow (y1, x, y1, rnd); flags1 = __gmpfr_flags; mpfr_clear_flags (); - inex2 = mpfr_root (y2, x, k, rnd); + inex2 = TF (y2, x, k, rnd); flags2 = __gmpfr_flags; if (!(mpfr_equal_p (y1, y2) && SAME_SIGN (inex1, inex2) && flags1 == flags2)) @@ -430,12 +434,12 @@ main (int argc, char *argv[]) mpfr_init2 (x, p); mpfr_init2 (y, p); mpfr_const_pi (y, MPFR_RNDN); - mpfr_root (x, y, k, MPFR_RNDN); /* to warm up cache */ + TF (x, y, k, MPFR_RNDN); /* to warm up cache */ st1 = cputime (); for (l = 0; cputime () - st1 < 1.0; l++) - mpfr_root (x, y, k, MPFR_RNDN); + TF (x, y, k, MPFR_RNDN); st1 = (cputime () - st1) / l; - printf ("mpfr_root took %.2es\n", st1); + printf ("%-15s took %.2es\n", MAKE_STR(TF), st1); /* compare with x^(1/k) = exp(1/k*log(x)) */ /* first warm up cache */ @@ -475,10 +479,10 @@ main (int argc, char *argv[]) { mpfr_set_ui (x, 1, MPFR_RNDN); k = 2 + randlimb () % 4; /* 2 <= k <= 5 */ - mpfr_root (x, x, k, (mpfr_rnd_t) r); + TF (x, x, k, (mpfr_rnd_t) r); if (mpfr_cmp_ui (x, 1)) { - printf ("Error in mpfr_root(%lu) for x=1, rnd=%s\ngot ", + printf ("Error in rootn[%lu] for x=1, rnd=%s\ngot ", k, mpfr_print_rnd_mode ((mpfr_rnd_t) r)); mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); printf ("\n"); @@ -487,10 +491,10 @@ main (int argc, char *argv[]) mpfr_set_si (x, -1, MPFR_RNDN); if (k % 2) { - mpfr_root (x, x, k, (mpfr_rnd_t) r); + TF (x, x, k, (mpfr_rnd_t) r); if (mpfr_cmp_si (x, -1)) { - printf ("Error in mpfr_root(%lu) for x=-1, rnd=%s\ngot ", + printf ("Error in rootn[%lu] for x=-1, rnd=%s\ngot ", k, mpfr_print_rnd_mode ((mpfr_rnd_t) r)); mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); printf ("\n"); @@ -505,10 +509,10 @@ main (int argc, char *argv[]) { mpfr_set_ui (x, 27, MPFR_RNDN); mpfr_mul_2si (x, x, 3*i, MPFR_RNDN); - mpfr_root (x, x, 3, MPFR_RNDN); + TF (x, x, 3, MPFR_RNDN); if (mpfr_cmp_si_2exp (x, 3, i)) { - printf ("Error in mpfr_root(3) for " + printf ("Error in rootn[3] for " "x = 27.0 * 2^(%d), rnd=%s\ngot ", 3*i, mpfr_print_rnd_mode ((mpfr_rnd_t) r)); mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); @@ -523,12 +527,12 @@ main (int argc, char *argv[]) test_generic_ui (MPFR_PREC_MIN, 200, 30); - bad_cases (root2, pow2, "mpfr_root[2]", 8, -256, 255, 4, 128, 800, 40); - bad_cases (root3, pow3, "mpfr_root[3]", 8, -256, 255, 4, 128, 800, 40); - bad_cases (root4, pow4, "mpfr_root[4]", 8, -256, 255, 4, 128, 800, 40); - bad_cases (root5, pow5, "mpfr_root[5]", 8, -256, 255, 4, 128, 800, 40); - bad_cases (root17, pow17, "mpfr_root[17]", 8, -256, 255, 4, 128, 800, 40); - bad_cases (root120, pow120, "mpfr_root[120]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root2, pow2, "rootn[2]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root3, pow3, "rootn[3]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root4, pow4, "rootn[4]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root5, pow5, "rootn[5]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root17, pow17, "rootn[17]", 8, -256, 255, 4, 128, 800, 40); + bad_cases (root120, pow120, "rootn[120]", 8, -256, 255, 4, 128, 800, 40); tests_end_mpfr (); return 0; |