3 namespace junction_test {
5 class JunctionMapInsDelFindTest_Sequential : public cds_test::stress_fixture {
7 static unsigned s_nInsertDeletePercentage;
8 static size_t s_nGCFrequency; // Run GC after "s_nGCFrequency" operations.
9 static size_t s_nMapKeyRange;
10 static size_t s_nCrudeMapCapacity;
12 enum actions { do_find, do_insert, do_delete };
13 static const unsigned int kShuffleSize = 100;
14 static actions s_arrShuffle[kShuffleSize];
16 static size_t s_nCrudePassCount;
17 static size_t s_nGrampaPassCount;
18 static size_t s_nLinearPassCount;
19 static size_t s_nLeapfrogPassCount;
21 static void SetUpTestCase() {
22 const cds_test::config& cfg = get_config("SequentialJunction");
23 GetConfigNonZeroExpected(InsertDeletePercentage, 5);
24 GetConfigNonZeroExpected(MapKeyRange, 20000);
25 GetConfigNonZeroExpected(CrudeMapCapacity, s_nMapKeyRange * 64);
26 GetConfigNonZeroExpected(GCFrequency, 1500);
27 GetConfigNonZeroExpected(CrudePassCount, 1500000000);
28 GetConfigNonZeroExpected(GrampaPassCount, 650000000);
29 GetConfigNonZeroExpected(LinearPassCount, 900000000);
30 GetConfigNonZeroExpected(LeapfrogPassCount, 850000000);
33 template <typename Map> static void run_test(Map* map, size_t pass_count) {
34 auto qsbrContext = junction::DefaultQSBR.createContext();
35 size_t nInsertedNum = 0;
36 size_t nNotInsertedNum = 0;
37 size_t nFindSuccess = 0;
38 size_t nFindFailed = 0;
39 size_t nDeletedNum = 0;
40 size_t nOperations = 0;
42 // The number to operate on the map.
43 size_t n = s_nMapKeyRange;
44 for (size_t count = 0; count < pass_count; count++) {
46 unsigned mod = count % kShuffleSize;
47 if (mod < s_nInsertDeletePercentage && map_insert(map, n, n)) {
53 if (map_find(map, n)) {
59 if (mod < s_nInsertDeletePercentage && map_delete(map, n)) {
62 if (++nOperations > s_nGCFrequency) {
63 junction::DefaultQSBR.update(qsbrContext);
66 if (++n == 2 * s_nMapKeyRange) {
70 junction::DefaultQSBR.update(qsbrContext);
71 junction::DefaultQSBR.destroyContext(qsbrContext);
72 EXPECT_EQ(nInsertedNum, nDeletedNum);
73 EXPECT_EQ(nInsertedNum, nFindSuccess);
74 EXPECT_EQ(nFindFailed, nNotInsertedNum);
78 size_t JunctionMapInsDelFindTest_Sequential::s_nMapKeyRange;
79 size_t JunctionMapInsDelFindTest_Sequential::s_nCrudeMapCapacity;
80 size_t JunctionMapInsDelFindTest_Sequential::s_nGCFrequency;
81 unsigned JunctionMapInsDelFindTest_Sequential::s_nInsertDeletePercentage;
82 const unsigned int JunctionMapInsDelFindTest_Sequential::kShuffleSize;
83 JunctionMapInsDelFindTest_Sequential::actions
84 JunctionMapInsDelFindTest_Sequential::s_arrShuffle
85 [JunctionMapInsDelFindTest_Sequential::kShuffleSize];
86 size_t JunctionMapInsDelFindTest_Sequential::s_nCrudePassCount;
87 size_t JunctionMapInsDelFindTest_Sequential::s_nGrampaPassCount;
88 size_t JunctionMapInsDelFindTest_Sequential::s_nLinearPassCount;
89 size_t JunctionMapInsDelFindTest_Sequential::s_nLeapfrogPassCount;
91 TEST_F(JunctionMapInsDelFindTest_Sequential, JunctionMapCrude) {
92 std::unique_ptr<CrudeMap> map(new CrudeMap(s_nCrudeMapCapacity));
93 run_test(map.get(), s_nCrudePassCount);
96 TEST_F(JunctionMapInsDelFindTest_Sequential, JunctionMapLeapfrog) {
97 std::unique_ptr<LeapfrogMap> map(new LeapfrogMap());
98 run_test(map.get(), s_nLeapfrogPassCount);
101 TEST_F(JunctionMapInsDelFindTest_Sequential, JunctionMapLinear) {
102 std::unique_ptr<LinearMap> map(new LinearMap());
103 run_test(map.get(), s_nLinearPassCount);
106 TEST_F(JunctionMapInsDelFindTest_Sequential, JunctionMapGrampa) {
107 std::unique_ptr<GrampaMap> map(new GrampaMap());
108 run_test(map.get(), s_nGrampaPassCount);
111 } // namespace junction_test