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/automatic.hpp>
11 #include "test_modulus_automatic_results.hpp"
14 using safe_t
= boost::safe_numerics::safe
<
16 boost::safe_numerics::automatic
18 #include "test_modulus.hpp"
20 #include <boost/mp11/list.hpp>
21 #include <boost/mp11/algorithm.hpp>
22 #include <boost/core/demangle.hpp>
24 using namespace boost::mp11
;
28 static_assert(mp_is_list
<L
>(), "must be a list of integral constants");
30 test(bool b
= true) : m_error(b
) {}
35 void operator()(const T
&){
36 static_assert(mp_is_list
<T
>(), "must be a list of two integral constants");
37 constexpr size_t i1
= mp_first
<T
>(); // index of first argument
38 constexpr size_t i2
= mp_second
<T
>();// index of second argument
39 std::cout
<< i1
<< ',' << i2
<< ',';
40 using T1
= typename mp_at_c
<L
, i1
>::value_type
;
41 using T2
= typename mp_at_c
<L
, i2
>::value_type
;
42 m_error
&= test_modulus
<T1
, T2
>(
43 mp_at_c
<L
, i1
>()(), // value of first argument
44 mp_at_c
<L
, i2
>()(), // value of second argument
45 boost::core::demangle(typeid(T1
).name()).c_str(),
46 boost::core::demangle(typeid(T2
).name()).c_str(),
47 test_modulus_automatic_result
[i1
][i2
]
53 test
<test_values
> rval(true);
55 using value_indices
= mp_iota_c
<mp_size
<test_values
>::value
>;
57 mp_product
<mp_list
, value_indices
, value_indices
>
60 std::cout
<< (rval
? "success!" : "failure") << std::endl
;