Refactors sequential test cases
[libcds.git] / test / stress / sequential / sequential_freelist_put_get.cpp
index 0767d75422266b00c7adb399e59530d8f267e3a4..04308c996882875432b1bee731bce8c01ee41a53 100644 (file)
@@ -127,25 +127,16 @@ namespace {
             for ( auto& i : arr )
                 list.put( &i );
 
-            pool.add( new Worker<FreeList>( pool, list ), s_nThreadCount );
-
-            propout() << std::make_pair( "work_thread", s_nThreadCount )
-                      << std::make_pair( "pass_count", s_nPassCount );
-
-            std::chrono::milliseconds duration = pool.run();
-
-            propout() << std::make_pair( "duration", duration );
+            std::unique_ptr<Worker<FreeList>> worker(
+                new Worker<FreeList>(pool, list));
+            worker->test();
 
             // analyze result
             size_t nTotal = 0;
             for ( auto const& i : arr )
                 nTotal += i.counter;
 
-            size_t nSuccess = 0;
-            for ( size_t threadNo = 0; threadNo < pool.size(); ++threadNo )
-                nSuccess += static_cast<Worker<FreeList>&>( pool.get( threadNo )).m_nSuccess;
-
-            EXPECT_EQ( nSuccess, nTotal );
+            EXPECT_EQ( worker->m_nSuccess, nTotal );
 
             list.clear( []( typename FreeList::node* ) {} );
         }
@@ -154,12 +145,11 @@ namespace {
     size_t put_get::s_nThreadCount = 1;
     size_t put_get::s_nPassCount = 100000;
 
-#define CDSSTRESS_FREELIST_F( name, freelist_type ) \
-    TEST_F( put_get, name ) \
-    { \
-        freelist_type fl; \
-        test( fl ); \
-    }
+#define CDSSTRESS_FREELIST_F(name, freelist_type)                              \
+  TEST_F(put_get, name) {                                                      \
+    std::unique_ptr<freelist_type> fl(new freelist_type());                    \
+    test(*fl);                                                                 \
+  }
 
     CDSSTRESS_FREELIST_F( FreeList, cds::intrusive::FreeList )
 
@@ -176,8 +166,9 @@ namespace {
 
         atomics::atomic<tagged_ptr> tp;
         if ( tp.is_lock_free()) {
-            cds::intrusive::TaggedFreeList fl;
-            test( fl );
+            using FL = cds::intrusive::TaggedFreeList;
+            std::unique_ptr<FL> fl(new FL());
+            test( *fl );
         }
         else
             std::cout << "Double-width CAS is not supported\n";