X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fboost%2Fboost%2Ftest%2Ftree%2Ftest_case_template.hpp;h=e88c2ff0b9ea81d03e728a7bdbc4dbe2f6b915c6;hb=92f5a8d42d07f9929ae4fa7e01342fe8d96808a8;hp=6a1fc3e57ba53b7a431b69a5ff10267a8bf937b7;hpb=b32b81446b3b05102be0267e79203f59329c1d97;p=ceph.git diff --git a/ceph/src/boost/boost/test/tree/test_case_template.hpp b/ceph/src/boost/boost/test/tree/test_case_template.hpp index 6a1fc3e57..e88c2ff0b 100644 --- a/ceph/src/boost/boost/test/tree/test_case_template.hpp +++ b/ceph/src/boost/boost/test/tree/test_case_template.hpp @@ -16,11 +16,11 @@ #include #include #include -#include +#include #include - #include +#include // Boost @@ -29,6 +29,10 @@ #include #include #include +#include +#include +#include +#include #include #if defined(BOOST_NO_TYPEID) || defined(BOOST_NO_RTTI) @@ -41,6 +45,12 @@ #include // for std::string #include // for std::list +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ + !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) + #include + #include +#endif + #include @@ -64,7 +74,7 @@ public: // ************** generate_test_case_4_type ************** // // ************************************************************************** // -template +template struct generate_test_case_4_type { explicit generate_test_case_4_type( const_string tc_name, const_string tc_file, std::size_t tc_line, Generator& G ) : m_test_case_name( tc_name ) @@ -84,8 +94,26 @@ struct generate_test_case_4_type { #else full_name += BOOST_CURRENT_FUNCTION; #endif - if( boost::is_const::value ) + + // replacing ',' by ', ' first, and then removing any double space + static const std::string to_replace[] = { "class ", "struct ", ",", " ", " <", " >"}; + static const std::string replacement[] = { "", "" , ", ", " ", "<" , ">"}; + + full_name = unit_test::utils::replace_all_occurrences_of( + full_name, + to_replace, to_replace + sizeof(to_replace)/sizeof(to_replace[0]), + replacement, replacement + sizeof(replacement)/sizeof(replacement[0])); + + typedef typename boost::remove_reference::type TestTypewoRef; + if( boost::is_const::value ) full_name += "_const"; + if( boost::is_volatile::value ) + full_name += "_volatile"; + if( boost::is_rvalue_reference::value ) + full_name += "_refref"; + else if( boost::is_lvalue_reference::value ) + full_name += "_ref"; + full_name += '>'; m_holder.m_test_cases.push_back( new test_case( ut_detail::normalize_test_case_name( full_name ), @@ -106,17 +134,8 @@ private: // ************** test_case_template ************** // // ************************************************************************** // -template -class template_test_case_gen : public test_unit_generator { +class template_test_case_gen_base : public test_unit_generator { public: - // Constructor - template_test_case_gen( const_string tc_name, const_string tc_file, std::size_t tc_line ) - { - typedef generate_test_case_4_type,TestCaseTemplate> single_test_gen; - - mpl::for_each >( single_test_gen( tc_name, tc_file, tc_line, *this ) ); - } - virtual test_unit* next() const { if( m_test_cases.empty() ) @@ -132,6 +151,57 @@ public: mutable std::list m_test_cases; }; +template +class template_test_case_gen : public template_test_case_gen_base { +public: + // Constructor + template_test_case_gen( const_string tc_name, const_string tc_file, std::size_t tc_line ) + { + typedef generate_test_case_4_type,TestCaseTemplate> single_test_gen; + + mpl::for_each >( single_test_gen( tc_name, tc_file, tc_line, *this ) ); + } +}; + +// Describing template test cases with tuples +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ + !defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) && \ + !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) + +template class C, + typename... parameter_pack> +class template_test_case_gen< + TestCaseTemplate, + C, + typename std::enable_if>::value>::type > + : public template_test_case_gen_base { + + template + void for_each(F &f) + { + auto l = { (f(mpl::identity()), 0)... }; + (void)l; // silence warning + } + +public: + // Constructor + template_test_case_gen( const_string tc_name, const_string tc_file, std::size_t tc_line ) + { + using this_type = template_test_case_gen< + TestCaseTemplate, + C, + typename std::enable_if>::value>::type>; + using single_test_gen = generate_test_case_4_type; + + single_test_gen op( tc_name, tc_file, tc_line, *this ); + + this->for_each(op); + } +}; + +#endif /* C++11 variadic, type alias */ + } // namespace ut_detail } // unit_test } // namespace boost