Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r77362 - in sandbox/big_number: boost/multiprecision libs/multiprecision/test
From: john_at_[hidden]
Date: 2012-03-17 15:43:27


Author: johnmaddock
Date: 2012-03-17 15:43:26 EDT (Sat, 17 Mar 2012)
New Revision: 77362
URL: http://svn.boost.org/trac/boost/changeset/77362

Log:
Fix some GMP int errors, and simplify modulus code.
Fix some cpp_int errors.
Improve cpp_int tests.
Text files modified:
   sandbox/big_number/boost/multiprecision/cpp_int.hpp | 2
   sandbox/big_number/boost/multiprecision/gmp.hpp | 88 +++++--------------------------------
   sandbox/big_number/libs/multiprecision/test/test_cpp_int.cpp | 94 +++++++++++++++++++++++++++++++++++++++
   3 files changed, 105 insertions(+), 79 deletions(-)

Modified: sandbox/big_number/boost/multiprecision/cpp_int.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/cpp_int.hpp (original)
+++ sandbox/big_number/boost/multiprecision/cpp_int.hpp 2012-03-17 15:43:26 EDT (Sat, 17 Mar 2012)
@@ -1104,7 +1104,7 @@
    typename cpp_int_backend<MinBits, Signed, Allocator>::limb_pointer pa = a.limbs();
    while(p != pe)
    {
- carry += static_cast<double_limb_type>(*pa * static_cast<double_limb_type>(val));
+ carry += static_cast<double_limb_type>(*pa) * static_cast<double_limb_type>(val);
       *p = static_cast<limb_type>(carry);
       carry >>= cpp_int_backend<MinBits, Signed, Allocator>::limb_bits;
       ++p, ++pa;

Modified: sandbox/big_number/boost/multiprecision/gmp.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/gmp.hpp (original)
+++ sandbox/big_number/boost/multiprecision/gmp.hpp 2012-03-17 15:43:26 EDT (Sat, 17 Mar 2012)
@@ -1110,21 +1110,11 @@
 }
 inline void eval_divide(gmp_int& t, const gmp_int& o)
 {
- mpz_div(t.data(), t.data(), o.data());
+ mpz_tdiv_q(t.data(), t.data(), o.data());
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& o)
 {
- bool neg = mpz_sgn(t.data()) < 0;
- bool neg2 = mpz_sgn(o.data()) < 0;
- mpz_mod(t.data(), t.data(), o.data());
- if(neg && mpz_sgn(t.data()) != 0)
- {
- if(!neg2)
- t.negate();
- mpz_add(t.data(), t.data(), o.data());
- if(!neg2)
- t.negate();
- }
+ mpz_tdiv_r(t.data(), t.data(), o.data());
 }
 inline void eval_add(gmp_int& t, unsigned long i)
 {
@@ -1140,18 +1130,11 @@
 }
 inline void eval_modulus(gmp_int& t, unsigned long i)
 {
- bool neg = mpz_sgn(t.data()) < 0;
- mpz_mod_ui(t.data(), t.data(), i);
- if(neg && mpz_sgn(t.data()) != 0)
- {
- t.negate();
- mpz_add_ui(t.data(), t.data(), i);
- t.negate();
- }
+ mpz_tdiv_r_ui(t.data(), t.data(), i);
 }
 inline void eval_divide(gmp_int& t, unsigned long i)
 {
- mpz_div_ui(t.data(), t.data(), i);
+ mpz_tdiv_q_ui(t.data(), t.data(), i);
 }
 inline void eval_add(gmp_int& t, long i)
 {
@@ -1175,26 +1158,11 @@
 }
 inline void eval_modulus(gmp_int& t, long i)
 {
- bool neg = mpz_sgn(t.data()) < 0;
- bool neg2 = i < 0;
- mpz_mod_ui(t.data(), t.data(), std::abs(i));
- if(neg && mpz_sgn(t.data()) != 0)
- {
- if(!neg2)
- {
- t.negate();
- mpz_add_ui(t.data(), t.data(), std::abs(i));
- t.negate();
- }
- else
- {
- mpz_sub_ui(t.data(), t.data(), std::abs(i));
- }
- }
+ mpz_tdiv_r_ui(t.data(), t.data(), std::abs(i));
 }
 inline void eval_divide(gmp_int& t, long i)
 {
- mpz_div_ui(t.data(), t.data(), std::abs(i));
+ mpz_tdiv_q_ui(t.data(), t.data(), std::abs(i));
    if(i < 0)
       mpz_neg(t.data(), t.data());
 }
