Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / hana / test / _include / auto / partition.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_PARTITION_HPP
6 #define BOOST_HANA_TEST_AUTO_PARTITION_HPP
7
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/contains.hpp>
10 #include <boost/hana/equal.hpp>
11 #include <boost/hana/partition.hpp>
12
13 #include "test_case.hpp"
14 #include <laws/base.hpp>
15 #include <support/minimal_product.hpp>
16
17
18 TestCase test_partition{[]{
19     namespace hana = boost::hana;
20     using hana::test::ct_eq;
21
22     struct undefined { };
23
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>{});
26
27     BOOST_HANA_CONSTANT_CHECK(hana::equal(
28         hana::partition(MAKE_TUPLE(), undefined{}),
29         pair(MAKE_TUPLE(), MAKE_TUPLE())
30     ));
31     BOOST_HANA_CONSTANT_CHECK(hana::equal(
32         hana::partition(MAKE_TUPLE(ct_eq<0>{}), pred),
33         pair(MAKE_TUPLE(),
34              MAKE_TUPLE(ct_eq<0>{}))
35     ));
36     BOOST_HANA_CONSTANT_CHECK(hana::equal(
37         hana::partition(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}), pred),
38         pair(MAKE_TUPLE(),
39              MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}))
40     ));
41     BOOST_HANA_CONSTANT_CHECK(hana::equal(
42         hana::partition(MAKE_TUPLE(ct_eq<-1>{}), pred),
43         pair(MAKE_TUPLE(ct_eq<-1>{}),
44              MAKE_TUPLE())
45     ));
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>{}))
50     ));
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>{}))
55     ));
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>{}))
60     ));
61
62     // partition.by
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)
66     ));
67
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)
71     ));
72 }};
73
74 #endif // !BOOST_HANA_TEST_AUTO_PARTITION_HPP