Blame tests/cxx/t-assign.cc

Packit 5c3484
/* Test mp*_class assignment operators.
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 std::string;
Packit 5c3484
using std::invalid_argument;
Packit 5c3484
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpz (void)
Packit 5c3484
{
Packit 5c3484
  // operator=(const mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(123), b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // template <class T, class U> operator=(const __gmp_expr<T, U> &)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // operator=(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    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;
Packit 5c3484
    a = 'A'; ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpz_class a;
Packit 5c3484
    a = 'z'; ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 32767;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 32767);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 65535u;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 3456789012UL;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 3456789012UL);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 123.0;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 0.0;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = -12.375;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 6.789e+3;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 6789);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 9.375e-1;
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(long double)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // operator=(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpz_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "abc";
Packit 5c3484
      mpz_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("def");
Packit 5c3484
      mpz_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(123);
Packit 5c3484
    mpz_class b(456);
Packit 5c3484
    a.swap(b);
Packit 5c3484
    a.swap(a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpz_class &, mpz_class &)
Packit 5c3484
  {
Packit 5c3484
    mpz_class a(123);
Packit 5c3484
    mpz_class b(456);
Packit 5c3484
    ::swap(a, b);
Packit 5c3484
    ::swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    using std::swap;
Packit 5c3484
    mpz_class a(123);
Packit 5c3484
    mpz_class b(456);
Packit 5c3484
    swap(a, b);
Packit 5c3484
    swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpq (void)
Packit 5c3484
{
Packit 5c3484
  // operator=(const mpq_class &)
Packit 5c3484
  {
Packit 5c3484
    mpq_class a(1, 2), b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0.5);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // template <class T, class U> operator=(const __gmp_expr<T, U> &)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // operator=(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    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;
Packit 5c3484
    a = 'A'; ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpq_class a;
Packit 5c3484
    a = 'z'; ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 32767;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 32767);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 65535u;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 3456789012UL;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 3456789012UL);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 123.0;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 0.0;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = -12.375;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12.375);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 6.789e+3;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 6789);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 9.375e-1;
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0.9375);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(long double)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // operator=(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpq_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "abc";
Packit 5c3484
      mpq_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("def");
Packit 5c3484
      mpq_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpq_class &)
Packit 5c3484
  {
Packit 5c3484
    mpq_class a(3, 2);
Packit 5c3484
    mpq_class b(-1, 4);
Packit 5c3484
    a.swap(b);
Packit 5c3484
    a.swap(a);
Packit 5c3484
    ASSERT_ALWAYS(a == -.25);
Packit 5c3484
    ASSERT_ALWAYS(b == 1.5);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpq_class &, mpq_class &)
Packit 5c3484
  {
Packit 5c3484
    mpq_class a(3, 2);
Packit 5c3484
    mpq_class b(-1, 4);
Packit 5c3484
    ::swap(a, b);
Packit 5c3484
    ::swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == -.25);
Packit 5c3484
    ASSERT_ALWAYS(b == 1.5);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    using std::swap;
Packit 5c3484
    mpq_class a(3, 2);
Packit 5c3484
    mpq_class b(-1, 4);
Packit 5c3484
    swap(a, b);
Packit 5c3484
    swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == -.25);
Packit 5c3484
    ASSERT_ALWAYS(b == 1.5);
Packit 5c3484
  }
Packit 5c3484
}
Packit 5c3484
Packit 5c3484
void
Packit 5c3484
check_mpf (void)
Packit 5c3484
{
Packit 5c3484
  // operator=(const mpf_class &)
Packit 5c3484
  {
Packit 5c3484
    mpf_class a(123), b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // template <class T, class U> operator=(const __gmp_expr<T, U> &)
Packit 5c3484
  // not tested here, see t-unary.cc, t-binary.cc
Packit 5c3484
Packit 5c3484
  // operator=(signed char)
Packit 5c3484
  {
Packit 5c3484
    signed char a = -127;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -127);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned char)
Packit 5c3484
  {
Packit 5c3484
    unsigned char a = 255;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 255);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // either signed or unsigned char, machine dependent
Packit 5c3484
  {
Packit 5c3484
    mpf_class a;
Packit 5c3484
    a = 'A'; ASSERT_ALWAYS(a == 65);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    mpf_class a;
Packit 5c3484
    a = 'z'; ASSERT_ALWAYS(a == 122);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed int)
Packit 5c3484
  {
Packit 5c3484
    signed int a = 0;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = -123;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    signed int a = 32767;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 32767);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned int)
Packit 5c3484
  {
Packit 5c3484
    unsigned int a = 65535u;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 65535u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed short int)
Packit 5c3484
  {
Packit 5c3484
    signed short int a = -12345;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12345);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned short int)
Packit 5c3484
  {
Packit 5c3484
    unsigned short int a = 54321u;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 54321u);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(signed long int)
Packit 5c3484
  {
Packit 5c3484
    signed long int a = -1234567890L;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(unsigned long int)
Packit 5c3484
  {
Packit 5c3484
    unsigned long int a = 3456789012UL;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 3456789012UL);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(float)
Packit 5c3484
  {
Packit 5c3484
    float a = 123.0;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(double)
Packit 5c3484
  {
Packit 5c3484
    double a = 0.0;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = -12.375;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == -12.375);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 6.789e+3;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 6789);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    double a = 9.375e-1;
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 0.9375);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(long double)
Packit 5c3484
  // currently not implemented
Packit 5c3484
Packit 5c3484
  // operator=(const char *)
Packit 5c3484
  {
Packit 5c3484
    const char *a = "1234567890";
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &)
Packit 5c3484
  {
Packit 5c3484
    string a("1234567890");
Packit 5c3484
    mpf_class b;
Packit 5c3484
    b = a; ASSERT_ALWAYS(b == 1234567890L);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const char *) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      const char *a = "abc";
Packit 5c3484
      mpf_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // operator=(const std::string &) with invalid
Packit 5c3484
  {
Packit 5c3484
    try {
Packit 5c3484
      string a("def");
Packit 5c3484
      mpf_class b;
Packit 5c3484
      b = a;
Packit 5c3484
      ASSERT_ALWAYS (0);  /* should not be reached */
Packit 5c3484
    } catch (invalid_argument) {
Packit 5c3484
    }
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpf_class &)
Packit 5c3484
  {
Packit 5c3484
    mpf_class a(123);
Packit 5c3484
    mpf_class b(456);
Packit 5c3484
    a.swap(b);
Packit 5c3484
    a.swap(a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
Packit 5c3484
  // swap(mpf_class &, mpf_class &)
Packit 5c3484
  {
Packit 5c3484
    mpf_class a(123);
Packit 5c3484
    mpf_class b(456);
Packit 5c3484
    ::swap(a, b);
Packit 5c3484
    ::swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
Packit 5c3484
  }
Packit 5c3484
  {
Packit 5c3484
    using std::swap;
Packit 5c3484
    mpf_class a(123);
Packit 5c3484
    mpf_class b(456);
Packit 5c3484
    swap(a, b);
Packit 5c3484
    swap(a, a);
Packit 5c3484
    ASSERT_ALWAYS(a == 456);
Packit 5c3484
    ASSERT_ALWAYS(b == 123);
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
}