summaryrefslogtreecommitdiff
path: root/tests/tdiv.c
diff options
context:
space:
mode:
authorthevenyp <thevenyp@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2008-09-23 13:18:26 +0000
committerthevenyp <thevenyp@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2008-09-23 13:18:26 +0000
commit86b3bc4ee78196ca7bf665c403d19f43e189f710 (patch)
tree5d1c64c2df6f11636e2d5f5b8810b9b9c1600c03 /tests/tdiv.c
parentce01a7d314fbfb601571ce357ca19f74c99c9fbe (diff)
downloadmpc-86b3bc4ee78196ca7bf665c403d19f43e189f710.tar.gz
tests/tgeneric_ccc.c: random tests for complex functions of two complex variable and tests for parameter reuse.
tests/Makefile.am: add tgeneric_ccc.c to EXTRA_DIST tests/tdiv.c tests/tadd.c tests/tsub.c tests/tmul.c: use tgeneric_ccc.c git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@188 211d60ee-9f03-0410-a15a-8952a2c7a4e4
Diffstat (limited to 'tests/tdiv.c')
-rw-r--r--tests/tdiv.c75
1 files changed, 11 insertions, 64 deletions
diff --git a/tests/tdiv.c b/tests/tdiv.c
index e986043..5cb964f 100644
--- a/tests/tdiv.c
+++ b/tests/tdiv.c
@@ -26,8 +26,13 @@ MA 02111-1307, USA. */
#include "mpc.h"
#include "mpc-impl.h"
-#define ERR(x) { mpc_out_str (stderr, 2, 0, x, MPC_RNDNN); \
- fprintf (stderr, "\n"); }
+static int
+mpc_div_ref (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
+
+#include "random.c"
+#define TEST_FUNCTION mpc_div
+#define REFERENCE_FUNCTION mpc_div_ref
+#include "tgeneric_ccc.c"
static int
mpc_div_ref (mpc_ptr a, mpc_srcptr b, mpc_srcptr c, mpc_rnd_t rnd)
@@ -210,6 +215,7 @@ mpc_div_ref (mpc_ptr a, mpc_srcptr b, mpc_srcptr c, mpc_rnd_t rnd)
|| ((err < prec) && mpfr_can_round (u, prec - err, rnd_im,
MPC_RND_IM (rnd),
MPFR_PREC (MPC_IM (a))));
+
if ((rnd_im == GMP_RNDU && mpfr_sgn (u) < 0)
|| (rnd_im == GMP_RNDD && mpfr_sgn (u) > 0))
{
@@ -308,73 +314,14 @@ check_regular (void)
mpc_clear (q);
}
-
int
main (void)
{
- mpc_t b, c, q, q_ref;
- int inex, i;
- mp_prec_t prec;
- mp_rnd_t rnd_re, rnd_im;
- mpc_rnd_t rnd;
+ test_start ();
check_regular ();
+ tgeneric (2, 1024, 1, 4096);
- mpc_init (b);
- mpc_init (c);
- mpc_init (q);
- mpc_init (q_ref);
-
- for (prec = 2; prec < 1000; prec++)
- {
- const size_t s = 1 + (prec-1)/BITS_PER_MP_LIMB;
-
- mpc_set_prec (b, prec);
- mpc_set_prec (c, prec);
- mpc_set_prec (q, prec);
- mpc_set_prec (q_ref, prec);
-
- for (i = 0; i < (int) (1000/prec); i++)
- {
- mpc_random2 (b, s, 0);
- /* generate a non-zero divisor */
- do
- {
- mpc_random2 (c, s, 0);
- }
- while (mpfr_sgn (MPC_RE(c)) == 0 && mpfr_sgn (MPC_IM(c)) == 0);
-
- for (rnd_re = (mp_rnd_t)0; rnd_re < (mp_rnd_t)4; ++rnd_re)
- for (rnd_im = (mp_rnd_t)0; rnd_im < (mp_rnd_t)4; ++rnd_im)
- {
- rnd = RNDC(rnd_re, rnd_im);
- mpc_div (q, b, c, rnd);
- mpc_div_ref (q_ref, b, c, rnd);
- if (mpc_cmp (q, q_ref))
- {
- fprintf (stderr, "mpc_div and mpc_div_ref differ"
- "for prec=%lu rnd=(%s,%s)\n", prec,
- mpfr_print_rnd_mode (rnd_re),
- mpfr_print_rnd_mode (rnd_im));
- fprintf (stderr, "b=");
- ERR(b);
- fprintf (stderr, "c=");
- ERR(c);
- fprintf (stderr, "q=");
- ERR(q);
- fprintf (stderr, "q_ref=");
- ERR(q_ref);
- exit (1);
- }
- }
- }
-
- }
-
- mpc_clear (b);
- mpc_clear (c);
- mpc_clear (q);
- mpc_clear (q_ref);
-
+ test_end ();
return 0;
}