]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multiprecision/test/issue_13148.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / 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)
5
6 #include <boost/multiprecision/cpp_int.hpp>
7 #include <boost/multiprecision/cpp_dec_float.hpp>
8 #include <boost/multiprecision/cpp_bin_float.hpp>
9
10 boost::multiprecision::cpp_rational rationalfromStr(const char* str)
11 {
12 boost::multiprecision::cpp_dec_float_50 d1(str);
13 boost::multiprecision::cpp_rational result(d1); // <--- eats CPU forever
14 return result;
15 }
16
17 boost::multiprecision::cpp_rational rationalfromStr2(const char* str)
18 {
19 boost::multiprecision::cpp_bin_float_50 d1(str);
20 boost::multiprecision::cpp_rational result(d1); // <--- eats CPU forever
21 return result;
22 }
23
24 int main()
25 {
26 // This example is OK.
27 {
28 boost::multiprecision::cpp_rational expected = 1;
29 BOOST_ASSERT(expected == rationalfromStr("1"));
30 }
31 // This example is OK.
32 {
33 boost::multiprecision::cpp_rational expected = boost::multiprecision::cpp_rational(25) / boost::multiprecision::cpp_rational(10);
34 BOOST_ASSERT(expected == rationalfromStr("2.5"));
35 }
36 // This example is OK.
37 {
38 boost::multiprecision::cpp_rational expected = boost::multiprecision::cpp_rational(5) / boost::multiprecision::cpp_rational(1000);
39 BOOST_ASSERT(expected == rationalfromStr("0.005"));
40 }
41 // This example is OK.
42 {
43 boost::multiprecision::cpp_rational expected = 0;
44 BOOST_ASSERT(expected == boost::multiprecision::cpp_rational("0")); // direct cpp_rational from str is OK.
45 }
46 // This example fails.
47 {
48 boost::multiprecision::cpp_rational expected = 0;
49 // reachable code
50 BOOST_ASSERT(expected == rationalfromStr("0")); // cpp_rational from cpp_dec_float_50 is not OK.
51 // unreachable code
52 }
53 {
54 boost::multiprecision::cpp_rational expected = 0;
55 // reacheble code
56 BOOST_ASSERT(expected == rationalfromStr2("0")); // cpp_rational from cpp_dec_float_50 is not OK.
57 // unreachable code
58 }
59 return 0;
60 }