• 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_BACK_HPP
6 #define BOOST_HANA_TEST_AUTO_DROP_BACK_HPP
7 
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/drop_back.hpp>
10 #include <boost/hana/equal.hpp>
11 #include <boost/hana/integral_constant.hpp>
12 
13 #include <laws/base.hpp>
14 #include "test_case.hpp"
15 
16 
__anon13b9d1fc0102null17 TestCase test_drop_back{[]{
18     namespace hana = boost::hana;
19     using hana::test::ct_eq;
20 
21     BOOST_HANA_CONSTANT_CHECK(hana::equal(
22         hana::drop_back(MAKE_TUPLE(), hana::size_c<0>),
23         MAKE_TUPLE()
24     ));
25     BOOST_HANA_CONSTANT_CHECK(hana::equal(
26         hana::drop_back(MAKE_TUPLE(), hana::size_c<1>),
27         MAKE_TUPLE()
28     ));
29     BOOST_HANA_CONSTANT_CHECK(hana::equal(
30         hana::drop_back(MAKE_TUPLE(), hana::size_c<2>),
31         MAKE_TUPLE()
32     ));
33 
34     BOOST_HANA_CONSTANT_CHECK(hana::equal(
35         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<0>),
36         MAKE_TUPLE(ct_eq<0>{})
37     ));
38     BOOST_HANA_CONSTANT_CHECK(hana::equal(
39         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>),
40         MAKE_TUPLE()
41     ));
42     BOOST_HANA_CONSTANT_CHECK(hana::equal(
43         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<2>),
44         MAKE_TUPLE()
45     ));
46 
47     BOOST_HANA_CONSTANT_CHECK(hana::equal(
48         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<0>),
49         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
50     ));
51     BOOST_HANA_CONSTANT_CHECK(hana::equal(
52         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>),
53         MAKE_TUPLE(ct_eq<0>{})
54     ));
55     BOOST_HANA_CONSTANT_CHECK(hana::equal(
56         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<2>),
57         MAKE_TUPLE()
58     ));
59 
60     BOOST_HANA_CONSTANT_CHECK(hana::equal(
61         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<0>),
62         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
63     ));
64     BOOST_HANA_CONSTANT_CHECK(hana::equal(
65         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<1>),
66         MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
67     ));
68     BOOST_HANA_CONSTANT_CHECK(hana::equal(
69         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<2>),
70         MAKE_TUPLE(ct_eq<0>{})
71     ));
72     BOOST_HANA_CONSTANT_CHECK(hana::equal(
73         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}), hana::size_c<3>),
74         MAKE_TUPLE()
75     ));
76 
77     // make sure hana::drop_back(xs) == hana::drop_back(xs, hana::size_c<1>)
78     BOOST_HANA_CHECK(hana::equal(
79         hana::drop_back(MAKE_TUPLE()),
80         hana::drop_back(MAKE_TUPLE(), hana::size_c<1>)
81     ));
82 
83     BOOST_HANA_CHECK(hana::equal(
84         hana::drop_back(MAKE_TUPLE(ct_eq<0>{})),
85         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>)
86     ));
87 
88     BOOST_HANA_CHECK(hana::equal(
89         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
90         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<1>)
91     ));
92 
93     BOOST_HANA_CHECK(hana::equal(
94         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{})),
95         hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}), hana::size_c<1>)
96     ));
97 }};
98 
99 #endif // !BOOST_HANA_TEST_AUTO_DROP_BACK_HPP
100