1 // Copyright (c) 2012 Robert Ramey
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
9 #include <boost/safe_numerics/safe_integer.hpp>
10 #include <boost/safe_numerics/native.hpp>
11 #include "test_divide_native_results.hpp"
14 using safe_t
= boost::safe_numerics::safe
<
16 boost::safe_numerics::native
18 #include "test_divide.hpp"
20 using namespace boost::mp11
;
22 #include <boost/mp11/list.hpp>
23 #include <boost/mp11/algorithm.hpp>
24 #include <boost/mp11/algorithm.hpp>
25 #include <boost/core/demangle.hpp>
29 static_assert(mp_is_list
<L
>(), "must be a list of integral constants");
31 test(bool b
= true) : m_error(b
) {}
36 void operator()(const T
&){
37 static_assert(mp_is_list
<T
>(), "must be a list of two integral constants");
38 constexpr size_t i1
= mp_first
<T
>(); // index of first argument
39 constexpr size_t i2
= mp_second
<T
>();// index of second argument
40 std::cout
<< i1
<< ',' << i2
<< ',';
41 using T1
= typename mp_at_c
<L
, i1
>::value_type
;
42 using T2
= typename mp_at_c
<L
, i2
>::value_type
;
43 m_error
&= test_divide(
44 mp_at_c
<L
, i1
>()(), // value of first argument
45 mp_at_c
<L
, i2
>()(), // value of second argument
46 boost::core::demangle(typeid(T1
).name()).c_str(),
47 boost::core::demangle(typeid(T2
).name()).c_str(),
48 test_division_native_result
[i1
][i2
]
54 test
<test_values
> rval(true);
56 using value_indices
= mp_iota_c
<mp_size
<test_values
>::value
>;
58 mp_product
<mp_list
, value_indices
, value_indices
>
61 std::cout
<< (rval
? "success!" : "failure") << std::endl
;