1 // Copyright Louis Dionne 2013-2016
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)
5 #ifndef BOOST_HANA_TEST_AUTO_DROP_BACK_HPP
6 #define BOOST_HANA_TEST_AUTO_DROP_BACK_HPP
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>
13 #include <laws/base.hpp>
14 #include "test_case.hpp"
17 TestCase test_drop_back{[]{
18 namespace hana = boost::hana;
19 using hana::test::ct_eq;
21 BOOST_HANA_CONSTANT_CHECK(hana::equal(
22 hana::drop_back(MAKE_TUPLE(), hana::size_c<0>),
25 BOOST_HANA_CONSTANT_CHECK(hana::equal(
26 hana::drop_back(MAKE_TUPLE(), hana::size_c<1>),
29 BOOST_HANA_CONSTANT_CHECK(hana::equal(
30 hana::drop_back(MAKE_TUPLE(), hana::size_c<2>),
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>{})
38 BOOST_HANA_CONSTANT_CHECK(hana::equal(
39 hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<1>),
42 BOOST_HANA_CONSTANT_CHECK(hana::equal(
43 hana::drop_back(MAKE_TUPLE(ct_eq<0>{}), hana::size_c<2>),
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>{})
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>{})
55 BOOST_HANA_CONSTANT_CHECK(hana::equal(
56 hana::drop_back(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), hana::size_c<2>),
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>{})
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>{})
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>{})
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>),
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>)
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>)
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>)
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>)
99 #endif // !BOOST_HANA_TEST_AUTO_DROP_BACK_HPP