• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
7 #ifdef _MSC_VER
8 #define _SCL_SECURE_NO_WARNINGS
9 #endif
10 
11 #include <boost/detail/lightweight_test.hpp>
12 #include <boost/array.hpp>
13 #include "test.hpp"
14 
15 #include <boost/multiprecision/cpp_int.hpp>
16 
main()17 int main()
18 {
19    using namespace boost::multiprecision;
20    //
21    // Test interconversions between different precisions:
22    //
23    cpp_int                                                           i1(2);
24    int128_t                                                          i2(3);
25    int256_t                                                          i3(4);
26    number<cpp_int_backend<32, 32, signed_magnitude, checked, void> > i4(5);
27 
28    i1 = i3;
29    BOOST_TEST(i1 == 4);
30    i1 = i4;
31    BOOST_TEST(i1 == 5);
32 
33    i3 = -1234567;
34    i4 = -5677334;
35    i1 = i3;
36    BOOST_TEST(i1 == -1234567);
37    i1 = i4;
38    BOOST_TEST(i1 == -5677334);
39 
40    i3 = i2;
41    BOOST_TEST(i3 == 3);
42 
43    i3 = -1234567;
44 
45    uint128_t i5(i3);
46    BOOST_TEST(i5 == -1234567);
47 
48    int128_t i6(i4);
49    BOOST_TEST(i6 == -5677334);
50 
51    number<cpp_int_backend<32, 32, signed_magnitude, unchecked, void>, et_off> i7(i3);
52    BOOST_TEST(i7 == -1234567);
53 
54    int256_t i8(i6);
55    BOOST_TEST(i8 == -5677334);
56 
57    i7.assign(4.0);
58    BOOST_TEST(i7 == 4);
59 
60    number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> i9(-5677334);
61    i7 = i9;
62    BOOST_TEST(i7 == -5677334);
63    i7 = number<cpp_int_backend<32, 32, signed_magnitude, checked, void>, et_off>(i9);
64    BOOST_TEST(i7 == -5677334);
65 
66    i9 = static_cast<number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> >(i7);
67    BOOST_TEST(i9 == -5677334);
68 
69    ++i9;
70    i7 = i9;
71    BOOST_TEST(i7 == 1 - 5677334);
72 
73    return boost::report_errors();
74 }
75