Blame tests/tset.c

Packit 80c72f
/* tset -- Test file for mpc_set_x and mpc_set_x_x functions.
Packit 80c72f
Packit 80c72f
Copyright (C) 2009, 2010, 2011 INRIA
Packit 80c72f
Packit 80c72f
This file is part of GNU MPC.
Packit 80c72f
Packit 80c72f
GNU MPC is free software; you can redistribute it and/or modify it under
Packit 80c72f
the terms of the GNU Lesser General Public License as published by the
Packit 80c72f
Free Software Foundation; either version 3 of the License, or (at your
Packit 80c72f
option) any later version.
Packit 80c72f
Packit 80c72f
GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
Packit 80c72f
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
Packit 80c72f
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
Packit 80c72f
more details.
Packit 80c72f
Packit 80c72f
You should have received a copy of the GNU Lesser General Public License
Packit 80c72f
along with this program. If not, see http://www.gnu.org/licenses/ .
Packit 80c72f
*/
Packit 80c72f
Packit 80c72f
#include "config.h"
Packit 80c72f
#include <limits.h> /* for LONG_MAX */
Packit 80c72f
Packit 80c72f
#ifdef HAVE_INTTYPES_H
Packit 80c72f
# include <inttypes.h> /* for intmax_t */
Packit 80c72f
#else
Packit 80c72f
# ifdef HAVE_STDINT_H
Packit 80c72f
#  include <stdint.h>
Packit 80c72f
# endif
Packit 80c72f
#endif
Packit 80c72f
Packit 80c72f
#ifdef HAVE_COMPLEX_H
Packit 80c72f
# include <complex.h>
Packit 80c72f
#endif
Packit 80c72f
Packit 80c72f
#ifdef HAVE_LOCALE_H
Packit 80c72f
#include <locale.h>
Packit 80c72f
#endif
Packit 80c72f
Packit 80c72f
#include "mpc-tests.h"
Packit 80c72f
Packit 80c72f
#define PRINT_ERROR(function_name, precision, a)                \
Packit 80c72f
  do {                                                          \
Packit 80c72f
    printf ("Error in "function_name" for prec = %lu\n",        \
Packit 80c72f
            (unsigned long int) precision);                     \
Packit 80c72f
    MPC_OUT(a);                                                     \
Packit 80c72f
    exit (1);                                                   \
Packit 80c72f
  } while (0)
Packit 80c72f
Packit 80c72f
/* test MPC_SET_X_Y through some functions */
Packit 80c72f
static int
Packit 80c72f
mpc_set_ui_fr (mpc_ptr z, unsigned long int a, mpfr_srcptr b, mpc_rnd_t rnd)
Packit 80c72f
  MPC_SET_X_Y (ui, fr, z, a, b, rnd)
Packit 80c72f
Packit 80c72f
static int
Packit 80c72f
mpc_set_fr_ui (mpc_ptr z, mpfr_srcptr a, unsigned long int b, mpc_rnd_t rnd)
Packit 80c72f
  MPC_SET_X_Y (fr, ui, z, a, b, rnd)
Packit 80c72f
Packit 80c72f
static int
Packit 80c72f
mpc_set_f_si (mpc_ptr z, mpf_t a, long int b, mpc_rnd_t rnd)
Packit 80c72f
  MPC_SET_X_Y (f, si, z, a, b, rnd)
