]>
Commit | Line | Data |
---|---|---|
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 | #ifndef BOOST_HANA_TEST_AUTO_DROP_FRONT_HPP | |
6 | #define BOOST_HANA_TEST_AUTO_DROP_FRONT_HPP | |
7 | ||
8 | #include <boost/hana/assert.hpp> | |
9 | #include <boost/hana/drop_front.hpp> | |
10 | #include <boost/hana/drop_front_exactly.hpp> | |
11 | #include <boost/hana/equal.hpp> | |
12 | #include <boost/hana/integral_constant.hpp> | |
13 | ||
14 | #include <laws/base.hpp> | |
15 | #include "test_case.hpp" | |
16 | ||
17 | ||
18 | TestCase test_drop_front{[]{ | |
19 | namespace hana = boost::hana; | |
20 | using hana::test::ct_eq; | |
21 | ||
22 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
23 | hana::drop_front(MAKE_TUPLE(), hana::size_c<0>), | |
24 | MAKE_TUPLE() | |
25 | )); | |
26 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
27 | hana::drop_front(MAKE_TUPLE(), hana::size_c<1>), | |
28 | MAKE_TUPLE() | |
29 | )); | |
30 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
31 | hana::drop_front(MAKE_TUPLE(), hana::size_c<2>), | |
32 | MAKE_TUPLE() | |
33 | )); | |
34 | ||
35 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
36 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<0>), | |
37 | MAKE_TUPLE(ct_eq<0>{}) | |
38 | )); | |
39 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
40 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>), | |
41 | MAKE_TUPLE() | |
42 | )); | |
43 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
44 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<2>), | |
45 | MAKE_TUPLE() | |
46 | )); | |
47 | ||
48 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
49 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>), | |
50 | MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}) | |
51 | )); | |
52 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
53 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>), | |
54 | MAKE_TUPLE(ct_eq<1>{}) | |
55 | )); | |
56 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
57 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<2>), | |
58 | MAKE_TUPLE() | |
59 | )); | |
60 | ||
11fdf7f2 TL |
61 | BOOST_HANA_CONSTANT_CHECK(hana::equal( |
62 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<0>), | |
63 | MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}) | |
64 | )); | |
65 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
66 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<1>), | |
67 | MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}) | |
68 | )); | |
69 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
70 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<2>), | |
71 | MAKE_TUPLE(ct_eq<2>{}) | |
72 | )); | |
73 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
74 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<3>), | |
75 | MAKE_TUPLE() | |
76 | )); | |
77 | ||
7c673cae FG |
78 | // make sure hana::drop_front(xs) == hana::drop_front(xs, size_c<1>) |
79 | BOOST_HANA_CHECK(hana::equal( | |
80 | hana::drop_front(MAKE_TUPLE()), | |
81 | hana::drop_front(MAKE_TUPLE(), hana::size_c<1>) | |
82 | )); | |
83 | ||
84 | BOOST_HANA_CHECK(hana::equal( | |
85 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{})), | |
86 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>) | |
87 | )); | |
88 | ||
89 | BOOST_HANA_CHECK(hana::equal( | |
90 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})), | |
91 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>) | |
92 | )); | |
93 | ||
94 | BOOST_HANA_CHECK(hana::equal( | |
95 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{})), | |
96 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}), hana::size_c<1>) | |
97 | )); | |
11fdf7f2 TL |
98 | |
99 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
100 | hana::drop_front(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})), | |
101 | MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}) | |
102 | )); | |
7c673cae FG |
103 | }}; |
104 | ||
105 | TestCase test_drop_front_exactly{[]{ | |
106 | namespace hana = boost::hana; | |
107 | using hana::test::ct_eq; | |
108 | ||
109 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
110 | hana::drop_front_exactly(MAKE_TUPLE(), hana::size_c<0>), | |
111 | MAKE_TUPLE() | |
112 | )); | |
113 | ||
114 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
115 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<0>), | |
116 | MAKE_TUPLE(ct_eq<0>{}) | |
117 | )); | |
118 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
119 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>), | |
120 | MAKE_TUPLE() | |
121 | )); | |
122 | ||
123 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
124 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>), | |
125 | MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}) | |
126 | )); | |
127 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
128 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>), | |
129 | MAKE_TUPLE(ct_eq<1>{}) | |
130 | )); | |
131 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
132 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<2>), | |
133 | MAKE_TUPLE() | |
134 | )); | |
135 | ||
136 | BOOST_HANA_CONSTANT_CHECK(hana::equal( | |
137 | hana::drop_front_exactly( | |
138 | MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, | |
139 | ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}), hana::size_c<4>), | |
140 | MAKE_TUPLE(ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}) | |
141 | )); | |
142 | ||
143 | // make sure drop_front_exactly(xs) == drop_front_exactly(xs, size_c<1>) | |
144 | BOOST_HANA_CHECK(hana::equal( | |
145 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{})), | |
146 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>) | |
147 | )); | |
148 | ||
149 | BOOST_HANA_CHECK(hana::equal( | |
150 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})), | |
151 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>) | |
152 | )); | |
153 | ||
154 | BOOST_HANA_CHECK(hana::equal( | |
155 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{})), | |
156 | hana::drop_front_exactly(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}), hana::size_c<1>) | |
157 | )); | |
158 | }}; | |
159 | ||
160 | #endif // !BOOST_HANA_TEST_AUTO_DROP_FRONT_HPP |