=================================================================== RCS file: /home/cvs/OpenXM_contrib/gmp/mpfr/tests/Attic/tcmp2.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.2 diff -u -p -r1.1.1.1 -r1.1.1.2 --- OpenXM_contrib/gmp/mpfr/tests/Attic/tcmp2.c 2000/09/09 14:12:19 1.1.1.1 +++ OpenXM_contrib/gmp/mpfr/tests/Attic/tcmp2.c 2003/08/25 16:06:09 1.1.1.2 @@ -1,20 +1,20 @@ /* Test file for mpfr_cmp2. -Copyright (C) 1999 PolKA project, Inria Lorraine and Loria +Copyright 1999, 2000, 2001, 2002 Free Software Foundation. This file is part of the MPFR Library. The MPFR Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Library General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at your +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The MPFR Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. -You should have received a copy of the GNU Library General Public License +You should have received a copy of the GNU Lesser General Public License along with the MPFR Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ @@ -23,66 +23,285 @@ MA 02111-1307, USA. */ #include #include #include "gmp.h" -#include "longlong.h" #include "mpfr.h" #include "mpfr-impl.h" -#ifdef IRIX64 -#include -#endif +#include "mpfr-test.h" -extern int isnan(); +void tcmp2 _PROTO ((double, double, int)); +void special _PROTO ((void)); +void worst_cases _PROTO ((void)); +void set_bit _PROTO ((mpfr_t, unsigned int, int)); -void tcmp2(x, y, i) double x, y; int i; +/* set bit n of x to b, where bit 0 is the most significant one */ +void +set_bit (mpfr_t x, unsigned int n, int b) { - mpfr_t xx,yy; int j; + unsigned l; + mp_size_t xn; + xn = (MPFR_PREC(x) - 1) / mp_bits_per_limb; + l = n / mp_bits_per_limb; + n %= mp_bits_per_limb; + n = mp_bits_per_limb - 1 - n; + if (b) + MPFR_MANT(x)[xn - l] |= (mp_limb_t) 1 << n; + else + MPFR_MANT(x)[xn - l] &= ~((mp_limb_t) 1 << n); +} + +/* check that for x = 1.u 1 v 0^k low(x) + y = 1.u 0 v 1^k low(y) + mpfr_cmp2 (x, y) returns 1 + |u| + |v| + k for low(x) >= low(y), + and 1 + |u| + |v| + k + 1 otherwise */ +void +worst_cases (void) +{ + mpfr_t x, y; + unsigned int i, j, k, b, expected; + mp_prec_t l; + + mpfr_init2 (x, 200); + mpfr_init2 (y, 200); + + mpfr_set_ui (y, 1, GMP_RNDN); + for (i=1; i