Blame tests/mpn/t-get_d.c

Packit 5c3484
/* Test mpn_get_d.
Packit 5c3484
Packit 5c3484
Copyright 2002-2004 Free Software Foundation, Inc.
Packit 5c3484
Packit 5c3484
This file is part of the GNU MP Library test suite.
Packit 5c3484
Packit 5c3484
The GNU MP Library test suite is free software; you can redistribute it
Packit 5c3484
and/or modify it under the terms of the GNU General Public License as
Packit 5c3484
published by the Free Software Foundation; either version 3 of the License,
Packit 5c3484
or (at your option) any later version.
Packit 5c3484
Packit 5c3484
The GNU MP Library test suite is distributed in the hope that it will be
Packit 5c3484
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 5c3484
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
Packit 5c3484
Public License for more details.
Packit 5c3484
Packit 5c3484
You should have received a copy of the GNU General Public License along with
Packit 5c3484
the GNU MP Library test suite.  If not, see https://www.gnu.org/licenses/.  */
Packit 5c3484
Packit 5c3484
#include "config.h"
Packit 5c3484
Packit 5c3484
#include <setjmp.h>
Packit 5c3484
#include <signal.h>
Packit 5c3484
#include <stdio.h>
Packit 5c3484
#include <stdlib.h>
Packit 5c3484
Packit 5c3484
#include "gmp.h"
Packit 5c3484
#include "gmp-impl.h"
Packit 5c3484
#include "tests.h"
Packit 5c3484
Packit 5c3484
Packit 5c3484
#ifndef _GMP_IEEE_FLOATS
Packit 5c3484
#define _GMP_IEEE_FLOATS 0
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Exercise various 2^n values, with various exponents and positive and
Packit 5c3484
   negative.  */