@@ -1248,21 +1216,11 @@
 }
 inline void eval_divide(gmp_int& t, const gmp_int& p, const gmp_int& o)
 {
- mpz_div(t.data(), p.data(), o.data());
+ mpz_tdiv_q(t.data(), p.data(), o.data());
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& p, const gmp_int& o)
 {
- bool neg = mpz_sgn(p.data()) < 0;
- bool neg2 = mpz_sgn(o.data()) < 0;
- mpz_mod(t.data(), p.data(), o.data());
- if(neg && mpz_sgn(t.data()) != 0)
- {
- if(!neg2)
- t.negate();
- mpz_add(t.data(), t.data(), o.data());
- if(!neg2)
- t.negate();
- }
+ mpz_tdiv_r(t.data(), p.data(), o.data());
 }
 inline void eval_add(gmp_int& t, const gmp_int& p, unsigned long i)
 {
@@ -1278,18 +1236,11 @@
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& p, unsigned long i)
 {
- bool neg = mpz_sgn(p.data()) < 0;
- mpz_mod_ui(t.data(), p.data(), i);
- if(neg && mpz_sgn(t.data()) != 0)
- {
- t.negate();
- mpz_add_ui(t.data(), t.data(), i);
- t.negate();
- }
+ mpz_tdiv_r_ui(t.data(), p.data(), i);
 }
 inline void eval_divide(gmp_int& t, const gmp_int& p, unsigned long i)
 {
- mpz_div_ui(t.data(), p.data(), i);
+ mpz_tdiv_q_ui(t.data(), p.data(), i);
 }
 inline void eval_add(gmp_int& t, const gmp_int& p, long i)
 {
@@ -1313,26 +1264,11 @@
 }
 inline void eval_modulus(gmp_int& t, const gmp_int& p, long i)
 {
- bool neg = mpz_sgn(p.data()) < 0;
- bool neg2 = i < 0;
- mpz_mod_ui(t.data(), p.data(), std::abs(i));
- if(neg && mpz_sgn(t.data()) != 0)
- {
- if(!neg2)
- {
- t.negate();
- mpz_add_ui(t.data(), t.data(), std::abs(i));
- t.negate();
- }
- else
- {
- mpz_sub_ui(t.data(), t.data(), std::abs(i));
- }
- }
+ mpz_tdiv_r_ui(t.data(), p.data(), std::abs(i));
 }
 inline void eval_divide(gmp_int& t, const gmp_int& p, long i)
 {
- mpz_div_ui(t.data(), p.data(), std::abs(i));
+ mpz_tdiv_q_ui(t.data(), p.data(), std::abs(i));
    if(i < 0)
       mpz_neg(t.data(), t.data());
 }

Modified: sandbox/big_number/libs/multiprecision/test/test_cpp_int.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_cpp_int.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_cpp_int.cpp 2012-03-17 15:43:26 EDT (Sat, 17 Mar 2012)
@@ -65,6 +65,7 @@
       mpz_int d = generate_random<mpz_int>(32);
 
       int si = d.convert_to<int>();
+ unsigned ui = si;
 
       test_type a1 = a.str();
       test_type b1 = b.str();
