Refactors some of existing cds multi-threaded stress test cases
[libcds.git] / test / stress / misc / deque_driver.cpp
index e49b4a7a0e664e089f00d1de7f4bcb4f603f79d3..7d933ad3f67f7808b8824a81b478f2dabb6e3a5d 100644 (file)
@@ -1,9 +1,10 @@
 #include "common.h"
-#include <cds/container/chase-lev-deque.h>
+#include <cds/misc/chase-lev-deque.h>
 #include <cds_test/stress_test.h>
 #include <cstdlib>
 #include <ctime>
 #include <iostream>
+#include <memory>
 #include <thread>
 
 using namespace std;
@@ -11,7 +12,7 @@ using namespace std;
 namespace {
 
 typedef cds_others::ChaseLevDeque Deque;
-static size_t s_nDequeStealerThreadCount = 5;
+static size_t s_nDequeStealerThreadCount = 3;
 static size_t s_nDequeMainPassCount = 100000000;
 
 class ChaseLevDequeTest : public cds_test::stress_fixture {
@@ -31,10 +32,14 @@ protected:
 
   static void StealerThread(int index) {
     while (!terminate_stealer.load(memory_order_relaxed)) {
-      int res = deque->steal();
-      if (res != EMPTY && res != ABORT) {
-        sums[index] += res;
-        succ_counts[index]++;
+      while (true) {
+        int res = deque->steal();
+        if (res != EMPTY && res != ABORT) {
+          sums[index] += res;
+          succ_counts[index]++;
+        } else {
+          break;
+        }
       }
     }
   }
@@ -82,7 +87,8 @@ TEST_F(ChaseLevDequeTest, DequePushPopTake) {
   srand(time(NULL));
 
   // Stealer threads
-  std::thread *threads = new std::thread[s_nDequeStealerThreadCount];
+  std::unique_ptr<std::thread[]> threads(
+      new std::thread[s_nDequeStealerThreadCount]);
   for (ullong i = 0; i < s_nDequeStealerThreadCount; i++) {
     threads[i] = std::thread(StealerThread, i);
   }