Blame tests/cxx/t-constr.cc

Packit 5c3484
/* Test mp*_class constructors.
Packit 5c3484
Packit 5c3484
Copyright 2001-2003 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 <iostream>
Packit 5c3484
#include <string>
Packit 5c3484
Packit 5c3484
#include "gmp.h"
Packit 5c3484
#include "gmpxx.h"
Packit 5c3484
#include "gmp-impl.h"
Packit 5c3484
#include "tests.h"
Packit 5c3484
Packit 5c3484
using namespace std;
Packit 5c3484
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpz (void)
Packit 5c3484
{
Packit 5c3484
  // mpz_class()
Packit 5c3484
  {
Packit 5c3484
    mpz_class a; ASSERT_ALWAYS(a == 0);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const mpz_class &)
Packit 5c3484
  // see below
Packit 5c3484
Packit 5c3484
  // template <class T, class U> mpz_class(const __gmp_expr<T, U> &)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // mpz_class(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 255);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // either signed or unsigned char, machine dependent
Packit 5c3484
  {
Packit 5c3484
    mpz_class a('A'); ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpz_class a('z'); ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 4567;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 4567);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 890;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 890);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 1UL << 30;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 1073741824L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 123.45;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 3.141592653589793238;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 3);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(long double)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // mpz_class(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const char *, int)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "FFFF";
Packit 5c3484
    int base = 16;
Packit 5c3484
    mpz_class b(a, base); ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const std::string &, int)
Packit 5c3484
  {
Packit 5c3484
    string a("7777");
Packit 5c3484
    int base = 8;
Packit 5c3484
    mpz_class b(a, base); ASSERT_ALWAYS(b == 4095);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "ABC";
Packit 5c3484
      mpz_class b(a);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const char *, int) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "GHI";
Packit 5c3484
      int base = 16;
Packit 5c3484
      mpz_class b(a, base);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("abc");
Packit 5c3484
      mpz_class b(a);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const std::string &, int) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("ZZZ");
Packit 5c3484
      int base = 8;
Packit 5c3484
      mpz_class b(a, base);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(mpz_srcptr)
Packit 5c3484
  {
Packit 5c3484
    mpz_t a;
Packit 5c3484
    mpz_init_set_ui(a, 100);
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 100);
Packit 5c3484
    mpz_clear(a);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpz_class(const mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(12345); // tested above, assume it works
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // no constructor for bool, but it gets casted to int
Packit 5c3484
  {
Packit 5c3484
    bool a = true;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 1);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    bool a = false;
Packit 5c3484
    mpz_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpq (void)
Packit 5c3484
{
Packit 5c3484
  // mpq_class()
Packit 5c3484
  {
Packit 5c3484
    mpq_class a; ASSERT_ALWAYS(a == 0);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const mpq_class &)
Packit 5c3484
  // see below
Packit 5c3484
Packit 5c3484
  // template <class T, class U> mpq_class(const __gmp_expr<T, U> &)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // mpq_class(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 255);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // either signed or unsigned char, machine dependent
Packit 5c3484
  {
Packit 5c3484
    mpq_class a('A'); ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpq_class a('z'); ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 4567;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 4567);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 890;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 890);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 1UL << 30;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 1073741824L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 0.625;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 0.625);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 1.25;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 1.25);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(long double)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // mpq_class(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const char *, int)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "FFFF";
Packit 5c3484
    int base = 16;
Packit 5c3484
    mpq_class b(a, base); ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
    mpq_class c(0, 1); ASSERT_ALWAYS(c == 0);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const std::string &, int)
Packit 5c3484
  {
Packit 5c3484
    string a("7777");
Packit 5c3484
    int base = 8;
Packit 5c3484
    mpq_class b(a, base); ASSERT_ALWAYS(b == 4095);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "abc";
Packit 5c3484
      mpq_class b(a);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const char *, int) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "ZZZ";
Packit 5c3484
      int base = 16;
Packit 5c3484
      mpq_class b (a, base);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("abc");
Packit 5c3484
      mpq_class b(a);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const std::string &, int) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("ZZZ");
Packit 5c3484
      int base = 8;
Packit 5c3484
      mpq_class b (a, base);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(mpq_srcptr)
Packit 5c3484
  {
Packit 5c3484
    mpq_t a;
Packit 5c3484
    mpq_init(a);
Packit 5c3484
    mpq_set_ui(a, 100, 1);
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 100);
Packit 5c3484
    mpq_clear(a);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const mpz_class &, const mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(123), b(4); // tested above, assume it works
Packit 5c3484
    mpq_class c(a, b); ASSERT_ALWAYS(c == 30.75);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(-1), b(2);  // tested above, assume it works
Packit 5c3484
    mpq_class c(a, b); ASSERT_ALWAYS(c == -0.5);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(5), b(4); // tested above, assume it works
Packit 5c3484
    mpq_class c(a, b); ASSERT_ALWAYS(c == 1.25);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpq_class(const mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpq_class a(12345); // tested above, assume it works
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // no constructor for bool, but it gets casted to int
Packit 5c3484
  {
Packit 5c3484
    bool a = true;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 1);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    bool a = false;
Packit 5c3484
    mpq_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpf (void)
Packit 5c3484
{
Packit 5c3484
  // mpf_class()
Packit 5c3484
  {
Packit 5c3484
    mpf_class a; ASSERT_ALWAYS(a == 0);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const mpf_class &)
Packit 5c3484
  // mpf_class(const mpf_class &, unsigned long int)
Packit 5c3484
  // see below
Packit 5c3484
Packit 5c3484
  // template <class T, class U> mpf_class(const __gmp_expr<T, U> &)
Packit 5c3484
  // template <class T, class U> mpf_class(const __gmp_expr<T, U> &,
Packit 5c3484
  //                                       unsigned long int)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // mpf_class(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed char, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -1;
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == -1);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 255);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned char, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 128;
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 128);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // either signed or unsigned char, machine dependent
Packit 5c3484
  {
Packit 5c3484
    mpf_class a('A'); ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    int prec = 256;
Packit 5c3484
    mpf_class a('z', prec); ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 4567;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 4567);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 890;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 890);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 890;
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 890);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed short int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = 6789;
Packit 5c3484
    int prec = 256;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 6789);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned short int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(signed long int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 3456789012UL;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 3456789012UL);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(unsigned long int, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 3456789012UL;
Packit 5c3484
    int prec = 256;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 3456789012UL);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 1234.5;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 1234.5);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(float, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    float a = 1234.5;
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 1234.5);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 12345.0;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 1.2345e+4;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 312.5e-2;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 3.125);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(double, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    double a = 5.4321e+4;
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 54321L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(long double)
Packit 5c3484
  // mpf_class(long double, unsigned long int)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // mpf_class(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const char *, unsigned long int, int = 0)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    int prec = 256;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    const char *a = "777777";
Packit 5c3484
    int prec = 64, base = 8;
Packit 5c3484
    mpf_class b(a, prec, base); ASSERT_ALWAYS(b == 262143L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const std::string &, unsigned long int, int = 0)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    string a("FFFF");
Packit 5c3484
    int prec = 256, base = 16;
Packit 5c3484
    mpf_class b(a, prec, base); ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "abc";
Packit 5c3484
      mpf_class b(a);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const char *, unsigned long int, int = 0) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "def";
Packit 5c3484
      int prec = 256;
Packit 5c3484
      mpf_class b(a, prec); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "ghi";
Packit 5c3484
      int prec = 64, base = 8;
Packit 5c3484
      mpf_class b(a, prec, base); ASSERT_ALWAYS(b == 262143L);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("abc");
Packit 5c3484
      mpf_class b(a); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const std::string &, unsigned long int, int = 0) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("def");
Packit 5c3484
      int prec = 128;
Packit 5c3484
      mpf_class b(a, prec); ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("ghi");
Packit 5c3484
      int prec = 256, base = 16;
Packit 5c3484
      mpf_class b(a, prec, base); ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(mpf_srcptr)
Packit 5c3484
  {
Packit 5c3484
    mpf_t a;
Packit 5c3484
    mpf_init_set_ui(a, 100);
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 100);
Packit 5c3484
    mpf_clear(a);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(mpf_srcptr, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    mpf_t a;
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_init_set_ui(a, 100);
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 100);
Packit 5c3484
    mpf_clear(a);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const mpf_class &)
Packit 5c3484
  {
Packit 5c3484
    mpf_class a(12345); // tested above, assume it works
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // mpf_class(const mpf_class &, unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    mpf_class a(12345); // tested above, assume it works
Packit 5c3484
    int prec = 64;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // no constructors for bool, but it gets casted to int
Packit 5c3484
  {
Packit 5c3484
    bool a = true;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 1);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    bool a = false;
Packit 5c3484
    mpf_class b(a); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    bool a = true;
Packit 5c3484
    int prec = 128;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 1);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    bool a = false;
Packit 5c3484
    int prec = 256;
Packit 5c3484
    mpf_class b(a, prec); ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
Packit 5c3484
int
Packit 5c3484
main (void)
Packit 5c3484
{
Packit 5c3484
  tests_start();
Packit 5c3484
Packit 5c3484
  check_mpz();
Packit 5c3484
  check_mpq();
Packit 5c3484
  check_mpf();
Packit 5c3484
Packit 5c3484
  tests_end();
Packit 5c3484
  return 0;
Packit 5c3484
}