]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multiprecision/test/issue_13148.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright 2016 John Maddock. Distributed under the Boost
3 // Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #include <boost/multiprecision/cpp_int.hpp>
7 #include <boost/multiprecision/cpp_dec_float.hpp>
8 #include <boost/multiprecision/cpp_bin_float.hpp>
10 boost::multiprecision::cpp_rational
rationalfromStr(const char* str
)
12 boost::multiprecision::cpp_dec_float_50
d1(str
);
13 boost::multiprecision::cpp_rational
result(d1
); // <--- eats CPU forever
17 boost::multiprecision::cpp_rational
rationalfromStr2(const char* str
)
19 boost::multiprecision::cpp_bin_float_50
d1(str
);
20 boost::multiprecision::cpp_rational
result(d1
); // <--- eats CPU forever
26 // This example is OK.
28 boost::multiprecision::cpp_rational expected
= 1;
29 BOOST_ASSERT(expected
== rationalfromStr("1"));
31 // This example is OK.
33 boost::multiprecision::cpp_rational expected
= boost::multiprecision::cpp_rational(25) / boost::multiprecision::cpp_rational(10);
34 BOOST_ASSERT(expected
== rationalfromStr("2.5"));
36 // This example is OK.
38 boost::multiprecision::cpp_rational expected
= boost::multiprecision::cpp_rational(5) / boost::multiprecision::cpp_rational(1000);
39 BOOST_ASSERT(expected
== rationalfromStr("0.005"));
41 // This example is OK.
43 boost::multiprecision::cpp_rational expected
= 0;
44 BOOST_ASSERT(expected
== boost::multiprecision::cpp_rational("0")); // direct cpp_rational from str is OK.
46 // This example fails.
48 boost::multiprecision::cpp_rational expected
= 0;
50 BOOST_ASSERT(expected
== rationalfromStr("0")); // cpp_rational from cpp_dec_float_50 is not OK.
54 boost::multiprecision::cpp_rational expected
= 0;
56 BOOST_ASSERT(expected
== rationalfromStr2("0")); // cpp_rational from cpp_dec_float_50 is not OK.