• 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_PERMUTATIONS_HPP
6 #define BOOST_HANA_TEST_AUTO_PERMUTATIONS_HPP
7 
8 #include <boost/hana/and.hpp>
9 #include <boost/hana/assert.hpp>
10 #include <boost/hana/equal.hpp>
11 #include <boost/hana/is_subset.hpp>
12 #include <boost/hana/permutations.hpp>
13 
14 #include <laws/base.hpp>
15 #include "test_case.hpp"
16 
17 
__anonc68dfc630102null18 TestCase test_permutations{[]{
19     namespace hana = boost::hana;
20     using hana::test::ct_eq;
21 
22     auto is_permutation = [](auto xs, auto ys) {
23         return hana::and_(hana::is_subset(xs, ys), hana::is_subset(ys, xs));
24     };
25 
26     BOOST_HANA_CONSTANT_CHECK(hana::equal(
27         hana::permutations(MAKE_TUPLE()),
28         MAKE_TUPLE(MAKE_TUPLE())
29     ));
30 
31     BOOST_HANA_CONSTANT_CHECK(hana::equal(
32         hana::permutations(MAKE_TUPLE(ct_eq<0>{})),
33         MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}))
34     ));
35 
36     BOOST_HANA_CONSTANT_CHECK(is_permutation(
37         hana::permutations(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
38         MAKE_TUPLE(
39             MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}),
40             MAKE_TUPLE(ct_eq<1>{}, ct_eq<0>{})
41         )
42     ));
43 
44     BOOST_HANA_CONSTANT_CHECK(is_permutation(
45         hana::permutations(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
46         MAKE_TUPLE(
47             MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
48             MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<1>{}),
49             MAKE_TUPLE(ct_eq<1>{}, ct_eq<0>{}, ct_eq<2>{}),
50             MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<0>{}),
51             MAKE_TUPLE(ct_eq<2>{}, ct_eq<0>{}, ct_eq<1>{}),
52             MAKE_TUPLE(ct_eq<2>{}, ct_eq<1>{}, ct_eq<0>{})
53         )
54     ));
55 
56     BOOST_HANA_CONSTANT_CHECK(is_permutation(
57         hana::permutations(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})),
58         MAKE_TUPLE(
59             MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
60             MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<3>{}, ct_eq<2>{}),
61             MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<1>{}, ct_eq<3>{}),
62             MAKE_TUPLE(ct_eq<0>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<1>{}),
63             MAKE_TUPLE(ct_eq<0>{}, ct_eq<3>{}, ct_eq<1>{}, ct_eq<2>{}),
64             MAKE_TUPLE(ct_eq<0>{}, ct_eq<3>{}, ct_eq<2>{}, ct_eq<1>{}),
65             MAKE_TUPLE(ct_eq<1>{}, ct_eq<0>{}, ct_eq<2>{}, ct_eq<3>{}),
66             MAKE_TUPLE(ct_eq<1>{}, ct_eq<0>{}, ct_eq<3>{}, ct_eq<2>{}),
67             MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<0>{}, ct_eq<3>{}),
68             MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<0>{}),
69             MAKE_TUPLE(ct_eq<1>{}, ct_eq<3>{}, ct_eq<0>{}, ct_eq<2>{}),
70             MAKE_TUPLE(ct_eq<1>{}, ct_eq<3>{}, ct_eq<2>{}, ct_eq<0>{}),
71             MAKE_TUPLE(ct_eq<2>{}, ct_eq<0>{}, ct_eq<1>{}, ct_eq<3>{}),
72             MAKE_TUPLE(ct_eq<2>{}, ct_eq<0>{}, ct_eq<3>{}, ct_eq<1>{}),
73             MAKE_TUPLE(ct_eq<2>{}, ct_eq<1>{}, ct_eq<0>{}, ct_eq<3>{}),
74             MAKE_TUPLE(ct_eq<2>{}, ct_eq<1>{}, ct_eq<3>{}, ct_eq<0>{}),
75             MAKE_TUPLE(ct_eq<2>{}, ct_eq<3>{}, ct_eq<0>{}, ct_eq<1>{}),
76             MAKE_TUPLE(ct_eq<2>{}, ct_eq<3>{}, ct_eq<1>{}, ct_eq<0>{}),
77             MAKE_TUPLE(ct_eq<3>{}, ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
78             MAKE_TUPLE(ct_eq<3>{}, ct_eq<0>{}, ct_eq<2>{}, ct_eq<1>{}),
79             MAKE_TUPLE(ct_eq<3>{}, ct_eq<1>{}, ct_eq<0>{}, ct_eq<2>{}),
80             MAKE_TUPLE(ct_eq<3>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<0>{}),
81             MAKE_TUPLE(ct_eq<3>{}, ct_eq<2>{}, ct_eq<0>{}, ct_eq<1>{}),
82             MAKE_TUPLE(ct_eq<3>{}, ct_eq<2>{}, ct_eq<1>{}, ct_eq<0>{})
83         )
84     ));
85 }};
86 
87 #endif // !BOOST_HANA_TEST_AUTO_PERMUTATIONS_HPP
88