|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r80166 - in sandbox/big_number: boost/multiprecision boost/multiprecision/detail libs/multiprecision/test
From: john_at_[hidden]
Date: 2012-08-24 07:08:46
Author: johnmaddock
Date: 2012-08-24 07:08:44 EDT (Fri, 24 Aug 2012)
New Revision: 80166
URL: http://svn.boost.org/trac/boost/changeset/80166
Log:
Fix remaining GCC C++11 failures.
Fix buggy test cases.
Text files modified:
sandbox/big_number/boost/multiprecision/cpp_int.hpp | 2 +-
sandbox/big_number/boost/multiprecision/detail/number_base.hpp | 10 ++++++++++
sandbox/big_number/boost/multiprecision/number.hpp | 11 ++++++++---
sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp | 14 +++++++-------
4 files changed, 26 insertions(+), 11 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-08-24 07:08:44 EDT (Fri, 24 Aug 2012)
@@ -2811,7 +2811,7 @@
template <class Integer>
inline Integer negate_integer(Integer i, const mpl::false_&) BOOST_NOEXCEPT
{
- return ~--i;
+ return ~(i-1);
}
template <class R, unsigned MinBits, bool Signed, class Allocator>
Modified: sandbox/big_number/boost/multiprecision/detail/number_base.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/detail/number_base.hpp (original)
+++ sandbox/big_number/boost/multiprecision/detail/number_base.hpp 2012-08-24 07:08:44 EDT (Fri, 24 Aug 2012)
@@ -78,6 +78,16 @@
{
typedef typename remove_cv<typename decay<const Val>::type>::type type;
};
+template <class B, class Backend, class Tag>
+struct canonical_imp<number<B, true>, Backend, Tag>
+{
+ typedef B type;
+};
+template <class B, class Backend, class Tag>
+struct canonical_imp<number<B, false>, Backend, Tag>
+{
+ typedef B type;
+};
template <class Val, class Backend>
struct canonical_imp<Val, Backend, mpl::int_<0> >
{
Modified: sandbox/big_number/boost/multiprecision/number.hpp
==============================================================================
--- sandbox/big_number/boost/multiprecision/number.hpp (original)
+++ sandbox/big_number/boost/multiprecision/number.hpp 2012-08-24 07:08:44 EDT (Fri, 24 Aug 2012)
@@ -112,7 +112,7 @@
explicit BOOST_FORCEINLINE number(const number<Other, ET>& val, typename enable_if_c<
(detail::is_explicitly_convertible<Other, Backend>::value
&& (detail::is_restricted_conversion<Other, Backend>::value || !boost::is_convertible<Other, Backend>::value))
- >::type* = 0) BOOST_NOEXCEPT_IF(noexcept(std::declval<Backend>() = std::declval<Other>()))
+ >::type* = 0) BOOST_NOEXCEPT_IF(noexcept(Backend(std::declval<Other>())))
: m_backend(val.backend()) {}
template <class V>
@@ -148,13 +148,13 @@
do_assign(e, tag_type());
return *this;
}
-/*
+
BOOST_FORCEINLINE number& operator=(const number& e) BOOST_NOEXCEPT_IF(noexcept(std::declval<Backend>() = static_cast<const Backend&>(std::declval<Backend>())))
{
m_backend = e.m_backend;
return *this;
}
- */
+
template <class V>
BOOST_FORCEINLINE typename enable_if<is_convertible<V, self_type>, number<Backend, ExpressionTemplates>& >::type
operator=(const V& v) BOOST_NOEXCEPT_IF(noexcept(std::declval<Backend>() = std::declval<typename boost::multiprecision::detail::canonical<V, Backend>::type>()))
@@ -603,6 +603,11 @@
{
return this->template convert_to<T>();
}
+explicit operator bool()const
+{
+ using default_ops::eval_is_zero;
+ return !eval_is_zero(backend());
+}
#endif
//
// Default precision:
Modified: sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp
==============================================================================
--- sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp (original)
+++ sandbox/big_number/libs/multiprecision/test/test_arithmetic.cpp 2012-08-24 07:08:44 EDT (Fri, 24 Aug 2012)
@@ -485,16 +485,16 @@
Real r;
divide_qr(a, b, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
divide_qr(a + 0, b, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
divide_qr(a, b+0, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
divide_qr(a+0, b+0, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
BOOST_TEST(integer_modulus(a, 57) == a % 57);
if(std::numeric_limits<Real>::is_signed)
{
@@ -516,17 +516,17 @@
BOOST_TEST(lcm(-400, b) == boost::math::lcm(-400, 45));
divide_qr(a, b, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
BOOST_TEST(integer_modulus(a, 57) == abs(a % 57));
b = -57;
divide_qr(a, b, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
BOOST_TEST(integer_modulus(a, -57) == abs(a % -57));
a = 458;
divide_qr(a, b, c, r);
BOOST_TEST(c == a / b);
- BOOST_TEST(r = a % b);
+ BOOST_TEST(r == a % b);
BOOST_TEST(integer_modulus(a, -57) == abs(a % -57));
}
for(unsigned i = 0; i < 20; ++i)
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