Packit 80c72f
Packit 80c72f
Packit 80c72f
static void
Packit 80c72f
check_set (void)
Packit 80c72f
{
Packit 80c72f
  long int lo;
Packit 80c72f
  mpz_t mpz;
Packit 80c72f
  mpq_t mpq;
Packit 80c72f
  mpf_t mpf;
Packit 80c72f
  mpfr_t fr;
Packit 80c72f
  mpc_t x, z;
Packit 80c72f
  mpfr_prec_t prec;
Packit 80c72f
Packit 80c72f
  mpz_init (mpz);
Packit 80c72f
  mpq_init (mpq);
Packit 80c72f
  mpf_init2 (mpf, 1000);
Packit 80c72f
  mpfr_init2 (fr, 1000);
Packit 80c72f
  mpc_init2 (x, 1000);
Packit 80c72f
  mpc_init2 (z, 1000);
Packit 80c72f
Packit 80c72f
  mpz_set_ui (mpz, 0x4217);
Packit 80c72f
  mpq_set_si (mpq, -1, 0x4321);
Packit 80c72f
  mpf_set_q (mpf, mpq);
Packit 80c72f
Packit 80c72f
  for (prec = 2; prec <= 1000; prec++)
Packit 80c72f
    {
Packit 80c72f
      unsigned long int u = (unsigned long int) prec;
Packit 80c72f
Packit 80c72f
      mpc_set_prec (z, prec);
Packit 80c72f
      mpfr_set_prec (fr, prec);
Packit 80c72f
Packit 80c72f
      lo = -prec;
Packit 80c72f
Packit 80c72f
      mpfr_set_d (fr, 1.23456789, GMP_RNDN);
Packit 80c72f
Packit 80c72f
      mpc_set_d (z, 1.23456789, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0 || mpfr_cmp_si (mpc_imagref(z), 0) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_d", prec, z);
Packit 80c72f
Packit 80c72f
#if defined HAVE_COMPLEX_H
Packit 80c72f
      mpc_set_dc (z, I*1.23456789+1.23456789, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0 || mpfr_cmp (mpc_imagref(z), fr) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_c", prec, z);
Packit 80c72f
#endif
Packit 80c72f
Packit 80c72f
      mpc_set_ui (z, u, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_ui", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_d_d (z, 1.23456789, 1.23456789, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0 || mpfr_cmp (mpc_imagref(z), fr) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_d_d", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_si (z, lo, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp_si (mpc_realref(z), lo) != 0 || mpfr_cmp_ui (mpc_imagref(z), 0) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_si", prec, z);
Packit 80c72f
Packit 80c72f
      mpfr_set_ld (fr, 1.23456789L, GMP_RNDN);
Packit 80c72f
Packit 80c72f
      mpc_set_ld_ld (z, 1.23456789L, 1.23456789L, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0 || mpfr_cmp (mpc_imagref(z), fr) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_ld_ld", prec, z);
Packit 80c72f
Packit 80c72f
#if defined HAVE_COMPLEX_H
Packit 80c72f
      mpc_set_ldc (z, I*1.23456789L+1.23456789L, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0 || mpfr_cmp (mpc_imagref(z), fr) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_lc", prec, z);
Packit 80c72f
#endif
Packit 80c72f
      mpc_set_ui_ui (z, u, u, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), u) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_ui_ui", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_ld (z, 1.23456789L, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_ld", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_prec (x, prec);
Packit 80c72f
      mpfr_set_ui(fr, 1, GMP_RNDN);
Packit 80c72f
      mpfr_div_ui(fr, fr, 3, GMP_RNDN);
Packit 80c72f
      mpfr_set(mpc_realref(x), fr, GMP_RNDN);
Packit 80c72f
      mpfr_set(mpc_imagref(x), fr, GMP_RNDN);
Packit 80c72f
Packit 80c72f
      mpc_set (z, x, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags (); /* mpc_cmp set erange flag when an operand is a
Packit 80c72f
                              NaN */
Packit 80c72f
      if (mpc_cmp (z, x) != 0 || mpfr_erangeflag_p())
Packit 80c72f
        {
Packit 80c72f
          printf ("Error in mpc_set for prec = %lu\n",
Packit 80c72f
                  (unsigned long int) prec);
Packit 80c72f
          MPC_OUT(z);
Packit 80c72f
          MPC_OUT(x);
Packit 80c72f
          exit (1);
Packit 80c72f
        }
Packit 80c72f
Packit 80c72f
      mpc_set_si_si (z, lo, lo, MPC_RNDNN);
Packit 80c72f
      if (mpfr_cmp_si (mpc_realref(z), lo) != 0
Packit 80c72f
          || mpfr_cmp_si (mpc_imagref(z), lo) != 0)
Packit 80c72f
        PRINT_ERROR ("mpc_set_si_si", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_fr (z, fr, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_fr", prec, z);
Packit 80c72f
Packit 80c72f
      mpfr_set_z (fr, mpz, GMP_RNDN);
Packit 80c72f
      mpc_set_z_z (z, mpz, mpz, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref(z), fr) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_z_z", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_fr_fr (z, fr, fr, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref(z), fr) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_fr_fr", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_z (z, mpz, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_z", prec, z);
Packit 80c72f
Packit 80c72f
      mpfr_set_q (fr, mpq, GMP_RNDN);
Packit 80c72f
      mpc_set_q_q (z, mpq, mpq, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref(z), fr) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_q_q", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_ui_fr (z, u, fr, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp_ui (mpc_realref (z), u) != 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref (z), fr) != 0
Packit 80c72f
          || mpfr_erangeflag_p ())
Packit 80c72f
        PRINT_ERROR ("mpc_set_ui_fr", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_fr_ui (z, fr, u, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref (z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref (z), u) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_fr_ui", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_q (z, mpq, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_q", prec, z);
Packit 80c72f
Packit 80c72f
      mpfr_set_f (fr, mpf, GMP_RNDN);
Packit 80c72f
      mpc_set_f_f (z, mpf, mpf, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref(z), fr) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_f_f", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_f (z, mpf, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref(z), fr) != 0
Packit 80c72f
          || mpfr_cmp_ui (mpc_imagref(z), 0) != 0
Packit 80c72f
          || mpfr_erangeflag_p())
Packit 80c72f
        PRINT_ERROR ("mpc_set_f", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_f_si (z, mpf, lo, MPC_RNDNN);
Packit 80c72f
      mpfr_clear_flags ();
Packit 80c72f
      if (mpfr_cmp (mpc_realref (z), fr) != 0
Packit 80c72f
          || mpfr_cmp_si (mpc_imagref (z), lo) != 0
Packit 80c72f
          || mpfr_erangeflag_p ())
Packit 80c72f
        PRINT_ERROR ("mpc_set_f", prec, z);
Packit 80c72f
Packit 80c72f
      mpc_set_nan (z);
Packit 80c72f
      if (!mpfr_nan_p (mpc_realref(z)) || !mpfr_nan_p (mpc_imagref(z)))
Packit 80c72f
        PRINT_ERROR ("mpc_set_nan", prec, z);
Packit 80c72f
Packit 80c72f
#ifdef _MPC_H_HAVE_INTMAX_T
Packit 80c72f
      {
Packit 80c72f
        uintmax_t uim = (uintmax_t) prec;
Packit 80c72f
        intmax_t im = (intmax_t) prec;
Packit 80c72f
Packit 80c72f
        mpc_set_uj (z, uim, MPC_RNDNN);
Packit 80c72f
        if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
            || mpfr_cmp_ui (mpc_imagref(z), 0) != 0)
Packit 80c72f
          PRINT_ERROR ("mpc_set_uj", prec, z);
Packit 80c72f
Packit 80c72f
        mpc_set_sj (z, im, MPC_RNDNN);
Packit 80c72f
        if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
            || mpfr_cmp_ui (mpc_imagref(z), 0) != 0)
Packit 80c72f
          PRINT_ERROR ("mpc_set_sj (1)", prec, z);
Packit 80c72f
Packit 80c72f
        mpc_set_uj_uj (z, uim, uim, MPC_RNDNN);
Packit 80c72f
        if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
            || mpfr_cmp_ui (mpc_imagref(z), u) != 0)
Packit 80c72f
          PRINT_ERROR ("mpc_set_uj_uj", prec, z);
Packit 80c72f
Packit 80c72f
        mpc_set_sj_sj (z, im, im, MPC_RNDNN);
Packit 80c72f
        if (mpfr_cmp_ui (mpc_realref(z), u) != 0
Packit 80c72f
            || mpfr_cmp_ui (mpc_imagref(z), u) != 0)
Packit 80c72f
          PRINT_ERROR ("mpc_set_sj_sj (1)", prec, z);
Packit 80c72f
Packit 80c72f
        im = LONG_MAX;
Packit 80c72f
        if (sizeof (intmax_t) == 2 * sizeof (unsigned long))
Packit 80c72f
          im = 2 * im * im + 4 * im + 1; /* gives 2^(2n-1)-1 from 2^(n-1)-1 */
Packit 80c72f
Packit 80c72f
        mpc_set_sj (z, im, MPC_RNDNN);
Packit 80c72f
        if (mpfr_get_sj (mpc_realref(z), GMP_RNDN) != im ||
Packit 80c72f
            mpfr_cmp_ui (mpc_imagref(z), 0) != 0)
Packit 80c72f
          PRINT_ERROR ("mpc_set_sj (2)", im, z);
Packit 80c72f
Packit 80c72f
        mpc_set_sj_sj (z, im, im, MPC_RNDNN);
Packit 80c72f
        if (mpfr_get_sj (mpc_realref(z), GMP_RNDN) != im ||
Packit 80c72f
            mpfr_get_sj (mpc_imagref(z), GMP_RNDN) != im)
Packit 80c72f
          PRINT_ERROR ("mpc_set_sj_sj (2)", im, z);
Packit 80c72f
      }
Packit 80c72f
#endif /* _MPC_H_HAVE_INTMAX_T */
Packit 80c72f
Packit 80c72f
#if defined HAVE_COMPLEX_H
Packit 80c72f
      {
Packit 80c72f
        double _Complex c = 1.0 - 2.0*I, d;
Packit 80c72f
        long double _Complex lc = c, ld;
Packit 80c72f
Packit 80c72f
         mpc_set_dc (z, c, MPC_RNDNN);
Packit 80c72f
         if ((d = mpc_get_dc (z, MPC_RNDNN)) != c)
Packit 80c72f
           {
Packit 80c72f
             printf ("expected (%f,%f)\n", creal (c), cimag (c));
Packit 80c72f
             printf ("got      (%f,%f)\n", creal (d), cimag (d));
Packit 80c72f
             PRINT_ERROR ("mpc_get_dc", prec, z);
Packit 80c72f
           }
Packit 80c72f
         mpc_set_ldc (z, lc, MPC_RNDNN);
Packit 80c72f
         if ((ld = mpc_get_ldc (z, MPC_RNDNN)) != lc)
Packit 80c72f
           {
Packit 80c72f
             printf ("expected (%Lf,%Lf)\n", creall (lc), cimagl (lc));
Packit 80c72f
             printf ("got      (%Lf,%Lf)\n", creall (ld), cimagl (ld));
Packit 80c72f
             PRINT_ERROR ("mpc_get_ldc", prec, z);
Packit 80c72f
           }
Packit 80c72f
      }
Packit 80c72f
#endif
Packit 80c72f
    }
Packit 80c72f
Packit 80c72f
  mpz_clear (mpz);
Packit 80c72f
  mpq_clear (mpq);
Packit 80c72f
  mpf_clear (mpf);
Packit 80c72f
  mpfr_clear (fr);
Packit 80c72f
  mpc_clear (x);
Packit 80c72f
  mpc_clear (z);
Packit 80c72f
}
Packit 80c72f
Packit 80c72f
static void
Packit 80c72f
check_set_str (mpfr_exp_t exp_max)
Packit 80c72f
{
Packit 80c72f
  mpc_t expected;
Packit 80c72f
  mpc_t got;
Packit 80c72f
  char *str;
Packit 80c72f
Packit 80c72f
  mpfr_prec_t prec;
Packit 80c72f
  mpfr_exp_t exp_min;
Packit 80c72f
  int base;
Packit 80c72f
Packit 80c72f
  mpc_init2 (expected, 1024);
Packit 80c72f
  mpc_init2 (got, 1024);
Packit 80c72f
Packit 80c72f
  exp_min = mpfr_get_emin ();
Packit 80c72f
  if (exp_max <= 0)
Packit 80c72f
    exp_max = mpfr_get_emax ();
Packit 80c72f
  else if (exp_max > mpfr_get_emax ())
Packit 80c72f
    exp_max = mpfr_get_emax();
Packit 80c72f
  if (-exp_max > exp_min)
Packit 80c72f
    exp_min = - exp_max;
Packit 80c72f
Packit 80c72f
  for (prec = 2; prec < 1024; prec += 7)
Packit 80c72f
    {
Packit 80c72f
      mpc_set_prec (got, prec);
Packit 80c72f
      mpc_set_prec (expected, prec);
Packit 80c72f
Packit 80c72f
      base = 2 + (int) gmp_urandomm_ui (rands, 35);
Packit 80c72f
         /* uses external variable rands from random.c */
Packit 80c72f
Packit 80c72f
      mpfr_set_nan (mpc_realref (expected));
Packit 80c72f
      mpfr_set_inf (mpc_imagref (expected), prec % 2 - 1);
Packit 80c72f
      str = mpc_get_str (base, 0, expected, MPC_RNDNN);
Packit 80c72f
      if (mpfr_nan_p (mpc_realref (got)) == 0
Packit 80c72f
          || mpfr_cmp (mpc_imagref (got), mpc_imagref (expected)) != 0)
Packit 80c72f
        {
Packit 80c72f
          printf ("Error: mpc_set_str o mpc_get_str != Id\n"
Packit 80c72f
                  "in base %u with str=\"%s\"\n", base, str);
Packit 80c72f
          MPC_OUT (expected);
Packit 80c72f
          printf ("     ");
Packit 80c72f
          MPC_OUT (got);
Packit 80c72f
          exit (1);
Packit 80c72f
        }
Packit 80c72f
      mpc_free_str (str);
Packit 80c72f
Packit 80c72f
      test_default_random (expected, exp_min, exp_max, 128, 25);
Packit 80c72f
      str = mpc_get_str (base, 0, expected, MPC_RNDNN);
Packit 80c72f
      if (mpc_set_str (got, str, base, MPC_RNDNN) == -1
Packit 80c72f
          || mpc_cmp (got, expected) != 0)
Packit 80c72f
        {
Packit 80c72f
          printf ("Error: mpc_set_str o mpc_get_str != Id\n"
Packit 80c72f
                  "in base %u with str=\"%s\"\n", base, str);
Packit 80c72f
          MPC_OUT (expected);
Packit 80c72f
          printf ("     ");
Packit 80c72f
          MPC_OUT (got);
Packit 80c72f
          exit (1);
Packit 80c72f
        }
Packit 80c72f
      mpc_free_str (str);
Packit 80c72f
    }
Packit 80c72f
Packit 80c72f
#ifdef HAVE_SETLOCALE
Packit 80c72f
  {
Packit 80c72f
    /* Check with ',' as a decimal point */
Packit 80c72f
    char *old_locale;
Packit 80c72f
Packit 80c72f
    old_locale = setlocale (LC_ALL, "de_DE");
Packit 80c72f
    if (old_locale != NULL)
Packit 80c72f
      {
Packit 80c72f
        str = mpc_get_str (10, 0, expected, MPC_RNDNN);
Packit 80c72f
        if (mpc_set_str (got, str, 10, MPC_RNDNN) == -1
Packit 80c72f
            || mpc_cmp (got, expected) != 0)
Packit 80c72f
          {
Packit 80c72f
            printf ("Error: mpc_set_str o mpc_get_str != Id\n"
Packit 80c72f
                    "with str=\"%s\"\n", str);
Packit 80c72f
            MPC_OUT (expected);
Packit 80c72f
            printf ("     ");
Packit 80c72f
            MPC_OUT (got);
Packit 80c72f
            exit (1);
Packit 80c72f
          }
Packit 80c72f
        mpc_free_str (str);
Packit 80c72f
Packit 80c72f
        setlocale (LC_ALL, old_locale);
Packit 80c72f
      }
Packit 80c72f
  }
Packit 80c72f
#endif /* HAVE_SETLOCALE */
Packit 80c72f
Packit 80c72f
  /* the real part has a zero exponent in base ten (fixed in r439) */
Packit 80c72f
  mpc_set_prec (expected, 37);
Packit 80c72f
  mpc_set_prec (got, 37);
Packit 80c72f
  mpc_set_str (expected, "921FC04EDp-35  ", 16, GMP_RNDN);
Packit 80c72f
  str = mpc_get_str (10, 0, expected, MPC_RNDNN);
Packit 80c72f
  if (mpc_set_str (got, str, 10, MPC_RNDNN) == -1
Packit 80c72f
      || mpc_cmp (got, expected) != 0)
Packit 80c72f
    {
Packit 80c72f
      printf ("Error: mpc_set_str o mpc_get_str != Id\n"
Packit 80c72f
              "with str=\"%s\"\n", str);
Packit 80c72f
      MPC_OUT (expected);
Packit 80c72f
      printf ("     ");
Packit 80c72f
      MPC_OUT (got);
Packit 80c72f
      exit (1);
Packit 80c72f
    }
Packit 80c72f
  mpc_free_str (str);
Packit 80c72f
Packit 80c72f
  str = mpc_get_str (1, 0, expected, MPC_RNDNN);
Packit 80c72f
  if (str != NULL)
Packit 80c72f
    {
Packit 80c72f
      printf ("Error: mpc_get_str with base==1 should fail\n");
Packit 80c72f
      exit (1);
Packit 80c72f
    }
Packit 80c72f
Packit 80c72f
  mpc_clear (expected);
Packit 80c72f
  mpc_clear (got);
Packit 80c72f
}
Packit 80c72f
Packit 80c72f
int
Packit 80c72f
main (void)
Packit 80c72f
{
Packit 80c72f
  test_start ();
Packit 80c72f
Packit 80c72f
  check_set ();
Packit 80c72f
  check_set_str (1024);
Packit 80c72f
Packit 80c72f
  test_end ();
Packit 80c72f
Packit 80c72f
  return 0;
Packit 80c72f
}