10
10
#include < CRDTManager.hpp>
11
11
#include " CustomMessageException.hpp"
12
12
13
- CRDTManager *crdt_manager;
13
+ namespace test_helpers {
14
14
15
- void Setup () {
16
- std::string site_id = " random_uuid_string" ;
17
- crdt_manager = new CRDTManager (site_id);
18
- }
19
-
20
- void SetupCRDTWithRandomCharactersInCRDT (int number_of_chars) {
21
- Setup ();
15
+ CRDTManager SetupCRDTWithRandomCharactersInCRDT (int number_of_chars, std::string &site_id) {
16
+ CRDTManager crdt_manager = CRDTManager (site_id);
22
17
std::random_device rd;
23
18
std::mt19937_64 gen (rd ());
24
19
std::uniform_int_distribution<int > random_number (97 , 122 );
25
20
int site_counter = 0 ;
26
21
for (int i = 0 ; i < number_of_chars; i++) {
27
22
int random_char = random_number (gen);
28
23
site_counter++;
29
- crdt_manager-> GenerateCRDTActionForLocalInsert ((char ) random_char, i, site_counter);
24
+ crdt_manager. GenerateCRDTActionForLocalInsert ((char ) random_char, i, site_counter);
30
25
}
26
+ return crdt_manager;
31
27
}
32
28
33
- void PerformRandomInserts (int number_of_inserts) {
29
+ void PerformRandomInserts (int number_of_inserts, CRDTManager &crdt_manager ) {
34
30
std::random_device rd;
35
31
std::mt19937_64 gen (rd ());
36
32
std::uniform_int_distribution<int > random_character_distribution (97 , 122 );
37
- std::uniform_int_distribution<int > random_index_distribution (0 , crdt_manager-> GetCRDTCharacters ()->size () - 1 );
38
- int site_counter = crdt_manager-> GetCRDTCharacters ()->at (crdt_manager-> GetCRDTCharacters ()->size () - 1 ).GetCounter ();
33
+ std::uniform_int_distribution<int > random_index_distribution (0 , crdt_manager. GetCRDTCharacters ()->size () - 1 );
34
+ int site_counter = crdt_manager. GetCRDTCharacters ()->at (crdt_manager. GetCRDTCharacters ()->size () - 1 ).GetCounter ();
39
35
for (int i = 0 ; i < number_of_inserts; i++) {
40
36
char random_char = random_character_distribution (gen);
41
37
int random_index = random_index_distribution (gen);
42
- crdt_manager-> GenerateCRDTActionForLocalInsert (random_char, random_index, site_counter++);
38
+ crdt_manager. GenerateCRDTActionForLocalInsert (random_char, random_index, site_counter++);
43
39
}
44
40
}
45
41
46
- void PerformRandomDeletes (int number_of_deletes) {
42
+ void PerformRandomDeletes (int number_of_deletes, CRDTManager &crdt_manager ) {
47
43
std::random_device rd;
48
44
std::mt19937_64 gen (rd ());
49
- std::uniform_int_distribution<int > random_index_distribution (0 , crdt_manager-> GetCRDTCharacters ()->size () - 1 );
50
- int site_counter = crdt_manager-> GetCRDTCharacters ()->at (crdt_manager-> GetCRDTCharacters ()->size () - 1 ).GetCounter ();
51
- if (!crdt_manager-> GetCRDTCharacters ()->empty ()) {
45
+ std::uniform_int_distribution<int > random_index_distribution (0 , crdt_manager. GetCRDTCharacters ()->size () - 1 );
46
+ int site_counter = crdt_manager. GetCRDTCharacters ()->at (crdt_manager. GetCRDTCharacters ()->size () - 1 ).GetCounter ();
47
+ if (!crdt_manager. GetCRDTCharacters ()->empty ()) {
52
48
for (int i = 0 ; i < number_of_deletes; i++) {
53
- int random_index = std::min (random_index_distribution (gen), (int ) crdt_manager-> GetCRDTCharacters ()->size () - 1 );
54
- crdt_manager-> GenerateCRDTActionForLocalDelete (random_index, site_counter++);
49
+ int random_index = std::min (random_index_distribution (gen), (int ) crdt_manager. GetCRDTCharacters ()->size () - 1 );
50
+ crdt_manager. GenerateCRDTActionForLocalDelete (random_index, site_counter++);
55
51
}
56
52
}
57
53
}
58
54
59
- bool IsCharacterUniqueInCRDT (CRDTCharacter &crdt_character, int index) {
60
- for (int i = 0 ; i < crdt_manager-> GetCRDTCharacters ()->size (); i++) {
61
- if (i != index && crdt_character.ComparePositionTo (crdt_manager-> GetCRDTCharacters ()->at (i)) == 0 ) {
55
+ bool IsCharacterUniqueInCRDT (CRDTCharacter &crdt_character, int index, CRDTManager &crdt_manager ) {
56
+ for (int i = 0 ; i < crdt_manager. GetCRDTCharacters ()->size (); i++) {
57
+ if (i != index && crdt_character.ComparePositionTo (crdt_manager. GetCRDTCharacters ()->at (i)) == 0 ) {
62
58
std::cout << " Original Character position " << index << std::endl;
63
59
for (const std::pair<long , std::string> &position :crdt_character.GetPositions ()) {
64
60
std::cout << position.first << " ," ;
65
61
}
66
62
std::cout << std::endl;
67
63
std::cout << " Position " << i << std::endl;
68
- for (const std::pair<long , std::string> &position : crdt_manager-> GetCRDTCharacters ()->at (i).GetPositions ()) {
64
+ for (const std::pair<long , std::string> &position : crdt_manager. GetCRDTCharacters ()->at (i).GetPositions ()) {
69
65
std::cout << position.first << " ," ;
70
66
}
71
67
std::cout << std::endl;
@@ -74,42 +70,48 @@ bool IsCharacterUniqueInCRDT(CRDTCharacter &crdt_character, int index) {
74
70
}
75
71
return true ;
76
72
}
73
+ }
77
74
78
- TEST_CASE (" CRDT Insert increase CRDTCharacter struct size" ) {
79
- Setup ();
80
- int last_index = crdt_manager->GetCRDTCharacters ()->size ();
75
+ TEST_CASE (" CRDT Insert increase CRDTCharacter struct array size" ) {
76
+ std::string site_id = " site_id" ;
77
+ CRDTManager crdt_manager (site_id);
78
+ int last_index = crdt_manager.GetCRDTCharacters ()->size ();
81
79
REQUIRE (last_index == 0 );
82
- int current_site_counter = 0 ;
83
- crdt_manager-> GenerateCRDTActionForLocalInsert (' c' , last_index, current_site_counter );
84
- REQUIRE (crdt_manager-> GetCRDTCharacters ()->size () == 1 );
80
+ int site_counter = 0 ;
81
+ CRDTAction action = crdt_manager. GenerateCRDTActionForLocalInsert (' c' , 0 , site_counter );
82
+ REQUIRE (crdt_manager. GetCRDTCharacters ()->size () == 1 );
85
83
}
86
84
87
85
TEST_CASE (" CRDT Delete on empty CRDT throws error" ) {
88
- Setup ();
89
- int last_index = crdt_manager->GetCRDTCharacters ()->size ();
86
+ std::string site_id = " site_id" ;
87
+ CRDTManager crdt_manager (site_id);
88
+ int last_index = crdt_manager.GetCRDTCharacters ()->size ();
90
89
REQUIRE (last_index == 0 );
91
90
int site_counter = 0 ;
92
- REQUIRE_THROWS (crdt_manager-> GenerateCRDTActionForLocalDelete (last_index, site_counter));
91
+ REQUIRE_THROWS (crdt_manager. GenerateCRDTActionForLocalDelete (last_index, site_counter));
93
92
}
94
93
95
94
TEST_CASE (" CRDT Delete on invalid index throws error" ) {
96
- SetupCRDTWithRandomCharactersInCRDT (100 );
97
- REQUIRE_THROWS (crdt_manager->GenerateCRDTActionForLocalDelete (100 , 101 ));
95
+ std::string site_id = " site_id" ;
96
+ CRDTManager crdt_manager = test_helpers::SetupCRDTWithRandomCharactersInCRDT (100 , site_id);
97
+ REQUIRE_THROWS (crdt_manager.GenerateCRDTActionForLocalDelete (100 , 101 ));
98
98
}
99
99
100
100
TEST_CASE (" CRDT Delete with valid index reduces number of characters" ) {
101
- SetupCRDTWithRandomCharactersInCRDT (100 );
102
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 100 );
103
- REQUIRE_NOTHROW (crdt_manager->GenerateCRDTActionForLocalDelete (99 , 100 ));
104
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 99 );
101
+ std::string site_id = " site_id" ;
102
+ CRDTManager crdt_manager = test_helpers::SetupCRDTWithRandomCharactersInCRDT (100 , site_id);
103
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 100 );
104
+ REQUIRE_NOTHROW (crdt_manager.GenerateCRDTActionForLocalDelete (99 , 100 ));
105
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 99 );
105
106
}
106
107
107
108
TEST_CASE (" Load Test: Check Character Uniqueness" ) {
108
- SetupCRDTWithRandomCharactersInCRDT (10000 );
109
+ std::string site_id = " site_id" ;
110
+ CRDTManager crdt_manager = test_helpers::SetupCRDTWithRandomCharactersInCRDT (8000 , site_id);
109
111
int total_fails = 0 ;
110
- for (int i = 0 ; i < crdt_manager-> GetCRDTCharacters ()->size (); i++) {
111
- CRDTCharacter crdt_character = crdt_manager-> GetCRDTCharacters ()->at (i);
112
- if (!IsCharacterUniqueInCRDT (crdt_character, i)) {
112
+ for (int i = 0 ; i < crdt_manager. GetCRDTCharacters ()->size (); i++) {
113
+ CRDTCharacter crdt_character = crdt_manager. GetCRDTCharacters ()->at (i);
114
+ if (!test_helpers:: IsCharacterUniqueInCRDT (crdt_character, i, crdt_manager )) {
113
115
total_fails++;
114
116
}
115
117
}
@@ -118,24 +120,26 @@ TEST_CASE("Load Test: Check Character Uniqueness") {
118
120
}
119
121
120
122
TEST_CASE (" Delete Test - Random deletes in a pre-filled CRDT removes characters" ) {
121
- SetupCRDTWithRandomCharactersInCRDT (2000 );
122
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 2000 );
123
- PerformRandomDeletes (200 );
124
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 1800 );
125
- PerformRandomDeletes (10 );
126
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 1790 );
123
+ std::string site_id = " site_id" ;
124
+ CRDTManager crdt_manager = test_helpers::SetupCRDTWithRandomCharactersInCRDT (2000 , site_id);
125
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 2000 );
126
+ test_helpers::PerformRandomDeletes (200 , crdt_manager);
127
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 1800 );
128
+ test_helpers::PerformRandomDeletes (10 , crdt_manager);
129
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 1790 );
127
130
}
128
131
129
132
TEST_CASE (" Insert Test - Random inserts in a pre-filled CRDT adds characters" ) {
130
- SetupCRDTWithRandomCharactersInCRDT (2000 );
131
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 2000 );
132
- PerformRandomInserts (30 );
133
- REQUIRE (crdt_manager->GetCRDTCharacters ()->size () == 2030 );
134
- for (int i = 0 ; i < crdt_manager->GetCRDTCharacters ()->size (); i++) {
135
- CRDTCharacter crdt_character = crdt_manager->GetCRDTCharacters ()->at (i);
136
- if (!IsCharacterUniqueInCRDT (crdt_character, i)) {
133
+ std::string site_id = " site_id" ;
134
+ CRDTManager crdt_manager = test_helpers::SetupCRDTWithRandomCharactersInCRDT (2000 , site_id);
135
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 2000 );
136
+ test_helpers::PerformRandomInserts (30 , crdt_manager);
137
+ REQUIRE (crdt_manager.GetCRDTCharacters ()->size () == 2030 );
138
+ for (int i = 0 ; i < crdt_manager.GetCRDTCharacters ()->size (); i++) {
139
+ CRDTCharacter crdt_character = crdt_manager.GetCRDTCharacters ()->at (i);
140
+ if (!test_helpers::IsCharacterUniqueInCRDT (crdt_character, i, crdt_manager)) {
137
141
FAIL ();
138
142
}
139
143
}
140
144
SUCCEED ();
141
- }
145
+ }
0 commit comments