]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/test/test_nothrow_cpp_rational.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / multiprecision / test / test_nothrow_cpp_rational.cpp
CommitLineData
7c673cae
FG
1///////////////////////////////////////////////////////////////////////////////
2// Copyright 2015 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>
1e59de90 7#include <type_traits>
7c673cae 8
92f5a8d4 9typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::int128_t::backend_type> > rat128_t;
7c673cae 10typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::uint128_t::backend_type> > urat128_t;
92f5a8d4 11typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::int512_t::backend_type> > rat512_t;
7c673cae
FG
12typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::uint512_t::backend_type> > urat512_t;
13
92f5a8d4 14typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int128_t::backend_type> > checked_rat128_t;
7c673cae 15typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_t::backend_type> > checked_urat128_t;
92f5a8d4 16typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int512_t::backend_type> > checked_rat512_t;
7c673cae
FG
17typedef boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint512_t::backend_type> > checked_urat512_t;
18
7c673cae
FG
19//
20// Move construct:
21//
1e59de90
TL
22static_assert(std::is_nothrow_move_constructible<boost::multiprecision::cpp_rational>::value, "is_nothrow_move_constructible test");
23static_assert(std::is_nothrow_move_constructible<rat128_t>::value, "is_nothrow_move_constructible test");
24static_assert(std::is_nothrow_move_constructible<checked_rat128_t>::value, "is_nothrow_move_constructible test");
25static_assert(std::is_nothrow_move_constructible<urat128_t>::value, "is_nothrow_move_constructible test");
26static_assert(std::is_nothrow_move_constructible<checked_urat128_t>::value, "is_nothrow_move_constructible test");
27static_assert(std::is_nothrow_move_constructible<rat512_t>::value, "is_nothrow_move_constructible test");
28static_assert(std::is_nothrow_move_constructible<checked_rat512_t>::value, "is_nothrow_move_constructible test");
29static_assert(std::is_nothrow_move_constructible<urat512_t>::value, "is_nothrow_move_constructible test");
30static_assert(std::is_nothrow_move_constructible<checked_urat512_t>::value, "is_nothrow_move_constructible test");
7c673cae
FG
31//
32// Move assign:
33//
1e59de90
TL
34static_assert(std::is_nothrow_move_assignable<boost::multiprecision::cpp_rational>::value, "is_nothrow_move_assignable test");
35static_assert(std::is_nothrow_move_assignable<rat128_t>::value, "is_nothrow_move_assignable test");
36static_assert(std::is_nothrow_move_assignable<checked_rat128_t>::value, "is_nothrow_move_assignable test");
37static_assert(std::is_nothrow_move_assignable<urat128_t>::value, "is_nothrow_move_assignable test");
38static_assert(std::is_nothrow_move_assignable<checked_urat128_t>::value, "is_nothrow_move_assignable test");
39static_assert(std::is_nothrow_move_assignable<rat512_t>::value, "is_nothrow_move_assignable test");
40static_assert(std::is_nothrow_move_assignable<checked_rat512_t>::value, "is_nothrow_move_assignable test");
41static_assert(std::is_nothrow_move_assignable<urat512_t>::value, "is_nothrow_move_assignable test");
42static_assert(std::is_nothrow_move_assignable<checked_urat512_t>::value, "is_nothrow_move_assignable test");
7c673cae
FG
43
44#if 0
45//
46// Everything below could/should be made to work, given modifications to Boost.Rational
47//
48
49
50//
51// Construct:
52//
53#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
1e59de90
TL
54static_assert(boost::has_nothrow_constructor<boost::multiprecision::cpp_rational>::value);
55static_assert(boost::has_nothrow_constructor<rat128_t>::value);
56static_assert(boost::has_nothrow_constructor<checked_rat128_t>::value);
57static_assert(boost::has_nothrow_constructor<urat128_t>::value);
58static_assert(boost::has_nothrow_constructor<checked_urat128_t>::value);
59static_assert(boost::has_nothrow_constructor<rat512_t>::value);
60static_assert(boost::has_nothrow_constructor<checked_rat512_t>::value);
61static_assert(boost::has_nothrow_constructor<urat512_t>::value);
62static_assert(boost::has_nothrow_constructor<checked_urat512_t>::value);
7c673cae
FG
63#endif
64//
65// Copy construct:
66//
67#ifdef BOOST_HAS_NOTHROW_COPY
1e59de90
TL
68static_assert(!boost::has_nothrow_copy<boost::multiprecision::cpp_rational>::value);
69static_assert(boost::has_nothrow_copy<rat128_t>::value);
70static_assert(boost::has_nothrow_copy<checked_rat128_t>::value);
71static_assert(boost::has_nothrow_copy<urat128_t>::value);
72static_assert(boost::has_nothrow_copy<checked_urat128_t>::value);
73static_assert(boost::has_nothrow_copy<rat512_t>::value);
74static_assert(boost::has_nothrow_copy<checked_rat512_t>::value);
75static_assert(boost::has_nothrow_copy<urat512_t>::value);
76static_assert(boost::has_nothrow_copy<checked_urat512_t>::value);
7c673cae
FG
77#endif
78//
79// Assign:
80//
81#ifdef BOOST_HAS_NOTHROW_ASSIGN
1e59de90
TL
82static_assert(!boost::has_nothrow_assign<boost::multiprecision::cpp_rational>::value);
83static_assert(boost::has_nothrow_assign<rat128_t>::value);
84static_assert(boost::has_nothrow_assign<checked_rat128_t>::value);
85static_assert(boost::has_nothrow_assign<urat128_t>::value);
86static_assert(boost::has_nothrow_assign<checked_urat128_t>::value);
87static_assert(boost::has_nothrow_assign<rat512_t>::value);
88static_assert(boost::has_nothrow_assign<checked_rat512_t>::value);
89static_assert(boost::has_nothrow_assign<urat512_t>::value);
90static_assert(boost::has_nothrow_assign<checked_urat512_t>::value);
7c673cae
FG
91#endif
92//
93// Construct from int:
94//
1e59de90
TL
95static_assert(noexcept(boost::multiprecision::cpp_rational(std::declval<boost::multiprecision::signed_limb_type>())));
96static_assert(noexcept(rat128_t(std::declval<boost::multiprecision::signed_limb_type>())));
97static_assert(noexcept(checked_rat128_t(std::declval<boost::multiprecision::signed_limb_type>())));
98static_assert(noexcept(urat128_t(std::declval<boost::multiprecision::signed_limb_type>())));
99static_assert(!noexcept(checked_urat128_t(std::declval<boost::multiprecision::signed_limb_type>())));
100static_assert(noexcept(rat512_t(std::declval<boost::multiprecision::signed_limb_type>())));
101static_assert(noexcept(checked_rat512_t(std::declval<boost::multiprecision::signed_limb_type>())));
102static_assert(noexcept(urat512_t(std::declval<boost::multiprecision::signed_limb_type>())));
103static_assert(!noexcept(checked_urat512_t(std::declval<boost::multiprecision::signed_limb_type>())));
7c673cae
FG
104//
105// Construct from unsigned int:
106//
1e59de90
TL
107static_assert(noexcept(boost::multiprecision::cpp_rational(std::declval<boost::multiprecision::limb_type>())));
108static_assert(noexcept(rat128_t(std::declval<boost::multiprecision::limb_type>())));
109static_assert(noexcept(checked_rat128_t(std::declval<boost::multiprecision::limb_type>())));
110static_assert(noexcept(urat128_t(std::declval<boost::multiprecision::limb_type>())));
111static_assert(noexcept(checked_urat128_t(std::declval<boost::multiprecision::limb_type>())));
112static_assert(noexcept(rat512_t(std::declval<boost::multiprecision::limb_type>())));
113static_assert(noexcept(checked_rat512_t(std::declval<boost::multiprecision::limb_type>())));
114static_assert(noexcept(urat512_t(std::declval<boost::multiprecision::limb_type>())));
115static_assert(noexcept(checked_urat512_t(std::declval<boost::multiprecision::limb_type>())));
7c673cae
FG
116//
117// Assign from int:
118//
1e59de90
TL
119static_assert(noexcept(std::declval<boost::multiprecision::cpp_rational>() = std::declval<boost::multiprecision::signed_limb_type>()));
120static_assert(noexcept(std::declval<rat128_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
121static_assert(noexcept(std::declval<checked_rat128_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
122static_assert(noexcept(std::declval<urat128_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
123static_assert(!noexcept(std::declval<checked_urat128_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
124static_assert(noexcept(std::declval<rat512_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
125static_assert(noexcept(std::declval<checked_rat512_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
126static_assert(noexcept(std::declval<urat512_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
127static_assert(!noexcept(std::declval<checked_urat512_t>() = std::declval<boost::multiprecision::signed_limb_type>()));
7c673cae
FG
128//
129// Assign from unsigned int:
130//
1e59de90
TL
131static_assert(noexcept(std::declval<boost::multiprecision::cpp_rational>() = std::declval<boost::multiprecision::limb_type>()));
132static_assert(noexcept(std::declval<rat128_t>() = std::declval<boost::multiprecision::limb_type>()));
133static_assert(noexcept(std::declval<checked_rat128_t>() = std::declval<boost::multiprecision::limb_type>()));
134static_assert(noexcept(std::declval<urat128_t>() = std::declval<boost::multiprecision::limb_type>()));
135static_assert(noexcept(std::declval<checked_urat128_t>() = std::declval<boost::multiprecision::limb_type>()));
136static_assert(noexcept(std::declval<rat512_t>() = std::declval<boost::multiprecision::limb_type>()));
137static_assert(noexcept(std::declval<checked_rat512_t>() = std::declval<boost::multiprecision::limb_type>()));
138static_assert(noexcept(std::declval<urat512_t>() = std::declval<boost::multiprecision::limb_type>()));
139static_assert(noexcept(std::declval<checked_urat512_t>() = std::declval<boost::multiprecision::limb_type>()));
7c673cae
FG
140
141#if defined(BOOST_LITTLE_ENDIAN)
142//
143// Construct from int:
144//
1e59de90
TL
145static_assert(noexcept(boost::multiprecision::cpp_rational(std::declval<boost::multiprecision::signed_double_limb_type>())));
146static_assert(noexcept(rat128_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
147static_assert(noexcept(checked_rat128_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
148static_assert(noexcept(urat128_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
149static_assert(!noexcept(checked_urat128_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
150static_assert(noexcept(rat512_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
151static_assert(noexcept(checked_rat512_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
152static_assert(noexcept(urat512_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
153static_assert(!noexcept(checked_urat512_t(std::declval<boost::multiprecision::signed_double_limb_type>())));
7c673cae
FG
154//
155// Construct from unsigned int:
156//
1e59de90
TL
157static_assert(noexcept(boost::multiprecision::cpp_rational(std::declval<boost::multiprecision::double_limb_type>())));
158static_assert(noexcept(rat128_t(std::declval<boost::multiprecision::double_limb_type>())));
159static_assert(noexcept(checked_rat128_t(std::declval<boost::multiprecision::double_limb_type>())));
160static_assert(noexcept(urat128_t(std::declval<boost::multiprecision::double_limb_type>())));
161static_assert(noexcept(checked_urat128_t(std::declval<boost::multiprecision::double_limb_type>())));
162static_assert(noexcept(rat512_t(std::declval<boost::multiprecision::double_limb_type>())));
163static_assert(noexcept(checked_rat512_t(std::declval<boost::multiprecision::double_limb_type>())));
164static_assert(noexcept(urat512_t(std::declval<boost::multiprecision::double_limb_type>())));
165static_assert(noexcept(checked_urat512_t(std::declval<boost::multiprecision::double_limb_type>())));
7c673cae
FG
166//
167// Assign from int:
168//
1e59de90
TL
169static_assert(noexcept(std::declval<boost::multiprecision::cpp_rational>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
170static_assert(noexcept(std::declval<rat128_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
171static_assert(noexcept(std::declval<checked_rat128_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
172static_assert(noexcept(std::declval<urat128_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
173static_assert(!noexcept(std::declval<checked_urat128_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
174static_assert(noexcept(std::declval<rat512_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
175static_assert(noexcept(std::declval<checked_rat512_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
176static_assert(noexcept(std::declval<urat512_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
177static_assert(!noexcept(std::declval<checked_urat512_t>() = std::declval<boost::multiprecision::signed_double_limb_type>()));
7c673cae
FG
178//
179// Assign from unsigned int:
180//
1e59de90
TL
181static_assert(noexcept(std::declval<boost::multiprecision::cpp_rational>() = std::declval<boost::multiprecision::double_limb_type>()));
182static_assert(noexcept(std::declval<rat128_t>() = std::declval<boost::multiprecision::double_limb_type>()));
183static_assert(noexcept(std::declval<checked_rat128_t>() = std::declval<boost::multiprecision::double_limb_type>()));
184static_assert(noexcept(std::declval<urat128_t>() = std::declval<boost::multiprecision::double_limb_type>()));
185static_assert(noexcept(std::declval<checked_urat128_t>() = std::declval<boost::multiprecision::double_limb_type>()));
186static_assert(noexcept(std::declval<rat512_t>() = std::declval<boost::multiprecision::double_limb_type>()));
187static_assert(noexcept(std::declval<checked_rat512_t>() = std::declval<boost::multiprecision::double_limb_type>()));
188static_assert(noexcept(std::declval<urat512_t>() = std::declval<boost::multiprecision::double_limb_type>()));
189static_assert(noexcept(std::declval<checked_urat512_t>() = std::declval<boost::multiprecision::double_limb_type>()));
7c673cae
FG
190
191#endif
192#endif // little endian