diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2011-05-22 19:13:25 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2011-05-22 19:13:25 +0000 |
commit | 490d1beb04924aab5c4292c381c208923cbb8d87 (patch) | |
tree | c1d8cfdc1c5012eca45c02dc48d211b333aa92bf /tests | |
parent | 7cfb26616023f20a0d8c9f92e58c16c4bb230141 (diff) | |
download | mpfr-490d1beb04924aab5c4292c381c208923cbb8d87.tar.gz |
[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
Diffstat (limited to 'tests')
-rw-r--r-- | tests/trec_sqrt.c | 62 |
1 files changed, 62 insertions, 0 deletions
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"); |