Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / hana / test / _include / auto / remove_range.hpp
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_RANGE_HPP
6 #define BOOST_HANA_TEST_AUTO_REMOVE_RANGE_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_range.hpp>
12
13 #include <laws/base.hpp>
14 #include "test_case.hpp"
15
16
17 TestCase test_remove_range{[]{
18     namespace hana = boost::hana;
19     using hana::test::ct_eq;
20
21     BOOST_HANA_CONSTANT_CHECK(hana::equal(
22         hana::remove_range(MAKE_TUPLE(), hana::size_c<0>, hana::size_c<0>),
23         MAKE_TUPLE()
24     ));
25     BOOST_HANA_CONSTANT_CHECK(hana::equal(
26         hana::remove_range(MAKE_TUPLE(), hana::size_c<1>, hana::size_c<1>),
27         MAKE_TUPLE()
28     ));
29     BOOST_HANA_CONSTANT_CHECK(hana::equal(
30         hana::remove_range(MAKE_TUPLE(), hana::size_c<2>, hana::size_c<2>),
31         MAKE_TUPLE()
32     ));
33
34     BOOST_HANA_CONSTANT_CHECK(hana::equal(
35         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<0>, hana::size_c<0>),
36         MAKE_TUPLE(ct_eq<0>{})
37     ));
38     BOOST_HANA_CONSTANT_CHECK(hana::equal(
39         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<0>, hana::size_c<1>),
40         MAKE_TUPLE()
41     ));
42     BOOST_HANA_CONSTANT_CHECK(hana::equal(
43         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>, hana::size_c<1>),
44         MAKE_TUPLE(ct_eq<0>{})
45     ));
46     BOOST_HANA_CONSTANT_CHECK(hana::equal(
47         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<2>, hana::size_c<2>),
48         MAKE_TUPLE(ct_eq<0>{})
49     ));
50
51     BOOST_HANA_CONSTANT_CHECK(hana::equal(
52         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>, hana::size_c<0>),
53         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
54     ));
55     BOOST_HANA_CONSTANT_CHECK(hana::equal(
56         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>, hana::size_c<1>),
57         MAKE_TUPLE(ct_eq<1>{})
58     ));
59     BOOST_HANA_CONSTANT_CHECK(hana::equal(
60         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>, hana::size_c<2>),
61         MAKE_TUPLE(ct_eq<0>{})
62     ));
63     BOOST_HANA_CONSTANT_CHECK(hana::equal(
64         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>, hana::size_c<2>),
65         MAKE_TUPLE()
66     ));
67     BOOST_HANA_CONSTANT_CHECK(hana::equal(
68         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<2>, hana::size_c<2>),
69         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
70     ));
71     BOOST_HANA_CONSTANT_CHECK(hana::equal(
72         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}),
73                            hana::size_c<9999>, hana::size_c<9999>),
74         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
75     ));
76
77     BOOST_HANA_CONSTANT_CHECK(hana::equal(
78         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
79                            hana::size_c<0>, hana::size_c<2>),
80         MAKE_TUPLE(ct_eq<2>{})
81     ));
82     BOOST_HANA_CONSTANT_CHECK(hana::equal(
83         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
84                            hana::size_c<1>, hana::size_c<3>),
85         MAKE_TUPLE(ct_eq<0>{})
86     ));
87
88     BOOST_HANA_CONSTANT_CHECK(hana::equal(
89         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
90                            hana::size_c<0>, hana::size_c<2>),
91         MAKE_TUPLE(ct_eq<2>{}, ct_eq<3>{})
92     ));
93     BOOST_HANA_CONSTANT_CHECK(hana::equal(
94         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
95                            hana::size_c<2>, hana::size_c<3>),
96         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<3>{})
97     ));
98
99     BOOST_HANA_CONSTANT_CHECK(hana::equal(
100         hana::remove_range(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{},
101                                       ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
102                            hana::size_c<4>, hana::size_c<7>),
103         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{})
104     ));
105
106     // remove_range_c
107     BOOST_HANA_CONSTANT_CHECK(hana::equal(
108         hana::remove_range_c<4, 7>(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{},
109                                               ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{})),
110         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{})
111     ));
112 }};
113
114 #endif // !BOOST_HANA_TEST_AUTO_REMOVE_RANGE_HPP