/* @copyright Louis Dionne 2014 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #include #include #include #include #include #include #include #include using namespace boost::hana; template BOOST_HANA_CONSTEXPR_LAMBDA auto key = test::x; template BOOST_HANA_CONSTEXPR_LAMBDA auto value = test::x<-i>; template BOOST_HANA_CONSTEXPR_LAMBDA auto p = test::minimal_product<>(key, value); int main() { constexpr auto list = test::minimal_list<>; BOOST_HANA_CONSTEXPR_LAMBDA auto record = test::minimal_record<>; using L = test::List<>; using test::x; // Record -> Map { BOOST_HANA_CONSTANT_ASSERT(equal( to(record(test::x<1>, test::x<2>)), map(pair(test::member1, test::x<1>), pair(test::member2, test::x<2>)) )); } // List -> Map { BOOST_HANA_CONSTANT_ASSERT(equal( to(list()), map() )); BOOST_HANA_CONSTANT_ASSERT(equal( to(list(p<1, 1>)), map(p<1, 1>) )); BOOST_HANA_CONSTANT_ASSERT(equal( to(list(p<1, 1>, p<2, 2>)), map(p<1, 1>, p<2, 2>) )); BOOST_HANA_CONSTANT_ASSERT(equal( to(list(p<1, 1>, p<2, 2>, p<3, 3>)), map(p<1, 1>, p<2, 2>, p<3, 3>) )); } // Map -> List { BOOST_HANA_CONSTEXPR_LAMBDA auto check = [=](auto ...xs) { BOOST_HANA_CONSTANT_ASSERT( elem(permutations(list(xs...)), to(map(xs...))) ); }; check(); check(p<1, 1>); check(p<1, 1>, p<2, 2>); check(p<1, 1>, p<2, 2>, p<3, 3>); check(p<1, 1>, p<2, 2>, p<3, 3>, p<4, 4>); } }