Increase test/mp_fold.cpp coverage

This commit is contained in:
Peter Dimov
2023-03-24 04:14:54 +02:00
parent 0a0b5fb001
commit b937a27f7e

View File

@@ -21,7 +21,32 @@ struct X4 {};
template<class T1, class T2> struct F {};
using boost::mp11::mp_plus;
using boost::mp11::mp_size_t;
struct W
{
template<std::size_t N> void operator()( mp_size_t<N> ) const
{
using boost::mp11::mp_iota_c;
using boost::mp11::mp_fold;
using boost::mp11::mp_list;
using boost::mp11::mp_push_back;
using boost::mp11::mp_push_front;
using boost::mp11::mp_reverse;
using boost::mp11::mp_plus;
using L = mp_iota_c<N>;
using R1 = mp_fold<L, mp_list<>, mp_push_back>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R1, L>));
using R2 = mp_fold<L, mp_list<>, mp_push_front>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R2, mp_reverse<L>>));
using R3 = mp_fold<L, mp_size_t<0>, mp_plus>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R3, mp_size_t<N*(N-1)/2>>));
}
};
int main()
{
@@ -56,24 +81,18 @@ int main()
BOOST_TEST_TRAIT_TRUE((std::is_same<mp_fold<std::tuple<X1, X2, X3, X4>, mp_list<>, mp_push_front>, mp_list<X4, X3, X2, X1>>));
}
using boost::mp11::mp_for_each;
using boost::mp11::mp_iota_c;
using boost::mp11::mp_reverse;
using boost::mp11::mp_size_t;
{
int const N = 37;
#if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, <= 1800 )
using L = mp_iota_c<N>;
W()( mp_size_t<37>() );
using R1 = mp_fold<L, mp_list<>, mp_push_back>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R1, L>));
#else
using R2 = mp_fold<L, mp_list<>, mp_push_front>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R2, mp_reverse<L>>));
mp_for_each< mp_iota_c<38> >( W{} );
using R3 = mp_fold<L, mp_size_t<0>, mp_plus>;
BOOST_TEST_TRAIT_TRUE((std::is_same<R3, mp_size_t<N*(N-1)/2>>));
}
#endif
return boost::report_errors();
}