summaryrefslogtreecommitdiff
path: root/tests/texceptions.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2012-04-20 11:18:38 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2012-04-20 11:18:38 +0000
commit7b493b54c63d6bc54065a52c8a40497e74ee0975 (patch)
tree3314bd0fd42e4324569e100f7f6fbd8ad2029767 /tests/texceptions.c
parent512883d32f76e21d1845881542d43d31a1de285d (diff)
downloadmpfr-7b493b54c63d6bc54065a52c8a40497e74ee0975.tar.gz
[tests/texceptions.c] Added test of the mpfr_flags_* functions/macros.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/flags@8145 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/texceptions.c')
-rw-r--r--tests/texceptions.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/texceptions.c b/tests/texceptions.c
index e3767056a..82231718a 100644
--- a/tests/texceptions.c
+++ b/tests/texceptions.c
@@ -336,6 +336,80 @@ check_set (void)
MPFR_ASSERTN (__gmpfr_flags == 0);
}
+static void
+check_groups (void)
+{
+ int i, j;
+ for (i = 0; i < 200; i++)
+ {
+ mpfr_flags_t f1, f2, mask;
+
+ f1 = __gmpfr_flags;
+ MPFR_ASSERTN (mpfr_flags_save () == f1);
+ MPFR_ASSERTN ((mpfr_flags_save) () == f1);
+ MPFR_ASSERTN (__gmpfr_flags == f1);
+ mask = randlimb () & MPFR_FLAGS_ALL;
+ if (randlimb () & 1)
+ mpfr_flags_set (mask);
+ else
+ (mpfr_flags_set) (mask);
+ for (j = 1; j <= MPFR_FLAGS_ALL; j <<= 1)
+ if ((__gmpfr_flags & j) != ((mask & j) != 0 ? j : (f1 & j)))
+ {
+ printf ("mpfr_flags_set error: old = 0x%lx, group = 0x%lx, "
+ "new = 0x%lx, j = 0x%lx\n",
+ (unsigned long) f1, (unsigned long) mask,
+ (unsigned long) __gmpfr_flags, (unsigned long) j);
+ exit (1);
+ }
+
+ f2 = __gmpfr_flags;
+ mask = randlimb () & MPFR_FLAGS_ALL;
+ if (randlimb () & 1)
+ mpfr_flags_clear (mask);
+ else
+ (mpfr_flags_clear) (mask);
+ for (j = 1; j <= MPFR_FLAGS_ALL; j <<= 1)
+ if ((__gmpfr_flags & j) != ((mask & j) != 0 ? 0 : (f2 & j)))
+ {
+ printf ("mpfr_flags_clear error: old = 0x%lx, group = 0x%lx, "
+ "new = 0x%lx, j = 0x%lx\n",
+ (unsigned long) f2, (unsigned long) mask,
+ (unsigned long) __gmpfr_flags, (unsigned long) j);
+ exit (1);
+ }
+
+ mask = randlimb () & MPFR_FLAGS_ALL;
+ f2 = (randlimb () & 1) ?
+ mpfr_flags_test (mask) : (mpfr_flags_test) (mask);
+ for (j = 1; j <= MPFR_FLAGS_ALL; j <<= 1)
+ if ((f2 & j) != ((mask & j) != 0 ? (__gmpfr_flags & j) : 0))
+ {
+ printf ("mpfr_flags_test error: current = 0x%lx, mask = 0x%lx, "
+ "res = 0x%lx, j = 0x%lx\n",
+ (unsigned long) __gmpfr_flags, (unsigned long) mask,
+ (unsigned long) f2, (unsigned long) j);
+ exit (1);
+ }
+
+ f2 = __gmpfr_flags;
+ if (randlimb () & 1)
+ mpfr_flags_restore (f1, mask);
+ else
+ (mpfr_flags_restore) (f1, mask);
+ for (j = 1; j <= MPFR_FLAGS_ALL; j <<= 1)
+ if ((__gmpfr_flags & j) != (((mask & j) != 0 ? f1 : f2) & j))
+ {
+ printf ("mpfr_flags_restore error: old = 0x%lx, flags = 0x%lx, "
+ "mask = 0x%lx, new = 0x%lx, j = 0x%lx\n",
+ (unsigned long) f2, (unsigned long) f1,
+ (unsigned long) mask, (unsigned long) __gmpfr_flags,
+ (unsigned long) j);
+ exit (1);
+ }
+ }
+}
+
int
main (int argc, char *argv[])
{
@@ -437,6 +511,7 @@ main (int argc, char *argv[])
check_set_get_prec ();
check_powerof2 ();
check_set ();
+ check_groups ();
tests_end_mpfr ();
return 0;