From 29fb97573b765a885fd6135fb771042bf22d044f Mon Sep 17 00:00:00 2001 From: Lorenzo Caminiti Date: Sun, 19 Oct 2014 23:43:19 -0700 Subject: [PATCH] tested access on msvc, gcc, clang, and wave --- test/pp_func_traits/Jamfile.v2 | 8 +++++ test/pp_func_traits/access.cpp | 28 +++++++++++---- test/pp_func_traits/export.cpp | 17 ++++++--- test/pp_func_traits/template.cpp | 60 +++++++++++++++++++++++++++----- test/pp_func_traits/verbatim.cpp | 21 ++++++----- 5 files changed, 105 insertions(+), 29 deletions(-) create mode 100644 test/pp_func_traits/Jamfile.v2 diff --git a/test/pp_func_traits/Jamfile.v2 b/test/pp_func_traits/Jamfile.v2 new file mode 100644 index 0000000..d2cea8a --- /dev/null +++ b/test/pp_func_traits/Jamfile.v2 @@ -0,0 +1,8 @@ + +import testing ; + +run access.cpp ; +run verbatim.cpp ; +run export.cpp ; +exe template.cpp ; + diff --git a/test/pp_func_traits/access.cpp b/test/pp_func_traits/access.cpp index b1b2770..08645f7 100644 --- a/test/pp_func_traits/access.cpp +++ b/test/pp_func_traits/access.cpp @@ -1,23 +1,37 @@ +#include +#if !BOOST_PP_VARIADICS +# error "this compiler does not support variadic macros" +#else + +#include +#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_ACCESS_INDEX + #include "../aux_/pp_traits.hpp" #include #include -#include + +#include #define BOOST_CONTRACT_TEST_(trait) \ - BOOST_CONTRACT_TEST_AUX_PP_TRAITS_CHECK_EQUAL( \ - BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_CONTRACT_TEST_AUX_PP_TRAITS( \ BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_ACCESS, \ - trait (int&) (f) ( int x, (int&) y ), \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_PP_EMPTY(), \ + trait, \ + (std::map&) (f) ( int x, (std::map&) y ), \ trait \ ) - + int main ( ) { BOOST_CONTRACT_TEST_( BOOST_PP_EMPTY() ) BOOST_CONTRACT_TEST_( public ) BOOST_CONTRACT_TEST_( protected ) BOOST_CONTRACT_TEST_( private ) - - return boost::report_errors(); + + return BOOST_CONTRACT_TEST_AUX_PP_TRAITS_REPORT_ERRORS; } +#endif // variadics + diff --git a/test/pp_func_traits/export.cpp b/test/pp_func_traits/export.cpp index fd0fbbe..e6b632c 100644 --- a/test/pp_func_traits/export.cpp +++ b/test/pp_func_traits/export.cpp @@ -1,14 +1,20 @@ +#include +#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_EXPORT_INDEX + #include "../aux_/pp_traits.hpp" #include #include -#include #define BOOST_CONTRACT_TEST_(trait) \ - BOOST_CONTRACT_TEST_AUX_PP_TRAITS_CHECK_EQUAL( \ - BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_CONTRACT_TEST_AUX_PP_TRAITS( \ BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_EXPORT, \ - trait (int&) (f) ( int x, (int&) y ), \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_PP_EMPTY(), \ + trait, \ + template( typename T, std::map::value_type v ) \ + (std::map&) (f) ( int x, (std::map&) y ), \ trait \ ) @@ -16,6 +22,7 @@ int main ( ) { BOOST_CONTRACT_TEST_( BOOST_PP_EMPTY() ) BOOST_CONTRACT_TEST_( export ) - return boost::report_errors(); + return BOOST_CONTRACT_TEST_AUX_PP_TRAITS_REPORT_ERRORS; + } diff --git a/test/pp_func_traits/template.cpp b/test/pp_func_traits/template.cpp index 8492efd..9d40812 100644 --- a/test/pp_func_traits/template.cpp +++ b/test/pp_func_traits/template.cpp @@ -1,26 +1,68 @@ +#include +#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_TEMPLATE_INDEX + #include "../aux_/pp_traits.hpp" #include +#include #include -#include +#include +#include +#include +#include +#include +#include -#include +// NOTE: Some extra test macros are necessary here to regenerate the sign back +// from the parsed trait to check if the parsing was correct. But, at the end +// these are valuable tests also because they use the TPARAM_TRAITS macros. + +#define BOOST_CONTRACT_TEST_TPARAM_(r, unused, i, tparam_traits) \ + BOOST_PP_COMMA_IF(i) \ + BOOST_CONTRACT_EXT_PP_TPARAM_TRAITS_KIND(tparam_traits) \ + BOOST_CONTRACT_EXT_PP_TPARAM_TRAITS_NAME(tparam_traits) \ + BOOST_PP_IIF(BOOST_CONTRACT_EXT_PP_IS_EMPTY( \ + BOOST_CONTRACT_EXT_PP_TPARAM_TRAITS_DEFAULT(tparam_traits)), \ + BOOST_PP_TUPLE_EAT(2) \ + , \ + BOOST_PP_TUPLE_REM(2) \ + )( \ + BOOST_PP_EMPTY(), \ + default BOOST_CONTRACT_EXT_PP_TPARAM_TRAITS_DEFAULT(tparam_traits) \ + ) + +#define BOOST_CONTRACT_TEST_TPARAMS_(func_traits) \ + ( \ + BOOST_PP_LIST_FOR_EACH_I(BOOST_CONTRACT_TEST_TPARAM_, ~, \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_TPARAMS(func_traits)) \ + ) + +#define BOOST_CONTRACT_TEST_TEMPLATE_(func_traits) \ + BOOST_PP_IIF(BOOST_CONTRACT_EXT_PP_IS_EMPTY( \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_TEMPLATE(func_traits)), \ + BOOST_PP_TUPLE_EAT(1) \ + , \ + template BOOST_CONTRACT_TEST_TPARAMS_ \ + )(func_traits) #define BOOST_CONTRACT_TEST_(trait) \ - BOOST_CONTRACT_TEST_AUX_PP_TRAITS_CHECK_EQUAL( \ + BOOST_CONTRACT_TEST_AUX_PP_TRAITS( \ + BOOST_CONTRACT_TEST_TEMPLATE_, \ BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ - BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_TEMPLATE, \ - trait (int&) (f) ( int x, (int&) y ), \ + BOOST_PP_EMPTY(), \ + trait, \ + (std::map&) (f) ( int x, (std::map&) y ), \ trait \ ) int main ( ) { - BOOST_CONTRACT_TEST_( BOOST_PP_EMPTY() ) + BOOST_CONTRACT_TEST_( BOOST_PP_EMPTY() ) // None. - BOOST_CONTRACT_TEST_( + BOOST_CONTRACT_TEST_( // Type, w/ default, and variadic. template( typename T, - class U, default (std::pair), + class U, default (std::map), typename... V ) ) @@ -78,6 +120,6 @@ int main ( ) { ) ) */ - return boost::report_errors(); + return BOOST_CONTRACT_TEST_AUX_PP_TRAITS_REPORT_ERRORS; } diff --git a/test/pp_func_traits/verbatim.cpp b/test/pp_func_traits/verbatim.cpp index 272c4fe..66e57ed 100644 --- a/test/pp_func_traits/verbatim.cpp +++ b/test/pp_func_traits/verbatim.cpp @@ -1,20 +1,25 @@ +#include +#define BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_INDEX_TEST \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_AUX_VERBATIM_INDEX + #include "../aux_/pp_traits.hpp" #include #include #include #include -#include +#include #define BOOST_CONTRACT_TEST_(trait) \ - BOOST_CONTRACT_TEST_AUX_PP_TRAITS_CHECK_EQUAL( \ - BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_CONTRACT_TEST_AUX_PP_TRAITS( \ BOOST_CONTRACT_EXT_PP_FUNC_TRAITS_VERBATIM, \ + BOOST_CONTRACT_EXT_PP_FUNC_TRAITS, \ + BOOST_PP_EMPTY(), \ BOOST_PP_EXPR_IIF(BOOST_PP_COMPL( \ - BOOST_CONTRACT_DETAIL_PP_IS_EMPTY(trait)), \ - verbatim trait \ - ) \ - (int&) (f) ( int x, (int&) y ), \ + BOOST_CONTRACT_EXT_PP_IS_EMPTY(trait)), \ + verbatim \ + ) trait, \ + (std::map&) (f) ( int x, (std::map&) y ), \ trait \ ) @@ -43,6 +48,6 @@ int main ( ) { // Single GCC attribute. BOOST_CONTRACT_TEST_( (__attribute__((dllexport))) ) - return boost::report_errors(); + return BOOST_CONTRACT_TEST_AUX_PP_TRAITS_REPORT_ERRORS; }