@@ -76,56 +77,104 @@
       BOOST_CHECK_EQUAL(c.str(), c1.str());
       BOOST_CHECK_EQUAL(d.str(), d1.str());
       BOOST_CHECK_EQUAL(mpz_int(a+b).str(), test_type(a1 + b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=b).str(), (test_type(a1) += b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(b)+=a).str(), (test_type(b1) += a1).str());
       BOOST_CHECK_EQUAL(mpz_int(a-b).str(), test_type(a1 - b1).str());
       BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)+b).str(), test_type(test_type(-a1) + b1).str());
       BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)-b).str(), test_type(test_type(-a1) - b1).str());
       BOOST_CHECK_EQUAL(mpz_int(c * d).str(), test_type(c1 * d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(c)*=d).str(), (test_type(c1) *= d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(d)*=c).str(), (test_type(d1) *= c1).str());
       BOOST_CHECK_EQUAL(mpz_int(c * -d).str(), test_type(c1 * -d1).str());
       BOOST_CHECK_EQUAL(mpz_int(-c * d).str(), test_type(-c1 * d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(c)*=-d).str(), (test_type(c1) *= -d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-d)*=c).str(), (test_type(-d1) *= c1).str());
       BOOST_CHECK_EQUAL(mpz_int(b * c).str(), test_type(b1 * c1).str());
       BOOST_CHECK_EQUAL(mpz_int(a / b).str(), test_type(a1 / b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=b).str(), (test_type(a1) /= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a / -b).str(), test_type(a1 / -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a / b).str(), test_type(-a1 / b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=-b).str(), (test_type(a1) /= -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=b).str(), (test_type(-a1) /= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a / d).str(), test_type(a1 / d1).str());
       BOOST_CHECK_EQUAL(mpz_int(a % b).str(), test_type(a1 % b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=b).str(), (test_type(a1) %= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a % -b).str(), test_type(a1 % -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=-b).str(), (test_type(a1) %= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a % b).str(), test_type(-a1 % b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=b).str(), (test_type(-a1) %= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a % d).str(), test_type(a1 % d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=d).str(), (test_type(a1) %= d1).str());
       // bitwise ops:
       BOOST_CHECK_EQUAL(mpz_int(a|b).str(), test_type(a1 | b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=b).str(), (test_type(a1) |= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a|b).str(), test_type(-a1 | b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)|=b).str(), (test_type(-a1) |= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a|-b).str(), test_type(a1 | -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=-b).str(), (test_type(a1) |= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a|-b).str(), test_type(-a1 | -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)|=-b).str(), (test_type(-a1) |= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a&b).str(), test_type(a1 & b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=b).str(), (test_type(a1) &= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a&b).str(), test_type(-a1 & b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)&=b).str(), (test_type(-a1) &= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a&-b).str(), test_type(a1 & -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=-b).str(), (test_type(a1) &= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a&-b).str(), test_type(-a1 & -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)&=-b).str(), (test_type(-a1) &= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a^b).str(), test_type(a1 ^ b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=b).str(), (test_type(a1) ^= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a^b).str(), test_type(-a1 ^ b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)^=b).str(), (test_type(-a1) ^= b1).str());
       BOOST_CHECK_EQUAL(mpz_int(a^-b).str(), test_type(a1 ^ -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=-b).str(), (test_type(a1) ^= -b1).str());
       BOOST_CHECK_EQUAL(mpz_int(-a^-b).str(), test_type(-a1 ^ -b1).str());
- // Now check operations involving integers:
+ BOOST_CHECK_EQUAL((mpz_int(-a)^=-b).str(), (test_type(-a1) ^= -b1).str());
+ // Now check operations involving signed integers:
       BOOST_CHECK_EQUAL(mpz_int(a + si).str(), test_type(a1 + si).str());
       BOOST_CHECK_EQUAL(mpz_int(a + -si).str(), test_type(a1 + -si).str());
       BOOST_CHECK_EQUAL(mpz_int(-a + si).str(), test_type(-a1 + si).str());
       BOOST_CHECK_EQUAL(mpz_int(si + a).str(), test_type(si + a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=si).str(), (test_type(a1) += si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=-si).str(), (test_type(a1) += -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=si).str(), (test_type(-a1) += si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=-si).str(), (test_type(-a1) += -si).str());
       BOOST_CHECK_EQUAL(mpz_int(a - si).str(), test_type(a1 - si).str());
       BOOST_CHECK_EQUAL(mpz_int(a - -si).str(), test_type(a1 - -si).str());
       BOOST_CHECK_EQUAL(mpz_int(-a - si).str(), test_type(-a1 - si).str());
       BOOST_CHECK_EQUAL(mpz_int(si - a).str(), test_type(si - a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=si).str(), (test_type(a1) -= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=-si).str(), (test_type(a1) -= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=si).str(), (test_type(-a1) -= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=-si).str(), (test_type(-a1) -= -si).str());
       BOOST_CHECK_EQUAL(mpz_int(b * si).str(), test_type(b1 * si).str());
       BOOST_CHECK_EQUAL(mpz_int(b * -si).str(), test_type(b1 * -si).str());
       BOOST_CHECK_EQUAL(mpz_int(-b * si).str(), test_type(-b1 * si).str());
       BOOST_CHECK_EQUAL(mpz_int(si * b).str(), test_type(si * b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=si).str(), (test_type(a1) *= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=-si).str(), (test_type(a1) *= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=si).str(), (test_type(-a1) *= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=-si).str(), (test_type(-a1) *= -si).str());
       BOOST_CHECK_EQUAL(mpz_int(a / si).str(), test_type(a1 / si).str());
       BOOST_CHECK_EQUAL(mpz_int(a / -si).str(), test_type(a1 / -si).str());
       BOOST_CHECK_EQUAL(mpz_int(-a / si).str(), test_type(-a1 / si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=si).str(), (test_type(a1) /= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=-si).str(), (test_type(a1) /= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=si).str(), (test_type(-a1) /= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=-si).str(), (test_type(-a1) /= -si).str());
       BOOST_CHECK_EQUAL(mpz_int(a % si).str(), test_type(a1 % si).str());
       BOOST_CHECK_EQUAL(mpz_int(a % -si).str(), test_type(a1 % -si).str());
       BOOST_CHECK_EQUAL(mpz_int(-a % si).str(), test_type(-a1 % si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=si).str(), (test_type(a1) %= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=-si).str(), (test_type(a1) %= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=si).str(), (test_type(-a1) %= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=-si).str(), (test_type(-a1) %= -si).str());
       BOOST_CHECK_EQUAL(mpz_int(a|si).str(), test_type(a1 | si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=si).str(), (test_type(a1) |= si).str());
       BOOST_CHECK_EQUAL(mpz_int(a&si).str(), test_type(a1 & si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=si).str(), (test_type(a1) &= si).str());
       BOOST_CHECK_EQUAL(mpz_int(a^si).str(), test_type(a1 ^ si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=si).str(), (test_type(a1) ^= si).str());
       BOOST_CHECK_EQUAL(mpz_int(si|a).str(), test_type(si|a1).str());
       BOOST_CHECK_EQUAL(mpz_int(si&a).str(), test_type(si&a1).str());
       BOOST_CHECK_EQUAL(mpz_int(si^a).str(), test_type(si^a1).str());
