|
Packit |
5c3484 |
/* Test mp*_class functions.
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
Copyright 2002, 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 |
|
|
Packit |
5c3484 |
/* Note that we don't use <climits> for LONG_MIN, but instead our own
|
|
Packit |
5c3484 |
definitions in gmp-impl.h. In g++ 2.95.4 (debian 3.0) under
|
|
Packit |
5c3484 |
-mcpu=ultrasparc, limits.h sees __sparc_v9__ defined and assumes that
|
|
Packit |
5c3484 |
means long is 64-bit long, but it's only 32-bits, causing fatal compile
|
|
Packit |
5c3484 |
errors. */
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
#include "config.h"
|
|
Packit |
5c3484 |
|
|
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::fits_sint_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = INT_MIN; fits = z.fits_sint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_sint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = INT_MAX; fits = z.fits_sint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_sint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::fits_uint_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = 0; fits = z.fits_uint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_uint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = UINT_MAX; fits = z.fits_uint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_uint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::fits_slong_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = LONG_MIN; fits = z.fits_slong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_slong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = LONG_MAX; fits = z.fits_slong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_slong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::fits_ulong_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = 0; fits = z.fits_ulong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_ulong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = ULONG_MAX; fits = z.fits_ulong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_ulong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::fits_sshort_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = SHRT_MIN; fits = z.fits_sshort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_sshort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = SHRT_MAX; fits = z.fits_sshort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_sshort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::fits_ushort_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = 0; fits = z.fits_ushort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z--; fits = z.fits_ushort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
z = USHRT_MAX; fits = z.fits_ushort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
z++; fits = z.fits_ushort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::get_mpz_t
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z(0);
|
|
Packit |
5c3484 |
mpz_ptr p = z.get_mpz_t();
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (mpz_cmp_ui (p, 0) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z(0);
|
|
Packit |
5c3484 |
mpz_srcptr p = z.get_mpz_t();
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (mpz_cmp_ui (p, 0) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::get_d
|
|
Packit |
5c3484 |
// mpz_class::get_si
|
|
Packit |
5c3484 |
// mpz_class::get_ui
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z(123);
|
|
Packit |
5c3484 |
{ double d = z.get_d(); ASSERT_ALWAYS (d == 123.0); }
|
|
Packit |
5c3484 |
{ long l = z.get_si(); ASSERT_ALWAYS (l == 123L); }
|
|
Packit |
5c3484 |
{ long u = z.get_ui(); ASSERT_ALWAYS (u == 123L); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z(-123);
|
|
Packit |
5c3484 |
{ double d = z.get_d(); ASSERT_ALWAYS (d == -123.0); }
|
|
Packit |
5c3484 |
{ long l = z.get_si(); ASSERT_ALWAYS (l == -123L); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::get_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z(123);
|
|
Packit |
5c3484 |
string s;
|
|
Packit |
5c3484 |
s = z.get_str(); ASSERT_ALWAYS (s == "123");
|
|
Packit |
5c3484 |
s = z.get_str(16); ASSERT_ALWAYS (s == "7b");
|
|
Packit |
5c3484 |
s = z.get_str(-16); ASSERT_ALWAYS (s == "7B");
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpz_class::set_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
int ret;
|
|
Packit |
5c3484 |
ret = z.set_str ("123", 10); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str ("7b", 16); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str ("7B", 16); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str ("0x7B", 0); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ret = z.set_str (string("123"), 10); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str (string("7b"), 16); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str (string("7B"), 16); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
ret = z.set_str (string("0x7B"), 0); ASSERT_ALWAYS (ret == 0 && z == 123);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
void
|
|
Packit |
5c3484 |
check_mpq (void)
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
// mpq_class::canonicalize
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(12,9);
|
|
Packit |
5c3484 |
q.canonicalize();
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (q.get_num() == 4);
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (q.get_den() == 3);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::get_d
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(123);
|
|
Packit |
5c3484 |
{ double d = q.get_d(); ASSERT_ALWAYS (d == 123.0); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(-123);
|
|
Packit |
5c3484 |
{ double d = q.get_d(); ASSERT_ALWAYS (d == -123.0); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::get_mpq_t
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(0);
|
|
Packit |
5c3484 |
mpq_ptr p = q.get_mpq_t();
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (mpq_cmp_ui (p, 0, 1) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(0);
|
|
Packit |
5c3484 |
mpq_srcptr p = q.get_mpq_t();
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (mpq_cmp_ui (p, 0, 1) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::get_num, mpq_class::get_den
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
const mpq_class q(4,5);
|
|
Packit |
5c3484 |
mpz_class z;
|
|
Packit |
5c3484 |
z = q.get_num(); ASSERT_ALWAYS (z == 4);
|
|
Packit |
5c3484 |
z = q.get_den(); ASSERT_ALWAYS (z == 5);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::get_num_mpz_t, mpq_class::get_den_mpz_t
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(4,5);
|
|
Packit |
5c3484 |
mpz_ptr p;
|
|
Packit |
5c3484 |
p = q.get_num_mpz_t(); ASSERT_ALWAYS (mpz_cmp_ui (p, 4) == 0);
|
|
Packit |
5c3484 |
p = q.get_den_mpz_t(); ASSERT_ALWAYS (mpz_cmp_ui (p, 5) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
const mpq_class q(4,5);
|
|
Packit |
5c3484 |
mpz_srcptr p;
|
|
Packit |
5c3484 |
p = q.get_num_mpz_t(); ASSERT_ALWAYS (mpz_cmp_ui (p, 4) == 0);
|
|
Packit |
5c3484 |
p = q.get_den_mpz_t(); ASSERT_ALWAYS (mpz_cmp_ui (p, 5) == 0);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::get_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q(17,11);
|
|
Packit |
5c3484 |
string s;
|
|
Packit |
5c3484 |
s = q.get_str(); ASSERT_ALWAYS (s == "17/11");
|
|
Packit |
5c3484 |
s = q.get_str(10); ASSERT_ALWAYS (s == "17/11");
|
|
Packit |
5c3484 |
s = q.get_str(16); ASSERT_ALWAYS (s == "11/b");
|
|
Packit |
5c3484 |
s = q.get_str(-16); ASSERT_ALWAYS (s == "11/B");
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpq_class::set_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpq_class q;
|
|
Packit |
5c3484 |
int ret;
|
|
Packit |
5c3484 |
ret = q.set_str ("123", 10); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str ("4/5", 10); ASSERT_ALWAYS (ret == 0 && q == mpq_class(4,5));
|
|
Packit |
5c3484 |
ret = q.set_str ("7b", 16); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str ("7B", 16); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str ("0x7B", 0); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str ("0x10/17", 0); ASSERT_ALWAYS (ret == 0 && q == mpq_class(16,17));
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ret = q.set_str (string("4/5"), 10); ASSERT_ALWAYS (ret == 0 && q == mpq_class(4,5));
|
|
Packit |
5c3484 |
ret = q.set_str (string("123"), 10); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str (string("7b"), 16); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str (string("7B"), 16); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str (string("0x7B"), 0); ASSERT_ALWAYS (ret == 0 && q == 123);
|
|
Packit |
5c3484 |
ret = q.set_str (string("0x10/17"), 0); ASSERT_ALWAYS (ret == 0 && q == mpq_class(16,17));
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
void
|
|
Packit |
5c3484 |
check_mpf (void)
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
// mpf_class::fits_sint_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(int));
|
|
Packit |
5c3484 |
f = INT_MIN; fits = f.fits_sint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_sint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = INT_MAX; fits = f.fits_sint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_sint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::fits_uint_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(int));
|
|
Packit |
5c3484 |
f = 0; fits = f.fits_uint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_uint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = UINT_MAX; fits = f.fits_uint_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_uint_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::fits_slong_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(long));
|
|
Packit |
5c3484 |
f = LONG_MIN; fits = f.fits_slong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_slong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = LONG_MAX; fits = f.fits_slong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_slong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::fits_ulong_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(long));
|
|
Packit |
5c3484 |
f = 0; fits = f.fits_ulong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_ulong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = ULONG_MAX; fits = f.fits_ulong_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_ulong_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::fits_sshort_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(short));
|
|
Packit |
5c3484 |
f = SHRT_MIN; fits = f.fits_sshort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_sshort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = SHRT_MAX; fits = f.fits_sshort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_sshort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::fits_ushort_p
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
bool fits;
|
|
Packit |
5c3484 |
mpf_class f (0, 2*8*sizeof(short));
|
|
Packit |
5c3484 |
f = 0; fits = f.fits_ushort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f--; fits = f.fits_ushort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
f = USHRT_MAX; fits = f.fits_ushort_p(); ASSERT_ALWAYS (fits);
|
|
Packit |
5c3484 |
f++; fits = f.fits_ushort_p(); ASSERT_ALWAYS (! fits);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::get_d
|
|
Packit |
5c3484 |
// mpf_class::get_si
|
|
Packit |
5c3484 |
// mpf_class::get_ui
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f(123);
|
|
Packit |
5c3484 |
{ double d = f.get_d(); ASSERT_ALWAYS (d == 123.0); }
|
|
Packit |
5c3484 |
{ long l = f.get_si(); ASSERT_ALWAYS (l == 123L); }
|
|
Packit |
5c3484 |
{ long u = f.get_ui(); ASSERT_ALWAYS (u == 123L); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f(-123);
|
|
Packit |
5c3484 |
{ double d = f.get_d(); ASSERT_ALWAYS (d == -123.0); }
|
|
Packit |
5c3484 |
{ long l = f.get_si(); ASSERT_ALWAYS (l == -123L); }
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::get_prec
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f;
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (f.get_prec() == mpf_get_default_prec());
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::get_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f(123);
|
|
Packit |
5c3484 |
string s;
|
|
Packit |
5c3484 |
mp_exp_t e;
|
|
Packit |
5c3484 |
s = f.get_str(e); ASSERT_ALWAYS (s == "123" && e == 3);
|
|
Packit |
5c3484 |
s = f.get_str(e, 16); ASSERT_ALWAYS (s == "7b" && e == 2);
|
|
Packit |
5c3484 |
s = f.get_str(e, -16); ASSERT_ALWAYS (s == "7B" && e == 2);
|
|
Packit |
5c3484 |
s = f.get_str(e, 10, 2); ASSERT_ALWAYS (s == "12" && e == 3);
|
|
Packit |
5c3484 |
s = f.get_str(e, 10, 1); ASSERT_ALWAYS (s == "1" && e == 3);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::set_str
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f;
|
|
Packit |
5c3484 |
int ret;
|
|
Packit |
5c3484 |
ret = f.set_str ("123", 10); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str ("123e1", 10); ASSERT_ALWAYS (ret == 0 && f == 1230);
|
|
Packit |
5c3484 |
ret = f.set_str ("1230e-1", 10); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str ("7b", 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str ("7B", 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str ("7B@1", 16); ASSERT_ALWAYS (ret == 0 && f == 1968);
|
|
Packit |
5c3484 |
ret = f.set_str ("7B0@-1", 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
ret = f.set_str (string("123"), 10); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str (string("123e1"), 10); ASSERT_ALWAYS (ret == 0 && f == 1230);
|
|
Packit |
5c3484 |
ret = f.set_str (string("1230e-1"), 10); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str (string("7b"), 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str (string("7B"), 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
ret = f.set_str (string("7B@1"), 16); ASSERT_ALWAYS (ret == 0 && f == 1968);
|
|
Packit |
5c3484 |
ret = f.set_str (string("7B0@-1"), 16); ASSERT_ALWAYS (ret == 0 && f == 123);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::set_prec
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f;
|
|
Packit |
5c3484 |
f.set_prec (256);
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (f.get_prec () >= 256);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// mpf_class::set_prec_raw
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
mpf_class f (0, 100 * GMP_NUMB_BITS);
|
|
Packit |
5c3484 |
f.set_prec_raw (5 * GMP_NUMB_BITS);
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (f.get_prec () >= 5 * GMP_NUMB_BITS);
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (f.get_prec () < 100 * GMP_NUMB_BITS);
|
|
Packit |
5c3484 |
f.set_prec_raw (100 * GMP_NUMB_BITS);
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
}
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// std::numeric_limits
|
|
Packit |
5c3484 |
void
|
|
Packit |
5c3484 |
check_limits (void)
|
|
Packit |
5c3484 |
{
|
|
Packit |
5c3484 |
// Check that the content is not private.
|
|
Packit |
5c3484 |
ASSERT_ALWAYS ( std::numeric_limits<mpz_class>::is_integer);
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (!std::numeric_limits<mpf_class>::is_integer);
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
// Check that symbols are emitted.
|
|
Packit |
5c3484 |
ASSERT_ALWAYS (&std::numeric_limits<mpz_class>::is_integer
|
|
Packit |
5c3484 |
!= &std::numeric_limits<mpq_class>::is_integer);
|
|
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 |
check_limits();
|
|
Packit |
5c3484 |
|
|
Packit |
5c3484 |
tests_end();
|
|
Packit |
5c3484 |
return 0;
|
|
Packit |
5c3484 |
}
|