Skip to content

Commit e4c3e15

Browse files
authored
Merge pull request #44 from psx95/test-fix
fix crdt manager test.
2 parents 8e20c2c + fcde131 commit e4c3e15

File tree

2 files changed

+60
-57
lines changed

2 files changed

+60
-57
lines changed

src/crdt/CRDTManager.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ std::vector<std::pair<long, std::string>> CRDTManager::GeneratePositionBetween(s
110110
std::vector<std::pair<long, std::string>> vector;
111111
return GeneratePositionBetween(before, vector, generated_position, depth + 1);
112112
} else if (current_level_from_before_position.second == current_level_from_after_position.second) {
113-
std::cout << " same character same site id " << std::endl;
114113
generated_position.push_back(current_level_from_before_position);
115114
if (!before.empty()) {
116115
before.erase(before.begin());

tst/crdt_manager_test.cpp

+60-56
Original file line numberDiff line numberDiff line change
@@ -10,62 +10,58 @@
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

8785
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();
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

9594
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));
9898
}
9999

100100
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);
105106
}
106107

107108
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);
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

120122
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);
127130
}
128131

129132
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)) {
137141
FAIL();
138142
}
139143
}
140144
SUCCEED();
141-
}
145+
}

0 commit comments

Comments
 (0)