/* @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 using namespace boost::hana; template using eq = test::ct_eq; int main() { ////////////////////////////////////////////////////////////////////////// // Setup for the laws below ////////////////////////////////////////////////////////////////////////// auto 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>{}, eq<3>{}) ); auto eq_tuples_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>{})) ); ////////////////////////////////////////////////////////////////////////// // Functor up to Monad ////////////////////////////////////////////////////////////////////////// test::TestFunctor{eq_tuples}; test::TestApplicative{}; test::TestMonad{eq_tuples, eq_tuples_tuples}; }