]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/test/ext/boost/mpl/vector/iterable.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / hana / test / ext / boost / mpl / vector / iterable.cpp
CommitLineData
b32b8144 1// Copyright Louis Dionne 2013-2017
7c673cae
FG
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/ext/boost/mpl/vector.hpp>
6
7#include <boost/hana/assert.hpp>
8#include <boost/hana/drop_front_exactly.hpp>
9#include <boost/hana/equal.hpp>
10#include <boost/hana/front.hpp>
11#include <boost/hana/is_empty.hpp>
12#include <boost/hana/not.hpp>
13#include <boost/hana/tuple.hpp>
14#include <boost/hana/type.hpp>
15
16#include <laws/iterable.hpp>
17
18#include <boost/mpl/vector.hpp>
19namespace hana = boost::hana;
20namespace mpl = boost::mpl;
21
22
23struct t1; struct t2; struct t3; struct t4;
24
25int main() {
26 // front
27 {
28 BOOST_HANA_CONSTANT_CHECK(hana::equal(
29 hana::front(mpl::vector<t1>{}),
30 hana::type_c<t1>
31 ));
32 BOOST_HANA_CONSTANT_CHECK(hana::equal(
33 hana::front(mpl::vector<t1, t2>{}),
34 hana::type_c<t1>
35 ));
36 BOOST_HANA_CONSTANT_CHECK(hana::equal(
37 hana::front(mpl::vector<t1, t2, t3>{}),
38 hana::type_c<t1>
39 ));
40 }
41
42 // drop_front_exactly
43 {
44 BOOST_HANA_CONSTANT_CHECK(hana::equal(
45 hana::drop_front_exactly(mpl::vector<t1>{}),
46 mpl::vector<>{}
47 ));
48 BOOST_HANA_CONSTANT_CHECK(hana::equal(
49 hana::drop_front_exactly(mpl::vector<t1, t2>{}),
50 mpl::vector<t2>{}
51 ));
52 BOOST_HANA_CONSTANT_CHECK(hana::equal(
53 hana::drop_front_exactly(mpl::vector<t1, t2, t3>{}),
54 mpl::vector<t2, t3>{}
55 ));
56
57
58 BOOST_HANA_CONSTANT_CHECK(hana::equal(
59 hana::drop_front_exactly(mpl::vector<t1, t2, t3>{}, hana::size_c<2>),
60 mpl::vector<t3>{}
61 ));
62
63 BOOST_HANA_CONSTANT_CHECK(hana::equal(
64 hana::drop_front_exactly(mpl::vector<t1, t2, t3, t4>{}, hana::size_c<2>),
65 mpl::vector<t3, t4>{}
66 ));
67
68 BOOST_HANA_CONSTANT_CHECK(hana::equal(
69 hana::drop_front_exactly(mpl::vector<t1, t2, t3, t4>{}, hana::size_c<3>),
70 mpl::vector<t4>{}
71 ));
72 }
73
74 // is_empty
75 {
76 BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::vector<>{}));
77 BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::vector0<>{}));
78
79 BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector<t1>{})));
80 BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector1<t1>{})));
81
82 BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector<t1, t2>{})));
83 BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector2<t1, t2>{})));
84 }
85
86 // laws
87 auto vectors = hana::make_tuple(
88 mpl::vector<>{}
89 , mpl::vector<t1>{}
90 , mpl::vector<t1, t2>{}
91 , mpl::vector<t1, t2, t3>{}
92 , mpl::vector<t1, t2, t3, t4>{}
93 );
94 hana::test::TestIterable<hana::ext::boost::mpl::vector_tag>{vectors};
95}