/* @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 #include #include #include #define BOOST_HANA_TEST_SEQUENCE_KNOWN_PARTS 3 #if BOOST_HANA_TEST_PART == 6 # define BOOST_HANA_TEST_SEQUENCE_PART 1 #elif BOOST_HANA_TEST_PART == 7 # define BOOST_HANA_TEST_SEQUENCE_PART 2 #elif BOOST_HANA_TEST_PART == 8 # define BOOST_HANA_TEST_SEQUENCE_PART 3 #endif #include #include using namespace boost::hana; template using eq = test::ct_eq; using test::ct_ord; int main() { auto big_eq_tuples = make( std::make_tuple() , std::make_tuple(eq<0>{}) , std::make_tuple(eq<0>{}, eq<1>{}) , std::make_tuple(eq<0>{}, eq<1>{}, eq<2>{}) , std::make_tuple(eq<0>{}, eq<1>{}, eq<2>{}, eq<3>{}, eq<4>{}) ); (void)big_eq_tuples; auto small_eq_tuples = make( std::make_tuple() , std::make_tuple(eq<0>{}) , std::make_tuple(eq<0>{}, eq<1>{}) , std::make_tuple(eq<0>{}, eq<1>{}, eq<2>{}) ); (void)small_eq_tuples; auto ord_tuples = make( std::make_tuple() , std::make_tuple(ct_ord<0>{}) , std::make_tuple(ct_ord<0>{}, ct_ord<1>{}) , std::make_tuple(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}) , std::make_tuple(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, ct_ord<3>{}, ct_ord<4>{}) ); (void)ord_tuples; auto eq_values = make(eq<0>{}, eq<1>{}, eq<2>{}); (void)eq_values; auto predicates = make( equal.to(eq<0>{}), equal.to(eq<1>{}), equal.to(eq<2>{}), always(false_), always(true_) ); (void)predicates; auto nested_tuples = make( std::make_tuple() , std::make_tuple( std::make_tuple(eq<0>{})) , std::make_tuple( std::make_tuple(eq<0>{}), std::make_tuple(eq<1>{}, eq<2>{})) , std::make_tuple( std::make_tuple(eq<0>{}), std::make_tuple(eq<1>{}, eq<2>{}), std::make_tuple(eq<3>{}, eq<4>{})) ); (void)nested_tuples; #if BOOST_HANA_TEST_PART == 1 ////////////////////////////////////////////////////////////////////////// // Searchable ////////////////////////////////////////////////////////////////////////// { auto eq_tuple_keys = make(eq<3>{}, eq<5>{}, eq<7>{}); test::TestSearchable{small_eq_tuples, eq_tuple_keys}; } #elif BOOST_HANA_TEST_PART == 2 ////////////////////////////////////////////////////////////////////////// // Comparable and Orderable ////////////////////////////////////////////////////////////////////////// test::TestComparable{big_eq_tuples}; test::TestOrderable{ord_tuples}; #elif BOOST_HANA_TEST_PART == 3 ////////////////////////////////////////////////////////////////////////// // MonadPlus ////////////////////////////////////////////////////////////////////////// test::TestMonadPlus{small_eq_tuples, predicates, eq_values}; #elif BOOST_HANA_TEST_PART == 4 ////////////////////////////////////////////////////////////////////////// // Foldable, Iterable, Traversable ////////////////////////////////////////////////////////////////////////// test::TestFoldable{big_eq_tuples}; test::TestIterable{big_eq_tuples}; test::TestTraversable{}; #elif BOOST_HANA_TEST_PART == 5 ////////////////////////////////////////////////////////////////////////// // Functor up to Monad ////////////////////////////////////////////////////////////////////////// { test::TestFunctor{big_eq_tuples, eq_values}; test::TestApplicative{small_eq_tuples}; test::TestMonad{big_eq_tuples, nested_tuples}; } ////////////////////////////////////////////////////////////////////////// // Sequence ////////////////////////////////////////////////////////////////////////// #elif BOOST_HANA_TEST_PART == 6 || BOOST_HANA_TEST_PART == 7 || BOOST_HANA_TEST_PART == 8 test::TestSequence{}; #endif }