• 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_REMOVE_AT_HPP
6 #define BOOST_HANA_TEST_AUTO_REMOVE_AT_HPP
7 
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/equal.hpp>
10 #include <boost/hana/integral_constant.hpp>
11 #include <boost/hana/remove_at.hpp>
12 
13 #include <laws/base.hpp>
14 #include "test_case.hpp"
15 
16 
__anond58e059a0102null17 TestCase test_remove_at{[]{
18     namespace hana = boost::hana;
19     using hana::test::ct_eq;
20 
21     BOOST_HANA_CONSTANT_CHECK(hana::equal(
22         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}),
23                         hana::size_c<0>),
24         MAKE_TUPLE()
25     ));
26 
27     BOOST_HANA_CONSTANT_CHECK(hana::equal(
28         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}),
29                         hana::size_c<0>),
30         MAKE_TUPLE(ct_eq<1>{})
31     ));
32     BOOST_HANA_CONSTANT_CHECK(hana::equal(
33         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}),
34                         hana::size_c<1>),
35         MAKE_TUPLE(ct_eq<0>{})
36     ));
37 
38     BOOST_HANA_CONSTANT_CHECK(hana::equal(
39         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
40                         hana::size_c<0>),
41         MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{})
42     ));
43     BOOST_HANA_CONSTANT_CHECK(hana::equal(
44         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
45                         hana::size_c<1>),
46         MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{})
47     ));
48     BOOST_HANA_CONSTANT_CHECK(hana::equal(
49         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
50                         hana::size_c<2>),
51         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
52     ));
53 
54     BOOST_HANA_CONSTANT_CHECK(hana::equal(
55         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
56                         hana::size_c<0>),
57         MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})
58     ));
59     BOOST_HANA_CONSTANT_CHECK(hana::equal(
60         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
61                         hana::size_c<1>),
62         MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<3>{})
63     ));
64     BOOST_HANA_CONSTANT_CHECK(hana::equal(
65         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
66                         hana::size_c<2>),
67         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<3>{})
68     ));
69     BOOST_HANA_CONSTANT_CHECK(hana::equal(
70         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
71                         hana::size_c<3>),
72         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
73     ));
74 
75     BOOST_HANA_CONSTANT_CHECK(hana::equal(
76         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
77                         hana::size_c<0>),
78         MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{})
79     ));
80     BOOST_HANA_CONSTANT_CHECK(hana::equal(
81         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
82                         hana::size_c<1>),
83         MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{})
84     ));
85     BOOST_HANA_CONSTANT_CHECK(hana::equal(
86         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
87                         hana::size_c<2>),
88         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<3>{}, ct_eq<4>{})
89     ));
90     BOOST_HANA_CONSTANT_CHECK(hana::equal(
91         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
92                         hana::size_c<3>),
93         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<4>{})
94     ));
95     BOOST_HANA_CONSTANT_CHECK(hana::equal(
96         hana::remove_at(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
97                         hana::size_c<4>),
98         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})
99     ));
100 
101     // remove_at_c
102     BOOST_HANA_CONSTANT_CHECK(hana::equal(
103         hana::remove_at_c<0>(MAKE_TUPLE(ct_eq<0>{})),
104         MAKE_TUPLE()
105     ));
106 
107     BOOST_HANA_CONSTANT_CHECK(hana::equal(
108         hana::remove_at_c<0>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
109         MAKE_TUPLE(ct_eq<1>{})
110     ));
111     BOOST_HANA_CONSTANT_CHECK(hana::equal(
112         hana::remove_at_c<1>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
113         MAKE_TUPLE(ct_eq<0>{})
114     ));
115 
116     BOOST_HANA_CONSTANT_CHECK(hana::equal(
117         hana::remove_at_c<0>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
118         MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{})
119     ));
120     BOOST_HANA_CONSTANT_CHECK(hana::equal(
121         hana::remove_at_c<1>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
122         MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{})
123     ));
124     BOOST_HANA_CONSTANT_CHECK(hana::equal(
125         hana::remove_at_c<2>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
126         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
127     ));
128 }};
129 
130 #endif // !BOOST_HANA_TEST_AUTO_REMOVE_AT_HPP
131