summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2011-05-22 19:13:25 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2011-05-22 19:13:25 +0000
commit490d1beb04924aab5c4292c381c208923cbb8d87 (patch)
treec1d8cfdc1c5012eca45c02dc48d211b333aa92bf /tests
parent7cfb26616023f20a0d8c9f92e58c16c4bb230141 (diff)
downloadmpfr-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.c62
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");