/* @copyright Louis Dionne 2015 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 #include #include #include #include using namespace boost::hana; using T = int; using U = long long; int main() { auto sequences = make( std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{} ); (void)sequences; #if BOOST_HANA_TEST_PART == 1 ////////////////////////////////////////////////////////////////////////// // Comparable ////////////////////////////////////////////////////////////////////////// { // equal { BOOST_HANA_CONSTANT_CHECK(equal( std::integer_sequence{}, std::integer_sequence{} )); BOOST_HANA_CONSTANT_CHECK(not_(equal( std::integer_sequence{}, std::integer_sequence{} ))); BOOST_HANA_CONSTANT_CHECK(not_(equal( std::integer_sequence{}, std::integer_sequence{} ))); BOOST_HANA_CONSTANT_CHECK(equal( std::integer_sequence{}, std::integer_sequence{} )); BOOST_HANA_CONSTANT_CHECK(not_(equal( std::integer_sequence{}, std::integer_sequence{} ))); BOOST_HANA_CONSTANT_CHECK(not_(equal( std::integer_sequence{}, std::integer_sequence{} ))); BOOST_HANA_CONSTANT_CHECK(equal( std::integer_sequence{}, std::integer_sequence{} )); BOOST_HANA_CONSTANT_CHECK(not_(equal( std::integer_sequence{}, std::integer_sequence{} ))); } // laws test::TestComparable{sequences}; } #elif BOOST_HANA_TEST_PART == 2 ////////////////////////////////////////////////////////////////////////// // Foldable ////////////////////////////////////////////////////////////////////////// { // unpack { test::_injection<0> f{}; BOOST_HANA_CONSTANT_CHECK(equal( unpack(std::integer_sequence{}, f), f() )); BOOST_HANA_CONSTANT_CHECK(equal( unpack(std::integer_sequence{}, f), f(std::integral_constant{}) )); BOOST_HANA_CONSTANT_CHECK(equal( unpack(std::integer_sequence{}, f), f(std::integral_constant{}, std::integral_constant{}) )); BOOST_HANA_CONSTANT_CHECK(equal( unpack(std::integer_sequence{}, f), f(std::integral_constant{}, std::integral_constant{}, std::integral_constant{}) )); BOOST_HANA_CONSTANT_CHECK(equal( unpack(std::integer_sequence{}, f), f(std::integral_constant{}, std::integral_constant{}, std::integral_constant{}, std::integral_constant{}) )); } // laws test::TestFoldable{sequences}; } #elif BOOST_HANA_TEST_PART == 3 ////////////////////////////////////////////////////////////////////////// // Iterable ////////////////////////////////////////////////////////////////////////// { // head { BOOST_HANA_CONSTANT_CHECK(equal( head(std::index_sequence<0>{}), std::integral_constant{} )); BOOST_HANA_CONSTANT_CHECK(equal( head(std::index_sequence<0, 1>{}), std::integral_constant{} )); } // is_empty { BOOST_HANA_CONSTANT_CHECK(is_empty(std::index_sequence<>{})); BOOST_HANA_CONSTANT_CHECK(not_(is_empty(std::index_sequence<0>{}))); BOOST_HANA_CONSTANT_CHECK(not_(is_empty(std::index_sequence<1>{}))); } // tail { BOOST_HANA_CONSTANT_CHECK(equal( tail(std::index_sequence<0>{}), std::index_sequence<>{} )); BOOST_HANA_CONSTANT_CHECK(equal( tail(std::index_sequence<0, 1>{}), std::index_sequence<1>{} )); BOOST_HANA_CONSTANT_CHECK(equal( tail(std::index_sequence<0, 1, 2>{}), std::index_sequence<1, 2>{} )); } // laws test::TestIterable{sequences}; } #elif BOOST_HANA_TEST_PART == 4 ////////////////////////////////////////////////////////////////////////// // Searchable ////////////////////////////////////////////////////////////////////////// { auto sequences = make( std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{}, std::integer_sequence{} ); auto keys = make( std::integral_constant{}, std::integral_constant{} ); // laws test::TestSearchable{sequences, keys}; } #endif }