]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/map/cnstr.variadic.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)
5 #include <boost/hana/assert.hpp>
6 #include <boost/hana/at_key.hpp>
7 #include <boost/hana/equal.hpp>
8 #include <boost/hana/map.hpp>
9 #include <boost/hana/pair.hpp>
11 #include <laws/base.hpp>
12 #include <support/constexpr_move_only.hpp>
13 #include <support/minimal_product.hpp>
14 #include <support/tracked_move_only.hpp>
18 namespace hana
= boost::hana
;
22 using pair
= ::product_t
<hana::test::ct_eq
<i
>, hana::test::ct_eq
<-i
>>;
24 // Check with move-only literal types.
25 constexpr bool in_constexpr_context() {
26 hana::map
<hana::pair
<ConstexprMoveOnly
<2>, ConstexprMoveOnly
<20>>,
27 hana::pair
<ConstexprMoveOnly
<3>, ConstexprMoveOnly
<30>>> map
{
28 hana::make_pair(ConstexprMoveOnly
<2>{}, ConstexprMoveOnly
<20>{}),
29 hana::make_pair(ConstexprMoveOnly
<3>{}, ConstexprMoveOnly
<30>{})
34 static_assert(in_constexpr_context(), "");
37 // Basic check with non trivial runtime state
39 std::vector
<std::string
> v
{"Hello", "world", "!"};
42 hana::pair
<hana::test::ct_eq
<1>, std::string
>,
43 hana::pair
<hana::test::ct_eq
<2>, std::vector
<std::string
>>
45 hana::make_pair(hana::test::ct_eq
<1>{}, std::string
{"Hello world!"}),
46 hana::make_pair(hana::test::ct_eq
<2>{}, v
)
49 BOOST_HANA_RUNTIME_CHECK(
50 hana::at_key(map
, hana::test::ct_eq
<1>{}) == std::string
{"Hello world!"}
53 BOOST_HANA_RUNTIME_CHECK(
54 hana::at_key(map
, hana::test::ct_eq
<2>{}) == v
60 BOOST_HANA_CONSTANT_CHECK(hana::equal(
67 hana::map
<pair
<0>> map
{pair
<0>{}};
68 BOOST_HANA_CONSTANT_CHECK(hana::equal(
70 hana::make_map(pair
<0>{})
75 hana::map
<pair
<0>, pair
<1>> map
{pair
<0>{}, pair
<1>{}};
76 BOOST_HANA_CONSTANT_CHECK(hana::equal(
78 hana::make_map(pair
<0>{}, pair
<1>{})
83 hana::map
<pair
<0>, pair
<1>, pair
<2>> map
{pair
<0>{}, pair
<1>{}, pair
<2>{}};
84 BOOST_HANA_CONSTANT_CHECK(hana::equal(
86 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{})
91 hana::map
<pair
<0>, pair
<1>, pair
<2>, pair
<3>> map
{
92 pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}
94 BOOST_HANA_CONSTANT_CHECK(hana::equal(
96 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{})
101 hana::map
<pair
<0>, pair
<1>, pair
<2>, pair
<3>, pair
<4>> map
{
102 pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}, pair
<4>{}
104 BOOST_HANA_CONSTANT_CHECK(hana::equal(
106 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}, pair
<4>{})
111 hana::map
<pair
<0>, pair
<1>, pair
<2>, pair
<3>, pair
<4>, pair
<5>> map
{
112 pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}, pair
<4>{}, pair
<5>{}
114 BOOST_HANA_CONSTANT_CHECK(hana::equal(
116 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}, pair
<4>{}, pair
<5>{})
120 // Use parenthesis syntax instead of braces
122 hana::map
<> map
= hana::map
<>();
123 BOOST_HANA_CONSTANT_CHECK(hana::equal(
130 hana::map
<pair
<0>> map(
133 BOOST_HANA_CONSTANT_CHECK(hana::equal(
135 hana::make_map(pair
<0>{})
140 hana::map
<pair
<0>, pair
<1>> map(
143 BOOST_HANA_CONSTANT_CHECK(hana::equal(
145 hana::make_map(pair
<0>{}, pair
<1>{})
150 hana::map
<pair
<0>, pair
<1>, pair
<2>> map(
151 pair
<0>{}, pair
<1>{}, pair
<2>{}
153 BOOST_HANA_CONSTANT_CHECK(hana::equal(
155 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{})
160 hana::map
<pair
<0>, pair
<1>, pair
<2>, pair
<3>> map(
161 pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{}
163 BOOST_HANA_CONSTANT_CHECK(hana::equal(
165 hana::make_map(pair
<0>{}, pair
<1>{}, pair
<2>{}, pair
<3>{})
169 // Check with move-only types
171 hana::map
<hana::pair
<TrackedMoveOnly
<1>, TrackedMoveOnly
<10>>,
172 hana::pair
<TrackedMoveOnly
<2>, TrackedMoveOnly
<20>>> map
{
173 hana::make_pair(TrackedMoveOnly
<1>{}, TrackedMoveOnly
<10>{}),
174 hana::make_pair(TrackedMoveOnly
<2>{}, TrackedMoveOnly
<20>{})
178 // The following used to fail when we did not constrain the
179 // constructor properly:
181 hana::map
<pair
<1>> map
{};
182 hana::test::_injection
<0> f
{};