multiprecision/test/constexpr_test_arithmetic_backend.cpp

116 lines
4.1 KiB
C++

// (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;
}