1 | //
|
---|
2 | // boost_multiprecision_error_demo.cpp
|
---|
3 | //
|
---|
4 | // Created by Jan Bouwer on 19/6/13.
|
---|
5 |
|
---|
6 |
|
---|
7 | #include <cassert>
|
---|
8 | #include <cstdint>
|
---|
9 | #include <limits>
|
---|
10 | #include <boost/multiprecision/cpp_int.hpp>
|
---|
11 |
|
---|
12 |
|
---|
13 | template<typename T, class I>
|
---|
14 | void test_boost_multiprecision()
|
---|
15 | {
|
---|
16 | T negMin = std::numeric_limits<T>::min();
|
---|
17 | I test1(negMin), test2( negMin + 1 );
|
---|
18 | --test2;
|
---|
19 |
|
---|
20 | assert( test1 == test2 ); // This fails on my platform for T = long
|
---|
21 | assert( test1 != 0 );
|
---|
22 | assert( test1 == negMin );
|
---|
23 | assert( test2 != 0 );
|
---|
24 | assert( test2 == negMin ); // This fails on my platform for T = long
|
---|
25 | }
|
---|
26 |
|
---|
27 | int main(int argc, const char * argv[])
|
---|
28 | {
|
---|
29 | test_boost_multiprecision<int64_t, boost::multiprecision::checked_cpp_int>(); // Fails on my platform
|
---|
30 | test_boost_multiprecision<int32_t, boost::multiprecision::checked_cpp_int>(); // Pass
|
---|
31 | test_boost_multiprecision<int16_t, boost::multiprecision::checked_cpp_int>(); // Pass
|
---|
32 |
|
---|
33 | test_boost_multiprecision<long, boost::multiprecision::cpp_int>(); // Fail on my platform
|
---|
34 |
|
---|
35 | // The following hold for my platform: x86_64-apple-darwin12.4.0,
|
---|
36 | // using: Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
|
---|
37 | // with: -std=c++11 -stdlib=libc++
|
---|
38 | // static_assert(std::numeric_limits<long long>::min() == std::numeric_limits<int64_t>::min(), "Ok");
|
---|
39 | // static_assert(std::numeric_limits<long>::min() == std::numeric_limits<int64_t>::min(), "Ok");
|
---|
40 | }
|
---|