• 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 #include <boost/hana/assert.hpp>
6 #include <boost/hana/drop_front.hpp>
7 #include <boost/hana/equal.hpp>
8 #include <boost/hana/experimental/view.hpp>
9 #include <boost/hana/integral_constant.hpp>
10 
11 #include <laws/base.hpp>
12 #include <support/seq.hpp>
13 namespace hana = boost::hana;
14 using hana::test::ct_eq;
15 
16 
main()17 int main() {
18     auto container = ::seq;
19     auto f = hana::test::_injection<0>{};
20 
21     {
22         auto storage = container();
23         auto transformed = hana::experimental::transformed(storage, f);
24         BOOST_HANA_CONSTANT_CHECK(hana::equal(
25             hana::drop_front(transformed, hana::size_c<0>),
26             container()
27         ));
28     }
29 
30     {
31         auto storage = container(ct_eq<0>{});
32         auto transformed = hana::experimental::transformed(storage, f);
33         BOOST_HANA_CONSTANT_CHECK(hana::equal(
34             hana::drop_front(transformed, hana::size_c<0>),
35             container(f(ct_eq<0>{}))
36         ));
37     }{
38         auto storage = container(ct_eq<0>{});
39         auto transformed = hana::experimental::transformed(storage, f);
40         BOOST_HANA_CONSTANT_CHECK(hana::equal(
41             hana::drop_front(transformed, hana::size_c<1>),
42             container()
43         ));
44     }
45 
46     {
47         auto storage = container(ct_eq<0>{}, ct_eq<1>{});
48         auto transformed = hana::experimental::transformed(storage, f);
49         BOOST_HANA_CONSTANT_CHECK(hana::equal(
50             hana::drop_front(transformed, hana::size_c<0>),
51             container(f(ct_eq<0>{}), f(ct_eq<1>{}))
52         ));
53     }{
54         auto storage = container(ct_eq<0>{}, ct_eq<1>{});
55         auto transformed = hana::experimental::transformed(storage, f);
56         BOOST_HANA_CONSTANT_CHECK(hana::equal(
57             hana::drop_front(transformed, hana::size_c<1>),
58             container(f(ct_eq<1>{}))
59         ));
60     }{
61         auto storage = container(ct_eq<0>{}, ct_eq<1>{});
62         auto transformed = hana::experimental::transformed(storage, f);
63         BOOST_HANA_CONSTANT_CHECK(hana::equal(
64             hana::drop_front(transformed, hana::size_c<2>),
65             container()
66         ));
67     }
68 
69     {
70         auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
71         auto transformed = hana::experimental::transformed(storage, f);
72         BOOST_HANA_CONSTANT_CHECK(hana::equal(
73             hana::drop_front(transformed, hana::size_c<0>),
74             container(f(ct_eq<0>{}), f(ct_eq<1>{}), f(ct_eq<2>{}))
75         ));
76     }{
77         auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
78         auto transformed = hana::experimental::transformed(storage, f);
79         BOOST_HANA_CONSTANT_CHECK(hana::equal(
80             hana::drop_front(transformed, hana::size_c<1>),
81             container(f(ct_eq<1>{}), f(ct_eq<2>{}))
82         ));
83     }{
84         auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
85         auto transformed = hana::experimental::transformed(storage, f);
86         BOOST_HANA_CONSTANT_CHECK(hana::equal(
87             hana::drop_front(transformed, hana::size_c<2>),
88             container(f(ct_eq<2>{}))
89         ));
90     }{
91         auto storage = container(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
92         auto transformed = hana::experimental::transformed(storage, f);
93         BOOST_HANA_CONSTANT_CHECK(hana::equal(
94             hana::drop_front(transformed, hana::size_c<3>),
95             container()
96         ));
97     }
98 }
99