1// Copyright Louis Dionne 2013-2022
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4
5#include <boost/hana/detail/type_foldl1.hpp>
6
7#include <type_traits>
8namespace hana = boost::hana;
9
10
11template <typename state, typename x>
12struct f {
13 struct type;
14};
15
16template <int>
17struct x;
18
19static_assert(std::is_same<
20 hana::detail::type_foldl1<f, x<0>>::type,
21 x<0>
22>{}, "");
23
24static_assert(std::is_same<
25 hana::detail::type_foldl1<f, x<0>, x<1>>::type,
26 f<x<0>, x<1>>::type
27>{}, "");
28
29static_assert(std::is_same<
30 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>>::type,
31 f<f<x<0>, x<1>>::type, x<2>>::type
32>{}, "");
33
34static_assert(std::is_same<
35 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>>::type,
36 f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type
37>{}, "");
38
39static_assert(std::is_same<
40 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>, x<4>>::type,
41 f<f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type, x<4>>::type
42>{}, "");
43
44static_assert(std::is_same<
45 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>, x<4>, x<5>>::type,
46 f<f<f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type, x<4>>::type, x<5>>::type
47>{}, "");
48
49static_assert(std::is_same<
50 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>, x<4>, x<5>, x<6>>::type,
51 f<f<f<f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type, x<4>>::type, x<5>>::type, x<6>>::type
52>{}, "");
53
54static_assert(std::is_same<
55 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>, x<4>, x<5>, x<6>, x<7>>::type,
56 f<f<f<f<f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type, x<4>>::type, x<5>>::type, x<6>>::type, x<7>>::type
57>{}, "");
58
59static_assert(std::is_same<
60 hana::detail::type_foldl1<f, x<0>, x<1>, x<2>, x<3>, x<4>, x<5>, x<6>, x<7>, x<8>>::type,
61 f<f<f<f<f<f<f<f<x<0>, x<1>>::type, x<2>>::type, x<3>>::type, x<4>>::type, x<5>>::type, x<6>>::type, x<7>>::type, x<8>>::type
62>{}, "");
63
64int main() { }
65

source code of boost/libs/hana/test/detail/type_foldl1.cpp