@@ -137,6 +186,47 @@
       BOOST_CHECK_EQUAL(mpz_int(lcm(-c, -d)).str(), test_type(lcm(-c1, -d1)).str());
       BOOST_CHECK_EQUAL(mpz_int(gcd(a, -b)).str(), test_type(gcd(a1, -b1)).str());
       BOOST_CHECK_EQUAL(mpz_int(lcm(c, -d)).str(), test_type(lcm(c1, -d1)).str());
+ // Now check operations involving unsigned integers:
+ BOOST_CHECK_EQUAL(mpz_int(a + ui).str(), test_type(a1 + ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a + ui).str(), test_type(-a1 + ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui + a).str(), test_type(ui + a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=ui).str(), (test_type(a1) += ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=ui).str(), (test_type(-a1) += ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - ui).str(), test_type(a1 - ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a - ui).str(), test_type(-a1 - ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui - a).str(), test_type(ui - a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=ui).str(), (test_type(a1) -= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=ui).str(), (test_type(-a1) -= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * ui).str(), test_type(b1 * ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-b * ui).str(), test_type(-b1 * ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui * b).str(), test_type(ui * b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=ui).str(), (test_type(a1) *= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=ui).str(), (test_type(-a1) *= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / ui).str(), test_type(a1 / ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / ui).str(), test_type(-a1 / ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=ui).str(), (test_type(a1) /= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=ui).str(), (test_type(-a1) /= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % ui).str(), test_type(a1 % ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % ui).str(), test_type(-a1 % ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=ui).str(), (test_type(a1) %= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=ui).str(), (test_type(-a1) %= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a|ui).str(), test_type(a1 | ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=ui).str(), (test_type(a1) |= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&ui).str(), test_type(a1 & ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=ui).str(), (test_type(a1) &= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^ui).str(), test_type(a1 ^ ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=ui).str(), (test_type(a1) ^= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui|a).str(), test_type(ui|a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui&a).str(), test_type(ui&a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui^a).str(), test_type(ui^a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, b)).str(), test_type(gcd(a1, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, d)).str(), test_type(lcm(c1, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, b)).str(), test_type(gcd(-a1, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, d)).str(), test_type(lcm(-c1, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, -b)).str(), test_type(gcd(-a1, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, -d)).str(), test_type(lcm(-c1, -d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, -b)).str(), test_type(gcd(a1, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, -d)).str(), test_type(lcm(c1, -d1)).str());
 
       if(std::numeric_limits<test_type>::is_modulo)
       {
@@ -197,7 +287,7 @@
 {
    using namespace boost::multiprecision;
    test<cpp_int>();
- test<mp_number<cpp_int_backend<1024, true, void> > >();
+ test<mp_number<cpp_int_backend<2048, true, void> > >();
    return boost::report_errors();
 }
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk