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