Home | History | Annotate | Line # | Download | only in tests
      1      1.1  mrg /* Test file for mpfr_set_str.
      2      1.1  mrg 
      3  1.1.1.6  mrg Copyright 2004-2023 Free Software Foundation, Inc.
      4  1.1.1.3  mrg Contributed by the AriC and Caramba projects, INRIA.
      5      1.1  mrg 
      6      1.1  mrg This file is part of the GNU MPFR Library.
      7      1.1  mrg 
      8      1.1  mrg The GNU MPFR Library is free software; you can redistribute it and/or modify
      9      1.1  mrg it under the terms of the GNU Lesser General Public License as published by
     10      1.1  mrg the Free Software Foundation; either version 3 of the License, or (at your
     11      1.1  mrg option) any later version.
     12      1.1  mrg 
     13      1.1  mrg The GNU MPFR Library is distributed in the hope that it will be useful, but
     14      1.1  mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15      1.1  mrg or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     16      1.1  mrg License for more details.
     17      1.1  mrg 
     18      1.1  mrg You should have received a copy of the GNU Lesser General Public License
     19      1.1  mrg along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
     20  1.1.1.5  mrg https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
     21      1.1  mrg 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
     22      1.1  mrg 
     23      1.1  mrg #include "mpfr-test.h"
     24      1.1  mrg 
     25  1.1.1.5  mrg /* The implicit \0 is useless, but we do not write num_to_text[62] otherwise
     26  1.1.1.5  mrg    g++ complains. */
     27  1.1.1.5  mrg static const char num_to_text36[] = "0123456789abcdefghijklmnopqrstuvwxyz";
     28  1.1.1.5  mrg static const char num_to_text62[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     29  1.1.1.5  mrg   "abcdefghijklmnopqrstuvwxyz";
     30  1.1.1.5  mrg 
     31      1.1  mrg static void
     32      1.1  mrg check_special (void)
     33      1.1  mrg {
     34      1.1  mrg   mpfr_t x, y;
     35  1.1.1.6  mrg   int i, res;
     36      1.1  mrg   char *s;
     37      1.1  mrg 
     38      1.1  mrg   mpfr_init (x);
     39      1.1  mrg   mpfr_init (y);
     40      1.1  mrg 
     41      1.1  mrg   /* Check dummy case */
     42      1.1  mrg   res = mpfr_strtofr (x, "1234567.89E1", NULL, 10, MPFR_RNDN);
     43      1.1  mrg   mpfr_set_str (y, "1234567.89E1", 10, MPFR_RNDN);
     44      1.1  mrg   if (mpfr_cmp (x, y))
     45      1.1  mrg     {
     46      1.1  mrg       printf ("Results differ between strtofr and set_str.\n"
     47      1.1  mrg               " set_str gives: ");
     48      1.1  mrg       mpfr_dump (y);
     49      1.1  mrg       printf (" strtofr gives: ");
     50      1.1  mrg       mpfr_dump (x);
     51      1.1  mrg       exit (1);
     52      1.1  mrg     }
     53      1.1  mrg 
     54      1.1  mrg   /* Check NAN  */
     55      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     56      1.1  mrg   res = mpfr_strtofr (x, "NaN", &s, 10, MPFR_RNDN);
     57      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || *s != 0)
     58      1.1  mrg     {
     59      1.1  mrg       printf ("Error for setting NAN (1)\n");
     60      1.1  mrg       exit (1);
     61      1.1  mrg     }
     62      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     63      1.1  mrg   res = mpfr_strtofr (x, "+NaN", &s, 10, MPFR_RNDN);
     64      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || *s != 0)
     65      1.1  mrg     {
     66      1.1  mrg       printf ("Error for setting +NAN (1)\n");
     67      1.1  mrg       exit (1);
     68      1.1  mrg     }
     69      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     70      1.1  mrg   res = mpfr_strtofr (x, " -NaN", &s, 10, MPFR_RNDN);
     71      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || *s != 0)
     72      1.1  mrg     {
     73      1.1  mrg       printf ("Error for setting -NAN (1)\n");
     74      1.1  mrg       exit (1);
     75      1.1  mrg     }
     76      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     77      1.1  mrg   res = mpfr_strtofr (x, "@nAn@xx", &s, 16, MPFR_RNDN);
     78      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "xx") )
     79      1.1  mrg     {
     80      1.1  mrg       printf ("Error for setting NAN (2)\n");
     81      1.1  mrg       exit (1);
     82      1.1  mrg     }
     83      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     84      1.1  mrg   res = mpfr_strtofr (x, "NAN(abcdEDF__1256)Hello", &s, 10, MPFR_RNDN);
     85      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "Hello") )
     86      1.1  mrg     {
     87      1.1  mrg       printf ("Error for setting NAN (3)\n");
     88      1.1  mrg       exit (1);
     89      1.1  mrg     }
     90      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     91      1.1  mrg   res = mpfr_strtofr (x, "NAN(abcdEDF)__1256)Hello", &s, 10, MPFR_RNDN);
     92      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "__1256)Hello") )
     93      1.1  mrg     {
     94      1.1  mrg       printf ("Error for setting NAN (4)\n");
     95      1.1  mrg       exit (1);
     96      1.1  mrg     }
     97      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
     98      1.1  mrg   res = mpfr_strtofr (x, "NAN(abc%dEDF)__1256)Hello", &s, 10, MPFR_RNDN);
     99      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "(abc%dEDF)__1256)Hello") )
    100      1.1  mrg     {
    101      1.1  mrg       printf ("Error for setting NAN (5)\n");
    102      1.1  mrg       exit (1);
    103      1.1  mrg     }
    104      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
    105      1.1  mrg   res = mpfr_strtofr (x, "NAN((abc))", &s, 10, MPFR_RNDN);
    106      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "((abc))") )
    107      1.1  mrg     {
    108      1.1  mrg       printf ("Error for setting NAN (6)\n");
    109      1.1  mrg       exit (1);
    110      1.1  mrg     }
    111      1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN); /* make sure that x is modified */
    112      1.1  mrg   res = mpfr_strtofr (x, "NAN()foo", &s, 10, MPFR_RNDN);
    113      1.1  mrg   if (res != 0 || !mpfr_nan_p (x) || strcmp(s, "foo") )
    114      1.1  mrg     {
    115      1.1  mrg       printf ("Error for setting NAN (7)\n");
    116      1.1  mrg       exit (1);
    117      1.1  mrg     }
    118      1.1  mrg 
    119  1.1.1.6  mrg   /* Check infinity */
    120  1.1.1.6  mrg   for (i = 0; i <= 0xff; i++)
    121      1.1  mrg     {
    122  1.1.1.6  mrg       char t[11] = "+@INFINITY";  /* not char *: this will be modified. */
    123  1.1.1.6  mrg       char *p;
    124  1.1.1.6  mrg       int base, j;
    125  1.1.1.6  mrg 
    126  1.1.1.6  mrg       /* Test all the case variants, assuming ASCII or similar.
    127  1.1.1.6  mrg          The first letters are changed first, so that at i = 8,
    128  1.1.1.6  mrg          the 2^3 = 8 "INF" case variants have been tested, and
    129  1.1.1.6  mrg          they don't need to be tested again for i > 8. */
    130  1.1.1.6  mrg       for (j = 0; j < 8; j++)
    131  1.1.1.6  mrg         if ((i >> j) % 2 != 0)
    132  1.1.1.6  mrg           t[j+2] += 'a' - 'A';
    133  1.1.1.6  mrg 
    134  1.1.1.6  mrg       /* Test "INFINITY", "+INFINITY", "-INFINITY",
    135  1.1.1.6  mrg               "INF", "+INF", "-INF",
    136  1.1.1.6  mrg               "@INF@", "+@INF@", "-@INF@",
    137  1.1.1.6  mrg          up to case changes. */
    138  1.1.1.6  mrg       for (j = 0; j < 9; j++)
    139  1.1.1.6  mrg         {
    140  1.1.1.6  mrg           if (j == 3)
    141  1.1.1.6  mrg             {
    142  1.1.1.6  mrg               /* At i = 8, we have tested all the "INF" case variants. */
    143  1.1.1.6  mrg               if (i >= 8)
    144  1.1.1.6  mrg                 break;
    145  1.1.1.6  mrg               t[5] = '\0';
    146  1.1.1.6  mrg             }
    147  1.1.1.6  mrg           if (j == 6)
    148  1.1.1.6  mrg             {
    149  1.1.1.6  mrg               t[1] = '@';
    150  1.1.1.6  mrg               t[5] = '@';
    151  1.1.1.6  mrg               t[6] = '\0';
    152  1.1.1.6  mrg             }
    153  1.1.1.6  mrg           if (j % 3 == 1)
    154  1.1.1.6  mrg             t[j != 7] = '+';
    155  1.1.1.6  mrg           if (j % 3 == 2)
    156  1.1.1.6  mrg             t[j != 8] = '-';
    157  1.1.1.6  mrg           p = t + (j % 3 == 0) + (j < 6);
    158  1.1.1.6  mrg           base = randlimb () % (j < 6 ? 17 : 63);
    159  1.1.1.6  mrg           if (base == 1)
    160  1.1.1.6  mrg             base = 0;
    161  1.1.1.6  mrg           res = mpfr_strtofr (x, p, &s, base, MPFR_RNDN);
    162  1.1.1.6  mrg           if (res != 0 || !mpfr_inf_p (x) || *s != 0 ||
    163  1.1.1.6  mrg               (j % 3 != 2 ? MPFR_IS_NEG (x) : MPFR_IS_POS (x)))
    164  1.1.1.6  mrg             {
    165  1.1.1.6  mrg               printf ("Error for setting \"%s\" in base %d\n s=\"%s\"\n x=",
    166  1.1.1.6  mrg                       p, base, s);
    167  1.1.1.6  mrg               mpfr_dump (x);
    168  1.1.1.6  mrg               exit (1);
    169  1.1.1.6  mrg             }
    170  1.1.1.6  mrg         }
    171      1.1  mrg     }
    172      1.1  mrg   res = mpfr_strtofr (x, "INFANITY", &s, 8, MPFR_RNDN);
    173      1.1  mrg   if (res != 0 || !mpfr_inf_p (x) || strcmp(s, "ANITY"))
    174      1.1  mrg     {
    175      1.1  mrg       printf ("Error for setting INFINITY (2)\n s=%s\n x=", s);
    176      1.1  mrg       mpfr_dump (x);
    177      1.1  mrg       exit (1);
    178      1.1  mrg     }
    179      1.1  mrg   res = mpfr_strtofr (x, "@INF@*2", &s, 11, MPFR_RNDN);
    180      1.1  mrg   if (res != 0 || !mpfr_inf_p (x) || strcmp(s, "*2"))
    181      1.1  mrg     {
    182      1.1  mrg       printf ("Error for setting INFINITY (3)\n s=%s\n x=", s);
    183      1.1  mrg       mpfr_dump (x);
    184      1.1  mrg       exit (1);
    185      1.1  mrg     }
    186      1.1  mrg 
    187      1.1  mrg   /* Check Zero */
    188      1.1  mrg   res = mpfr_strtofr (x, " 00000", &s, 11, MPFR_RNDN);
    189      1.1  mrg   if (res != 0 || !mpfr_zero_p (x) || s[0] != 0)
    190      1.1  mrg     {
    191      1.1  mrg       printf ("Error for setting ZERO (1)\n s=%s\n x=", s);
    192      1.1  mrg       mpfr_dump (x);
    193      1.1  mrg       exit (1);
    194      1.1  mrg     }
    195      1.1  mrg 
    196      1.1  mrg   /* Check base 62 */
    197      1.1  mrg   res = mpfr_strtofr (x, "A", NULL, 62, MPFR_RNDN);
    198      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 10))
    199      1.1  mrg     {
    200      1.1  mrg       printf ("Error for setting 'A' in base 62\n x=");
    201      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    202      1.1  mrg       putchar ('\n');
    203      1.1  mrg       exit (1);
    204      1.1  mrg     }
    205      1.1  mrg   res = mpfr_strtofr (x, "a", NULL, 62, MPFR_RNDN);
    206      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 36))
    207      1.1  mrg     {
    208      1.1  mrg       printf ("Error for setting 'a' in base 62\n x=");
    209      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    210      1.1  mrg       putchar ('\n');
    211      1.1  mrg       exit (1);
    212      1.1  mrg     }
    213      1.1  mrg   res = mpfr_strtofr (x, "Z", NULL, 62, MPFR_RNDN);
    214      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 35))
    215      1.1  mrg     {
    216      1.1  mrg       printf ("Error for setting 'Z' in base 62\n x=");
    217      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    218      1.1  mrg       putchar ('\n');
    219      1.1  mrg       exit (1);
    220      1.1  mrg     }
    221      1.1  mrg   res = mpfr_strtofr (x, "z", NULL, 62, MPFR_RNDN);
    222      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 61))
    223      1.1  mrg     {
    224      1.1  mrg       printf ("Error for setting 'z' in base 62\n x=");
    225      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    226      1.1  mrg       putchar ('\n');
    227      1.1  mrg       exit (1);
    228      1.1  mrg     }
    229      1.1  mrg   res = mpfr_strtofr (x, "ZA", NULL, 62, MPFR_RNDN);
    230      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 2180))
    231      1.1  mrg     {
    232      1.1  mrg       printf ("Error for setting 'ZA' in base 62\n x=");
    233      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    234      1.1  mrg       putchar ('\n');
    235      1.1  mrg       exit (1);
    236      1.1  mrg     }
    237      1.1  mrg   res = mpfr_strtofr (x, "za", NULL, 62, MPFR_RNDN);
    238      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 3818))
    239      1.1  mrg     {
    240      1.1  mrg       printf ("Error for setting 'za' in base 62\n x=");
    241      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    242      1.1  mrg       putchar ('\n');
    243      1.1  mrg       exit (1);
    244      1.1  mrg     }
    245      1.1  mrg   res = mpfr_strtofr (x, "aZ", NULL, 62, MPFR_RNDN);
    246      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 2267))
    247      1.1  mrg     {
    248      1.1  mrg       printf ("Error for setting 'aZ' in base 62\n x=");
    249      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    250      1.1  mrg       putchar ('\n');
    251      1.1  mrg       exit (1);
    252      1.1  mrg     }
    253      1.1  mrg   res = mpfr_strtofr (x, "Az", NULL, 62, MPFR_RNDN);
    254      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 681))
    255      1.1  mrg     {
    256      1.1  mrg       printf ("Error for setting 'Az' in base 62\n x=");
    257      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    258      1.1  mrg       putchar ('\n');
    259      1.1  mrg       exit (1);
    260      1.1  mrg     }
    261      1.1  mrg 
    262      1.1  mrg   /* Check base 60 */
    263      1.1  mrg   res = mpfr_strtofr (x, "Aa", NULL, 60, MPFR_RNDN);
    264      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 636))
    265      1.1  mrg     {
    266      1.1  mrg       printf ("Error for setting 'Aa' in base 60\n x=");
    267      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    268      1.1  mrg       putchar ('\n');
    269      1.1  mrg       exit (1);
    270      1.1  mrg     }
    271      1.1  mrg   res = mpfr_strtofr (x, "Zz", &s, 60, MPFR_RNDN);
    272      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 35) || strcmp(s, "z") )
    273      1.1  mrg     {
    274      1.1  mrg       printf ("Error for setting 'Zz' in base 60\n x=");
    275      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    276      1.1  mrg       putchar ('\n');
    277      1.1  mrg       exit (1);
    278      1.1  mrg     }
    279      1.1  mrg 
    280      1.1  mrg   /* Check base 61 */
    281      1.1  mrg   res = mpfr_strtofr (x, "z", &s, 61, MPFR_RNDN);
    282      1.1  mrg   if (res != 0 || mpfr_cmp_ui (x, 0) || strcmp(s, "z") )
    283      1.1  mrg     {
    284      1.1  mrg       printf ("Error for setting 'z' in base 61\n x=");
    285      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN);
    286      1.1  mrg       putchar ('\n');
    287      1.1  mrg       exit (1);
    288      1.1  mrg     }
    289      1.1  mrg 
    290      1.1  mrg   mpfr_clear (x);
    291      1.1  mrg   mpfr_clear (y);
    292      1.1  mrg }
    293      1.1  mrg 
    294      1.1  mrg /* The following RefTable has been generated by this following code */
    295      1.1  mrg #if 0
    296      1.1  mrg #define MAX_NUM 100
    297      1.1  mrg 
    298      1.1  mrg int randomab (int a, int b)
    299      1.1  mrg {
    300      1.1  mrg   return a + rand () % (b-a);
    301      1.1  mrg }
    302      1.1  mrg 
    303      1.1  mrg int
    304      1.1  mrg main (void)
    305      1.1  mrg {
    306      1.1  mrg   int i, base;
    307      1.1  mrg   mpfr_t x;
    308      1.1  mrg   mpfr_prec_t p;
    309      1.1  mrg   mpfr_exp_t e;
    310      1.1  mrg 
    311      1.1  mrg   mpfr_init (x);
    312      1.1  mrg   printf ("struct dymmy_test { \n"
    313      1.1  mrg           " mpfr_prec_t prec; \n"
    314      1.1  mrg           " int base; \n"
    315      1.1  mrg           " const char *str; \n"
    316      1.1  mrg           " const char *binstr; \n"
    317      1.1  mrg           " } RefTable[] = { \n");
    318      1.1  mrg   for (i = 0 ; i < MAX_NUM ; i++)
    319      1.1  mrg     {
    320      1.1  mrg       p = randomab(2, 180);
    321      1.1  mrg       base = randomab (2, 30);
    322      1.1  mrg       e = randomab (-1<<15, 1<<15);
    323      1.1  mrg       mpfr_set_prec (x, p);
    324      1.1  mrg       mpfr_urandomb (x, RANDS);
    325      1.1  mrg       mpfr_mul_2si (x, x, e, MPFR_RNDN);
    326      1.1  mrg       printf("{%lu, %d,\n\"", p, base);
    327      1.1  mrg       mpfr_out_str (stdout, base, p, x, MPFR_RNDN);
    328      1.1  mrg       printf ("\",\n\"");
    329      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN);
    330      1.1  mrg       printf ("\"}%c\n", i == MAX_NUM-1 ? ' ' : ',' );
    331      1.1  mrg     }
    332      1.1  mrg   printf("};\n");
    333      1.1  mrg   mpfr_clear (x);
    334      1.1  mrg }
    335      1.1  mrg #endif
    336      1.1  mrg 
    337      1.1  mrg static struct dymmy_test {
    338      1.1  mrg  mpfr_prec_t prec;
    339      1.1  mrg  int base;
    340      1.1  mrg  const char *str;
    341      1.1  mrg  const char *binstr;
    342      1.1  mrg  } RefTable[] = {
    343      1.1  mrg {39, 20,
    344      1.1  mrg "1.1c9jeh9jg12d8iiggf26b8ce2cig24agai51d9@1445",
    345      1.1  mrg "1.00111010111010001110110001101011101011e6245"},
    346      1.1  mrg {119, 3,
    347      1.1  mrg "1.2210112120221020220021000020101121120011021202212101222000011110211211122222001001221110102220122021121021101010120101e-5655",
    348      1.1  mrg "1.1111101110011110001101011100011000011100001011011100010011010010001000000111001010000001110111010100011000110010000000e-8963"},
    349      1.1  mrg {166, 18,
    350      1.1  mrg "3.ecg67g31434b74d8hhbe2dbbb46g9546cae72cae0cfghfh00ed7gebe9ca63b47h08bgbdeb880a76dea12he31e1ccd67e9dh22a911b46h517b745169b2g43egg2e4eah820cdb2132d6a4f9c63505dd4a0dafbc@-5946",
    351      1.1  mrg "1.011110010000110011111011111100110110010110000010100001101111111000010000011111110101100000010110011001100000010001100101000001101000010010001011001011000110100011001e-24793"},
    352      1.1  mrg {139, 4,
    353      1.1  mrg "1.020302230021023320300300101212330121100031233000032101123133120221012000000000000000000000000000000000000000000000000000000000000000000000e11221",
    354      1.1  mrg "1.001000110010101100001001001011111000110000110000010001100110111100011001010000001101101111000000001110010001011011011111011000101001000110e22442"},
    355      1.1  mrg {126, 13,
    356      1.1  mrg "4.a3cb351c6c548a0475218519514c6c54366681447019ac70a387862c39c86546ab27608c9c2863328860aa2464288070a76c0773882728c5213a335289259@2897",
    357      1.1  mrg "1.01011010000001110001100001101111100111011010010111000011000101111011000100001010010100110111101001001001000000011100010000000e10722"},
    358      1.1  mrg {6, 26,
    359      1.1  mrg "1.j79f6@-1593",
    360      1.1  mrg "1.00000e-7487"},
    361      1.1  mrg {26, 18,
    362      1.1  mrg "3.5e99682hh310aa89hb2fb4h88@-5704",
    363      1.1  mrg "1.0110010100010101000101100e-23784"},
    364      1.1  mrg {12, 21,
    365      1.1  mrg "4.j7f3e2ccdfa@-3524",
    366      1.1  mrg "1.10110101011e-15477"},
    367      1.1  mrg {38, 28,
    368      1.1  mrg "o.agr0m367b9bmm76rplg7b53qlj7f02g717cab@6452",
    369      1.1  mrg "1.1001010011101100110100111000111010001e31021"},
    370      1.1  mrg {75, 17,
    371      1.1  mrg "4.00abd9gc99902e1cae2caa7647gcc029g01370e96d3f8e9g02f814d3ge5faa29d40b9db470@5487",
    372      1.1  mrg "1.11100000110101010111101001110001001010111111010100000100001010100111011101e22429"},
    373      1.1  mrg {91, 16,
    374      1.1  mrg "1.0a812a627160014a3bda1f00000000000000000000000000000000000000000000000000000000000000000000@7897",
    375      1.1  mrg "1.000010101000000100101010011000100111000101100000000000010100101000111011110110100001111100e31588"},
    376      1.1  mrg {154, 19,
    377      1.1  mrg "1.989279dda02a8ic15e936ahig3c695f6059a3i01b7d1ge6a418bf84gd87e36061hb2bi62ciagcgb9226fafea41d2ig1e2f0a10ea3i40d6dahf598bdbh372bdf5901gh276866804ah53b6338bi@5285",
    378      1.1  mrg "1.110101101101101111110010001011110001100000010100011101101001000100110100000011110111000011011101011110010100110101011011111100101101001100000101101000010e22450"},
    379      1.1  mrg {53, 2,
    380      1.1  mrg "1.0100010111100111001010000100011011111011011100110111e-20319",
    381      1.1  mrg "1.0100010111100111001010000100011011111011011100110111e-20319"},
    382      1.1  mrg {76, 3,
    383      1.1  mrg "2.101212121100222100012112101120011222102000021110201110000202111122221100001e1511",
    384      1.1  mrg "1.000110101010111000011001011111110000001001101001011011111110111111010000111e2396"},
    385      1.1  mrg {31, 9,
    386      1.1  mrg "1.171774371505084376877631528681e3258",
    387      1.1  mrg "1.110101101011111011111000110011e10327"},
    388      1.1  mrg {175, 8,
    389      1.1  mrg "4.506242760242070533035566017365410474451421355546570157251400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3483",
    390      1.1  mrg "1.001010001100101000101111100000101000100001110001010110110000111011011101100000011110111101011000010001001111001001010011000100010111011011011001101011110000011011110101010011e10451"},
    391      1.1  mrg {103, 24,
    392      1.1  mrg "8.0hmlm3g183cj358fn4bimn5bie1l89k95m647474mm8jg5kh1c011gi0m7de9j7b48c595g1bki4n32kll7b882eg7klgga0h0gf11@4510",
    393      1.1  mrg "1.001000110101001101011010101001111010110100010100110101010101110000001011001101110110010111000101010111e20681"},
    394      1.1  mrg {12, 9,
    395      1.1  mrg "3.00221080453e2479",
    396      1.1  mrg "1.11000111010e7859"},
    397      1.1  mrg {86, 11,
    398      1.1  mrg "6.873680186953174a274754118026423965415553a088387303452447389287133a0956111602a5a085446@5035",
    399      1.1  mrg "1.0000000000110100010110000111010001010100101011000100101010010011101010000110011110001e17421"},
    400      1.1  mrg {68, 10,
    401      1.1  mrg "6.1617378719016284192718392572980535262609909598793237475124371481233e481",
    402      1.1  mrg "1.0110001011000101110010111101100101111110001100001011110011001101111e1600"},
    403      1.1  mrg {11, 15,
    404      1.1  mrg "5.ab10c18d45@907",
    405      1.1  mrg "1.0000101111e3546"},
    406      1.1  mrg {77, 26,
    407      1.1  mrg "6.e6kl84g6h30o3nfnj7fjjff4n1ee6e5iop76gabj23e7hgan9o6724domc7bp4hdll95g817519f@5114",
    408      1.1  mrg "1.1011000101111111111110011011101100000100101000001001100000001011010001001000e24040"},
    409      1.1  mrg {28, 27,
    410      1.1  mrg "d.odiqp9kgh84o8d2aoqg4c21hemi@3566",
    411      1.1  mrg "1.101001111001111111110011110e16959"},
    412      1.1  mrg {45, 14,
    413      1.1  mrg "7.cddc6295a576980adbc8c16111d6301bad3146a1143c@-6227",
    414      1.1  mrg "1.10000000110011000000101100110001011100010111e-23706"},
    415      1.1  mrg {54, 19,
    416      1.1  mrg "1.b6e67i2124hfga2g819g1d6527g2b603eg3cd8hhca9gecig8geg1@4248",
    417      1.1  mrg "1.11010100100010101101110110010100000010111010010101110e18045"},
    418      1.1  mrg {49, 20,
    419      1.1  mrg "1.jj68bj6idadg44figi10d2ji99g6ddi6c6ich96a5h86i529@-3149",
    420      1.1  mrg "1.001011111101100100001010001000011100000000101110e-13609"},
    421      1.1  mrg {171, 16,
    422      1.1  mrg "6.22cf0e566d8ff11359d70bd9200065cfd72600b12e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@5602",
    423      1.1  mrg "1.10001000101100111100001110010101100110110110001111111100010001001101011001110101110000101111011001001000000000000001100101110011111101011100100110000000001011000100101110e22410"},
    424      1.1  mrg {144, 14,
    425      1.1  mrg "1.425d9709b4c125651ab88bb1a0370c14270d067a9a74a612dad48d5c025531c175c1b905201d0d9773aa686c8249db9c0b841b10821791c02baa2525a4aa7571850439c2cc965cd@-3351",
    426      1.1  mrg "1.11100111110001001101010111010000101010011000111001101011000001011110101110011011100100111001101101111011001001101011001101001011011101101111011e-12759"},
    427      1.1  mrg {166, 6,
    428      1.1  mrg "3.324252232403440543134003140400220120040245215204322153511143504542403430152410543444455151104314552352030352125540101550151410414122051500201022252511512332523431554e8340",
    429      1.1  mrg "1.010101111101111101001001110010111110010000001111010101100110011011010110011001001100001111010101100000010111011111101110110111101110010001110001111000001010001111000e21560"},
    430      1.1  mrg {141, 24,
    431      1.1  mrg "2.i3c88lkm2958l9ncb9f85kk35namjli84clek5j6jjkli82kb9m4e4i2g39me63db2094cif80gcba8ie6l15ia0d667kn9i1f77bdak599e1ach0j05cdn8kf6c6kfd82j2k6hj2c4d@4281",
    432      1.1  mrg "1.10011100001010110111001000000000101011100010101011001010001101110100110111011000111101000001111101100000110100100010101011001100100011001011e19629"},
    433      1.1  mrg {84, 6,
    434      1.1  mrg "2.41022133512503223022555143021524424430350133500020112434301542311050052304150111243e982",
    435      1.1  mrg "1.11010001111111001010011100011000011100100111111010001111010010101001001000011100001e2539"},
    436      1.1  mrg {56, 9,
    437      1.1  mrg "1.5305472255016741401411184703518332515066156086511016413e2936",
    438      1.1  mrg "1.0111110010001101000000110101110000110101001011001100111e9307"},
    439      1.1  mrg {18, 8,
    440      1.1  mrg "3.63542400000000000e-599",
    441      1.1  mrg "1.11100111011000101e-1796"},
    442      1.1  mrg {111, 13,
    443      1.1  mrg "8.b693ac7a24679b98708a0057a6202c867bc146740ab1971b380756a24c99804b63436419239ba0510030b819933771a636c57c5747b883@-6160",
    444      1.1  mrg "1.01011011111110100101110010100100000110000011011101001110010110000011101110111111010111000011011101101001100100e-22792"},
    445      1.1  mrg {162, 16,
    446      1.1  mrg "4.f2abe958a313566adbf3169e55cdcff3785dbd5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@382",
    447      1.1  mrg "1.00111100101010101111101001010110001010001100010011010101100110101011011011111100110001011010011110010101011100110111001111111100110111100001011101101111010101110e1530"},
    448      1.1  mrg {117, 23,
    449      1.1  mrg "2.4b6kk3ag3if217ih1hggkk69bmcecfil1cd38dijh35j8e6ckhd335a4gj7l05bedk19473i8449b1ajc3jd3ka95eceheh72lh2jh17jamlm1142gll@-3628",
    450      1.1  mrg "1.10010010001010001110011000010000011111011101111100110101100100101111101110010011101001111010100010001111110100101111e-16411"},
    451      1.1  mrg {179, 2,
    452      1.1  mrg "1.1101101011111010101000110101010101101110001011011010101001110111011010011110001000000110101100010010001110010110011000000110001011111001011110100011101000110001001000110100100110e14203",
    453      1.1  mrg "1.1101101011111010101000110101010101101110001011011010101001110111011010011110001000000110101100010010001110010110011000000110001011111001011110100011101000110001001000110100100110e14203"},
    454      1.1  mrg {18, 27,
    455      1.1  mrg "4.ll743n2f654gh3154@-6039",
    456      1.1  mrg "1.01101001111010011e-28713"},
    457      1.1  mrg {178, 15,
    458      1.1  mrg "1.e5443105cad2d014b700c42aa3de854c4b95322420695d07db3564ec07473da83bde123b74c794139265a838ebeca745ad3dc97d7c356271ca935ea8e83306562c2a8edc6e886c1b6b2d3e17038379c33826526770985c068@821",
    459      1.1  mrg "1.011100001000101100111111111111000100110111110011101010001111011001111101111001010011100100100101100011101001000000101001010100011111001011001010011101101001000111111010101101011e3208"},
    460      1.1  mrg {161, 22,
    461      1.1  mrg "2.46ikji624bg042877h8g2jdki4ece6ede62841j7li843a4becdkkii86c54192jkefehikkb3kcb26ij1b3k9agfbb07dih88d6ej0ee0d63i8hedc7f0g0i9g7jf9gf6423j70h421bg5hf2bja9j0a432lb10@-5125",
    462      1.1  mrg "1.0111011000111110000010011100001100100110001011101001011110111010100000011100000010011101011100101100111100110000001101010101011110100011101111001011001111100000e-22854"},
    463      1.1  mrg {62, 19,
    464      1.1  mrg "7.bgd1g0886a6c3a9ee67cc7g3bgf718i98d90788idi5587358e660iffc0ic6@3257",
    465      1.1  mrg "1.0101100100001110000100010110100100000111110001111001011110100e13838"},
    466      1.1  mrg {127, 19,
    467      1.1  mrg "1.413bgf99eidba75ged25f7187080bce3h7ebdeghea4ig6c79g94di7b42a3e4cdi4ic6a53i71d2e4hdbe50ih0a0egf2fi469732131ig6g496bf7h8g3c86ie7h@-4465",
    468      1.1  mrg "1.001101111000011011100010010010010110111001001001110011110101111111000001110101111110001110010000110011111101000011000101111101e-18967"},
    469      1.1  mrg {17, 21,
    470      1.1  mrg "4.7d5b70gh4k0gj4fj@-116",
    471      1.1  mrg "1.1000100010000110e-508"},
    472      1.1  mrg {141, 13,
    473      1.1  mrg "2.2b4988c5cb57072a6a1a9c42224794a1cbc175a9bc673bb28aa045c3182b9396ca8bb8590969672b0239608a845a2c35c08908a58c2a83748c89241a6561422c7cc4866c8454@4358",
    474      1.1  mrg "1.10010110101000001000001001111001000100111110100010100110111011111011010010101000110101110000111100010000101101000110000000000001111110110011e16127"},
    475      1.1  mrg {39, 7,
    476      1.1  mrg "3.00350342452505221136410100232265245244e202",
    477      1.1  mrg "1.10011000111110011010100110101101010010e568"},
    478      1.1  mrg {119, 24,
    479      1.1  mrg "5.2aene587kc2d9a55mm8clhn4dn0a551de58b1fcli8e8hf1jlm7i0376dl5fhb2k8acka03077mnbn9d4dmi0641dce871c81g2b3ge76m3kngm4a9g5gh@-892",
    480      1.1  mrg "1.0111101010010100001001111110000000100101110010010111111100100101100001010010100110111000101100101010111000101111000010e-4088"},
    481      1.1  mrg {41, 14,
    482      1.1  mrg "5.c3dc5c49373d0c0075624931133022185bd08b16@-5294",
    483      1.1  mrg "1.0101011000010111111111000010100110011111e-20154"},
    484      1.1  mrg {41, 6,
    485      1.1  mrg "3.2411143454422033245255450304104450302500e2250",
    486      1.1  mrg "1.1110111101010101001001100000100011110111e5817"},
    487      1.1  mrg {17, 13,
    488      1.1  mrg "3.65789aa26aa273b1@-4490",
    489      1.1  mrg "1.1100011101010111e-16614"},
    490      1.1  mrg {10, 26,
    491      1.1  mrg "1.5p4hag1fl@6017",
    492      1.1  mrg "1.110010111e28282"},
    493      1.1  mrg {130, 11,
    494      1.1  mrg "2.606a72601843700427667823172635a47055021a0a68a99326875195a179483948407aa13726244552332114a1784aaa7239956521604460876871a65708458aa@-6285",
    495      1.1  mrg "1.110001001110111110110111000010101000110010011110010101100100001000101011010010000001000101000110111111110101000100000111100010100e-21742"},
    496      1.1  mrg {29, 20,
    497      1.1  mrg "j.4356d9b7i38i955jjj1j442501bj@163",
    498      1.1  mrg "1.1010101011110011100000100100e708"},
    499      1.1  mrg {140, 21,
    500      1.1  mrg "9.2f5k7aid6bj2b2g5bff29i73hk3a8d8g0i7ifa07hkb79g4hd3c7j6g4hjj2jbhai01gkje3h9g3gj3i34f0194kaed32iea9dcgcj8h7i1khdkf965c1ak97gf3h03fcab3ggi03fa@4864",
    501      1.1  mrg "1.0101011100011101000110101001010011111111010011000111111111100000011011100111010001100101100110001110001001100101001100110000011110100101101e21367"},
    502      1.1  mrg {133, 13,
    503      1.1  mrg "2.3721a9107307a71c75c07c83b70a25a9853619030b5bcb55101ca5c2060bca46c331b92b33aa957c3ac7c817335287c6917999c38c3806b6b5919623023ac52063bb@6602",
    504      1.1  mrg "1.011001101111100001100100110100010100010011100010111110110100100000000010011101001011000100000110011011101001010010011110111100010010e24431"},
    505      1.1  mrg {118, 2,
    506      1.1  mrg "1.001010111011011000100010001110111000001100101000101101010001110110000111101110111011011101111100110010000101001001001e18960",
    507      1.1  mrg "1.001010111011011000100010001110111000001100101000101101010001110110000111101110111011011101111100110010000101001001001e18960"},
    508      1.1  mrg {102, 23,
    509      1.1  mrg "l.26lhk42clcm9g940eihakhi32gb3331lld488cf1j4f73ge051bfl8gcmcg78gkjc2iibjf752eag0dee6dafa97k79jlh11j3270@-2160",
    510      1.1  mrg "1.01101011011000100101110111110001011000101101011001011111001101000110111010000010011111101110101100010e-9767"},
    511      1.1  mrg {156, 18,
    512      1.1  mrg "b.eb927dd4g48abee3cc2begehb9c3b8h83cae152db850ac2f3g816d6787825122c8h3aa3g8023h23000a8hg61065b3e367ac59ca373067730f96dd0d3b73b3c43fef91750b333gd497b8ce9228e7@5504",
    513      1.1  mrg "1.11000110111100011101100011001001110011101100011111010100101110010010010011111001100000011010011111111011001011111010001001011001110001100001101000000110000e22954"},
    514      1.1  mrg {158, 5,
    515      1.1  mrg "3.0112043214104344433122444210142004032004444213123303302023242414000243311324332203224340334422234000104132020124210141322013240010134130441413233111204013422e-10468",
    516      1.1  mrg "1.1001011000111111110100100101110011100001110100101001101110011001101001101011010010111010111111101010100011100010101100110111011101000110110100000111001100011e-24305"},
    517      1.1  mrg {7, 9,
    518      1.1  mrg "2.141540e-146",
    519      1.1  mrg "1.001111e-462"},
    520      1.1  mrg {111, 5,
    521      1.1  mrg "3.21233234110011204313222402442032333320324004133424222041314021020411320312421014434003440431230413141402230403e7641",
    522      1.1  mrg "1.10010000000101010000101010101011011010000100010010010000010110001111000111111111000110111001100101101110101101e17743"},
    523      1.1  mrg {76, 13,
    524      1.1  mrg "7.1c0861453a4ac156b6119ba7548251b5cb00b7c409c2bb8138214676468c9949676226013c1@4639",
    525      1.1  mrg "1.001000011000000011101101101010100010010001010111100110010101111110110010111e17169"},
    526      1.1  mrg {6, 25,
    527      1.1  mrg "c.aj660@-6978",
    528      1.1  mrg "1.11000e-32402"},
    529      1.1  mrg {156, 3,
    530      1.1  mrg "2.22101000022222000012110122210202211110020121210120112102122121111210000211020001020201202200011021211102012110220222110022001121011022011202000110120021012e-14744",
    531      1.1  mrg "1.11010001111000101111110000010011001101000100010010110011100100110001100111011101011111111100011111001100001111100101100000001000001100000000010010001011101e-23368"},
    532      1.1  mrg {7, 23,
    533      1.1  mrg "1.4hclk2@2148",
    534      1.1  mrg "1.110110e9716"},
    535      1.1  mrg {69, 11,
    536      1.1  mrg "2.77684920493191632416690544493465617a187218365952a6740034288687745a26@3263",
    537      1.1  mrg "1.01111000111000001111001110000110000110001111110011101100101111011100e11289"},
    538      1.1  mrg {146, 21,
    539      1.1  mrg "3.agg4d0dj636d526d4i8643ch5jee4ge2c3i46k121857dbedagd98cjifaf0fgc09ca739g2fkfbfh06i687kic2kb8c7i48gda57bb6d9bh81eh49h0d8e3i7ad2kgb1ek86b86g3589k27d@3562",
    540      1.1  mrg "1.0010111111111100101010101010001100110101010011011100001110111000101101001110001110010100000001010001000111010000010011110100010010101100101000001e15647"},
    541      1.1  mrg {20, 3,
    542      1.1  mrg "1.2000000021102111102e-16642",
    543      1.1  mrg "1.1011101011111110000e-26377"},
    544      1.1  mrg {68, 13,
    545      1.1  mrg "1.a43205b2164676727806614acc0398925569c3962a3ba419881a5c63b651aa3ab46@-618",
    546      1.1  mrg "1.1111011000001110010100111000110010110110011001110001100101011111000e-2287"},
    547      1.1  mrg {129, 4,
    548      1.1  mrg "2.22033002012102010122130132103000303000120122313322000222121000300000000000000000000000000000000000000000000000000000000000000000e13222",
    549      1.1  mrg "1.01010001111000010000110010010000100011010011100011110010011000000110011000000011000011010110111111010000000101010011001000000110e26445"},
    550      1.1  mrg {22, 6,
    551      1.1  mrg "1.420033001013011530142e11704",
    552      1.1  mrg "1.001000110010110110001e30255"},
    553      1.1  mrg {108, 6,
    554      1.1  mrg "1.03345424443433104422104400512453214240453335230205104304115343030341144544051005432030344054100542125304500e7375",
    555      1.1  mrg "1.00101101110001011101101111000010101011101000001111001110001101100000111100010101010101101100011110111010000e19064"},
    556      1.1  mrg {91, 27,
    557      1.1  mrg "2.ao077kf8oqoihn5pm6f5eqdcgnd2132d7p6n7di8ep82a1a9be99pm36g1emacbenaeiqphpgpdjhmm9ke3pn4pdea@-5482",
    558      1.1  mrg "1.111101100001000011101010001000000111000100100111110010101101110001101101101101101010111110e-26066"},
    559      1.1  mrg {96, 9,
    560      1.1  mrg "8.25805186310703506315505842015248775712246416686874260383701323213202658278523870037877823670166e-8134",
    561      1.1  mrg "1.11010111111000011100111001011010001110010001011101011101110101000101100100100010110011001010000e-25782"},
    562      1.1  mrg {161, 16,
    563      1.1  mrg "7.3a7627c1e42ef738698e292f0b81728c4b14fe8c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@-3342",
    564      1.1  mrg "1.1100111010011101100010011111000001111001000010111011110111001110000110100110001110001010010010111100001011100000010111001010001100010010110001010011111110100011e-13366"},
    565      1.1  mrg {90, 3,
    566      1.1  mrg "2.10212200011211012002002221112120210222002020100202111000211012122020011102022112222021001e-3447",
    567      1.1  mrg "1.11100010111011011000101111110001000101000111110001100001010111101101011011110001000010001e-5463"},
    568      1.1  mrg {100, 27,
    569      1.1  mrg "a.f81hjjakdnc021op6ffh530ec8ige6n2fqc8f8j7ia7qelebgqkm4ic5ohh652hq1kgpag6pp0ldin6ce1fg6mj34077f5qc5oe@6576",
    570      1.1  mrg "1.011101001010010011110001100011111111010001110110100100101001010000101011101011110010010011111100000e31271"},
    571      1.1  mrg {152, 16,
    572      1.1  mrg "e.37ac48a0303f903c9d20883eddea4300d1190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000@-1388",
    573      1.1  mrg "1.1100011011110101100010010001010000000110000001111111001000000111100100111010010000010001000001111101101110111101010010000110000000011010001000110010000e-5549"},
    574      1.1  mrg {106, 20,
    575      1.1  mrg "1.3g2h7i2776d50gjibi937f8cdci3idecdeh3j2gba0j8d1ghgg3eg609ji55h5g7jeai1bii3a4f9jhjfij6jd1g3cg0f6024e252gc3e@6422",
    576      1.1  mrg "1.100110000101011010100111100110000000100101000110110011010010000101000100110010001110011110111100010000111e27755"},
    577      1.1  mrg {23, 17,
    578      1.1  mrg "9.f72e724454d1g0f60g93g6@-6563",
    579      1.1  mrg "1.0011100011110110010001e-26823"},
    580      1.1  mrg {98, 6,
    581      1.1  mrg "1.2444223304453415235424343034030405514010421403514410005234221430055051205523402412055242134042045e-8535",
    582      1.1  mrg "1.1101110011010001101001001111100101111010100111001011110001000010100101101110011011101100000111011e-22063"},
    583      1.1  mrg {4, 18,
    584      1.1  mrg "1.gec@-6711",
    585      1.1  mrg "1.100e-27984"},
    586      1.1  mrg {69, 24,
    587      1.1  mrg "8.d45gdfnhkhb7a20nj96dnggic83imhjne0cceldechn1m4e9fbd9db0ablngjf9n7810@6975",
    588      1.1  mrg "1.00100111111100101100110011110110110000110110110010100101011111000100e31983"},
    589      1.1  mrg {122, 8,
    590      1.1  mrg "4.0227760456667717717077553523466457265600000000000000000000000000000000000000000000000000000000000000000000000000000000000e-1767",
    591      1.1  mrg "1.0000001001011111111000010010111011011011111100111111100111100011111110110101110101001110011011010010111101011010111000000e-5299"},
    592      1.1  mrg {144, 23,
    593      1.1  mrg "8.b01c48dg20bek9a5k376clc501aecg92bdjaeji2dm9230i7j3k36jm50b0c5a0753i2b18534cji34bcl2li033cc534m52k2gbegc25a5g30lf4calag58026i5d7li61jg9digj5ceb1@-4456",
    594      1.1  mrg "1.00010000110011010111011011110111001101111001010110001101011100100101101110110000010011011111100000100110001001001111111011010110000000001111110e-20154"},
    595      1.1  mrg {111, 4,
    596      1.1  mrg "2.23100111310122202021232133233012212012232222323230133100000000000000000000000000000000000000000000000000000000e-10458",
    597      1.1  mrg "1.01011010000010101110100011010100010001001101110011111101111000110100110000110101110101010111011101100011111010e-20915"},
    598      1.1  mrg {117, 10,
    599      1.1  mrg "1.61207328685870427963864999744776917701013812304254540861834226053316419217753608451422967376154318603744156166920074e-6440",
    600      1.1  mrg "1.01100011000100111001100010000000110010100001001011111010100001101111100100101100111010100011101110001010011010010010e-21393"},
    601      1.1  mrg {106, 16,
    602      1.1  mrg "1.dd30a1d24091263243ca1c144f0000000000000000000000000000000000000000000000000000000000000000000000000000000@354",
    603      1.1  mrg "1.110111010011000010100001110100100100000010010001001001100011001001000011110010100001110000010100010011110e1416"},
    604      1.1  mrg {77, 14,
    605      1.1  mrg "4.90d6913ba57b149d8d85a58c311b4d537c10bd7d3c10d69c62bc08d32269760126a58115a105@-7311",
    606      1.1  mrg "1.1001000000111100000111001001011000110101001111100001100111010100010000011111e-27834"},
    607      1.1  mrg {8, 4,
    608      1.1  mrg "3.2230000e15197",
    609      1.1  mrg "1.1101011e30395"},
    610      1.1  mrg {81, 24,
    611      1.1  mrg "1.84ni25h558abmhg2dk7bl2jbbmkf4i8i2bemc5cgmk9jf301c00k24271m9h7mgm4301be1lnldn4364@2573",
    612      1.1  mrg "1.01110010011000110110100101011001011111101111101100010110101101011101100001000010e11797"},
    613      1.1  mrg {94, 2,
    614      1.1  mrg "1.010010010101111001001011111111100100011110110100010001101111111100100101101100110101001011111e32427",
    615      1.1  mrg "1.010010010101111001001011111111100100011110110100010001101111111100100101101100110101001011111e32427"},
    616      1.1  mrg {77, 21,
    617      1.1  mrg "1.87e4k9df85g50ead6fcj4h86820ikdjdjg93d90ca406g470hhkh7ciaba1aggg753g36553ebh5@2538",
    618      1.1  mrg "1.0010001100011000111010000010011001010011000000100101010001100000111101000111e11148"},
    619      1.1  mrg {80, 17,
    620      1.1  mrg "1.923gga999230g94fce02efg753ce001045a35e0264c9c2cb17850e32484fc3526dcg38ed874g5f2@3392",
    621      1.1  mrg "1.0011100111101001001101111001110100001100111110011110110001100110101010111001110e13865"},
    622      1.1  mrg {99, 7,
    623      1.1  mrg "4.53646362336126606650465342500160461331562113222506144210636341332436342025203333264316511653025011e-5540",
    624      1.1  mrg "1.01101101111001001100001101101101010011001001100110111000010000101000011001001001101000011101011001e-15551"},
    625      1.1  mrg {119, 20,
    626      1.1  mrg "1.c8966iabcf4de94ad15f9e83j407i3he7fch54h5jh0g5d74e06c057gg72a107didj8d1j8geibbfec5j36c3fgd5e12edjb9g10j7c9i03f33hi80ce0@7153",
    627      1.1  mrg "1.0101110101100011110001001110100110011000100000001001000110111110011111100011111010011101011111101101010011110111110100e30915"},
    628      1.1  mrg {93, 13,
    629      1.1  mrg "2.c749cb562c3a758b1a21a650666a4c6c53c76ca58a1a75a0358c9ac3866887972b3551a03aa6c150856531258508@193",
    630      1.1  mrg "1.10101111101001011010111101100100111110011111010110111101100100010011001001100011110100111110e715"},
    631      1.1  mrg {145, 14,
    632      1.1  mrg "1.c61614b64261d22c62cb9d16163ca4d144ac23351b708506b3b610b1b67b764ca974448d7a2c6515a6bc97503d4b2a530c75b2b677a464c6629c69b6c3d7860d7749b4b653c434d5@2050",
    633      1.1  mrg "1.111111100001101111100011001111100010010000101000011110000001110100111001011010100001001010111111010001111101000110011000011101110110001001100101e7805"},
    634      1.1  mrg {159, 23,
    635      1.1  mrg "4.bj9l07l0215e7l6lf1dkf62i056l37jaa0gdih717656f1kk1a77883jf99jg31le43em76bmcg4lddl782ihkla0m392886d8lm67d6c3a1l4j12kg0l1k52ee77lmk0gech11g8jeei680k85bi460c7el17@-1539",
    636      1.1  mrg "1.01010100110100100101100001011100000001100011110001001101000010000001000010000110000110010001110100001101011101101001001101101111001101101111101001010010010100e-6960"},
    637      1.1  mrg {24, 25,
    638      1.1  mrg "g.m749al09kflg5b42jnn4a7b@-2820",
    639      1.1  mrg "1.01010010101011010111011e-13092"},
    640      1.1  mrg {88, 18,
    641      1.1  mrg "3.5ed0gad0bhhb7aa9ge2ad1dhcg6833f3e068936hghf23gd2aa69f13539f15hfce50aa64achfee49bfg7249g@-4058",
    642      1.1  mrg "1.001000010110011011000101100000101111101001100011101101001111110111000010010110010001100e-16920"}
    643      1.1  mrg };
    644      1.1  mrg 
    645      1.1  mrg static void
    646      1.1  mrg check_reftable (void)
    647      1.1  mrg {
    648      1.1  mrg   int i, base;
    649      1.1  mrg   mpfr_t x, y;
    650      1.1  mrg   mpfr_prec_t p;
    651      1.1  mrg   char *s;
    652      1.1  mrg 
    653      1.1  mrg   mpfr_init2 (x, 200);
    654      1.1  mrg   mpfr_init2 (y, 200);
    655      1.1  mrg   for (i = 0 ; i < numberof (RefTable) ; i++)
    656      1.1  mrg     {
    657      1.1  mrg       base = RefTable[i].base;
    658      1.1  mrg       p    = RefTable[i].prec;
    659      1.1  mrg       mpfr_set_prec (x, p);
    660      1.1  mrg       mpfr_set_prec (y, p);
    661      1.1  mrg       mpfr_set_str_binary (x, RefTable[i].binstr);
    662      1.1  mrg       mpfr_strtofr (y, RefTable[i].str, &s, base, MPFR_RNDN);
    663      1.1  mrg       if (s == NULL || *s != 0)
    664      1.1  mrg         {
    665      1.1  mrg           printf ("strtofr didn't parse entire input for i=%d:\n"
    666      1.1  mrg                   " Str=%s", i, RefTable[i].str);
    667      1.1  mrg           exit (1);
    668      1.1  mrg         }
    669      1.1  mrg       if (mpfr_cmp (x, y))
    670      1.1  mrg         {
    671      1.1  mrg           printf ("Results differ between strtofr and set_binary for i=%d:\n"
    672      1.1  mrg                   " Set binary gives: ", i);
    673      1.1  mrg           mpfr_dump (x);
    674      1.1  mrg           printf (" strtofr    gives: ");
    675      1.1  mrg           mpfr_dump (y);
    676      1.1  mrg           printf (" setstr     gives: ");
    677      1.1  mrg           mpfr_set_str (x, RefTable[i].str, base, MPFR_RNDN);
    678      1.1  mrg           mpfr_dump (x);
    679      1.1  mrg           mpfr_set_prec (x, 2*p);
    680      1.1  mrg           mpfr_set_str (x, RefTable[i].str, base, MPFR_RNDN);
    681      1.1  mrg           printf (" setstr ++  gives: ");
    682      1.1  mrg           mpfr_dump (x);
    683      1.1  mrg           exit (1);
    684      1.1  mrg         }
    685      1.1  mrg     }
    686      1.1  mrg   mpfr_clear (y);
    687      1.1  mrg   mpfr_clear (x);
    688      1.1  mrg }
    689      1.1  mrg 
    690      1.1  mrg static void
    691      1.1  mrg check_parse (void)
    692      1.1  mrg {
    693      1.1  mrg   mpfr_t x;
    694      1.1  mrg   char *s;
    695      1.1  mrg   int res;
    696      1.1  mrg 
    697      1.1  mrg   mpfr_init (x);
    698      1.1  mrg 
    699      1.1  mrg   /* Invalid data */
    700      1.1  mrg   mpfr_set_si (x, -1, MPFR_RNDN);
    701      1.1  mrg   res = mpfr_strtofr (x, "  invalid", NULL, 10, MPFR_RNDN);
    702      1.1  mrg   if (MPFR_NOTZERO (x) || MPFR_IS_NEG (x))
    703      1.1  mrg     {
    704      1.1  mrg       printf ("Failed parsing '  invalid' (1)\n X=");
    705      1.1  mrg       mpfr_dump (x);
    706      1.1  mrg       exit (1);
    707      1.1  mrg     }
    708      1.1  mrg   MPFR_ASSERTN (res == 0);
    709      1.1  mrg   mpfr_set_si (x, -1, MPFR_RNDN);
    710      1.1  mrg   res = mpfr_strtofr (x, "  invalid", &s, 0, MPFR_RNDN);
    711      1.1  mrg   if (MPFR_NOTZERO (x) || MPFR_IS_NEG (x) || strcmp (s, "  invalid"))
    712      1.1  mrg     {
    713      1.1  mrg       printf ("Failed parsing '  invalid' (2)\n S=%s\n X=", s);
    714      1.1  mrg       mpfr_dump (x);
    715      1.1  mrg       exit (1);
    716      1.1  mrg     }
    717      1.1  mrg   MPFR_ASSERTN (res == 0);
    718      1.1  mrg   /* Check if it stops correctly */
    719      1.1  mrg   mpfr_strtofr (x, "15*x", &s, 10, MPFR_RNDN);
    720      1.1  mrg   if (mpfr_cmp_ui (x, 15) || strcmp (s, "*x"))
    721      1.1  mrg     {
    722      1.1  mrg       printf ("Failed parsing '15*x'\n S=%s\n X=", s);
    723      1.1  mrg       mpfr_dump (x);
    724      1.1  mrg       exit (1);
    725      1.1  mrg     }
    726      1.1  mrg   /* Check for leading spaces */
    727      1.1  mrg   mpfr_strtofr (x, "  1.5E-10 *x^2", &s, 10, MPFR_RNDN);
    728      1.1  mrg   if (mpfr_cmp_str1 (x, "1.5E-10") || strcmp (s, " *x^2"))
    729      1.1  mrg     {
    730      1.1  mrg       printf ("Failed parsing '1.5E-10*x^2'\n S=%s\n X=", s);
    731      1.1  mrg       mpfr_dump (x);
    732      1.1  mrg       exit (1);
    733      1.1  mrg     }
    734      1.1  mrg   /* Check for leading sign */
    735      1.1  mrg   mpfr_strtofr (x, "  +17.5E-42E ", &s, 10, MPFR_RNDN);
    736      1.1  mrg   if (mpfr_cmp_str1 (x, "17.5E-42") || strcmp (s, "E "))
    737      1.1  mrg     {
    738      1.1  mrg       printf ("Failed parsing '+17.5E-42E '\n S=%s\n X=", s);
    739      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    740      1.1  mrg       exit (1);
    741      1.1  mrg     }
    742      1.1  mrg   mpfr_strtofr (x, "-17.5E+42E\n", &s, 10, MPFR_RNDN);
    743      1.1  mrg   if (mpfr_cmp_str1 (x, "-17.5E42") || strcmp (s, "E\n"))
    744      1.1  mrg     {
    745      1.1  mrg       printf ("Failed parsing '-17.5E+42\\n'\n S=%s\n X=", s);
    746      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    747      1.1  mrg       exit (1);
    748      1.1  mrg     }
    749      1.1  mrg   /* P form */
    750      1.1  mrg   mpfr_strtofr (x, "0x42P17", &s, 16, MPFR_RNDN);
    751      1.1  mrg   if (mpfr_cmp_str (x, "8650752", 10, MPFR_RNDN) || *s != 0)
    752      1.1  mrg     {
    753      1.1  mrg       printf ("Failed parsing '0x42P17' (base = 16)\n S='%s'\n X=", s);
    754      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    755      1.1  mrg       exit (1);
    756      1.1  mrg     }
    757      1.1  mrg   mpfr_strtofr (x, "-0X42p17", &s, 16, MPFR_RNDN);
    758      1.1  mrg   if (mpfr_cmp_str (x, "-8650752", 10, MPFR_RNDN) || *s != 0)
    759      1.1  mrg     {
    760      1.1  mrg       printf ("Failed parsing '-0x42p17' (base = 16)\n S='%s'\n X=", s);
    761      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    762      1.1  mrg       exit (1);
    763      1.1  mrg     }
    764      1.1  mrg   mpfr_strtofr (x, "42p17", &s, 16, MPFR_RNDN);
    765      1.1  mrg   if (mpfr_cmp_str (x, "8650752", 10, MPFR_RNDN) || *s != 0)
    766      1.1  mrg     {
    767      1.1  mrg       printf ("Failed parsing '42p17' (base = 16)\n S='%s'\n X=", s);
    768      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    769      1.1  mrg       exit (1);
    770      1.1  mrg     }
    771      1.1  mrg   mpfr_strtofr (x, "-42P17", &s, 16, MPFR_RNDN);
    772      1.1  mrg   if (mpfr_cmp_str (x, "-8650752", 10, MPFR_RNDN) || *s != 0)
    773      1.1  mrg     {
    774      1.1  mrg       printf ("Failed parsing '-42P17' (base = 16)\n S='%s'\n X=", s);
    775      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    776      1.1  mrg       exit (1);
    777      1.1  mrg     }
    778      1.1  mrg   mpfr_strtofr (x, "0b1001P17", &s, 2, MPFR_RNDN);
    779      1.1  mrg   if (mpfr_cmp_str (x, "1179648", 10, MPFR_RNDN) || *s != 0)
    780      1.1  mrg     {
    781      1.1  mrg       printf ("Failed parsing '0b1001P17' (base = 2)\n S='%s'\n X=", s);
    782      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    783      1.1  mrg       exit (1);
    784      1.1  mrg     }
    785      1.1  mrg   mpfr_strtofr (x, "-0B1001p17", &s, 2, MPFR_RNDN);
    786      1.1  mrg   if (mpfr_cmp_str (x, "-1179648", 10, MPFR_RNDN) || *s != 0)
    787      1.1  mrg     {
    788      1.1  mrg       printf ("Failed parsing '-0B1001p17' (base = 2)\n S='%s'\n X=", s);
    789      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    790      1.1  mrg       exit (1);
    791      1.1  mrg     }
    792      1.1  mrg   mpfr_strtofr (x, "1001p17", &s, 2, MPFR_RNDN);
    793      1.1  mrg   if (mpfr_cmp_str (x, "1179648", 10, MPFR_RNDN) || *s != 0)
    794      1.1  mrg     {
    795      1.1  mrg       printf ("Failed parsing '1001p17' (base = 2)\n S='%s'\n X=", s);
    796      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    797      1.1  mrg       exit (1);
    798      1.1  mrg     }
    799      1.1  mrg   mpfr_strtofr (x, "-1001P17", &s, 2, MPFR_RNDN);
    800      1.1  mrg   if (mpfr_cmp_str (x, "-1179648", 10, MPFR_RNDN) || *s != 0)
    801      1.1  mrg     {
    802      1.1  mrg       printf ("Failed parsing '-1001P17' (base = 2)\n S='%s'\n X=", s);
    803      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    804      1.1  mrg       exit (1);
    805      1.1  mrg     }
    806      1.1  mrg   /* Check for auto-detection of the base */
    807      1.1  mrg   mpfr_strtofr (x, "+0x42P17", &s, 0, MPFR_RNDN);
    808      1.1  mrg   if (mpfr_cmp_str (x, "42P17", 16, MPFR_RNDN) || *s != 0)
    809      1.1  mrg     {
    810      1.1  mrg       printf ("Failed parsing '+0x42P17'\n S=%s\n X=", s);
    811      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    812      1.1  mrg       exit (1);
    813      1.1  mrg     }
    814      1.1  mrg   mpfr_strtofr (x, "-42E17", &s, 0, MPFR_RNDN);
    815      1.1  mrg   if (mpfr_cmp_str (x, "-42E17", 10, MPFR_RNDN) || *s != 0)
    816      1.1  mrg     {
    817      1.1  mrg       printf ("Failed parsing '-42E17'\n S=%s\n X=", s);
    818      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    819      1.1  mrg       exit (1);
    820      1.1  mrg     }
    821      1.1  mrg   mpfr_strtofr (x, "-42P17", &s, 0, MPFR_RNDN);
    822      1.1  mrg   if (mpfr_cmp_str (x, "-42", 10, MPFR_RNDN) || strcmp (s, "P17"))
    823      1.1  mrg     {
    824      1.1  mrg       printf ("Failed parsing '-42P17' (base = 0)\n S='%s'\n X=", s);
    825      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    826      1.1  mrg       exit (1);
    827      1.1  mrg     }
    828      1.1  mrg   mpfr_strtofr (x, " 0b0101.011@42", &s, 0, MPFR_RNDN);
    829      1.1  mrg   if (mpfr_cmp_str (x, "0101.011@42", 2, MPFR_RNDN) || *s != 0)
    830      1.1  mrg     {
    831      1.1  mrg       printf ("Failed parsing '0101.011@42'\n S=%s\n X=", s);
    832      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); putchar ('\n');
    833      1.1  mrg       exit (1);
    834      1.1  mrg     }
    835      1.1  mrg   mpfr_strtofr (x, " 0b0101.011P42", &s, 0, MPFR_RNDN);
    836      1.1  mrg   if (mpfr_cmp_str (x, "0101.011@42", 2, MPFR_RNDN) || *s != 0)
    837      1.1  mrg     {
    838      1.1  mrg       printf ("Failed parsing '0101.011@42'\n S=%s\n X=", s);
    839      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); putchar ('\n');
    840      1.1  mrg       exit (1);
    841      1.1  mrg     }
    842      1.1  mrg   mpfr_strtofr (x, "+0x42@17", &s, 0, MPFR_RNDN);
    843      1.1  mrg   if (mpfr_cmp_str (x, "4.2@18", 16, MPFR_RNDN) || *s != 0)
    844      1.1  mrg     {
    845      1.1  mrg       printf ("Failed parsing '+0x42P17'\n S=%s\n X=", s);
    846      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    847      1.1  mrg       exit (1);
    848      1.1  mrg     }
    849      1.1  mrg 
    850      1.1  mrg 
    851      1.1  mrg   /* Check for space inside the mantissa */
    852      1.1  mrg   mpfr_strtofr (x, "+0x4 2@17", &s, 0, MPFR_RNDN);
    853      1.1  mrg   if (mpfr_cmp_ui (x, 4) || strcmp(s," 2@17"))
    854      1.1  mrg     {
    855      1.1  mrg       printf ("Failed parsing '+0x4 2@17'\n S=%s\n X=", s);
    856      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    857      1.1  mrg       exit (1);
    858      1.1  mrg     }
    859      1.1  mrg   mpfr_strtofr (x, "+0x42 P17", &s, 0, MPFR_RNDN);
    860      1.1  mrg   if (mpfr_cmp_ui (x, 0x42) || strcmp(s," P17"))
    861      1.1  mrg     {
    862      1.1  mrg       printf ("Failed parsing '+0x42 P17'\n S=%s\n X=", s);
    863      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    864      1.1  mrg       exit (1);
    865      1.1  mrg     }
    866      1.1  mrg   /* Space between mantissa and exponent */
    867      1.1  mrg   mpfr_strtofr (x, " -0b0101P 17", &s, 0, MPFR_RNDN);
    868      1.1  mrg   if (mpfr_cmp_si (x, -5) || strcmp(s,"P 17"))
    869      1.1  mrg     {
    870      1.1  mrg       printf ("Failed parsing '-0b0101P 17'\n S=%s\n X=", s);
    871      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); putchar ('\n');
    872      1.1  mrg       exit (1);
    873      1.1  mrg     }
    874      1.1  mrg   /* Check for Invalid exponent. */
    875      1.1  mrg   mpfr_strtofr (x, " -0b0101PF17", &s, 0, MPFR_RNDN);
    876      1.1  mrg   if (mpfr_cmp_si (x, -5) || strcmp(s,"PF17"))
    877      1.1  mrg     {
    878      1.1  mrg       printf ("Failed parsing '-0b0101PF17'\n S=%s\n X=", s);
    879      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); putchar ('\n');
    880      1.1  mrg       exit (1);
    881      1.1  mrg     }
    882      1.1  mrg   /* At least one digit in the mantissa. */
    883      1.1  mrg   mpfr_strtofr (x, " .E10", &s, 0, MPFR_RNDN);
    884      1.1  mrg   if (strcmp(s," .E10"))
    885      1.1  mrg     {
    886      1.1  mrg       printf ("Failed parsing ' .E10'\n S=%s\n X=", s);
    887      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    888      1.1  mrg       exit (1);
    889      1.1  mrg     }
    890      1.1  mrg   /* Check 2 '.': 2.3.4   */
    891      1.1  mrg   mpfr_strtofr (x, "-1.2.3E4", &s, 0, MPFR_RNDN);
    892      1.1  mrg   if (mpfr_cmp_str1 (x, "-1.2") || strcmp(s,".3E4"))
    893      1.1  mrg     {
    894      1.1  mrg       printf ("Failed parsing '-1.2.3E4'\n S=%s\n X=", s);
    895      1.1  mrg       mpfr_out_str (stdout, 10, 0, x, MPFR_RNDN); putchar ('\n');
    896      1.1  mrg       exit (1);
    897      1.1  mrg     }
    898      1.1  mrg   /* Check for 0x and 0b */
    899      1.1  mrg   mpfr_strtofr (x, "  0xG", &s, 0, MPFR_RNDN);
    900      1.1  mrg   if (mpfr_cmp_ui (x, 0) || strcmp(s,"xG"))
    901      1.1  mrg     {
    902      1.1  mrg       printf ("Failed parsing '  0xG'\n S=%s\n X=", s);
    903      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    904      1.1  mrg       exit (1);
    905      1.1  mrg     }
    906      1.1  mrg   mpfr_strtofr (x, "  0b2", &s, 0, MPFR_RNDN);
    907      1.1  mrg   if (mpfr_cmp_ui (x, 0) || strcmp(s,"b2"))
    908      1.1  mrg     {
    909      1.1  mrg       printf ("Failed parsing '  0b2'\n S=%s\n X=", s);
    910      1.1  mrg       mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); putchar ('\n');
    911      1.1  mrg       exit (1);
    912      1.1  mrg     }
    913      1.1  mrg   mpfr_strtofr (x, "-0x.23@2Z33", &s, 0, MPFR_RNDN);
    914      1.1  mrg   if (mpfr_cmp_si (x, -0x23) || strcmp(s,"Z33"))
    915      1.1  mrg     {
    916      1.1  mrg       printf ("Failed parsing '-0x.23@2Z33'\n S=%s\n X=", s);
    917      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    918      1.1  mrg       exit (1);
    919      1.1  mrg     }
    920      1.1  mrg   mpfr_strtofr (x, "  0x", &s, 0, MPFR_RNDN);
    921      1.1  mrg   if (mpfr_cmp_ui (x, 0) || strcmp(s,"x"))
    922      1.1  mrg     {
    923      1.1  mrg       printf ("Failed parsing '  0x'\n S=%s\n X=", s);
    924      1.1  mrg       mpfr_out_str (stdout, 16, 0, x, MPFR_RNDN); putchar ('\n');
    925      1.1  mrg       exit (1);
    926      1.1  mrg     }
    927      1.1  mrg 
    928      1.1  mrg   mpfr_clear (x);
    929      1.1  mrg }
    930      1.1  mrg 
    931      1.1  mrg static void
    932      1.1  mrg check_overflow (void)
    933      1.1  mrg {
    934      1.1  mrg   mpfr_t x;
    935      1.1  mrg   char *s;
    936      1.1  mrg 
    937      1.1  mrg   mpfr_init (x);
    938      1.1  mrg 
    939      1.1  mrg   /* Huge overflow */
    940      1.1  mrg   mpfr_strtofr (x, "123456789E2147483646", &s, 0, MPFR_RNDN);
    941      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x) )
    942      1.1  mrg     {
    943      1.1  mrg       printf ("Check overflow failed (1) with:\n s=%s\n x=", s);
    944      1.1  mrg       mpfr_dump (x);
    945      1.1  mrg       exit (1);
    946      1.1  mrg     }
    947      1.1  mrg   mpfr_strtofr (x, "123456789E9223372036854775807", &s, 0, MPFR_RNDN);
    948      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x) )
    949      1.1  mrg     {
    950      1.1  mrg       printf ("Check overflow failed (2) with:\n s='%s'\n x=", s);
    951      1.1  mrg       mpfr_dump (x);
    952  1.1.1.5  mrg #if defined(__GNUC__)
    953  1.1.1.5  mrg       printf ("This failure is triggered by GCC bug 86554:\n"
    954  1.1.1.5  mrg               "  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86554\n"
    955  1.1.1.5  mrg               "  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87276 "
    956  1.1.1.5  mrg               "(about this test)\nWorkaround: disable code hoisting "
    957  1.1.1.5  mrg               "with -fno-code-hoisting in CFLAGS.\n");
    958  1.1.1.5  mrg       /* Note: In Debian, this error is obtained with gcc-snapshot from
    959  1.1.1.5  mrg          20180908-1 to 20181127-1. With gcc-snapshot from 20181209-1 to
    960  1.1.1.5  mrg          20190102-1 (at least), the MPFR build no longer seems affected
    961  1.1.1.5  mrg          in general, but using --with-gmp-build=... together with
    962  1.1.1.5  mrg          --enable-assert still triggers this failure. This bug has been
    963  1.1.1.5  mrg          fixed in the GCC trunk rev 267725, thus the future gcc-snapshot
    964  1.1.1.5  mrg          versions should no longer have this bug. */
    965  1.1.1.5  mrg #endif
    966      1.1  mrg       exit (1);
    967      1.1  mrg     }
    968      1.1  mrg   mpfr_strtofr (x, "123456789E170141183460469231731687303715884105728",
    969      1.1  mrg                 &s, 0, MPFR_RNDN);
    970      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x) )
    971      1.1  mrg     {
    972      1.1  mrg       printf ("Check overflow failed (3) with:\n s=%s\n x=", s);
    973      1.1  mrg       mpfr_dump (x);
    974      1.1  mrg       exit (1);
    975      1.1  mrg     }
    976      1.1  mrg 
    977      1.1  mrg   /* Limit overflow */
    978      1.1  mrg   mpfr_strtofr (x, "12E2147483646", &s, 0, MPFR_RNDN);
    979      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x) )
    980      1.1  mrg     {
    981      1.1  mrg       printf ("Check overflow failed (4) with:\n s=%s\n x=", s);
    982      1.1  mrg       mpfr_dump (x);
    983      1.1  mrg       exit (1);
    984      1.1  mrg     }
    985      1.1  mrg   mpfr_strtofr (x, "12E2147483645", &s, 0, MPFR_RNDN);
    986      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x))
    987      1.1  mrg     {
    988      1.1  mrg       printf ("Check overflow failed (5) with:\n s=%s\n x=", s);
    989      1.1  mrg       mpfr_dump (x);
    990      1.1  mrg       exit (1);
    991      1.1  mrg     }
    992      1.1  mrg   mpfr_strtofr (x, "0123456789ABCDEF@2147483640", &s, 16, MPFR_RNDN);
    993      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x))
    994      1.1  mrg     {
    995      1.1  mrg       printf ("Check overflow failed (6) with:\n s=%s\n x=", s);
    996      1.1  mrg       mpfr_dump (x);
    997      1.1  mrg       exit (1);
    998      1.1  mrg     }
    999      1.1  mrg   mpfr_strtofr (x, "0123456789ABCDEF@540000000", &s, 16, MPFR_RNDN);
   1000      1.1  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x))
   1001      1.1  mrg     {
   1002      1.1  mrg       printf ("Check overflow failed (7) with:\n s=%s\n x=", s);
   1003      1.1  mrg       mpfr_dump (x);
   1004      1.1  mrg       exit (1);
   1005      1.1  mrg     }
   1006  1.1.1.5  mrg   mpfr_strtofr (x, "1@2305843009213693951", &s, 16, MPFR_RNDN);
   1007  1.1.1.5  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x))
   1008  1.1.1.5  mrg     {
   1009  1.1.1.5  mrg       printf ("Check overflow failed (8) with:\n s=%s\n x=", s);
   1010  1.1.1.5  mrg       mpfr_dump (x);
   1011  1.1.1.5  mrg       exit (1);
   1012  1.1.1.5  mrg     }
   1013  1.1.1.5  mrg   mpfr_strtofr (x, "1@2305843009213693951", &s, 17, MPFR_RNDN);
   1014  1.1.1.5  mrg   if (s[0] != 0 || !MPFR_IS_INF (x) || !MPFR_IS_POS (x))
   1015  1.1.1.5  mrg     {
   1016  1.1.1.5  mrg       printf ("Check overflow failed (9) with:\n s=%s\n x=", s);
   1017  1.1.1.5  mrg       mpfr_dump (x);
   1018  1.1.1.5  mrg       exit (1);
   1019  1.1.1.5  mrg     }
   1020      1.1  mrg 
   1021      1.1  mrg   /* Check underflow */
   1022      1.1  mrg   mpfr_strtofr (x, "123456789E-2147483646", &s, 0, MPFR_RNDN);
   1023      1.1  mrg   if (s[0] != 0 || !MPFR_IS_ZERO (x) || !MPFR_IS_POS (x) )
   1024      1.1  mrg     {
   1025      1.1  mrg       printf ("Check underflow failed (1) with:\n s=%s\n x=", s);
   1026      1.1  mrg       mpfr_dump (x);
   1027      1.1  mrg       exit (1);
   1028      1.1  mrg     }
   1029      1.1  mrg   mpfr_strtofr (x, "123456789E-9223372036854775807", &s, 0, MPFR_RNDN);
   1030      1.1  mrg   if (s[0] != 0 || !MPFR_IS_ZERO (x) || !MPFR_IS_POS (x) )
   1031      1.1  mrg     {
   1032      1.1  mrg       printf ("Check underflow failed (2) with:\n s='%s'\n x=", s);
   1033      1.1  mrg       mpfr_dump (x);
   1034      1.1  mrg       exit (1);
   1035      1.1  mrg     }
   1036      1.1  mrg   mpfr_strtofr (x, "-123456789E-170141183460469231731687303715884105728",
   1037      1.1  mrg                 &s, 0, MPFR_RNDN);
   1038      1.1  mrg   if (s[0] != 0 || !MPFR_IS_ZERO (x) || !MPFR_IS_NEG (x) )
   1039      1.1  mrg     {
   1040      1.1  mrg       printf ("Check underflow failed (3) with:\n s=%s\n x=", s);
   1041      1.1  mrg       mpfr_dump (x);
   1042      1.1  mrg       exit (1);
   1043      1.1  mrg     }
   1044      1.1  mrg   mpfr_strtofr (x, "0123456789ABCDEF@-540000000", &s, 16, MPFR_RNDN);
   1045      1.1  mrg   if (s[0] != 0 || !MPFR_IS_ZERO (x) || !MPFR_IS_POS (x))
   1046      1.1  mrg     {
   1047      1.1  mrg       printf ("Check overflow failed (7) with:\n s=%s\n x=", s);
   1048      1.1  mrg       mpfr_dump (x);
   1049      1.1  mrg       exit (1);
   1050      1.1  mrg     }
   1051  1.1.1.5  mrg   mpfr_strtofr (x, "1@-2305843009213693952", &s, 16, MPFR_RNDN);
   1052  1.1.1.5  mrg   if (s[0] != 0 || !MPFR_IS_ZERO (x) || !MPFR_IS_POS (x) )
   1053  1.1.1.5  mrg     {
   1054  1.1.1.5  mrg       printf ("Check underflow failed (8) with:\n s='%s'\n x=", s);
   1055  1.1.1.5  mrg       mpfr_dump (x);
   1056  1.1.1.5  mrg       exit (1);
   1057  1.1.1.5  mrg     }
   1058      1.1  mrg 
   1059      1.1  mrg   mpfr_clear (x);
   1060      1.1  mrg }
   1061      1.1  mrg 
   1062      1.1  mrg static void
   1063      1.1  mrg check_retval (void)
   1064      1.1  mrg {
   1065      1.1  mrg   mpfr_t x;
   1066      1.1  mrg   int res;
   1067      1.1  mrg 
   1068      1.1  mrg   mpfr_init2 (x, 10);
   1069      1.1  mrg 
   1070      1.1  mrg   res = mpfr_strtofr (x, "01011000111", NULL, 2, MPFR_RNDN);
   1071      1.1  mrg   MPFR_ASSERTN (res == 0);
   1072      1.1  mrg   res = mpfr_strtofr (x, "11011000111", NULL, 2, MPFR_RNDN);
   1073      1.1  mrg   MPFR_ASSERTN (res > 0);
   1074      1.1  mrg   res = mpfr_strtofr (x, "110110001101", NULL, 2, MPFR_RNDN);
   1075      1.1  mrg   MPFR_ASSERTN (res < 0);
   1076      1.1  mrg 
   1077      1.1  mrg   mpfr_clear (x);
   1078      1.1  mrg }
   1079      1.1  mrg 
   1080      1.1  mrg /* Bug found by Christoph Lauter (in mpfr_set_str). */
   1081      1.1  mrg static struct bug20081025_test {
   1082      1.1  mrg   mpfr_rnd_t rnd;
   1083      1.1  mrg   int inexact;
   1084      1.1  mrg   const char *str;
   1085      1.1  mrg   const char *binstr;
   1086      1.1  mrg } Bug20081028Table[] = {
   1087      1.1  mrg   {MPFR_RNDN, -1, "1.00000000000000000006", "1"},
   1088      1.1  mrg   {MPFR_RNDZ, -1, "1.00000000000000000006", "1"},
   1089      1.1  mrg   {MPFR_RNDU, +1, "1.00000000000000000006",
   1090      1.1  mrg    "10000000000000000000000000000001e-31"},
   1091      1.1  mrg   {MPFR_RNDD, -1, "1.00000000000000000006", "1"},
   1092      1.1  mrg 
   1093      1.1  mrg 
   1094      1.1  mrg   {MPFR_RNDN, +1, "-1.00000000000000000006", "-1"},
   1095      1.1  mrg   {MPFR_RNDZ, +1, "-1.00000000000000000006", "-1"},
   1096      1.1  mrg   {MPFR_RNDU, +1, "-1.00000000000000000006", "-1"},
   1097      1.1  mrg   {MPFR_RNDD, -1, "-1.00000000000000000006",
   1098      1.1  mrg    "-10000000000000000000000000000001e-31"},
   1099      1.1  mrg 
   1100      1.1  mrg   {MPFR_RNDN, +1, "0.999999999999999999999999999999999999999999999", "1"},
   1101      1.1  mrg   {MPFR_RNDZ, -1, "0.999999999999999999999999999999999999999999999",
   1102      1.1  mrg    "11111111111111111111111111111111e-32"},
   1103      1.1  mrg   {MPFR_RNDU, +1, "0.999999999999999999999999999999999999999999999", "1"},
   1104      1.1  mrg   {MPFR_RNDD, -1, "0.999999999999999999999999999999999999999999999",
   1105      1.1  mrg    "11111111111111111111111111111111e-32"},
   1106      1.1  mrg 
   1107      1.1  mrg   {MPFR_RNDN, -1, "-0.999999999999999999999999999999999999999999999", "-1"},
   1108      1.1  mrg   {MPFR_RNDZ, +1, "-0.999999999999999999999999999999999999999999999",
   1109      1.1  mrg    "-11111111111111111111111111111111e-32"},
   1110      1.1  mrg   {MPFR_RNDU, +1, "-0.999999999999999999999999999999999999999999999",
   1111      1.1  mrg    "-11111111111111111111111111111111e-32"},
   1112      1.1  mrg   {MPFR_RNDD, -1, "-0.999999999999999999999999999999999999999999999", "-1"}
   1113      1.1  mrg };
   1114      1.1  mrg 
   1115      1.1  mrg static void
   1116      1.1  mrg bug20081028 (void)
   1117      1.1  mrg {
   1118      1.1  mrg   int i;
   1119      1.1  mrg   int inexact, res;
   1120      1.1  mrg   mpfr_rnd_t rnd;
   1121      1.1  mrg   mpfr_t x, y;
   1122      1.1  mrg   char *s;
   1123      1.1  mrg 
   1124      1.1  mrg   mpfr_init2 (x, 32);
   1125      1.1  mrg   mpfr_init2 (y, 32);
   1126      1.1  mrg   for (i = 0 ; i < numberof (Bug20081028Table) ; i++)
   1127      1.1  mrg     {
   1128      1.1  mrg       rnd     = Bug20081028Table[i].rnd;
   1129      1.1  mrg       inexact = Bug20081028Table[i].inexact;
   1130      1.1  mrg       mpfr_set_str_binary (x, Bug20081028Table[i].binstr);
   1131      1.1  mrg       res = mpfr_strtofr (y, Bug20081028Table[i].str, &s, 10, rnd);
   1132      1.1  mrg       if (s == NULL || *s != 0)
   1133      1.1  mrg         {
   1134      1.1  mrg           printf ("Error in Bug20081028: strtofr didn't parse entire input\n"
   1135      1.1  mrg                   "for (i=%d) Str=\"%s\"", i, Bug20081028Table[i].str);
   1136      1.1  mrg           exit (1);
   1137      1.1  mrg         }
   1138      1.1  mrg       if (! SAME_SIGN (res, inexact))
   1139      1.1  mrg         {
   1140      1.1  mrg           printf ("Error in Bug20081028: expected %s ternary value, "
   1141      1.1  mrg                   "got %d\nfor (i=%d) Rnd=%s Str=\"%s\"\n Set binary gives: ",
   1142      1.1  mrg                   inexact > 0 ? "positive" : "negative",
   1143      1.1  mrg                   res, i, mpfr_print_rnd_mode(rnd), Bug20081028Table[i].str);
   1144      1.1  mrg           mpfr_dump (x);
   1145      1.1  mrg           printf (" strtofr    gives: ");
   1146      1.1  mrg           mpfr_dump (y);
   1147      1.1  mrg           exit (1);
   1148      1.1  mrg         }
   1149      1.1  mrg       if (mpfr_cmp (x, y))
   1150      1.1  mrg         {
   1151      1.1  mrg           printf ("Error in Bug20081028: Results differ between strtofr and "
   1152      1.1  mrg                   "set_binary\nfor (i=%d) Rnd=%s Str=\"%s\"\n"
   1153      1.1  mrg                   " Set binary gives: ",
   1154      1.1  mrg                   i, mpfr_print_rnd_mode(rnd), Bug20081028Table[i].str);
   1155      1.1  mrg           mpfr_dump (x);
   1156      1.1  mrg           printf (" strtofr    gives: ");
   1157      1.1  mrg           mpfr_dump (y);
   1158      1.1  mrg           exit (1);
   1159      1.1  mrg         }
   1160      1.1  mrg     }
   1161      1.1  mrg   mpfr_clear (y);
   1162      1.1  mrg   mpfr_clear (x);
   1163      1.1  mrg }
   1164      1.1  mrg 
   1165      1.1  mrg /* check that 1.23e is correctly parsed, cf
   1166  1.1.1.4  mrg    https://gmplib.org/list-archives/gmp-bugs/2010-March/001898.html */
   1167      1.1  mrg static void
   1168      1.1  mrg test20100310 (void)
   1169      1.1  mrg {
   1170      1.1  mrg   mpfr_t x, y;
   1171      1.1  mrg   char str[] = "1.23e", *endptr;
   1172      1.1  mrg 
   1173      1.1  mrg   mpfr_init2 (x, 53);
   1174      1.1  mrg   mpfr_init2 (y, 53);
   1175      1.1  mrg   mpfr_strtofr (x, str, &endptr, 10, MPFR_RNDN);
   1176      1.1  mrg   mpfr_strtofr (y, "1.23", NULL, 10, MPFR_RNDN);
   1177      1.1  mrg   if (mpfr_cmp (x, y) != 0)
   1178      1.1  mrg     {
   1179      1.1  mrg       printf ("x <> y in test20100310\n");
   1180      1.1  mrg       exit (1);
   1181      1.1  mrg     }
   1182      1.1  mrg   if (endptr != str + 4) /* strtofr should take into account '1.23',
   1183      1.1  mrg                             not '1.23e' */
   1184      1.1  mrg     {
   1185      1.1  mrg       printf ("endptr <> str + 4 in test20100310\n");
   1186      1.1  mrg       exit (1);
   1187      1.1  mrg     }
   1188      1.1  mrg   mpfr_clear (x);
   1189      1.1  mrg   mpfr_clear (y);
   1190      1.1  mrg }
   1191      1.1  mrg 
   1192  1.1.1.2  mrg /* From a bug reported by Joseph S. Myers
   1193  1.1.1.2  mrg    https://sympa.inria.fr/sympa/arc/mpfr/2012-08/msg00005.html */
   1194  1.1.1.2  mrg static void
   1195  1.1.1.2  mrg bug20120814 (void)
   1196  1.1.1.2  mrg {
   1197  1.1.1.2  mrg   mpfr_exp_t emin = -30, e;
   1198  1.1.1.2  mrg   mpfr_t x, y;
   1199  1.1.1.2  mrg   int r;
   1200  1.1.1.2  mrg   char s[64], *p;
   1201  1.1.1.2  mrg 
   1202  1.1.1.2  mrg   mpfr_init2 (x, 2);
   1203  1.1.1.2  mrg   mpfr_set_ui_2exp (x, 3, emin - 2, MPFR_RNDN);
   1204  1.1.1.2  mrg   mpfr_get_str (s + 1, &e, 10, 19, x, MPFR_RNDD);
   1205  1.1.1.2  mrg   s[0] = s[1];
   1206  1.1.1.2  mrg   s[1] = '.';
   1207  1.1.1.2  mrg   for (p = s; *p != 0; p++) ;
   1208  1.1.1.2  mrg   *p = 'e';
   1209  1.1.1.2  mrg   sprintf (p + 1, "%d", (int) e - 1);
   1210  1.1.1.2  mrg 
   1211  1.1.1.2  mrg   mpfr_init2 (y, 4);
   1212  1.1.1.2  mrg   r = mpfr_strtofr (y, s, NULL, 0, MPFR_RNDN);
   1213  1.1.1.2  mrg   if (r <= 0 || ! mpfr_equal_p (x, y))
   1214  1.1.1.2  mrg     {
   1215  1.1.1.2  mrg       printf ("Error in bug20120814\n");
   1216  1.1.1.2  mrg       printf ("mpfr_strtofr failed on string \"%s\"\n", s);
   1217  1.1.1.2  mrg       printf ("Expected inex > 0 and y = 0.1100E%d\n", (int) emin);
   1218  1.1.1.2  mrg       printf ("Got inex = %-6d and y = ", r);
   1219  1.1.1.2  mrg       mpfr_dump (y);
   1220  1.1.1.2  mrg       exit (1);
   1221  1.1.1.2  mrg     }
   1222  1.1.1.2  mrg 
   1223  1.1.1.2  mrg   mpfr_clear (x);
   1224  1.1.1.2  mrg   mpfr_clear (y);
   1225  1.1.1.2  mrg }
   1226  1.1.1.2  mrg 
   1227  1.1.1.2  mrg static void
   1228  1.1.1.2  mrg bug20120829 (void)
   1229  1.1.1.2  mrg {
   1230  1.1.1.2  mrg   mpfr_t x1, x2, e;
   1231  1.1.1.2  mrg   int inex1, inex2, i, r;
   1232  1.1.1.2  mrg   char s[48] = "1e-1";
   1233  1.1.1.2  mrg 
   1234  1.1.1.2  mrg   mpfr_init2 (e, 128);
   1235  1.1.1.2  mrg   mpfr_inits2 (4, x1, x2, (mpfr_ptr) 0);
   1236  1.1.1.2  mrg 
   1237  1.1.1.2  mrg   inex1 = mpfr_set_si (e, -1, MPFR_RNDN);
   1238  1.1.1.2  mrg   MPFR_ASSERTN (inex1 == 0);
   1239  1.1.1.2  mrg 
   1240  1.1.1.2  mrg   for (i = 1; i <= sizeof(s) - 5; i++)
   1241  1.1.1.2  mrg     {
   1242  1.1.1.2  mrg       s[3+i] = '0';
   1243  1.1.1.2  mrg       s[4+i] = 0;
   1244  1.1.1.2  mrg       inex1 = mpfr_mul_ui (e, e, 10, MPFR_RNDN);
   1245  1.1.1.2  mrg       MPFR_ASSERTN (inex1 == 0);
   1246  1.1.1.4  mrg       RND_LOOP_NO_RNDF (r)
   1247  1.1.1.2  mrg         {
   1248  1.1.1.2  mrg           mpfr_rnd_t rnd = (mpfr_rnd_t) r;
   1249  1.1.1.2  mrg 
   1250  1.1.1.2  mrg           inex1 = mpfr_exp10 (x1, e, rnd);
   1251  1.1.1.4  mrg           inex1 = VSIGN (inex1);
   1252  1.1.1.2  mrg           inex2 = mpfr_strtofr (x2, s, NULL, 0, rnd);
   1253  1.1.1.4  mrg           inex2 = VSIGN (inex2);
   1254  1.1.1.2  mrg           /* On 32-bit machines, for i = 7, r8389, r8391 and r8394 do:
   1255  1.1.1.2  mrg              strtofr.c:...: MPFR assertion failed: cy == 0
   1256  1.1.1.2  mrg              r8396 is OK.
   1257  1.1.1.2  mrg              On 64-bit machines, for i = 15,
   1258  1.1.1.2  mrg              r8389 does: strtofr.c:678: MPFR assertion failed: err < (64 - 0)
   1259  1.1.1.2  mrg              r8391 does: strtofr.c:680: MPFR assertion failed: h < ysize
   1260  1.1.1.2  mrg              r8394 and r8396 are OK.
   1261  1.1.1.2  mrg           */
   1262  1.1.1.2  mrg           if (! mpfr_equal_p (x1, x2) || inex1 != inex2)
   1263  1.1.1.2  mrg             {
   1264  1.1.1.2  mrg               printf ("Error in bug20120829 for i = %d, rnd = %s\n",
   1265  1.1.1.2  mrg                       i, mpfr_print_rnd_mode (rnd));
   1266  1.1.1.2  mrg               printf ("Expected inex = %d, x = ", inex1);
   1267  1.1.1.2  mrg               mpfr_dump (x1);
   1268  1.1.1.2  mrg               printf ("Got      inex = %d, x = ", inex2);
   1269  1.1.1.2  mrg               mpfr_dump (x2);
   1270  1.1.1.2  mrg               exit (1);
   1271  1.1.1.2  mrg             }
   1272  1.1.1.2  mrg         }
   1273  1.1.1.2  mrg     }
   1274  1.1.1.2  mrg 
   1275  1.1.1.2  mrg   mpfr_clears (e, x1, x2, (mpfr_ptr) 0);
   1276  1.1.1.2  mrg }
   1277  1.1.1.2  mrg 
   1278  1.1.1.4  mrg /* https://sympa.inria.fr/sympa/arc/mpfr/2016-12/msg00043.html
   1279  1.1.1.4  mrg    mpfr_strtofr can return an incorrect ternary value.
   1280  1.1.1.4  mrg    Note: As a consequence, the value can also be incorrect if the current
   1281  1.1.1.4  mrg    exponent range is not the maximum one (since the ternary value is used
   1282  1.1.1.4  mrg    to resolve double rounding in mpfr_check_range); this can happen only
   1283  1.1.1.4  mrg    if the value is a midpoint between 0 and the minimum positive number
   1284  1.1.1.4  mrg    or the opposite. */
   1285  1.1.1.4  mrg static void
   1286  1.1.1.4  mrg bug20161217 (void)
   1287  1.1.1.4  mrg {
   1288  1.1.1.4  mrg   mpfr_t fp, z;
   1289  1.1.1.4  mrg   static const char * num = "0.1387778780781445675529539585113525390625e31";
   1290  1.1.1.4  mrg   /* The above number is 5^47/2^9. */
   1291  1.1.1.4  mrg   int inex;
   1292  1.1.1.4  mrg 
   1293  1.1.1.4  mrg   mpfr_init2 (fp, 110);
   1294  1.1.1.4  mrg   mpfr_init2 (z, 110);
   1295  1.1.1.4  mrg 
   1296  1.1.1.4  mrg   inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN);
   1297  1.1.1.4  mrg   MPFR_ASSERTN(inex == 0);
   1298  1.1.1.4  mrg   mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001101E-9");
   1299  1.1.1.4  mrg   MPFR_ASSERTN(mpfr_equal_p (fp, z));
   1300  1.1.1.4  mrg 
   1301  1.1.1.4  mrg   /* try with 109 bits */
   1302  1.1.1.4  mrg   mpfr_set_prec (fp, 109);
   1303  1.1.1.4  mrg   inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN);
   1304  1.1.1.4  mrg   MPFR_ASSERTN(inex < 0);
   1305  1.1.1.4  mrg   mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001100E-9");
   1306  1.1.1.4  mrg   MPFR_ASSERTN(mpfr_equal_p (fp, z));
   1307  1.1.1.4  mrg 
   1308  1.1.1.4  mrg   mpfr_clear (fp);
   1309  1.1.1.4  mrg   mpfr_clear (z);
   1310  1.1.1.4  mrg }
   1311  1.1.1.4  mrg 
   1312  1.1.1.4  mrg /* check bug in MPFR 3.1.5 is fixed: cf
   1313  1.1.1.4  mrg    https://sympa.inria.fr/sympa/arc/mpfr/2017-03/msg00009.html
   1314  1.1.1.4  mrg    Note: same bug as bug20161217. See also the comments of bug20161217;
   1315  1.1.1.4  mrg    here, this is a case where the value is incorrect. */
   1316  1.1.1.4  mrg static void
   1317  1.1.1.4  mrg bug20170308 (void)
   1318  1.1.1.4  mrg {
   1319  1.1.1.4  mrg   mpfr_exp_t emin;
   1320  1.1.1.4  mrg    /* the following is slightly larger than 2^-1075, thus should be rounded
   1321  1.1.1.4  mrg       to 0.5*2^-1074, with ternary value < 0 */
   1322  1.1.1.4  mrg   char str[] = "2.47032822920623272089E-324";
   1323  1.1.1.4  mrg   mpfr_t z;
   1324  1.1.1.4  mrg   int inex;
   1325  1.1.1.4  mrg 
   1326  1.1.1.4  mrg   emin = mpfr_get_emin ();
   1327  1.1.1.4  mrg   mpfr_init2 (z, 53);
   1328  1.1.1.6  mrg   set_emin (-1073);
   1329  1.1.1.5  mrg   /* with emin = -1073, the smallest positive number is 0.5*2^emin = 2^(-1074),
   1330  1.1.1.5  mrg      thus str should be rounded to 2^(-1074) with inex > 0 */
   1331  1.1.1.5  mrg   inex = mpfr_strtofr (z, str, NULL, 10, MPFR_RNDN);
   1332  1.1.1.5  mrg   MPFR_ASSERTN(inex > 0 && mpfr_cmp_ui_2exp (z, 1, -1074) == 0);
   1333  1.1.1.6  mrg   set_emin (-1074);
   1334  1.1.1.5  mrg   /* with emin = -1074, str should be rounded to 2^(-1075) with inex < 0 */
   1335  1.1.1.4  mrg   inex = mpfr_strtofr (z, str, NULL, 10, MPFR_RNDN);
   1336  1.1.1.4  mrg   MPFR_ASSERTN(inex < 0 && mpfr_cmp_ui_2exp (z, 1, -1075) == 0);
   1337  1.1.1.4  mrg   mpfr_clear (z);
   1338  1.1.1.6  mrg   set_emin (emin);
   1339  1.1.1.5  mrg }
   1340  1.1.1.5  mrg 
   1341  1.1.1.5  mrg /* r13299 fails with 8-bit limbs (micro-gmp/8). */
   1342  1.1.1.5  mrg static void
   1343  1.1.1.5  mrg bug20181127 (void)
   1344  1.1.1.5  mrg {
   1345  1.1.1.5  mrg   char s[] = "9.Z6nrLVSMG1bDcCF2ONJdX@-183295525";  /* base 58 */
   1346  1.1.1.5  mrg   mpfr_t x, y;
   1347  1.1.1.5  mrg 
   1348  1.1.1.5  mrg   mpfr_inits2 (6, x, y, (mpfr_ptr) 0);
   1349  1.1.1.5  mrg   mpfr_set_ui_2exp (x, 5, -1073741701, MPFR_RNDN);
   1350  1.1.1.5  mrg   mpfr_strtofr (y, s, NULL, 58, MPFR_RNDZ);
   1351  1.1.1.5  mrg   if (! mpfr_equal_p (x, y))
   1352  1.1.1.5  mrg     {
   1353  1.1.1.5  mrg       printf ("Error in bug20181127 on %s (base 58)\n", s);
   1354  1.1.1.5  mrg       printf ("Expected x = ");
   1355  1.1.1.5  mrg       mpfr_dump (x);
   1356  1.1.1.5  mrg       printf ("Got      y = ");
   1357  1.1.1.5  mrg       mpfr_dump (y);
   1358  1.1.1.5  mrg       printf ("*Note* In base 58, x ~= ");
   1359  1.1.1.5  mrg       mpfr_out_str (stdout, 58, 8, x, MPFR_RNDN);
   1360  1.1.1.5  mrg       printf ("\n");
   1361  1.1.1.5  mrg       exit (1);
   1362  1.1.1.5  mrg     }
   1363  1.1.1.5  mrg   mpfr_clears (x, y, (mpfr_ptr) 0);
   1364  1.1.1.5  mrg }
   1365  1.1.1.5  mrg 
   1366  1.1.1.7  mrg /* Bug reported by Michael Jones (case i = 0 below)
   1367  1.1.1.7  mrg      https://sympa.inria.fr/sympa/arc/mpfr/2023-06/msg00000.html
   1368  1.1.1.7  mrg    This yields an integer overflow -LONG_MIN. The result might still
   1369  1.1.1.7  mrg    be correct, but a runtime error is obtained with an UB sanitizer:
   1370  1.1.1.7  mrg      strtofr.c:745:11: runtime error: negation of -9223372036854775808 [...]
   1371  1.1.1.7  mrg    Details after an analysis:
   1372  1.1.1.7  mrg    With GCC 4.9.4 and tcc, one gets an assertion failure:
   1373  1.1.1.7  mrg      mpn_exp.c:94: MPFR assertion failed: e > 0
   1374  1.1.1.7  mrg    And if all assertions are disabled with
   1375  1.1.1.7  mrg      ./configure --enable-assert=none CC=gcc-4.9
   1376  1.1.1.7  mrg    one gets an incorrect result:
   1377  1.1.1.7  mrg      Error in bug20230606 for i = 0
   1378  1.1.1.7  mrg      Expected x = 0
   1379  1.1.1.7  mrg      Got      x = 0.11001100110011001E-3
   1380  1.1.1.7  mrg    This issue is not visible with GCC 8.4.0 and later, even with -O0,
   1381  1.1.1.7  mrg    because GCC now transforms "-X >= 0" to "X <= 0" (which is valid
   1382  1.1.1.7  mrg    under the ISO C rules). Note that such an optimization generally
   1383  1.1.1.7  mrg    makes buggy code (which assumes "wrapping") fail; here, it makes
   1384  1.1.1.7  mrg    the bug invisible!
   1385  1.1.1.7  mrg 
   1386  1.1.1.7  mrg    Case i = 1 should be identical.
   1387  1.1.1.7  mrg 
   1388  1.1.1.7  mrg    Case i = 2 shows another bug (probably with all compilers):
   1389  1.1.1.7  mrg      Error in bug20230606 for i = 2
   1390  1.1.1.7  mrg      Expected x = 0
   1391  1.1.1.7  mrg      Got      x = 0.11111111111111111E1073741823
   1392  1.1.1.7  mrg    or with an UB sanitizer:
   1393  1.1.1.7  mrg      strtofr.c:428:19: runtime error: signed integer overflow: [...]
   1394  1.1.1.7  mrg    This is the bug mentioned at
   1395  1.1.1.7  mrg      https://sympa.inria.fr/sympa/arc/mpfr/2023-06/msg00001.html
   1396  1.1.1.7  mrg */
   1397  1.1.1.7  mrg static void
   1398  1.1.1.7  mrg bug20230606 (void)
   1399  1.1.1.7  mrg {
   1400  1.1.1.7  mrg   const char *const s[] = {
   1401  1.1.1.7  mrg     "0.1E-99999999999999999999",
   1402  1.1.1.7  mrg     ".1E-99999999999999999999",
   1403  1.1.1.7  mrg     ".01E-99999999999999999999" };
   1404  1.1.1.7  mrg   mpfr_t x;
   1405  1.1.1.7  mrg   int i;
   1406  1.1.1.7  mrg 
   1407  1.1.1.7  mrg   mpfr_init2 (x, 17);
   1408  1.1.1.7  mrg   for (i = 0; i < numberof (s); i++)
   1409  1.1.1.7  mrg     {
   1410  1.1.1.7  mrg       mpfr_strtofr (x, s[i], NULL, 10, MPFR_RNDZ);
   1411  1.1.1.7  mrg       if (!mpfr_zero_p (x) || mpfr_signbit (x) != 0)
   1412  1.1.1.7  mrg         {
   1413  1.1.1.7  mrg           printf ("Error in bug20230606 for i = %d\n", i);
   1414  1.1.1.7  mrg           printf ("Expected x = 0\n");
   1415  1.1.1.7  mrg           printf ("Got      x = ");
   1416  1.1.1.7  mrg           mpfr_dump (x);
   1417  1.1.1.7  mrg           exit (1);
   1418  1.1.1.7  mrg         }
   1419  1.1.1.7  mrg     }
   1420  1.1.1.7  mrg   mpfr_clear (x);
   1421  1.1.1.7  mrg }
   1422  1.1.1.7  mrg 
   1423  1.1.1.5  mrg static void
   1424  1.1.1.5  mrg coverage (void)
   1425  1.1.1.5  mrg {
   1426  1.1.1.5  mrg #if _MPFR_EXP_FORMAT >= 3 && _MPFR_PREC_FORMAT == 3 && MPFR_PREC_BITS == 64
   1427  1.1.1.5  mrg   char str3[] = "1@-2112009130072406892";
   1428  1.1.1.5  mrg   char str31[] = "1@-511170973314085831";
   1429  1.1.1.5  mrg   mpfr_t x;
   1430  1.1.1.5  mrg   int inex;
   1431  1.1.1.5  mrg   mpfr_exp_t emin;
   1432  1.1.1.5  mrg 
   1433  1.1.1.5  mrg   /* exercise assertion cy == 0 around line 698 of strtofr.c */
   1434  1.1.1.5  mrg   emin = mpfr_get_emin ();
   1435  1.1.1.6  mrg   set_emin (mpfr_get_emin_min ());
   1436  1.1.1.5  mrg   /* emin = -4611686018427387903 on a 64-bit machine */
   1437  1.1.1.5  mrg   mpfr_init2 (x, 1);
   1438  1.1.1.5  mrg   inex = mpfr_strtofr (x, str3, NULL, 3, MPFR_RNDN);
   1439  1.1.1.5  mrg   /* 3^-2112009130072406892 is slightly larger than (2^64)^-52303988630398057
   1440  1.1.1.5  mrg      thus we should get inex < 0 */
   1441  1.1.1.5  mrg   MPFR_ASSERTN(inex < 0);
   1442  1.1.1.5  mrg   MPFR_ASSERTN(mpfr_cmp_ui_2exp (x, 1, -52303988630398057 * 64) == 0);
   1443  1.1.1.5  mrg   inex = mpfr_strtofr (x, str31, NULL, 31, MPFR_RNDN);
   1444  1.1.1.5  mrg   /* 31^-511170973314085831 is slightly smaller than (2^64)^-39569396093273623
   1445  1.1.1.5  mrg      thus we should get inex > 0 */
   1446  1.1.1.5  mrg   MPFR_ASSERTN(inex > 0);
   1447  1.1.1.5  mrg   MPFR_ASSERTN(mpfr_cmp_ui_2exp (x, 1, -39569396093273623 * 64) == 0);
   1448  1.1.1.5  mrg   mpfr_clear (x);
   1449  1.1.1.6  mrg   set_emin (emin);
   1450  1.1.1.5  mrg #endif
   1451  1.1.1.5  mrg }
   1452  1.1.1.5  mrg 
   1453  1.1.1.5  mrg #define BSIZE 512
   1454  1.1.1.5  mrg 
   1455  1.1.1.5  mrg static void
   1456  1.1.1.5  mrg random_tests (void)
   1457  1.1.1.5  mrg {
   1458  1.1.1.5  mrg   char s0[BSIZE], s1[BSIZE], s2[BSIZE+64];
   1459  1.1.1.5  mrg   mpfr_t x0, x1, x2;
   1460  1.1.1.5  mrg   int prec, i;
   1461  1.1.1.5  mrg 
   1462  1.1.1.5  mrg   for (prec = MPFR_PREC_MIN; prec < 300; prec++)
   1463  1.1.1.5  mrg     {
   1464  1.1.1.5  mrg       mpfr_inits2 (prec, x0, x1, x2, (mpfr_ptr) 0);
   1465  1.1.1.5  mrg 
   1466  1.1.1.5  mrg       for (i = 0; i < 20; i++)
   1467  1.1.1.5  mrg         {
   1468  1.1.1.5  mrg           const char *num_to_text;
   1469  1.1.1.5  mrg           mpfr_exp_t e0, e1;
   1470  1.1.1.5  mrg           int base, j, k, neg;
   1471  1.1.1.5  mrg           int noteq = 0;
   1472  1.1.1.5  mrg           char d;
   1473  1.1.1.5  mrg 
   1474  1.1.1.5  mrg           /* We want the same exponent for x0 and its successor x1.
   1475  1.1.1.5  mrg              This is not possible for precision 1 in base 2. */
   1476  1.1.1.5  mrg           do
   1477  1.1.1.5  mrg             base = 2 + (randlimb () % 61);
   1478  1.1.1.5  mrg           while (prec == 1 && base == 2);
   1479  1.1.1.5  mrg 
   1480  1.1.1.5  mrg           num_to_text = base <= 36 ? num_to_text36 : num_to_text62;
   1481  1.1.1.5  mrg 
   1482  1.1.1.5  mrg           do
   1483  1.1.1.5  mrg             {
   1484  1.1.1.5  mrg               /* Let's consider only positive numbers. We should test
   1485  1.1.1.5  mrg                  negative numbers, but they should be built later, just
   1486  1.1.1.5  mrg                  for the test itself. */
   1487  1.1.1.5  mrg               tests_default_random (x0, 0,
   1488  1.1.1.5  mrg                                     mpfr_get_emin (), mpfr_get_emax (), 1);
   1489  1.1.1.5  mrg               mpfr_set (x1, x0, MPFR_RNDN);
   1490  1.1.1.5  mrg               mpfr_nextabove (x1);
   1491  1.1.1.5  mrg               mpfr_get_str (s0, &e0, base, BSIZE - 1, x0, MPFR_RNDU);
   1492  1.1.1.5  mrg               mpfr_get_str (s1, &e1, base, BSIZE - 1, x1, MPFR_RNDD);
   1493  1.1.1.5  mrg             }
   1494  1.1.1.5  mrg           while (! (mpfr_regular_p (x0) && mpfr_regular_p (x1) && e0 == e1));
   1495  1.1.1.5  mrg 
   1496  1.1.1.5  mrg           /* 0 < x0 <= (s0,e) <= (s1,e) <= x1 with e = e0 = e1.
   1497  1.1.1.5  mrg              Let's build a string s2 randomly formed by:
   1498  1.1.1.5  mrg              - the common prefix of s0 and s1;
   1499  1.1.1.5  mrg              - some of the following digits of s0 (possibly none);
   1500  1.1.1.5  mrg              - the next digit of s0 + 1;
   1501  1.1.1.5  mrg              - some of the following digits of s1 (possibly none).
   1502  1.1.1.5  mrg              Then 0 < x0 <= (s0,e) < (s2,e) <= (s1,e) <= x1, and with
   1503  1.1.1.5  mrg              a very high probability that (s2,e) < (s1,e); noteq is
   1504  1.1.1.5  mrg              set to true in this case.
   1505  1.1.1.5  mrg              For instance, if:
   1506  1.1.1.5  mrg                s0 = 123456789
   1507  1.1.1.5  mrg                s1 = 124012345
   1508  1.1.1.5  mrg              one can have, e.g.:
   1509  1.1.1.5  mrg                s2 = 12345734
   1510  1.1.1.5  mrg                s2 = 123556789
   1511  1.1.1.5  mrg                s2 = 124
   1512  1.1.1.5  mrg                s2 = 124012
   1513  1.1.1.5  mrg              s2 is not taken completely randomly between s0 and s1, but it
   1514  1.1.1.5  mrg              will be built rather easily, and with the randomness of x0,
   1515  1.1.1.5  mrg              we should cover all cases, with s2 very close to s0, s2 very
   1516  1.1.1.5  mrg              close to s1, or not too close to either. */
   1517  1.1.1.5  mrg 
   1518  1.1.1.6  mrg           neg = RAND_BOOL ();
   1519  1.1.1.5  mrg           s2[0] = neg ? '-' : '+';
   1520  1.1.1.5  mrg           s2[1] = '.';
   1521  1.1.1.5  mrg 
   1522  1.1.1.5  mrg           for (j = 0;
   1523  1.1.1.5  mrg                MPFR_ASSERTN (s0[j] != 0 && s1[j] != 0), s0[j] == s1[j];
   1524  1.1.1.5  mrg                j++)
   1525  1.1.1.5  mrg             s2[j+2] = s0[j];
   1526  1.1.1.5  mrg 
   1527  1.1.1.5  mrg           /* k is the position of the first differing digit. */
   1528  1.1.1.5  mrg           k = j;
   1529  1.1.1.5  mrg 
   1530  1.1.1.5  mrg           while (j < BSIZE - 2 && randlimb () % 8 != 0)
   1531  1.1.1.5  mrg             {
   1532  1.1.1.5  mrg               MPFR_ASSERTN (s0[j] != 0);
   1533  1.1.1.5  mrg               s2[j+2] = s0[j];
   1534  1.1.1.5  mrg               j++;
   1535  1.1.1.5  mrg             }
   1536  1.1.1.5  mrg 
   1537  1.1.1.5  mrg           MPFR_ASSERTN (s0[j] != 0);
   1538  1.1.1.5  mrg           /* We will increment the next digit. Thus while s0[j] is the
   1539  1.1.1.5  mrg              maximum digit, go back until this is no longer the case
   1540  1.1.1.5  mrg              (the first digit after the common prefix cannot be the
   1541  1.1.1.5  mrg              maximum digit, so that we will stop early enough). */
   1542  1.1.1.5  mrg           while ((d = s0[j]) == num_to_text[base - 1])
   1543  1.1.1.5  mrg             j--;
   1544  1.1.1.5  mrg           noteq = j != k;
   1545  1.1.1.5  mrg           s2[j+2] = d = *(strchr (num_to_text, d) + 1);
   1546  1.1.1.5  mrg           if (d != s1[j])
   1547  1.1.1.5  mrg             noteq = 1;
   1548  1.1.1.5  mrg           j++;
   1549  1.1.1.5  mrg 
   1550  1.1.1.5  mrg           while (j < BSIZE - 1 && randlimb () % 8 != 0)
   1551  1.1.1.5  mrg             {
   1552  1.1.1.5  mrg               MPFR_ASSERTN (s1[j] != 0);
   1553  1.1.1.5  mrg               s2[j+2] = s1[j];
   1554  1.1.1.5  mrg               j++;
   1555  1.1.1.5  mrg             }
   1556  1.1.1.5  mrg 
   1557  1.1.1.5  mrg           sprintf (s2 + (j+2), "@%" MPFR_EXP_FSPEC "d", (mpfr_eexp_t) e0);
   1558  1.1.1.5  mrg 
   1559  1.1.1.5  mrg           while (noteq == 0 && j < BSIZE - 1)
   1560  1.1.1.5  mrg             {
   1561  1.1.1.5  mrg               if (s1[j] != '0')
   1562  1.1.1.5  mrg                 noteq = 1;
   1563  1.1.1.5  mrg               j++;
   1564  1.1.1.5  mrg             }
   1565  1.1.1.5  mrg 
   1566  1.1.1.5  mrg           if (neg)
   1567  1.1.1.5  mrg             {
   1568  1.1.1.5  mrg               mpfr_neg (x0, x0, MPFR_RNDN);
   1569  1.1.1.5  mrg               mpfr_neg (x1, x1, MPFR_RNDN);
   1570  1.1.1.5  mrg             }
   1571  1.1.1.5  mrg 
   1572  1.1.1.5  mrg           if (noteq)
   1573  1.1.1.5  mrg             {
   1574  1.1.1.5  mrg               mpfr_strtofr (x2, s2, NULL, base, MPFR_RNDZ);
   1575  1.1.1.5  mrg               if (! mpfr_equal_p (x2, x0))
   1576  1.1.1.5  mrg                 {
   1577  1.1.1.5  mrg                   printf ("Error in random_tests for prec=%d i=%d base=%d\n",
   1578  1.1.1.5  mrg                           prec, i, base);
   1579  1.1.1.5  mrg                   printf ("s0 = %s\ns1 = %s\ns2 = %s\n", s0, s1, s2);
   1580  1.1.1.5  mrg                   printf ("x0 = ");
   1581  1.1.1.5  mrg                   mpfr_dump (x0);
   1582  1.1.1.5  mrg                   printf ("x2 = ");
   1583  1.1.1.5  mrg                   mpfr_dump (x2);
   1584  1.1.1.5  mrg                   exit (1);
   1585  1.1.1.5  mrg                 }
   1586  1.1.1.5  mrg             }
   1587  1.1.1.5  mrg 
   1588  1.1.1.5  mrg           mpfr_strtofr (x2, s2, NULL, base, MPFR_RNDA);
   1589  1.1.1.5  mrg           if (! mpfr_equal_p (x2, x1))
   1590  1.1.1.5  mrg             {
   1591  1.1.1.5  mrg               printf ("Error in random_tests for prec=%d i=%d base=%d\n",
   1592  1.1.1.5  mrg                       prec, i, base);
   1593  1.1.1.5  mrg               printf ("s0 = %s\ns1 = %s\ns2 = %s\n", s0, s1, s2);
   1594  1.1.1.5  mrg               printf ("x1 = ");
   1595  1.1.1.5  mrg               mpfr_dump (x1);
   1596  1.1.1.5  mrg               printf ("x2 = ");
   1597  1.1.1.5  mrg               mpfr_dump (x2);
   1598  1.1.1.5  mrg               exit (1);
   1599  1.1.1.5  mrg             }
   1600  1.1.1.5  mrg         }
   1601  1.1.1.5  mrg       mpfr_clears (x0, x1, x2, (mpfr_ptr) 0);
   1602  1.1.1.5  mrg     }
   1603  1.1.1.4  mrg }
   1604  1.1.1.4  mrg 
   1605      1.1  mrg int
   1606      1.1  mrg main (int argc, char *argv[])
   1607      1.1  mrg {
   1608      1.1  mrg   tests_start_mpfr ();
   1609      1.1  mrg 
   1610  1.1.1.5  mrg   coverage ();
   1611      1.1  mrg   check_special();
   1612      1.1  mrg   check_reftable ();
   1613      1.1  mrg   check_parse ();
   1614      1.1  mrg   check_overflow ();
   1615      1.1  mrg   check_retval ();
   1616      1.1  mrg   bug20081028 ();
   1617      1.1  mrg   test20100310 ();
   1618  1.1.1.2  mrg   bug20120814 ();
   1619  1.1.1.2  mrg   bug20120829 ();
   1620  1.1.1.4  mrg   bug20161217 ();
   1621  1.1.1.4  mrg   bug20170308 ();
   1622  1.1.1.5  mrg   bug20181127 ();
   1623  1.1.1.7  mrg   bug20230606 ();
   1624  1.1.1.5  mrg   random_tests ();
   1625      1.1  mrg 
   1626      1.1  mrg   tests_end_mpfr ();
   1627      1.1  mrg   return 0;
   1628      1.1  mrg }
   1629