File: test_checked_mixed_cpp_int.cpp

package info (click to toggle)
boost1.62 1.62.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 686,420 kB
  • sloc: cpp: 2,609,004; xml: 972,558; ansic: 53,674; python: 32,437; sh: 8,829; asm: 3,071; cs: 2,121; makefile: 964; perl: 859; yacc: 472; php: 132; ruby: 94; f90: 55; sql: 13; csh: 6
file content (100 lines) | stat: -rw-r--r-- 4,178 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
///////////////////////////////////////////////////////////////
//  Copyright 2012 John Maddock. Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_

#ifdef _MSC_VER
#  define _SCL_SECURE_NO_WARNINGS
#endif

#include <boost/multiprecision/cpp_int.hpp>
#include "test.hpp"

template <class T, class U>
void check_result_type(const T&, const U&)
{
   BOOST_CHECK(0);
}

void check_result_type(const boost::multiprecision::checked_int1024_t&, const boost::multiprecision::checked_int1024_t&){}

int main()
{
#ifndef BOOST_NO_EXCEPTIONS
   try{
#endif
      typedef boost::multiprecision::checked_int1024_t big_type;
      typedef boost::multiprecision::checked_int512_t  small_type;
      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;

      big_type big_val = (big_type(1) << 1000) + 1;
      small_type small_val = 1;
      little_type little_val = 1;

      check_result_type(big_val, big_val + small_val);
      check_result_type(big_val, big_val - small_val);
      check_result_type(big_val, big_val * small_val);
      check_result_type(big_val, big_val / small_val);
      check_result_type(big_val, big_val | small_val);
      check_result_type(big_val, big_val & small_val);
      check_result_type(big_val, big_val ^ small_val);
      check_result_type(big_val, small_val + big_val);
      check_result_type(big_val, small_val - big_val);
      check_result_type(big_val, small_val * big_val);
      check_result_type(big_val, small_val / big_val);
      check_result_type(big_val, small_val | big_val);
      check_result_type(big_val, small_val & big_val);
      check_result_type(big_val, small_val ^ big_val);


      check_result_type(big_val, big_val + little_val);
      check_result_type(big_val, big_val - little_val);
      check_result_type(big_val, big_val * little_val);
      check_result_type(big_val, big_val / little_val);
      check_result_type(big_val, big_val | little_val);
      check_result_type(big_val, big_val & little_val);
      check_result_type(big_val, big_val ^ little_val);
      check_result_type(big_val, little_val + big_val);
      check_result_type(big_val, little_val - big_val);
      check_result_type(big_val, little_val * big_val);
      check_result_type(big_val, little_val / big_val);
      check_result_type(big_val, little_val | big_val);
      check_result_type(big_val, little_val & big_val);
      check_result_type(big_val, little_val ^ big_val);

      BOOST_CHECK_EQUAL(big_val == small_val, false);
      BOOST_CHECK_EQUAL(big_val <= small_val, false);
      BOOST_CHECK_EQUAL(big_val >= small_val, true);
      BOOST_CHECK_EQUAL(big_val < small_val, false);
      BOOST_CHECK_EQUAL(big_val > small_val, true);
      BOOST_CHECK_EQUAL(big_val != small_val, true);
      BOOST_CHECK_EQUAL(small_val == big_val, false);
      BOOST_CHECK_EQUAL(small_val <= big_val, true);
      BOOST_CHECK_EQUAL(small_val >= big_val, false);
      BOOST_CHECK_EQUAL(small_val < big_val, true);
      BOOST_CHECK_EQUAL(small_val > big_val, false);
      BOOST_CHECK_EQUAL(small_val != big_val, true);

      BOOST_CHECK_EQUAL(big_val == little_val, false);
      BOOST_CHECK_EQUAL(big_val <= little_val, false);
      BOOST_CHECK_EQUAL(big_val >= little_val, true);
      BOOST_CHECK_EQUAL(big_val < little_val, false);
      BOOST_CHECK_EQUAL(big_val > little_val, true);
      BOOST_CHECK_EQUAL(big_val != little_val, true);
      BOOST_CHECK_EQUAL(little_val == big_val, false);
      BOOST_CHECK_EQUAL(little_val <= big_val, true);
      BOOST_CHECK_EQUAL(little_val >= big_val, false);
      BOOST_CHECK_EQUAL(little_val < big_val, true);
      BOOST_CHECK_EQUAL(little_val > big_val, false);
      BOOST_CHECK_EQUAL(little_val != big_val, true);
#ifndef BOOST_NO_EXCEPTIONS
   }
   catch(const std::exception& e)
   {
      std::cout << "Failed with unexpected exception: " << e.what() << std::endl;
      return 1;
   }
#endif
   return boost::report_errors();
}