Refactors sequential misc test cases
[libcds.git] / test / stress / sequential / sequential-misc / deque_driver.cpp
1 #include "common.h"
2 #include <cds/misc/chase-lev-deque.h>
3 #include <cds_test/stress_test.h>
4 #include <cstdlib>
5 #include <ctime>
6 #include <iostream>
7 #include <memory>
8 #include <thread>
9
10 using namespace std;
11
12 namespace {
13
14 typedef cds_others::ChaseLevDeque Deque;
15 static size_t s_nDequePassCount = 1000;
16 static size_t s_nDequeStealerThreadCount = 5;
17 static size_t s_nDequeMainPassCount = 100000000;
18
19 class ChaseLevDequeTest : public cds_test::stress_fixture {
20 protected:
21   static atomic_int terminate_stealer;
22   static ullong *sums;
23   static ullong *succ_counts;
24   static ullong push_sum;
25   static ullong push_count;
26
27   static void SetUpTestCase() {
28     cds_test::config const &cfg = get_config("SequentialMisc");
29     GetConfig(DequePassCount);
30     GetConfig(DequeStealerThreadCount);
31     GetConfig(DequeMainPassCount);
32   }
33 };
34
35 atomic_int ChaseLevDequeTest::terminate_stealer;
36 ullong *ChaseLevDequeTest::sums;
37 ullong *ChaseLevDequeTest::succ_counts;
38 ullong ChaseLevDequeTest::push_count;
39 ullong ChaseLevDequeTest::push_sum;
40
41 TEST_F(ChaseLevDequeTest, ChaseLevDeque_push_take) {
42   std::unique_ptr<Deque> deque(new Deque());
43   size_t sum = 0;
44   int res;
45   for (size_t i = 0; i < s_nDequePassCount; ++i) {
46     deque->push(i);
47     res = deque->take();
48     sum += res;
49   }
50   size_t supposed_sum = s_nDequePassCount * (s_nDequePassCount - 1) / 2;
51   if (sum != supposed_sum) {
52     std::cout << "Sequential deque take sum: " << sum << " != " << supposed_sum
53               << "\n";
54   }
55 }
56
57 TEST_F(ChaseLevDequeTest, ChaseLevDeque_push_steal) {
58   std::unique_ptr<Deque> deque(new Deque());
59   size_t sum = 0;
60   int res;
61   for (size_t i = 0; i < s_nDequePassCount; ++i) {
62     deque->push(i);
63     res = deque->steal();
64     sum += res;
65   }
66   size_t supposed_sum = s_nDequePassCount * (s_nDequePassCount - 1) / 2;
67   if (sum != supposed_sum) {
68     std::cout << "Sequential deque steal sum: " << sum << " != " << supposed_sum
69               << "\n";
70   }
71 }
72
73 } // namespace