From 490d1beb04924aab5c4292c381c208923cbb8d87 Mon Sep 17 00:00:00 2001 From: zimmerma Date: Sun, 22 May 2011 19:13:25 +0000 Subject: [src/rec_sqrt.c] continued review; I can now prove that cu=0 in all cases [tests/trec_sqrt.c] added tests for corner cases git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@7711 280ebfd0-de03-0410-8827-d642c229c3f4 --- tests/trec_sqrt.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'tests') diff --git a/tests/trec_sqrt.c b/tests/trec_sqrt.c index 9c6fbf0d8..68bfbce13 100644 --- a/tests/trec_sqrt.c +++ b/tests/trec_sqrt.c @@ -119,6 +119,67 @@ pm2 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode) return mpfr_pow_si (y, x, -2, rnd_mode); } +/* exercises corner cases with inputs around 1 or 2 */ +static void +bad_case2 (void) +{ + mpfr_t r, u; + mpfr_prec_t pr, pu; + mpfr_rnd_t rnd; + + for (pr = MPFR_PREC_MIN; pr <= 192; pr++) + for (pu = MPFR_PREC_MIN; pu <= 192; pu++) + { + mpfr_init2 (r, pr); + mpfr_init2 (u, pu); + + mpfr_set_ui (u, 1, MPFR_RNDN); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextbelow (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextbelow (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_set_ui (u, 1, MPFR_RNDN); + mpfr_nextabove (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextabove (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_set_ui (u, 2, MPFR_RNDN); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextbelow (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextbelow (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_set_ui (u, 2, MPFR_RNDN); + mpfr_nextabove (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_nextabove (u); + for (rnd = 0; rnd < MPFR_RND_MAX; rnd++) + mpfr_rec_sqrt (r, u, rnd); + + mpfr_clear (r); + mpfr_clear (u); + } +} + int main (void) { @@ -126,6 +187,7 @@ main (void) special (); bad_case1 (); + bad_case2 (); test_generic (2, 300, 15); data_check ("data/rec_sqrt", mpfr_rec_sqrt, "mpfr_rec_sqrt"); -- cgit v1.2.1