From e9a3febfdd0b0cffcc4570694301434de62d1e98 Mon Sep 17 00:00:00 2001 From: khizmax Date: Sat, 27 Feb 2016 00:58:48 +0300 Subject: [PATCH 1/1] Improved value-parameterized test f intrusive stack --- projects/Win/vc14/cds.sln | 1 + test/include/cds_test/fixture.h | 4 + test/stress/main.cpp | 5 +- .../stack/intrusive_push_pop_fcstack.cpp | 89 ++++++++++++++----- test/stress/stack/intrusive_stack_push_pop.h | 3 +- 5 files changed, 77 insertions(+), 25 deletions(-) diff --git a/projects/Win/vc14/cds.sln b/projects/Win/vc14/cds.sln index 3195f4a9..dd3385d2 100644 --- a/projects/Win/vc14/cds.sln +++ b/projects/Win/vc14/cds.sln @@ -176,6 +176,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cds_test", "cds_test", "{3A ProjectSection(SolutionItems) = preProject ..\..\..\test\include\cds_test\check_size.h = ..\..\..\test\include\cds_test\check_size.h ..\..\..\test\include\cds_test\fixture.h = ..\..\..\test\include\cds_test\fixture.h + ..\..\..\test\include\cds_test\stress_test.h = ..\..\..\test\include\cds_test\stress_test.h ..\..\..\test\include\cds_test\thread.h = ..\..\..\test\include\cds_test\thread.h EndProjectSection EndProject diff --git a/test/include/cds_test/fixture.h b/test/include/cds_test/fixture.h index aa9fcffe..f8835e3a 100644 --- a/test/include/cds_test/fixture.h +++ b/test/include/cds_test/fixture.h @@ -35,6 +35,10 @@ #include #include +// earlier version of gtest do not support 4th parameter in INSTANTIATE_TEST_CASE_P macro +//TODO: how to known gtest version?.. +//#define CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG + namespace cds_test { class fixture : public ::testing::Test diff --git a/test/stress/main.cpp b/test/stress/main.cpp index 1b15a130..ce60231e 100644 --- a/test/stress/main.cpp +++ b/test/stress/main.cpp @@ -46,11 +46,12 @@ int main( int argc, char **argv ) int result; cds::Initialize(); { - ::testing::InitGoogleTest( &argc, argv ); - // Read test config file cds_test::init_config( argc, argv ); + // Init Google test + ::testing::InitGoogleTest( &argc, argv ); + cds_test::config const& general_cfg = cds_test::stress_fixture::get_config( "General" ); // Init SMR diff --git a/test/stress/stack/intrusive_push_pop_fcstack.cpp b/test/stress/stack/intrusive_push_pop_fcstack.cpp index abb70ce4..cc5f5e99 100644 --- a/test/stress/stack/intrusive_push_pop_fcstack.cpp +++ b/test/stress/stack/intrusive_push_pop_fcstack.cpp @@ -38,8 +38,6 @@ namespace { unsigned int nCombinePassCount; }; - static std::vector< fc_param > m_args; - class intrusive_fcstack_push_pop : public cds_test::intrusive_stack_push_pop , public ::testing::WithParamInterface< fc_param > @@ -47,45 +45,83 @@ namespace { typedef cds_test::intrusive_stack_push_pop base_class; public: - static void SetUpTestCase() - { - base_class::SetUpTestCase(); - if ( s_bFCIterative ) { - for ( unsigned int nCompactFactor = 1; nCompactFactor <= s_nFCCompactFactor; nCompactFactor *= 2 ) { - for ( unsigned int nPass = 1; nPass <= s_nFCCombinePassCount; nPass *= 2 ) - m_args.push_back( { nCompactFactor, nPass } ); + static std::vector< fc_param > get_test_parameters() + { + cds_test::config const& cfg = cds_test::stress_fixture::get_config( "IntrusiveStack_PushPop" ); + bool bFCIterative = cfg.get_bool( "FCIterate", s_bFCIterative ); + unsigned int nFCCombinePassCount = cfg.get_uint( "FCCombinePassCount", s_nFCCombinePassCount ); + unsigned int nFCCompactFactor = cfg.get_uint( "FCCompactFactor", s_nFCCompactFactor ); + + std::vector< fc_param > args; + if ( bFCIterative ) { + for ( unsigned int nCompactFactor = 1; nCompactFactor <= nFCCompactFactor; nCompactFactor *= 2 ) { + for ( unsigned int nPass = 1; nPass <= nFCCombinePassCount; nPass *= 2 ) + args.push_back( { nCompactFactor, nPass } ); } } - if ( m_args.empty()) - m_args.push_back( { 1, 1 } ); + if ( args.empty() ) { + if ( nFCCompactFactor && nFCCombinePassCount ) + args.push_back( { nFCCompactFactor, nFCCombinePassCount } ); + else + args.push_back( { 0, 0 } ); + } + + return args; } - static void TearDownTestCase() + +#ifdef CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG + static std::string get_test_parameter_name( testing::TestParamInfo const& p ) { - m_args.clear(); + if ( p.param.nCombinePassCount ) { + std::stringstream ss; + ss << "compact_factor" << p.param.nCompactFactor + << "__combine_pass_count" << p.param.nCombinePassCount + ; + return ss.str(); + } + else { + return std::string( "with_defaults" ); + } } +#endif protected: typedef base_class::value_type> slist_value_type; typedef base_class::value_type> list_value_type; - template void test() { value_array arrValue( s_nStackSize ); if ( s_bFCIterative ) { fc_param arg = GetParam(); - propout() - << std::make_pair( "compact_factor", arg.nCompactFactor ) - << std::make_pair( "combine_pass_count", arg.nCombinePassCount ); - Stack stack( arg.nCompactFactor, arg.nCombinePassCount ); - do_test( stack, arrValue ); + if ( arg.nCombinePassCount ) { + propout() + << std::make_pair( "compact_factor", arg.nCompactFactor ) + << std::make_pair( "combine_pass_count", arg.nCombinePassCount ); + Stack stack( arg.nCompactFactor, arg.nCombinePassCount ); + do_test( stack, arrValue ); + } + else { + Stack stack; + do_test( stack, arrValue ); + } } else { - Stack stack; - do_test( stack, arrValue ); + fc_param arg = GetParam(); + if ( arg.nCombinePassCount ) { + propout() + << std::make_pair( "compact_factor", arg.nCompactFactor ) + << std::make_pair( "combine_pass_count", arg.nCombinePassCount ); + Stack stack( arg.nCompactFactor, arg.nCombinePassCount ); + do_test( stack, arrValue ); + } + else { + Stack stack; + do_test( stack, arrValue ); + } } } }; @@ -116,5 +152,14 @@ namespace { } // namespace -INSTANTIATE_TEST_CASE_P( FC, intrusive_fcstack_push_pop, ::testing::ValuesIn( m_args )); +#ifdef CDSTEST_GTEST_INSTANTIATE_TEST_CASE_P_HAS_4TH_ARG +INSTANTIATE_TEST_CASE_P( FC, + intrusive_fcstack_push_pop, + ::testing::ValuesIn( intrusive_fcstack_push_pop::get_test_parameters()), + intrusive_fcstack_push_pop::get_test_parameter_name ); +#else +INSTANTIATE_TEST_CASE_P( FC, + intrusive_fcstack_push_pop, + ::testing::ValuesIn( intrusive_fcstack_push_pop::get_test_parameters())); +#endif diff --git a/test/stress/stack/intrusive_stack_push_pop.h b/test/stress/stack/intrusive_stack_push_pop.h index 58538e17..7770d479 100644 --- a/test/stress/stack/intrusive_stack_push_pop.h +++ b/test/stress/stack/intrusive_stack_push_pop.h @@ -193,10 +193,11 @@ namespace cds_test { T * get() const { return m_pArr.get(); } }; - protected: + public: static void SetUpTestCase(); //static void TearDownTestCase(); + protected: template void analyze( Stack& stack ) { -- 2.34.1