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_PARTITION_HPP
6 #define BOOST_HANA_TEST_AUTO_PARTITION_HPP
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/contains.hpp>
10 #include <boost/hana/equal.hpp>
11 #include <boost/hana/partition.hpp>
13 #include "test_case.hpp"
14 #include <laws/base.hpp>
15 #include <support/minimal_product.hpp>
18 TestCase test_partition{[]{
19 namespace hana = boost::hana;
20 using hana::test::ct_eq;
24 auto pair = ::minimal_product;
25 auto pred = hana::in ^ MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<-3>{}, ct_eq<-4>{}, ct_eq<-5>{});
27 BOOST_HANA_CONSTANT_CHECK(hana::equal(
28 hana::partition(MAKE_TUPLE(), undefined{}),
29 pair(MAKE_TUPLE(), MAKE_TUPLE())
31 BOOST_HANA_CONSTANT_CHECK(hana::equal(
32 hana::partition(MAKE_TUPLE(ct_eq<0>{}), pred),
34 MAKE_TUPLE(ct_eq<0>{}))
36 BOOST_HANA_CONSTANT_CHECK(hana::equal(
37 hana::partition(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), pred),
39 MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}))
41 BOOST_HANA_CONSTANT_CHECK(hana::equal(
42 hana::partition(MAKE_TUPLE(ct_eq<-1>{}), pred),
43 pair(MAKE_TUPLE(ct_eq<-1>{}),
46 BOOST_HANA_CONSTANT_CHECK(hana::equal(
47 hana::partition(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<0>{}, ct_eq<2>{}), pred),
48 pair(MAKE_TUPLE(ct_eq<-1>{}),
49 MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}))
51 BOOST_HANA_CONSTANT_CHECK(hana::equal(
52 hana::partition(MAKE_TUPLE(ct_eq<0>{}, ct_eq<-3>{}, ct_eq<2>{}, ct_eq<-5>{}, ct_eq<6>{}), pred),
53 pair(MAKE_TUPLE(ct_eq<-3>{}, ct_eq<-5>{}),
54 MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<6>{}))
56 BOOST_HANA_CONSTANT_CHECK(hana::equal(
57 hana::partition(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<2>{}, ct_eq<-3>{}, ct_eq<0>{}, ct_eq<-3>{}, ct_eq<4>{}), pred),
58 pair(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-3>{}, ct_eq<-3>{}),
59 MAKE_TUPLE(ct_eq<2>{}, ct_eq<0>{}, ct_eq<4>{}))
63 BOOST_HANA_CONSTANT_CHECK(hana::equal(
64 hana::partition.by(pred, MAKE_TUPLE(ct_eq<-1>{}, ct_eq<0>{}, ct_eq<2>{})),
65 hana::partition(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<0>{}, ct_eq<2>{}), pred)
68 BOOST_HANA_CONSTANT_CHECK(hana::equal(
69 hana::partition.by(pred)(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<0>{}, ct_eq<2>{})),
70 hana::partition(MAKE_TUPLE(ct_eq<-1>{}, ct_eq<0>{}, ct_eq<2>{}), pred)
74 #endif // !BOOST_HANA_TEST_AUTO_PARTITION_HPP