diff --git a/include/boost/multiprecision/cpp_int/add.hpp b/include/boost/multiprecision/cpp_int/add.hpp index 22b8c186..2fca9b95 100644 --- a/include/boost/multiprecision/cpp_int/add.hpp +++ b/include/boost/multiprecision/cpp_int/add.hpp @@ -84,7 +84,7 @@ inline void add_unsigned(CppInt1& result, const CppInt2& a, const CppInt3& b) BO { // We overflowed, need to add one more limb: result.resize(x + 1, x + 1); - if(CppInt1::variable || (result.size() > x)) + if(result.size() > x) result.limbs()[x] = static_cast(carry); } result.normalize(); @@ -126,7 +126,7 @@ inline void add_unsigned(CppInt1& result, const CppInt2& a, const limb_type& o) // We overflowed, need to add one more limb: unsigned x = result.size(); result.resize(x + 1, x + 1); - if(CppInt1::variable || (result.size() > x)) + if(result.size() > x) result.limbs()[x] = static_cast(carry); } result.normalize(); diff --git a/include/boost/multiprecision/cpp_int/divide.hpp b/include/boost/multiprecision/cpp_int/divide.hpp index 2f83d1ba..81583ec3 100644 --- a/include/boost/multiprecision/cpp_int/divide.hpp +++ b/include/boost/multiprecision/cpp_int/divide.hpp @@ -220,7 +220,7 @@ void divide_unsigned_helper( // double_limb_type carry = 0; t.resize(y.size() + shift + 1, y.size() + shift); - bool truncated_t = !CppInt1::variable && (t.size() != y.size() + shift + 1); + bool truncated_t = (t.size() != y.size() + shift + 1); typename CppInt1::limb_pointer pt = t.limbs(); for(unsigned i = 0; i < shift; ++i) pt[i] = 0; diff --git a/include/boost/multiprecision/cpp_int/limits.hpp b/include/boost/multiprecision/cpp_int/limits.hpp index 518bb9f4..b19e1ebb 100644 --- a/include/boost/multiprecision/cpp_int/limits.hpp +++ b/include/boost/multiprecision/cpp_int/limits.hpp @@ -23,7 +23,7 @@ inline boost::multiprecision::number, ExpressionTemplates> result_type; - typedef boost::multiprecision::number, ExpressionTemplates> ui_type; + typedef boost::multiprecision::number, ExpressionTemplates> ui_type; static const result_type val = -result_type(~ui_type(0)); return val; } @@ -62,7 +62,7 @@ inline boost::multiprecision::number, ExpressionTemplates> result_type; - typedef boost::multiprecision::number, ExpressionTemplates> ui_type; + typedef boost::multiprecision::number, ExpressionTemplates> ui_type; static const result_type val = ~ui_type(0); return val; } diff --git a/include/boost/multiprecision/cpp_int/multiply.hpp b/include/boost/multiprecision/cpp_int/multiply.hpp index 88264c47..afe1db7a 100644 --- a/include/boost/multiprecision/cpp_int/multiply.hpp +++ b/include/boost/multiprecision/cpp_int/multiply.hpp @@ -48,7 +48,7 @@ inline typename enable_if_c::variable || (result.size() > i)) + if(result.size() > i) result.limbs()[i] = static_cast(carry); } result.sign(a.sign()); @@ -157,7 +157,7 @@ inline typename enable_if_c::max_limb_value)); } resize_for_carry(result, as + bs); // May throw if checking is enabled - if(cpp_int_backend::variable || (i + bs < result.size())) + if(i + bs < result.size()) pr[i + bs] = static_cast(carry); carry = 0; } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 3c53d753..64c98a9f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -643,6 +643,26 @@ run test_cpp_int.cpp gmp no_eh_support : test_cpp_int_3 ; +run test_cpp_int.cpp gmp no_eh_support + : # command line + : # input files + : # requirements + [ check-target-builds ../config//has_gmp : : no ] + release # otherwise runtime is too slow!! + TEST4 + : test_cpp_int_4 + ; + +run test_cpp_int.cpp gmp no_eh_support + : # command line + : # input files + : # requirements + [ check-target-builds ../config//has_gmp : : no ] + release # otherwise runtime is too slow!! + TEST5 + : test_cpp_int_5 + ; + run test_checked_cpp_int.cpp no_eh_support ; run test_miller_rabin.cpp no_eh_support gmp diff --git a/test/test_cpp_int.cpp b/test/test_cpp_int.cpp index 77ea1ac2..30c9c346 100644 --- a/test/test_cpp_int.cpp +++ b/test/test_cpp_int.cpp @@ -614,6 +614,7 @@ struct tester int main() { using namespace boost::multiprecision; + #ifdef TEST1 tester t1; t1.test(); @@ -626,6 +627,14 @@ int main() // Unchecked test verifies modulo arithmetic: tester > > t3; t3.test(); +#endif +#ifdef TEST4 + tester > > > t4; + t4.test(); +#endif +#ifdef TEST5 + tester > > t5; + t5.test(); #endif return boost::report_errors(); }