diff --git a/services/backup/test/ToolsTest.cpp b/services/backup/test/ToolsTest.cpp new file mode 100644 --- /dev/null +++ b/services/backup/test/ToolsTest.cpp @@ -0,0 +1,147 @@ +#include "Tools.h" +#include + +#include + +#include +#include +#include +#include + +using namespace comm::network::tools; + +class ToolsTest : public testing::Test { +protected: + virtual void SetUp() { + } + virtual void TearDown() { + } +}; + +std::vector example1ByteChars = { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", + "p", "r", "s", "t", "q", "w", "u", "v", "x", "y", "z", "0", "1", "2", "3"}; + +std::vector example2ByteChars = { + "Ȋ", "Ȍ", "Ȏ", "Ȑ", "Ȓ", "Ȕ", "Ȗ", "Ș", "Ț", "Ȝ", "Ȟ", "Ƞ", "Ȣ", "Ȥ", "Ȧ", + "Ȩ", "Ȫ", "Ȭ", "Ȯ", "Ȱ", "Ȳ", "ȴ", "ȶ", "ȸ", "Ⱥ", "ȼ", "Ⱦ", "ɀ", "ɂ", "Ʉ", + "Ɇ", "Ɉ", "Ɋ", "Ɍ", "Ɏ", "ɐ", "ɒ", "ɔ", "ɖ", "ɘ", "ɚ", "ɜ", "ɞ", "ɠ", "ɢ", + "ɤ", "ɦ", "ɨ", "ɪ", "ɬ", "ɮ", "ɰ", "ɲ", "ɴ", "ɶ", "ɸ", "ɺ", "ɼ", "ɾ", "ʀ", + "ʂ", "ʄ", "ʆ", "ʈ", "ʊ", "ʌ", "ʎ", "ʐ", "ʒ", "ʔ", "ʖ", "ʘ", "ʚ", "ʜ", "ʞ", + "ʠ", "ʢ", "ʤ", "ʦ", "ʨ", "ʪ", "ʬ", "ʮ", "ʰ", "ʲ", "ʴ", "ʶ", "ʸ", "ʺ", "ʼ", + "ʾ", "ˀ", "˂", "˄", "ˆ", "ˈ", "ˊ", "ˌ", "ˎ", "ː", "˒", "˔", "˖", "˘", "˚", + "˜", "˞", "ˠ", "ˢ", "ˤ", "˦", "˨", "˪", "ˬ", "ˮ", "˰", "˲", "˴", "˶", "˸", + "˺", "˼", "˾", "̀", "̂", "̄", "̆", "̈", "̊", "̌", "̎", "̐", "̒", "̔", "̖", + "̘", "̚", "̜", "̞", "̠", "̢", "̤", "̦", "̨", "̪", "̬", "̮", "̰", "̲", "̴", + "̶", "̸", "̺", "̼", "̾", "̀", "͂", "̈́", "͆", "͈", "͊", "͌", "͎", "͐", "͒", + "͔", "͖", "͘", "͚", "͜", "͞", "͠", "͢", "ͤ", "ͦ", "ͨ", "ͪ", "ͬ", "ͮ", "Ͱ", + "Ͳ", "ʹ", "Ͷ", "ͺ", "ͼ", ";", "΄", "Ά", "Έ", "Ί", "Ύ", "ΐ", "Β", "Δ", "Ζ", + "Θ", "Κ", "Μ", "Ξ", "Π", "Σ", "Υ", "Χ", "Ω", "Ϋ", "έ", "ί", "α", "γ", "ε", + "η", "ι", "λ", "ν", "ο", "ρ", "σ", "υ", "χ", "ω", "ϋ", "ύ", "Ϗ", "ϑ", "ϓ", + "ϕ", "ϗ", "ϙ", "ϛ", "ϝ", "ϟ", "ϡ", "ϣ", "ϥ", "ϧ", "ϩ", "ϫ", "ϭ", "ϯ", "ϱ", + "ϳ", "ϵ", "Ϸ", "Ϲ", "ϻ", "Ͻ", "Ͽ", "Ё", "Ѓ", "Ѕ", "Ї", +}; + +std::vector example3ByteChars = { + "࠻", "࠽", "ࡀ", "ࡂ", "ࡄ", "ࡆ", "ࡈ", "ࡊ", "ࡌ", "ࡎ", "ࡐ", + "ࡒ", "ࡔ", "ࡖ", "ࡘ", "࡚", "࡞", "ࡡ", "ࡣ", "ࡥ", "ࡧ", "ࡩ", + "ࡰ", "ࡲ", "ࡴ", "ࡶ", "ࡸ", "ࡺ", "ࡼ", "ࡾ", "ࢀ", "ࢂ", "ࢄ", + "ࢆ", "࢈", "ࢊ", "ࢌ", "ࢎ", "࢑", "࢙", "࢛", "࢝", "࢟", "ࢡ", + "ࢣ", "ࢥ", "ࢧ", "ࢩ", "ࢫ", "ࢭ", "ࢯ", "ࢱ", "ࢳ", "ࢵ", "ࢷ", + "ࢹ", "ࢻ", "ࢽ", "ࢿ", "ࣁ", "ࣃ", "ࣅ", "ࣇ", "ࣉ", "࣋", "࣍", + "࣏", "࣑", "࣓", "ࣕ", "ࣗ", "ࣙ", "ࣛ", "ࣝ", "ࣟ", "࣡", "ࣣ", + "ࣥ", "ࣧ", "ࣩ", "࣫", "࣭", "࣯", "ࣱ", "ࣳ", "ࣵ", "ࣷ", "ࣹ", + "ࣻ", "ࣽ", "ࣿ", "ँ", "ः", "अ", "इ", "उ", "ऋ", "ऍ", "ए", + "ऑ", "ओ", "क", "ग", "ङ", "छ", "झ", "ट", "ड", "ण", "थ", + "ध", "ऩ", "फ", "भ", "य", "ऱ", "ळ", "व", "ष", "ह", "ऻ", + "ऽ", "ि", "ु", "ृ", "ॅ", "े", "ॉ", "ो", "्", "ॏ", "॑", + "॓", "ॕ", "ॗ", "ख़", "ज़", "ढ़", "य़", "ॡ", "ॣ", "॥", "१", + "३", "५", "७", "९", "ॱ", "ॳ", "ॵ", "ॷ", "ॹ", "ॻ", "ॽ", + "ॿ", "ঁ", "ঃ", "আ", "ঈ", "ঊ", "ঌ", "ঐ", "ঔ", "খ", "ঘ", + "চ", "জ", "ঞ", "ঠ", "ঢ", "ত", "দ", "ন", "ফ", "ভ", "য", + "ল", "ষ", "হ", "ঽ", "ি", "ু", "ৃ", "ে", "ো", "্", "ৗ", + "ঢ়", "ৠ", "ৢ", "০", "২", "৪", "৬", "৮", "ৰ", "৲", "৴", + "৶", "৸", "৺", "ৼ", "৾", "ਂ", "ਅ", "ਇ", "ਉ", "ਏ", "ਓ", + "ਕ", "ਗ", "ਙ", "ਛ", "ਝ", "ਟ", "ਡ", "ਣ", "ਥ", "ਧ", "ਪ", + "ਬ", "ਮ", "ਰ", "ਲ਼", "ਸ਼", "ਹ", "ਾ", "ੀ", "ੂ", "ੈ", "ੌ", + "ੑ", "ਗ਼", "ੜ", "੦", "੨", "੪", "੬", "੮", "ੰ", "ੲ", "ੴ", + "੶", "ં", "અ", "ઇ", "ઉ", "ઋ", "ઍ", "ઐ", "ઓ", "ક", "ગ", + "ઙ", "છ", "ઝ", "ટ", "ડ", "ણ", "થ", "ધ", "પ", "બ", "મ", + "ર", "ળ", "શ", "સ", "઼", "ા", "ી", "ૂ", "ૄ", "ે", "ૉ", + "ૌ", "ૐ", "ૡ", "ૣ", "૧", "૩", "૫", "૭", "૯", "૱", "ૺ", + "ૼ", "૾", "ଁ", "ଃ", "ଆ", "ଈ", "ଊ", "ଌ", "ଐ", "ଔ", "ଖ", + "ଘ", "ଚ", "ଜ", "ଞ", "ଠ", "ଢ", "ତ", "ଦ", "ନ", "ଫ", "ଭ", + "ଯ", "ଲ", "ଵ", "ଷ", "ହ", "ଽ", "ି", "ୁ", "ୃ", "େ", "ୋ", + "୍", "ୖ", "ଡ଼", "ୟ", "ୡ", "ୣ", "୧", "୩", "୫", "୭", "୯", + "ୱ", "୳", "୵", "୷", "ஃ", "ஆ", "ஈ", "ஊ", "ஏ", "ஒ", "ஔ", + "ங", "ஜ", "ட", "த", "ன", "ம", "ர", "ல", "ழ", "ஶ", "ஸ", + "ா", "ீ", "ூ", "ே", "ொ", "ௌ", "ௐ", "௦", "௨", "௪", "௬", + "௮", "௰", "௲", "௴", "௶", "௸", "௺", "ఁ", "ః", "అ", "ఇ", + "ఉ", "ఋ", "ఎ", "ఐ", "ఓ", "క", "గ", "ఙ", "ఛ", "ఝ", "ట", + "డ", "ణ", "థ", "ధ", "ప", "బ", "మ", "ర", "ల", "ఴ", "శ", + "స", "఼", "ా", "ీ", "ూ", "ౄ", "ే", "ొ", "ౌ", "ౕ", "ౘ", + "ౚ", "ౠ", "ౢ", "౦", "౨", "౪", "౬", "౮", "౷", "౹", "౻", + "౽", "౿", "ಁ", "ಃ", "ಅ", "ಇ", "ಉ", "ಋ", "ಎ", "ಐ", "ಓ", + "ಕ", "ಗ", "ಙ", "ಛ", "ಝ", "ಟ", "ಡ", "ಣ", "ಥ", "ಧ", "ಪ", + "ಬ", "ಮ", "ರ", "ಲ", "ವ", "ಷ", "ಹ", "ಽ", "ಿ", "ು", "ೃ", + "ೆ", "ೈ", "ೋ", "್", "ೖ", "ೞ", "ೡ", "ೣ", "೧", "೩", "೫", + "೭", "೯", "ೲ", "ഁ", "ഃ", "അ", "ഇ", "ഉ", "ഋ", "എ", "ഐ", + "ഓ", "ക", "ഗ", "ങ", "ഛ", "ഝ", "ട", "ഡ", "ണ", "ഥ", "ധ", + "ഩ", "ഫ", "ഭ", "യ", "റ", "ള", "വ", "ഷ", "ഹ", "഻", "ഽ", + "ി", "ു", "ൃ", "െ", "ൈ", "ോ", "്", "൏", "ൕ", "ൗ", "൙", + "൛", "൝", "ൟ", "ൡ", "ൣ", "൧", +}; + +std::vector example4ByteChars = { + "𒀀", "𒀁", "𒀂", "𒀃", "𒀄", "𒀅", "𒀆", "𒀇", "𒀈", "𒀉", "𒀊", "𒀋", "𒀌", "𒀍", "𒀎", + "𒀏", "𒀐", "𒀑", "𒀒", "𒀓", "𒀔", "𒀕", "𒀖", "𒀗", "𒀘", "𒀙", "𒀚", "𒀛", "𒀜", "𒀝", + "𒀞", "𒀟", "𒀠", "𒀡", "𒀢", "𒀣", "𒀤", "𒀥", "𒀦", "𒀧", "𒀨", "𒀩", "𒀪", "𒀫", "𒀬", + "𒀭", "𒀮", "𒀯", "𒀰", "𒀱", "𒀲", "𒀳", "𒀴", "𒀵", "𒀶", "𒀷", "𒀸", "𒀹", "𒀺", "𒀻", + "𒀼", "𒀽", "𒀾", "𒀿", "𒁀", "𒁁", "𒁂", "𒁃", "𒁄", "𒁅", "𒁆", "𒁇", "𒁈", "𒁉", "𒁊", + "𒁋", "𒁌", "𒁍", "𒁎", "𒁏", "𒁐", "𒁑", "𒁒", "𒁓", "𒁔", "𒁕", "𒁖", "𒁗", "𒁘", "𒁙", + "𒁚", "𒁛", "𒁜", "𒁝", "𒁞", "𒁟", "𒁠", "𒁡", "𒁢", "𒁣", "𒁤", "𒁥", "𒁦", "𒁧", "𒁨", + "𒁩", "𒁪", "𒁫", "𒁬", "𒁭", "𒁮", "𒁯", "𒁰", "𒁱", "𒁲", "𒁳", "𒁴", "𒁵", "𒁶", "𒁷", + "𒁸", "𒁹", "𒁺", "𒁻", "𒁼", "𒁽", "𒁾", "𒁿", "𒂀", "𒂁", "𒂂", "𒂃", "𒂄", "𒂅", "𒂆", + "𒂇", "𒂈", "𒂉", "𒂊", "𒂋", "𒂌", "𒂍", "𒂎", "𒂏", "𒂐", "𒂑", "𒂒", "𒂓", "𒂔", "𒂕", + "𒂖", "𒂗", "𒂘", "𒂙", "𒂚", "𒂛", "𒂜", "𒂝", "𒂞", "𒂟", "𒂠", "𒂡", "𒂢", "𒂣", "𒂤", + "𒂥", "𒂦", "𒂧", "𒂨", "𒂩", "𒂪", "𒂫", "𒂬", "𒂭", "𒂮", "𒂯", "𒂰", "𒂱", "𒂲", "𒂳", + "𒂴", "𒂵", "𒂶", "𒂷", "𒂸", "𒂹", "𒂺", "𒂻", "𒂼", "𒂽", "𒂾", "𒂿", "𒃀", "𒃁", "𒃂", + "𒃃", "𒃄", "𒃅", "𒃆", "𒃇", "𒃈", "𒃉", "𒃊", "𒃋", "𒃌", "𒃍", "𒃎", "𒃏", "𒃐", "𒃑", + "𒃒", "𒃓", "𒃔", "𒃕", "𒃖", "𒃗", "𒃘", "𒃙", "𒃚", "𒃛", "𒃜", "𒃝", "𒃞", "𒃟", "𒃠", + "𒃡", "𒃢", "𒃣", "𒃤", "𒃥", "𒃦", "𒃧", "𒃨", "𒃩", "𒃪", "𒃫", "𒃬", "𒃭", "𒃮", "𒃯"}; + +std::string generateRandomUtf8String(std::size_t &length) { + + std::string result = ""; + + for (std::size_t i = 0; i < length; i++) { + std::size_t currentSize = rand() % 4 + 1; + switch (currentSize) { + case 1: + result += example1ByteChars[rand() % example1ByteChars.size()]; + break; + case 2: + result += example2ByteChars[rand() % example2ByteChars.size()]; + break; + case 3: + result += example3ByteChars[rand() % example3ByteChars.size()]; + break; + case 4: + result += example4ByteChars[rand() % example4ByteChars.size()]; + break; + } + } + + return result; +} + +TEST_F(ToolsTest, TestOperationsOnTools) { + + std::vector lengths = {10, 100, 1000, 2000, 4000}; + + for (std::size_t length : lengths) { + std::string testString = generateRandomUtf8String(length); + + EXPECT_EQ(length, getUtf8Length(testString)); + } +} \ No newline at end of file