Packit 5c3484
void
Packit 5c3484
check_onebit (void)
Packit 5c3484
{
Packit 5c3484
  static const int bit_table[] = {
Packit 5c3484
    0, 1, 2, 3,
Packit 5c3484
    GMP_NUMB_BITS - 2, GMP_NUMB_BITS - 1,
Packit 5c3484
    GMP_NUMB_BITS,
Packit 5c3484
    GMP_NUMB_BITS + 1, GMP_NUMB_BITS + 2,
Packit 5c3484
    2 * GMP_NUMB_BITS - 2, 2 * GMP_NUMB_BITS - 1,
Packit 5c3484
    2 * GMP_NUMB_BITS,
Packit 5c3484
    2 * GMP_NUMB_BITS + 1, 2 * GMP_NUMB_BITS + 2,
Packit 5c3484
    3 * GMP_NUMB_BITS - 2, 3 * GMP_NUMB_BITS - 1,
Packit 5c3484
    3 * GMP_NUMB_BITS,
Packit 5c3484
    3 * GMP_NUMB_BITS + 1, 3 * GMP_NUMB_BITS + 2,
Packit 5c3484
    4 * GMP_NUMB_BITS - 2, 4 * GMP_NUMB_BITS - 1,
Packit 5c3484
    4 * GMP_NUMB_BITS,
Packit 5c3484
    4 * GMP_NUMB_BITS + 1, 4 * GMP_NUMB_BITS + 2,
Packit 5c3484
    5 * GMP_NUMB_BITS - 2, 5 * GMP_NUMB_BITS - 1,
Packit 5c3484
    5 * GMP_NUMB_BITS,
Packit 5c3484
    5 * GMP_NUMB_BITS + 1, 5 * GMP_NUMB_BITS + 2,
Packit 5c3484
    6 * GMP_NUMB_BITS - 2, 6 * GMP_NUMB_BITS - 1,
Packit 5c3484
    6 * GMP_NUMB_BITS,
Packit 5c3484
    6 * GMP_NUMB_BITS + 1, 6 * GMP_NUMB_BITS + 2,
Packit 5c3484
  };
Packit 5c3484
  static const int exp_table[] = {
Packit 5c3484
    0, -100, -10, -1, 1, 10, 100,
Packit 5c3484
  };
Packit 5c3484
Packit 5c3484
  /* FIXME: It'd be better to base this on the float format. */
Packit 5c3484
#if defined (__vax) || defined (__vax__)
Packit 5c3484
  int     limit = 127;  /* vax fp numbers have limited range */
Packit 5c3484
#else
Packit 5c3484
  int     limit = 511;
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
  int        bit_i, exp_i, i;
Packit 5c3484
  double     got, want;
Packit 5c3484
  mp_size_t  nsize, sign;
Packit 5c3484
  long       bit, exp, want_bit;
Packit 5c3484
  mp_limb_t  np[20];
Packit 5c3484
Packit 5c3484
  for (bit_i = 0; bit_i < numberof (bit_table); bit_i++)
Packit 5c3484
    {
Packit 5c3484
      bit = bit_table[bit_i];
Packit 5c3484
Packit 5c3484
      nsize = BITS_TO_LIMBS (bit+1);
Packit 5c3484
      refmpn_zero (np, nsize);
Packit 5c3484
      np[bit/GMP_NUMB_BITS] = CNST_LIMB(1) << (bit % GMP_NUMB_BITS);
Packit 5c3484
Packit 5c3484
      for (exp_i = 0; exp_i < numberof (exp_table); exp_i++)
Packit 5c3484
        {
Packit 5c3484
          exp = exp_table[exp_i];
Packit 5c3484
Packit 5c3484
          want_bit = bit + exp;
Packit 5c3484
          if (want_bit >= limit || want_bit <= -limit)
Packit 5c3484
            continue;
Packit 5c3484
Packit 5c3484
          want = 1.0;
Packit 5c3484
          for (i = 0; i < want_bit; i++)
Packit 5c3484
            want *= 2.0;
Packit 5c3484
          for (i = 0; i > want_bit; i--)
Packit 5c3484
            want *= 0.5;
Packit 5c3484
Packit 5c3484
          for (sign = 0; sign >= -1; sign--, want = -want)
Packit 5c3484
            {
Packit 5c3484
              got = mpn_get_d (np, nsize, sign, exp);
Packit 5c3484
              if (got != want)
Packit 5c3484
                {
Packit 5c3484
                  printf    ("mpn_get_d wrong on 2^n\n");
Packit 5c3484
                  printf    ("   bit      %ld\n", bit);
Packit 5c3484
                  printf    ("   exp      %ld\n", exp);
Packit 5c3484
                  printf    ("   want_bit %ld\n", want_bit);
Packit 5c3484
                  printf    ("   sign     %ld\n", (long) sign);
Packit 5c3484
                  mpn_trace ("   n        ", np, nsize);
Packit 5c3484
                  printf    ("   nsize    %ld\n", (long) nsize);
Packit 5c3484
                  d_trace   ("   want     ", want);
Packit 5c3484
                  d_trace   ("   got      ", got);
Packit 5c3484
                  abort();
Packit 5c3484
                }
Packit 5c3484
            }
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Exercise values 2^n+1, while such a value fits the mantissa of a double. */
Packit 5c3484
void
Packit 5c3484
check_twobit (void)
Packit 5c3484
{
Packit 5c3484
  int        i, mant_bits;
Packit 5c3484
  double     got, want;
Packit 5c3484
  mp_size_t  nsize, sign;
Packit 5c3484
  mp_ptr     np;
Packit 5c3484
Packit 5c3484
  mant_bits = tests_dbl_mant_bits ();
Packit 5c3484
  if (mant_bits == 0)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  np = refmpn_malloc_limbs (BITS_TO_LIMBS (mant_bits));
Packit 5c3484
  want = 3.0;
Packit 5c3484
  for (i = 1; i < mant_bits; i++)
Packit 5c3484
    {
Packit 5c3484
      nsize = BITS_TO_LIMBS (i+1);
Packit 5c3484
      refmpn_zero (np, nsize);
Packit 5c3484
      np[i/GMP_NUMB_BITS] = CNST_LIMB(1) << (i % GMP_NUMB_BITS);
Packit 5c3484
      np[0] |= 1;
Packit 5c3484
Packit 5c3484
      for (sign = 0; sign >= -1; sign--)
Packit 5c3484
        {
Packit 5c3484
          got = mpn_get_d (np, nsize, sign, 0);
Packit 5c3484
          if (got != want)
Packit 5c3484
            {
Packit 5c3484
              printf    ("mpn_get_d wrong on 2^%d + 1\n", i);
Packit 5c3484
              printf    ("   sign     %ld\n", (long) sign);
Packit 5c3484
              mpn_trace ("   n        ", np, nsize);
Packit 5c3484
              printf    ("   nsize    %ld\n", (long) nsize);
Packit 5c3484
              d_trace   ("   want     ", want);
Packit 5c3484
              d_trace   ("   got      ", got);
Packit 5c3484
              abort();
Packit 5c3484
            }
Packit 5c3484
          want = -want;
Packit 5c3484
        }
Packit 5c3484
Packit 5c3484
      want = 2.0 * want - 1.0;
Packit 5c3484
    }
Packit 5c3484
Packit 5c3484
  free (np);
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Expect large negative exponents to underflow to 0.0.
Packit 5c3484
   Some systems might have hardware traps for such an underflow (though
Packit 5c3484
   usually it's not the default), so watch out for SIGFPE. */
Packit 5c3484
void
Packit 5c3484
check_underflow (void)
Packit 5c3484
{
Packit 5c3484
  static const long exp_table[] = {
Packit 5c3484
    -999999L, LONG_MIN,
Packit 5c3484
  };
Packit 5c3484
  static const mp_limb_t  np[1] = { 1 };
Packit 5c3484
Packit 5c3484
  static long exp;
Packit 5c3484
  mp_size_t  nsize, sign;
Packit 5c3484
  double     got;
Packit 5c3484
  int        exp_i;
Packit 5c3484
Packit 5c3484
  nsize = numberof (np);
Packit 5c3484
Packit 5c3484
  if (tests_setjmp_sigfpe() == 0)
Packit 5c3484
    {
Packit 5c3484
      for (exp_i = 0; exp_i < numberof (exp_table); exp_i++)
Packit 5c3484
        {
Packit 5c3484
          exp = exp_table[exp_i];
Packit 5c3484
Packit 5c3484
          for (sign = 0; sign >= -1; sign--)
Packit 5c3484
            {
Packit 5c3484
              got = mpn_get_d (np, nsize, sign, exp);
Packit 5c3484
              if (got != 0.0)
Packit 5c3484
                {
Packit 5c3484
                  printf  ("mpn_get_d wrong, didn't get 0.0 on underflow\n");
Packit 5c3484
                  printf  ("  nsize    %ld\n", (long) nsize);
Packit 5c3484
                  printf  ("  exp      %ld\n", exp);
Packit 5c3484
                  printf  ("  sign     %ld\n", (long) sign);
Packit 5c3484
                  d_trace ("  got      ", got);
Packit 5c3484
                  abort ();
Packit 5c3484
                }
Packit 5c3484
            }
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
  else
Packit 5c3484
    {
Packit 5c3484
      printf ("Warning, underflow to zero tests skipped due to SIGFPE (exp=%ld)\n", exp);
Packit 5c3484
    }
Packit 5c3484
  tests_sigfpe_done ();
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Expect large values to result in +/-inf, on IEEE systems. */
Packit 5c3484
void
Packit 5c3484
check_inf (void)
Packit 5c3484
{
Packit 5c3484
  static const long exp_table[] = {
Packit 5c3484
    999999L, LONG_MAX,
Packit 5c3484
  };
Packit 5c3484
  static const mp_limb_t  np[4] = { 1, 1, 1, 1 };
Packit 5c3484
  long       exp;
Packit 5c3484
  mp_size_t  nsize, sign, got_sign;
Packit 5c3484
  double     got;
Packit 5c3484
  int        exp_i;
Packit 5c3484
Packit 5c3484
  if (! _GMP_IEEE_FLOATS)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  for (nsize = 1; nsize <= numberof (np); nsize++)
Packit 5c3484
    {
Packit 5c3484
      for (exp_i = 0; exp_i < numberof (exp_table); exp_i++)
Packit 5c3484
        {
Packit 5c3484
          exp = exp_table[exp_i];
Packit 5c3484
Packit 5c3484
          for (sign = 0; sign >= -1; sign--)
Packit 5c3484
            {
Packit 5c3484
              got = mpn_get_d (np, nsize, sign, exp);
Packit 5c3484
              got_sign = (got >= 0 ? 0 : -1);
Packit 5c3484
              if (! tests_isinf (got))
Packit 5c3484
                {
Packit 5c3484
                  printf  ("mpn_get_d wrong, didn't get infinity\n");
Packit 5c3484
                bad:
Packit 5c3484
                  printf  ("  nsize    %ld\n", (long) nsize);
Packit 5c3484
                  printf  ("  exp      %ld\n", exp);
Packit 5c3484
                  printf  ("  sign     %ld\n", (long) sign);
Packit 5c3484
                  d_trace ("  got      ", got);
Packit 5c3484
                  printf  ("  got sign %ld\n", (long) got_sign);
Packit 5c3484
                  abort ();
Packit 5c3484
                }
Packit 5c3484
              if (got_sign != sign)
Packit 5c3484
                {
Packit 5c3484
                  printf  ("mpn_get_d wrong sign on infinity\n");
Packit 5c3484
                  goto bad;
Packit 5c3484
                }
Packit 5c3484
            }
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
/* Check values 2^n approaching and into IEEE denorm range.
Packit 5c3484
   Some systems might not support denorms, or might have traps setup, so
Packit 5c3484
   watch out for SIGFPE.  */
Packit 5c3484
void
Packit 5c3484
check_ieee_denorm (void)
Packit 5c3484
{
Packit 5c3484
  static long exp;
Packit 5c3484
  mp_limb_t  n = 1;
Packit 5c3484
  long       i;
Packit 5c3484
  mp_size_t  sign;
Packit 5c3484
  double     want, got;
Packit 5c3484
Packit 5c3484
  if (! _GMP_IEEE_FLOATS)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  if (tests_setjmp_sigfpe() == 0)
Packit 5c3484
    {
Packit 5c3484
      exp = -1020;
Packit 5c3484
      want = 1.0;
Packit 5c3484
      for (i = 0; i > exp; i--)
Packit 5c3484
        want *= 0.5;
Packit 5c3484
Packit 5c3484
      for ( ; exp > -1500 && want != 0.0; exp--)
Packit 5c3484
        {
Packit 5c3484
          for (sign = 0; sign >= -1; sign--)
Packit 5c3484
            {
Packit 5c3484
              got = mpn_get_d (&n, (mp_size_t) 1, sign, exp);
Packit 5c3484
              if (got != want)
Packit 5c3484
                {
Packit 5c3484
                  printf  ("mpn_get_d wrong on denorm\n");
Packit 5c3484
                  printf  ("  n=1\n");
Packit 5c3484
                  printf  ("  exp   %ld\n", exp);
Packit 5c3484
                  printf  ("  sign  %ld\n", (long) sign);
Packit 5c3484
                  d_trace ("  got   ", got);
Packit 5c3484
                  d_trace ("  want  ", want);
Packit 5c3484
                  abort ();
Packit 5c3484
                }
Packit 5c3484
              want = -want;
Packit 5c3484
            }
Packit 5c3484
          want *= 0.5;
Packit 5c3484
          FORCE_DOUBLE (want);
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
  else
Packit 5c3484
    {
Packit 5c3484
      printf ("Warning, IEEE denorm tests skipped due to SIGFPE (exp=%ld)\n", exp);
Packit 5c3484
    }
Packit 5c3484
  tests_sigfpe_done ();
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Check values 2^n approaching exponent overflow.
Packit 5c3484
   Some systems might trap on overflow, so watch out for SIGFPE.  */
Packit 5c3484
void
Packit 5c3484
check_ieee_overflow (void)
Packit 5c3484
{
Packit 5c3484
  static long exp;
Packit 5c3484
  mp_limb_t  n = 1;
Packit 5c3484
  long       i;
Packit 5c3484
  mp_size_t  sign;
Packit 5c3484
  double     want, got;
Packit 5c3484
Packit 5c3484
  if (! _GMP_IEEE_FLOATS)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  if (tests_setjmp_sigfpe() == 0)
Packit 5c3484
    {
Packit 5c3484
      exp = 1010;
Packit 5c3484
      want = 1.0;
Packit 5c3484
      for (i = 0; i < exp; i++)
Packit 5c3484
        want *= 2.0;
Packit 5c3484
Packit 5c3484
      for ( ; exp < 1050; exp++)
Packit 5c3484
        {
Packit 5c3484
          for (sign = 0; sign >= -1; sign--)
Packit 5c3484
            {
Packit 5c3484
              got = mpn_get_d (&n, (mp_size_t) 1, sign, exp);
Packit 5c3484
              if (got != want)
Packit 5c3484
                {
Packit 5c3484
                  printf  ("mpn_get_d wrong on overflow\n");
Packit 5c3484
                  printf  ("  n=1\n");
Packit 5c3484
                  printf  ("  exp   %ld\n", exp);
Packit 5c3484
                  printf  ("  sign  %ld\n", (long) sign);
Packit 5c3484
                  d_trace ("  got   ", got);
Packit 5c3484
                  d_trace ("  want  ", want);
Packit 5c3484
                  abort ();
Packit 5c3484
                }
Packit 5c3484
              want = -want;
Packit 5c3484
            }
Packit 5c3484
          want *= 2.0;
Packit 5c3484
          FORCE_DOUBLE (want);
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
  else
Packit 5c3484
    {
Packit 5c3484
      printf ("Warning, IEEE overflow tests skipped due to SIGFPE (exp=%ld)\n", exp);
Packit 5c3484
    }
Packit 5c3484
  tests_sigfpe_done ();
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* ARM gcc 2.95.4 was seen generating bad code for ulong->double
Packit 5c3484
   conversions, resulting in for instance 0x81c25113 incorrectly converted.
Packit 5c3484
   This test exercises that value, to see mpn_get_d has avoided the
Packit 5c3484
   problem.  */
Packit 5c3484
void
Packit 5c3484
check_0x81c25113 (void)
Packit 5c3484
{
Packit 5c3484
#if GMP_NUMB_BITS >= 32
Packit 5c3484
  double     want = 2176995603.0;
Packit 5c3484
  double     got;
Packit 5c3484
  mp_limb_t  np[4];
Packit 5c3484
  mp_size_t  nsize;
Packit 5c3484
  long       exp;
Packit 5c3484
Packit 5c3484
  if (tests_dbl_mant_bits() < 32)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  for (nsize = 1; nsize <= numberof (np); nsize++)
Packit 5c3484
    {
Packit 5c3484
      refmpn_zero (np, nsize-1);
Packit 5c3484
      np[nsize-1] = CNST_LIMB(0x81c25113);
Packit 5c3484
      exp = - (nsize-1) * GMP_NUMB_BITS;
Packit 5c3484
      got = mpn_get_d (np, nsize, (mp_size_t) 0, exp);
Packit 5c3484
      if (got != want)
Packit 5c3484
        {
Packit 5c3484
          printf  ("mpn_get_d wrong on 2176995603 (0x81c25113)\n");
Packit 5c3484
          printf  ("  nsize  %ld\n", (long) nsize);
Packit 5c3484
          printf  ("  exp    %ld\n", exp);
Packit 5c3484
          d_trace ("  got    ", got);
Packit 5c3484
          d_trace ("  want   ", want);
Packit 5c3484
          abort ();
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
#endif
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_rand (void)
Packit 5c3484
{
Packit 5c3484
  gmp_randstate_ptr rands = RANDS;
Packit 5c3484
  int            rep, i;
Packit 5c3484
  unsigned long  mant_bits;
Packit 5c3484
  long           exp, exp_min, exp_max;
Packit 5c3484
  double         got, want, d;
Packit 5c3484
  mp_size_t      nalloc, nsize, sign;
Packit 5c3484
  mp_limb_t      nhigh_mask;
Packit 5c3484
  mp_ptr         np;
Packit 5c3484
Packit 5c3484
  mant_bits = tests_dbl_mant_bits ();
Packit 5c3484
  if (mant_bits == 0)
Packit 5c3484
    return;
Packit 5c3484
Packit 5c3484
  /* Allow for vax D format with exponent 127 to -128 only.
Packit 5c3484
     FIXME: Do something to probe for a valid exponent range.  */
Packit 5c3484
  exp_min = -100 - mant_bits;
Packit 5c3484
  exp_max =  100 - mant_bits;
Packit 5c3484
Packit 5c3484
  /* space for mant_bits */
Packit 5c3484
  nalloc = BITS_TO_LIMBS (mant_bits);
Packit 5c3484
  np = refmpn_malloc_limbs (nalloc);
Packit 5c3484
  nhigh_mask = MP_LIMB_T_MAX
Packit 5c3484
    >> (GMP_NAIL_BITS + nalloc * GMP_NUMB_BITS - mant_bits);
Packit 5c3484
Packit 5c3484
  for (rep = 0; rep < 200; rep++)
Packit 5c3484
    {
Packit 5c3484
      /* random exp_min to exp_max, inclusive */
Packit 5c3484
      exp = exp_min + (long) gmp_urandomm_ui (rands, exp_max - exp_min + 1);
Packit 5c3484
Packit 5c3484
      /* mant_bits worth of random at np */
Packit 5c3484
      if (rep & 1)
Packit 5c3484
        mpn_random (np, nalloc);
Packit 5c3484
      else
Packit 5c3484
        mpn_random2 (np, nalloc);
Packit 5c3484
      nsize = nalloc;
Packit 5c3484
      np[nsize-1] &= nhigh_mask;
Packit 5c3484
      MPN_NORMALIZE (np, nsize);
Packit 5c3484
      if (nsize == 0)
Packit 5c3484
        continue;
Packit 5c3484
Packit 5c3484
      sign = (mp_size_t) gmp_urandomb_ui (rands, 1L) - 1;
Packit 5c3484
Packit 5c3484
      /* want = {np,nsize}, converting one bit at a time */
Packit 5c3484
      want = 0.0;
Packit 5c3484
      for (i = 0, d = 1.0; i < mant_bits; i++, d *= 2.0)
Packit 5c3484
        if (np[i/GMP_NUMB_BITS] & (CNST_LIMB(1) << (i%GMP_NUMB_BITS)))
Packit 5c3484
          want += d;
Packit 5c3484
      if (sign < 0)
Packit 5c3484
        want = -want;
Packit 5c3484
Packit 5c3484
      /* want = want * 2^exp */
Packit 5c3484
      for (i = 0; i < exp; i++)
Packit 5c3484
        want *= 2.0;
Packit 5c3484
      for (i = 0; i > exp; i--)
Packit 5c3484
        want *= 0.5;
Packit 5c3484
Packit 5c3484
      got = mpn_get_d (np, nsize, sign, exp);
Packit 5c3484
Packit 5c3484
      if (got != want)
Packit 5c3484
        {
Packit 5c3484
          printf    ("mpn_get_d wrong on random data\n");
Packit 5c3484
          printf    ("   sign     %ld\n", (long) sign);
Packit 5c3484
          mpn_trace ("   n        ", np, nsize);
Packit 5c3484
          printf    ("   nsize    %ld\n", (long) nsize);
Packit 5c3484
          printf    ("   exp      %ld\n", exp);
Packit 5c3484
          d_trace   ("   want     ", want);
Packit 5c3484
          d_trace   ("   got      ", got);
Packit 5c3484
          abort();
Packit 5c3484
        }
Packit 5c3484
    }
Packit 5c3484
Packit 5c3484
  free (np);
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
int
Packit 5c3484
main (void)
Packit 5c3484
{
Packit 5c3484
  tests_start ();
Packit 5c3484
  mp_trace_base = -16;
Packit 5c3484
Packit 5c3484
  check_onebit ();
Packit 5c3484
  check_twobit ();
Packit 5c3484
  check_inf ();
Packit 5c3484
  check_underflow ();
Packit 5c3484
  check_ieee_denorm ();
Packit 5c3484
  check_ieee_overflow ();
Packit 5c3484
  check_0x81c25113 ();
Packit 5c3484
#if ! (defined (__vax) || defined (__vax__))
Packit 5c3484
  check_rand ();
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
  tests_end ();
Packit 5c3484
  exit (0);
Packit 5c3484
}