• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright Louis Dionne 2013-2017
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 
__anon05d1d3d50102null18 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 
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 
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     ));
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     ));
103 }};
104 
__anon05d1d3d50202null105 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
161