123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- // (C) Copyright John Maddock 2019.
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #include "constexpr_arithmetric_test.hpp"
- #include "../performance/arithmetic_backend.hpp"
- int main()
- {
- typedef boost::multiprecision::number<boost::multiprecision::backends::arithmetic_backend<long long>, boost::multiprecision::et_off> int_backend;
- typedef boost::multiprecision::number<boost::multiprecision::backends::arithmetic_backend<unsigned long long>, boost::multiprecision::et_off> unsigned_backend;
- typedef boost::multiprecision::number<boost::multiprecision::backends::arithmetic_backend<long long>, boost::multiprecision::et_on> int_backend_et;
- typedef boost::multiprecision::number<boost::multiprecision::backends::arithmetic_backend<unsigned long long>, boost::multiprecision::et_on> unsigned_backend_et;
- {
- constexpr int_backend a(22);
- constexpr unsigned_backend c(22);
- constexpr int_backend b = test_constexpr_add_subtract(a);
- constexpr unsigned_backend d = test_constexpr_add_subtract(c);
- constexpr long long llv = (long long)b;
- static_assert(b == -108);
- static_assert(d == 554);
- }
- {
- constexpr int_backend a(22);
- constexpr unsigned_backend c(22);
- constexpr int_backend b = test_constexpr_mul_divide(a);
- constexpr unsigned_backend d = test_constexpr_mul_divide(c);
- static_assert(b == 22);
- static_assert(d == 22);
- }
- {
- constexpr int_backend a(22);
- constexpr unsigned_backend c(22);
- constexpr int_backend b = test_constexpr_bitwise(a);
- constexpr unsigned_backend d = test_constexpr_bitwise(c);
- #ifdef BOOST_HAS_INT128
- static_assert(b == 230);
- static_assert(d == 120);
- #else
- static_assert(b == 210);
- static_assert(d == 106);
- #endif
- }
- {
- constexpr int_backend a(22);
- constexpr unsigned_backend c(22);
- constexpr int_backend b = test_constexpr_logical(a);
- constexpr unsigned_backend d = test_constexpr_logical(c);
- static_assert(b == 82);
- static_assert(d == 82);
- }
- {
- constexpr int_backend a(22);
- constexpr unsigned_backend c(22);
- constexpr int_backend b = test_constexpr_compare(a);
- constexpr unsigned_backend d = test_constexpr_compare(c);
- static_assert(b == 95);
- static_assert(d == 95);
- }
- //
- // Over again with expression templates turned on:
- //
- {
- constexpr int_backend_et a(22);
- constexpr unsigned_backend_et c(22);
- constexpr int_backend_et b = test_constexpr_add_subtract(a);
- constexpr unsigned_backend_et d = test_constexpr_add_subtract(c);
- static_assert(b == -108);
- static_assert(d == 554);
- }
- {
- constexpr int_backend_et a(22);
- constexpr unsigned_backend_et c(22);
- constexpr int_backend_et b = test_constexpr_mul_divide(a);
- constexpr unsigned_backend_et d = test_constexpr_mul_divide(c);
- static_assert(b == 22);
- static_assert(d == 22);
- }
- {
- constexpr int_backend_et a(22);
- constexpr unsigned_backend_et c(22);
- constexpr int_backend_et b = test_constexpr_bitwise(a);
- constexpr unsigned_backend_et d = test_constexpr_bitwise(c);
- #ifdef BOOST_HAS_INT128
- static_assert(b == 230);
- static_assert(d == 120);
- #else
- static_assert(b == 210);
- static_assert(d == 106);
- #endif
- }
- {
- constexpr int_backend_et a(22);
- constexpr unsigned_backend_et c(22);
- constexpr int_backend_et b = test_constexpr_logical(a);
- constexpr unsigned_backend_et d = test_constexpr_logical(c);
- static_assert(b == 82);
- static_assert(d == 82);
- }
- {
- constexpr int_backend_et a(22);
- constexpr unsigned_backend_et c(22);
- constexpr int_backend_et b = test_constexpr_compare(a);
- constexpr unsigned_backend_et d = test_constexpr_compare(c);
- static_assert(b == 95);
- static_assert(d == 95);
- }
- std::cout << "Done!" << std::endl;
- }
|