test_cpp_int_conv.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. #include <boost/detail/lightweight_test.hpp>
  10. #include <boost/array.hpp>
  11. #include "test.hpp"
  12. #include <boost/multiprecision/cpp_int.hpp>
  13. int main()
  14. {
  15. using namespace boost::multiprecision;
  16. //
  17. // Test interconversions between different precisions:
  18. //
  19. cpp_int i1(2);
  20. int128_t i2(3);
  21. int256_t i3(4);
  22. number<cpp_int_backend<32, 32, signed_magnitude, checked, void> > i4(5);
  23. i1 = i3;
  24. BOOST_TEST(i1 == 4);
  25. i1 = i4;
  26. BOOST_TEST(i1 == 5);
  27. i3 = -1234567;
  28. i4 = -5677334;
  29. i1 = i3;
  30. BOOST_TEST(i1 == -1234567);
  31. i1 = i4;
  32. BOOST_TEST(i1 == -5677334);
  33. i3 = i2;
  34. BOOST_TEST(i3 == 3);
  35. i3 = -1234567;
  36. uint128_t i5(i3);
  37. BOOST_TEST(i5 == -1234567);
  38. int128_t i6(i4);
  39. BOOST_TEST(i6 == -5677334);
  40. number<cpp_int_backend<32, 32, signed_magnitude, unchecked, void>, et_off> i7(i3);
  41. BOOST_TEST(i7 == -1234567);
  42. int256_t i8(i6);
  43. BOOST_TEST(i8 == -5677334);
  44. i7.assign(4.0);
  45. BOOST_TEST(i7 == 4);
  46. number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> i9(-5677334);
  47. i7 = i9;
  48. BOOST_TEST(i7 == -5677334);
  49. i7 = number<cpp_int_backend<32, 32, signed_magnitude, checked, void>, et_off>(i9);
  50. BOOST_TEST(i7 == -5677334);
  51. i9 = static_cast<number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> >(i7);
  52. BOOST_TEST(i9 == -5677334);
  53. ++i9;
  54. i7 = i9;
  55. BOOST_TEST(i7 == 1 - 5677334);
  56. return boost::report_errors();
  57. }