1010#include < CRDTManager.hpp>
1111#include " CustomMessageException.hpp"
1212
13- CRDTManager *crdt_manager;
13+ namespace test_helpers {
1414
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);
2217 std::random_device rd;
2318 std::mt19937_64 gen (rd ());
2419 std::uniform_int_distribution<int > random_number (97 , 122 );
2520 int site_counter = 0 ;
2621 for (int i = 0 ; i < number_of_chars; i++) {
2722 int random_char = random_number (gen);
2823 site_counter++;
29- crdt_manager-> GenerateCRDTActionForLocalInsert ((char ) random_char, i, site_counter);
24+ crdt_manager. GenerateCRDTActionForLocalInsert ((char ) random_char, i, site_counter);
3025 }
26+ return crdt_manager;
3127}
3228
33- void PerformRandomInserts (int number_of_inserts) {
29+ void PerformRandomInserts (int number_of_inserts, CRDTManager &crdt_manager ) {
3430 std::random_device rd;
3531 std::mt19937_64 gen (rd ());
3632 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 ();
3935 for (int i = 0 ; i < number_of_inserts; i++) {
4036 char random_char = random_character_distribution (gen);
4137 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++);
4339 }
4440}
4541
46- void PerformRandomDeletes (int number_of_deletes) {
42+ void PerformRandomDeletes (int number_of_deletes, CRDTManager &crdt_manager ) {
4743 std::random_device rd;
4844 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 ()) {
5248 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++);
5551 }
5652 }
5753}
5854
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 ) {
6258 std::cout << " Original Character position " << index << std::endl;
6359 for (const std::pair<long , std::string> &position :crdt_character.GetPositions ()) {
6460 std::cout << position.first << " ," ;
6561 }
6662 std::cout << std::endl;
6763 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 ()) {
6965 std::cout << position.first << " ," ;
7066 }
7167 std::cout << std::endl;
@@ -74,42 +70,48 @@ bool IsCharacterUniqueInCRDT(CRDTCharacter &crdt_character, int index) {
7470 }
7571 return true ;
7672}
73+ }
7774
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 ();
8179 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 );
8583}
8684
8785TEST_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 ();
9089 REQUIRE (last_index == 0 );
9190 int site_counter = 0 ;
92- REQUIRE_THROWS (crdt_manager-> GenerateCRDTActionForLocalDelete (last_index, site_counter));
91+ REQUIRE_THROWS (crdt_manager. GenerateCRDTActionForLocalDelete (last_index, site_counter));
9392}
9493
9594TEST_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 ));
9898}
9999
100100TEST_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 );
105106}
106107
107108TEST_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);
109111 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 )) {
113115 total_fails++;
114116 }
115117 }
@@ -118,24 +120,26 @@ TEST_CASE("Load Test: Check Character Uniqueness") {
118120}
119121
120122TEST_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 );
127130}
128131
129132TEST_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)) {
137141 FAIL ();
138142 }
139143 }
140144 SUCCEED ();
141- }
145+ }
0 commit comments