]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multiprecision/test/test_checked_mixed_cpp_int.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / multiprecision / test / test_checked_mixed_cpp_int.cpp
1 ///////////////////////////////////////////////////////////////
2 // Copyright 2012 John Maddock. Distributed under the Boost
3 // Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
5
6 #ifdef _MSC_VER
7 #define _SCL_SECURE_NO_WARNINGS
8 #endif
9
10 #include <boost/multiprecision/cpp_int.hpp>
11 #include "test.hpp"
12
13 template <class T, class U>
14 void check_result_type(const T&, const U&)
15 {
16 BOOST_CHECK(0);
17 }
18
19 void check_result_type(const boost::multiprecision::checked_int1024_t&, const boost::multiprecision::checked_int1024_t&) {}
20
21 int main()
22 {
23 #ifndef BOOST_NO_EXCEPTIONS
24 try
25 {
26 #endif
27 typedef boost::multiprecision::checked_int1024_t big_type;
28 typedef boost::multiprecision::checked_int512_t small_type;
29 typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<32, 32, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void>, boost::multiprecision::et_off> little_type;
30
31 big_type big_val = (big_type(1) << 1000) + 1;
32 small_type small_val = 1;
33 little_type little_val = 1;
34
35 check_result_type(big_val, big_val + small_val);
36 check_result_type(big_val, big_val - small_val);
37 check_result_type(big_val, big_val * small_val);
38 check_result_type(big_val, big_val / small_val);
39 check_result_type(big_val, big_val | small_val);
40 check_result_type(big_val, big_val & small_val);
41 check_result_type(big_val, big_val ^ small_val);
42 check_result_type(big_val, small_val + big_val);
43 check_result_type(big_val, small_val - big_val);
44 check_result_type(big_val, small_val * big_val);
45 check_result_type(big_val, small_val / big_val);
46 check_result_type(big_val, small_val | big_val);
47 check_result_type(big_val, small_val & big_val);
48 check_result_type(big_val, small_val ^ big_val);
49
50 check_result_type(big_val, big_val + little_val);
51 check_result_type(big_val, big_val - little_val);
52 check_result_type(big_val, big_val * little_val);
53 check_result_type(big_val, big_val / little_val);
54 check_result_type(big_val, big_val | little_val);
55 check_result_type(big_val, big_val & little_val);
56 check_result_type(big_val, big_val ^ little_val);
57 check_result_type(big_val, little_val + big_val);
58 check_result_type(big_val, little_val - big_val);
59 check_result_type(big_val, little_val * big_val);
60 check_result_type(big_val, little_val / big_val);
61 check_result_type(big_val, little_val | big_val);
62 check_result_type(big_val, little_val & big_val);
63 check_result_type(big_val, little_val ^ big_val);
64
65 BOOST_CHECK_EQUAL(big_val == small_val, false);
66 BOOST_CHECK_EQUAL(big_val <= small_val, false);
67 BOOST_CHECK_EQUAL(big_val >= small_val, true);
68 BOOST_CHECK_EQUAL(big_val < small_val, false);
69 BOOST_CHECK_EQUAL(big_val > small_val, true);
70 BOOST_CHECK_EQUAL(big_val != small_val, true);
71 BOOST_CHECK_EQUAL(small_val == big_val, false);
72 BOOST_CHECK_EQUAL(small_val <= big_val, true);
73 BOOST_CHECK_EQUAL(small_val >= big_val, false);
74 BOOST_CHECK_EQUAL(small_val < big_val, true);
75 BOOST_CHECK_EQUAL(small_val > big_val, false);
76 BOOST_CHECK_EQUAL(small_val != big_val, true);
77
78 BOOST_CHECK_EQUAL(big_val == little_val, false);
79 BOOST_CHECK_EQUAL(big_val <= little_val, false);
80 BOOST_CHECK_EQUAL(big_val >= little_val, true);
81 BOOST_CHECK_EQUAL(big_val < little_val, false);
82 BOOST_CHECK_EQUAL(big_val > little_val, true);
83 BOOST_CHECK_EQUAL(big_val != little_val, true);
84 BOOST_CHECK_EQUAL(little_val == big_val, false);
85 BOOST_CHECK_EQUAL(little_val <= big_val, true);
86 BOOST_CHECK_EQUAL(little_val >= big_val, false);
87 BOOST_CHECK_EQUAL(little_val < big_val, true);
88 BOOST_CHECK_EQUAL(little_val > big_val, false);
89 BOOST_CHECK_EQUAL(little_val != big_val, true);
90 #ifndef BOOST_NO_EXCEPTIONS
91 }
92 catch (const std::exception& e)
93 {
94 std::cout << "Failed with unexpected exception: " << e.what() << std::endl;
95 return 1;
96 }
97 #endif
98 return boost::report_errors();
99 }