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
7 #define _SCL_SECURE_NO_WARNINGS
10 #include <boost/multiprecision/cpp_int.hpp>
13 template <class T
, class U
>
14 void check_result_type(const T
&, const U
&)
19 void check_result_type(const boost::multiprecision::checked_int1024_t
&, const boost::multiprecision::checked_int1024_t
&) {}
23 #ifndef BOOST_NO_EXCEPTIONS
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
;
31 big_type big_val
= (big_type(1) << 1000) + 1;
32 small_type small_val
= 1;
33 little_type little_val
= 1;
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
);
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
);
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);
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
92 catch (const std::exception
& e
)
94 std::cout
<< "Failed with unexpected exception: " << e
.what() << std::endl
;
98 return boost::report_errors();