]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mp11/test/mp_fold.cpp
2 // Copyright 2015 Peter Dimov.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
10 #include <boost/mp11/algorithm.hpp>
11 #include <boost/mp11/list.hpp>
12 #include <boost/mp11/integral.hpp>
13 #include <boost/core/lightweight_test_trait.hpp>
14 #include <boost/config.hpp>
15 #include <boost/detail/workaround.hpp>
16 #include <type_traits>
24 template<class T1
, class T2
> struct F
{};
26 using boost::mp11::mp_plus
;
30 using boost::mp11::mp_list
;
31 using boost::mp11::mp_fold
;
34 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<mp_list
<>, void, F
>, void>));
35 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<mp_list
<X1
>, void, F
>, F
<void, X1
>>));
36 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<mp_list
<X1
, X2
>, void, F
>, F
<F
<void, X1
>, X2
>>));
37 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<mp_list
<X1
, X2
, X3
>, void, F
>, F
<F
<F
<void, X1
>, X2
>, X3
>>));
38 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<mp_list
<X1
, X2
, X3
, X4
>, void, F
>, F
<F
<F
<F
<void, X1
>, X2
>, X3
>, X4
>>));
42 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<>, void, F
>, void>));
43 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<X1
>, void, F
>, F
<void, X1
>>));
44 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<X1
, X2
>, void, F
>, F
<F
<void, X1
>, X2
>>));
45 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<X1
, X2
, X3
>, void, F
>, F
<F
<F
<void, X1
>, X2
>, X3
>>));
46 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<X1
, X2
, X3
, X4
>, void, F
>, F
<F
<F
<F
<void, X1
>, X2
>, X3
>, X4
>>));
49 using boost::mp11::mp_push_back
;
52 BOOST_TEST_TRAIT_TRUE((std::is_same
<mp_fold
<std::tuple
<X1
, X2
, X3
, X4
>, mp_list
<>, mp_push_back
>, mp_list
<X1
, X2
, X3
, X4
>>));
55 using boost::mp11::mp_push_front
;
58 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
>>));
61 using boost::mp11::mp_iota_c
;
62 using boost::mp11::mp_reverse
;
63 using boost::mp11::mp_size_t
;
68 using L
= mp_iota_c
<N
>;
70 using R1
= mp_fold
<L
, mp_list
<>, mp_push_back
>;
71 BOOST_TEST_TRAIT_TRUE((std::is_same
<R1
, L
>));
73 using R2
= mp_fold
<L
, mp_list
<>, mp_push_front
>;
74 BOOST_TEST_TRAIT_TRUE((std::is_same
<R2
, mp_reverse
<L
>>));
76 using R3
= mp_fold
<L
, mp_size_t
<0>, mp_plus
>;
77 BOOST_TEST_TRAIT_TRUE((std::is_same
<R3
, mp_size_t
<N
*(N
-1)/2>>));
80 return boost::report_errors();