Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / hana / test / experimental / types / at.cpp
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/at.hpp>
7 #include <boost/hana/equal.hpp>
8 #include <boost/hana/experimental/types.hpp>
9 #include <boost/hana/type.hpp>
10 namespace hana = boost::hana;
11
12
13 template <int> struct x;
14
15 int main() {
16     BOOST_HANA_CONSTANT_CHECK(hana::equal(
17         hana::at_c<0>(hana::experimental::types<x<0>>{}),
18         hana::type_c<x<0>>
19     ));
20
21     BOOST_HANA_CONSTANT_CHECK(hana::equal(
22         hana::at_c<0>(hana::experimental::types<x<0>, x<1>>{}),
23         hana::type_c<x<0>>
24     ));
25     BOOST_HANA_CONSTANT_CHECK(hana::equal(
26         hana::at_c<1>(hana::experimental::types<x<0>, x<1>>{}),
27         hana::type_c<x<1>>
28     ));
29
30     BOOST_HANA_CONSTANT_CHECK(hana::equal(
31         hana::at_c<0>(hana::experimental::types<x<0>, x<1>, x<2>>{}),
32         hana::type_c<x<0>>
33     ));
34     BOOST_HANA_CONSTANT_CHECK(hana::equal(
35         hana::at_c<1>(hana::experimental::types<x<0>, x<1>, x<2>>{}),
36         hana::type_c<x<1>>
37     ));
38     BOOST_HANA_CONSTANT_CHECK(hana::equal(
39         hana::at_c<2>(hana::experimental::types<x<0>, x<1>, x<2>>{}),
40         hana::type_c<x<2>>
41     ));
42
43     BOOST_HANA_CONSTANT_CHECK(hana::equal(
44         hana::at_c<0>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>>{}),
45         hana::type_c<x<0>>
46     ));
47     BOOST_HANA_CONSTANT_CHECK(hana::equal(
48         hana::at_c<1>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>>{}),
49         hana::type_c<x<1>>
50     ));
51     BOOST_HANA_CONSTANT_CHECK(hana::equal(
52         hana::at_c<2>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>>{}),
53         hana::type_c<x<2>>
54     ));
55     BOOST_HANA_CONSTANT_CHECK(hana::equal(
56         hana::at_c<3>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>>{}),
57         hana::type_c<x<3>>
58     ));
59
60     BOOST_HANA_CONSTANT_CHECK(hana::equal(
61         hana::at_c<0>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>, x<4>>{}),
62         hana::type_c<x<0>>
63     ));
64     BOOST_HANA_CONSTANT_CHECK(hana::equal(
65         hana::at_c<1>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>, x<4>>{}),
66         hana::type_c<x<1>>
67     ));
68     BOOST_HANA_CONSTANT_CHECK(hana::equal(
69         hana::at_c<2>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>, x<4>>{}),
70         hana::type_c<x<2>>
71     ));
72     BOOST_HANA_CONSTANT_CHECK(hana::equal(
73         hana::at_c<3>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>, x<4>>{}),
74         hana::type_c<x<3>>
75     ));
76     BOOST_HANA_CONSTANT_CHECK(hana::equal(
77         hana::at_c<4>(hana::experimental::types<x<0>, x<1>, x<2>, x<3>, x<4>>{}),
78         hana::type_c<x<4>>
79     ));
80 }