summaryrefslogtreecommitdiff
path: root/tests/tagm.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2013-08-23 02:41:24 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2013-08-23 02:41:24 +0000
commita80a670c8a7341ea3185f55e0821d9a4ecc7540f (patch)
tree705f80be581ffd91a7f222eb91d0a9472077a754 /tests/tagm.c
parent355cac084eb0ba3c906f76cd0b4d822228b1c270 (diff)
downloadmpfr-a80a670c8a7341ea3185f55e0821d9a4ecc7540f.tar.gz
[src/agm.c] Corrected a comment.
[tests/tagm.c] Added tests concerning special values, in particular (zero,negative) and symmetric tests. [doc/mpfr.texi] Corrected mpfr_agm description. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@8666 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tagm.c')
-rw-r--r--tests/tagm.c72
1 files changed, 66 insertions, 6 deletions
diff --git a/tests/tagm.c b/tests/tagm.c
index fc0d499a8..93c91eda7 100644
--- a/tests/tagm.c
+++ b/tests/tagm.c
@@ -166,7 +166,7 @@ check_large (void)
}
static void
-check_nans (void)
+check_special (void)
{
mpfr_t x, y, m;
@@ -174,11 +174,13 @@ check_nans (void)
mpfr_init2 (y, 123L);
mpfr_init2 (m, 123L);
- /* agm(1,nan) == nan */
+ /* agm(1,nan) is NaN */
mpfr_set_ui (x, 1L, MPFR_RNDN);
mpfr_set_nan (y);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
/* agm(1,+inf) == +inf */
mpfr_set_ui (x, 1L, MPFR_RNDN);
@@ -186,6 +188,9 @@ check_nans (void)
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_inf_p (m));
MPFR_ASSERTN (mpfr_sgn (m) > 0);
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_inf_p (m));
+ MPFR_ASSERTN (mpfr_sgn (m) > 0);
/* agm(+inf,+inf) == +inf */
mpfr_set_inf (x, 1);
@@ -194,23 +199,55 @@ check_nans (void)
MPFR_ASSERTN (mpfr_inf_p (m));
MPFR_ASSERTN (mpfr_sgn (m) > 0);
- /* agm(-inf,+inf) == nan */
+ /* agm(-inf,+inf) is NaN */
mpfr_set_inf (x, -1);
mpfr_set_inf (y, 1);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
- /* agm(+0,+inf) == nan */
+ /* agm(+0,+inf) is NaN */
mpfr_set_ui (x, 0, MPFR_RNDN);
mpfr_set_inf (y, 1);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+
+ /* agm(-0,+inf) is NaN */
+ mpfr_set_ui (x, 0, MPFR_RNDN);
+ mpfr_neg (x, x, MPFR_RNDN);
+ mpfr_set_inf (y, 1);
+ mpfr_agm (m, x, y, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+
+ /* agm(+0,-inf) is NaN */
+ mpfr_set_ui (x, 0, MPFR_RNDN);
+ mpfr_set_inf (y, -1);
+ mpfr_agm (m, x, y, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+
+ /* agm(-0,-inf) is NaN */
+ mpfr_set_ui (x, 0, MPFR_RNDN);
+ mpfr_neg (x, x, MPFR_RNDN);
+ mpfr_set_inf (y, -1);
+ mpfr_agm (m, x, y, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
/* agm(+0,1) == +0 */
mpfr_set_ui (x, 0, MPFR_RNDN);
mpfr_set_ui (y, 1, MPFR_RNDN);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
/* agm(-0,1) == +0 */
mpfr_set_ui (x, 0, MPFR_RNDN);
@@ -218,6 +255,25 @@ check_nans (void)
mpfr_set_ui (y, 1, MPFR_RNDN);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+
+ /* agm(+0,-1) == +0 */
+ mpfr_set_ui (x, 0, MPFR_RNDN);
+ mpfr_set_si (y, -1, MPFR_RNDN);
+ mpfr_agm (m, x, y, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+
+ /* agm(-0,-1) == +0 */
+ mpfr_set_ui (x, 0, MPFR_RNDN);
+ mpfr_neg (x, x, MPFR_RNDN);
+ mpfr_set_si (y, -1, MPFR_RNDN);
+ mpfr_agm (m, x, y, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
/* agm(-0,+0) == +0 */
mpfr_set_ui (x, 0, MPFR_RNDN);
@@ -225,6 +281,8 @@ check_nans (void)
mpfr_set_ui (y, 0, MPFR_RNDN);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (MPFR_IS_ZERO (m) && MPFR_IS_POS(m));
/* agm(1,1) == 1 */
mpfr_set_ui (x, 1, MPFR_RNDN);
@@ -232,11 +290,13 @@ check_nans (void)
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_cmp_ui (m ,1) == 0);
- /* agm(-1,-2) == NaN */
+ /* agm(-1,-2) is NaN */
mpfr_set_si (x, -1, MPFR_RNDN);
mpfr_set_si (y, -2, MPFR_RNDN);
mpfr_agm (m, x, y, MPFR_RNDN);
MPFR_ASSERTN (mpfr_nan_p (m));
+ mpfr_agm (m, y, x, MPFR_RNDN);
+ MPFR_ASSERTN (mpfr_nan_p (m));
mpfr_clear (x);
mpfr_clear (y);
@@ -254,7 +314,7 @@ main (int argc, char* argv[])
{
tests_start_mpfr ();
- check_nans ();
+ check_special ();
check_large ();
check4 ("2.0", "1.0", MPFR_RNDN, "1.456791031046906869", -1);