diff --git a/.gitignore b/.gitignore index e9178dad4..7c8da29c1 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,5 @@ build-linux-gxx build-linux-clang #clangd index files .cache/ +#vim swap files +*.sw? diff --git a/include/faker-cxx/Internet.h b/include/faker-cxx/Internet.h index f9209df8a..61fd0d547 100644 --- a/include/faker-cxx/Internet.h +++ b/include/faker-cxx/Internet.h @@ -30,6 +30,13 @@ enum class IPv4Class C }; +struct PasswordOptions { + bool upperLetters = true; + bool lowerLetters = true; + bool numbers = true; + bool symbols = true; +}; + class Internet { public: @@ -100,7 +107,7 @@ class Internet * Internet::password(25) // "xv8vDu*wM!Rg0$zd0kH%8p!WY" * @endcode */ - static std::string password(int length = 15); + static std::string password(int length = 15, PasswordOptions options = {}); /** * @brief Returns a random emoji. diff --git a/include/faker-cxx/String.h b/include/faker-cxx/String.h index ffb82060d..1edc9a027 100644 --- a/include/faker-cxx/String.h +++ b/include/faker-cxx/String.h @@ -65,6 +65,10 @@ std::string generateAtleastString(const GuaranteeMap& guarantee); class String { +private: + static std::string generateStringWithGuarantee(GuaranteeMap& guarantee, std::set& targetCharacters, + unsigned int length); + public: /** * @brief Generates an Universally Unique Identifier with version 4. @@ -232,7 +236,21 @@ class String * String::binary(8) // "0b01110101" * @endcode */ - static std::string binary(GuaranteeMap&& guarantee = {}, unsigned length = 1); + static std::string binary(unsigned length = 1); + + /** + * @brief Generates a binary string. + * + * @param guarantee A map specifying char count constraints if any + * @param length The number of digits to generate. Defaults to `1`. + * + * @returns Binary string. + * + * @code + * String::binary({'1',{7,8}}, 8) // "0b11110111" + * @endcode + */ + static std::string binary(GuaranteeMap&& guarantee, unsigned length = 1); /** * @brief Generates an octal string. @@ -246,5 +264,19 @@ class String * @endcode */ static std::string octal(unsigned length = 1); + + /** + * @brief Generates an octal string. + * + * @param guarantee A map specifying char count constraints if any + * @param length The number of digits to generate. Defaults to `1`. + * + * @returns Octal string. + * + * @code + * String::octal({'4',{4,5}}, 8) // "0o42444041" + * @endcode + */ + static std::string octal(GuaranteeMap&& guarantee, unsigned length = 1); }; } diff --git a/include/faker-cxx/types/Country.h b/include/faker-cxx/types/Country.h index 28056d10c..f270b1984 100644 --- a/include/faker-cxx/types/Country.h +++ b/include/faker-cxx/types/Country.h @@ -46,6 +46,10 @@ enum class Country Australia, Serbia, Macedonia, + Latvia, + Ireland, + Belarus, + Estonia, }; const std::vector countries{ @@ -56,7 +60,8 @@ const std::vector countries{ Country::Japan, Country::Portugal, Country::Hungary, Country::Croatia, Country::Greece, Country::Slovenia, Country::Austria, Country::Switzerland, Country::Belgium, Country::Nederlands, Country::China, Country::Korea, Country::Canada, Country::Mexico, Country::Argentina, - Country::Australia, Country::Serbia, Country::Macedonia, + Country::Australia, Country::Serbia, Country::Macedonia, Country::Latvia, Country::Ireland, + Country::Belarus, Country::Estonia, }; inline std::string toString(Country country) @@ -100,6 +105,10 @@ inline std::string toString(Country country) {Country::Australia, "Australia"}, {Country::Serbia, "Serbia"}, {Country::Macedonia, "Macedonia"}, + {Country::Latvia, "Latvia"}, + {Country::Ireland, "Ireland"}, + {Country::Belarus, "Belarus"}, + {Country::Estonia, "Estonia"}, }; return countryToStringMapping.at(country); diff --git a/src/modules/internet/Internet.cpp b/src/modules/internet/Internet.cpp index ec1033be7..ab79b7d8e 100644 --- a/src/modules/internet/Internet.cpp +++ b/src/modules/internet/Internet.cpp @@ -16,6 +16,7 @@ #include "faker-cxx/String.h" #include "faker-cxx/Word.h" #include "fmt/format.h" +#include "../string/data/Characters.h" namespace faker { @@ -93,16 +94,26 @@ std::string Internet::exampleEmail(std::optional firstName, std::op Helper::arrayElement(emailExampleHosts)); } -std::string Internet::password(int length) +std::string Internet::password(int length, PasswordOptions options) { - const std::string passwordCharacters = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~`!@#$%^&*()_-+={[}]|:;\"'<,>.?/"; + std::string characters; - std::string password; + if (options.upperLetters) { + characters += faker::upperCharacters; + } + if (options.lowerLetters) { + characters += faker::lowerCharacters; + } + if (options.numbers) { + characters += faker::numericCharacters; + } + if (options.symbols) { + characters += faker::symbolCharacters; + } - for (int i = 0; i < length; i++) - { - password += Helper::arrayElement(passwordCharacters); + std::string password; + for (int i = 0; i < length; ++i) { + password += Helper::arrayElement(characters); } return password; diff --git a/src/modules/person/Person.cpp b/src/modules/person/Person.cpp index f94d86d7e..dee2253d1 100644 --- a/src/modules/person/Person.cpp +++ b/src/modules/person/Person.cpp @@ -8,6 +8,7 @@ #include "data/argentina/ArgentinianPeopleNames.h" #include "data/australia/AustralianPeopleNames.h" #include "data/austria/AustrianPeopleNames.h" +#include "data/belarus/BelarusianPeopleNames.h" #include "data/belgium/BelgianPeopleNames.h" #include "data/brazil/BrazilianPeopleNames.h" #include "data/canada/CanadianPeopleNames.h" @@ -16,6 +17,7 @@ #include "data/czech/CzechPeopleNames.h" #include "data/denmark/DanishPeopleNames.h" #include "data/england/EnglishPeopleNames.h" +#include "data/estonia/EstonianPeopleNames.h" #include "data/finland/FinnishPeopleNames.h" #include "data/france/FrenchPeopleNames.h" #include "data/Gender.h" @@ -24,11 +26,13 @@ #include "data/Hobbies.h" #include "data/hungary/HungarianPeopleNames.h" #include "data/india/IndianPeopleNames.h" +#include "data/ireland/IrishPeopleNames.h" #include "data/italy/ItalianPeopleNames.h" #include "data/japan/JapanesePeopleNames.h" #include "data/JobTitles.h" #include "data/korea/KoreanPeopleNames.h" #include "data/Languages.h" +#include "data/latvia/LatvianPeopleNames.h" #include "data/macedonia/MacedonianPeopleNames.h" #include "data/mexico/MexicanPeopleNames.h" #include "data/Nationalities.h" @@ -78,6 +82,8 @@ const std::map countryToPeopleNamesMapping{ {Country::Canada, canadianPeopleNames}, {Country::Mexico, mexicanPeopleNames}, {Country::Argentina, argentinianPeopleNames}, {Country::Australia, australianPeopleNames}, {Country::Serbia, serbianPeopleNames}, {Country::Macedonia, macedonianPeopleNames}, + {Country::Latvia, latvianPeopleNames}, {Country::Ireland, irishPeopleNames}, + {Country::Belarus, belarusianPeopleNames}, {Country::Estonia, estonianPeopleNames}, }; std::string middleNameForCountry(Country country, std::optional sex); diff --git a/src/modules/person/PersonTest.cpp b/src/modules/person/PersonTest.cpp index fe3ea1144..eebeddcb3 100644 --- a/src/modules/person/PersonTest.cpp +++ b/src/modules/person/PersonTest.cpp @@ -8,6 +8,7 @@ #include "data/argentina/ArgentinianPeopleNames.h" #include "data/australia/AustralianPeopleNames.h" #include "data/austria/AustrianPeopleNames.h" +#include "data/belarus/BelarusianPeopleNames.h" #include "data/belgium/BelgianPeopleNames.h" #include "data/canada/CanadianPeopleNames.h" #include "data/china/ChinesePeopleNames.h" @@ -15,6 +16,7 @@ #include "data/czech/CzechPeopleNames.h" #include "data/denmark/DanishPeopleNames.h" #include "data/england/EnglishPeopleNames.h" +#include "data/estonia/EstonianPeopleNames.h" #include "data/finland/FinnishPeopleNames.h" #include "data/france/FrenchPeopleNames.h" #include "data/Gender.h" @@ -23,11 +25,13 @@ #include "data/Hobbies.h" #include "data/hungary/HungarianPeopleNames.h" #include "data/india/IndianPeopleNames.h" +#include "data/ireland/IrishPeopleNames.h" #include "data/italy/ItalianPeopleNames.h" #include "data/japan/JapanesePeopleNames.h" #include "data/JobTitles.h" #include "data/korea/KoreanPeopleNames.h" #include "data/Languages.h" +#include "data/latvia/LatvianPeopleNames.h" #include "data/macedonia/MacedonianPeopleNames.h" #include "data/mexico/MexicanPeopleNames.h" #include "data/Nationalities.h" @@ -78,6 +82,8 @@ const std::map countryToPeopleNamesMapping{ {Country::Canada, canadianPeopleNames}, {Country::Mexico, mexicanPeopleNames}, {Country::Argentina, argentinianPeopleNames}, {Country::Australia, australianPeopleNames}, {Country::Serbia, serbianPeopleNames}, {Country::Macedonia, macedonianPeopleNames}, + {Country::Latvia, latvianPeopleNames}, {Country::Ireland, irishPeopleNames}, + {Country::Belarus, belarusianPeopleNames}, {Country::Estonia, estonianPeopleNames}, }; const std::map generatedTestName{ @@ -100,6 +106,8 @@ const std::map generatedTestName{ {Country::Canada, "shouldGenerateCanadianName"}, {Country::Mexico, "shouldGenerateMexicanName"}, {Country::Argentina, "shouldGenerateArgentinianName"}, {Country::Australia, "shouldGenerateAustralianName"}, {Country::Serbia, "shouldGenerateSerbianName"}, {Country::Macedonia, "shouldGenerateMacedonianName"}, + {Country::Latvia, "shouldGenerateLatvianName"}, {Country::Ireland, "shouldGenerateIrishName"}, + {Country::Belarus, "shouldGenerateBelarusianName"}, {Country::Estonia, "shouldGenerateEstonianName"}, }; } diff --git a/src/modules/person/data/belarus/BelarusianFirstNames.h b/src/modules/person/data/belarus/BelarusianFirstNames.h new file mode 100644 index 000000000..08444802d --- /dev/null +++ b/src/modules/person/data/belarus/BelarusianFirstNames.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector belarusianMalesFirstNames = { + "Sergey", "Andrey", "Aleksandr", "Dmitriy", "Vladimir", "Alexander", "Pavel", "Aleksey", + "Evgeniy", "Dmitry", "Igor", "Nikolay", "Maksim", "Ivan", "Artyom", "Mikhail", + "Alexey", "Ilya", "Oleg", "Viktor", "Roman", "Anton", "Vadim", "Kirill", + "Yuriy", "Maxim", "Evgeny", "Vitaliy", "Egor", "Vladislav", "Konstantin", "Artem", + "Vitaly", "Stanislav", "Ruslan", "Artur", "Valeriy", "Yury", "Vyacheslav", "Gennadiy", + "Anatoliy", "Petr", "Leonid", "Daniil", "Vasily", "Anatoly", "Eduard", "Valentin", + "Gleb", "Danil", "Yaroslav", "Boris", "Timofey", "Matvey", "Stepan", "Bogdan", + "Arseniy", "Mark", "Georgiy", "Timur", "Svyatoslav", "German", "Andrei", "Grigory", + "Fedor", "Sergei", "Kiril", "Nazar", "David", "Ignat", "Alex", "Marat", + "Georgy", "Rodion", "Arkadiy", "Rustam", "Aleks", "Alexandr", "Rostislav", "Albert", + "Sergej", "Semen", "Taras", "Lev", "Philip", "Miroslav", "Robert", "Vsevolod", + "Ales", "Renat", "Filipp", "Edgar", "Vital", "Erik", "Alik", "Andrej", + "Alexandar", "Aleksander", "Aleksandar", "Adam", "Victor", "Edvard", "Ali", "Daniel", + "Arsen", "Dinis", "Martin", "Aleksei", "Iosif", "Emil", "Mihail", "Nikolai", + "Mikola", "Eldar", "Leon", "Arnold", "Ernest", "Vasil", "Murat", "Vitali", + "Nick", "Alexei", "Vladimer", "Eugene", "Aleksej", "Richard", "Kris", "Miron", + "Zhan", "Dmitri", "Stefan", "Aliaksandr", "Samir", "Serge", "Dmitrij", "Rinat", + "Angel", "Sasa", "Dzmitry", "Dominik", "Andre", "Marek", "Petro", "John", + "Serafim", "Milan", "Paul", "Viktar", "Feliks", "Damir", "Arslan", "Felix", + "Tomas", "Tata", "Raman", "Armen", "Rafael", "Valdemar", "Ramil", "Akim", + "Adrian", "Alan", "Ashot", "Andrian", "Sergio", "Karim", "Tom", "Arman", + "Vitalii", "Jack", "Tigran", "Aziz", "Peter", "Oskar", "Dimitry", "Uladzimir", + "Nikolas", "Yanik", "Sem", "Murad", "Illya", "Filip", "Suleyman", "Siarhei", + "Evgeni", "Artiom", "Sam", "Andry", "Vasili", "Dimitriy", "Adel", "Jan", + "Aslan", "Aliaksei", "Patrik", "Romeo", "Elvin", "Anatoli", "Kristian", "Zaur", + "Ismail", "Aram", "Romuald", "Arthur", "Amir", "Sancho", "Andriy", "Shamil", + "George", "Farid", "Antony", "Karl", "Marsel", "Ostap", "Ilyas", "Mustafa", + "Sergiy", "Alfred", "Ahmed", "Bob", "Said", "Simon", "Magomed", "Deni", + "Iliya", "Yurii", "Alen", "Nil", "Jon", "Rafik", "Emin", "Sashko", + "Ruben", "Kamil", "Gevorg", "Ihar", "Aleh", "Slavomir", "Leonard", "Pol", + "Ben", "Ahmet", "Tony", "Di", "Rudolf", "Abram", "Omar", "Dionis", + "Markus", "Chris", "Edward", "Kevin", "Gor", "Michail", "Luka", "Samuil", + "Gabriel", "Bladimir", "Nikolaj", "Ramin", "Natan", "Edvin", "Adolf", "Rasim", + "Sascha", "Antoni", "Raul", "Zurab", "Georg", "James", "Frank", "Andreu", + "Eugen", "Ramiz", "Niko", "Donat", "Papa", "Amin", "Sultan", "Yegor", + "Mir", "Oleksandr", "Fred", "Ahmad", "Mansur", "Alessandro", "Pan", "Pavlo", + "Samvel", "Just", "Anatolii", "Eric", "Makha", "Sergy", "Olexandr", "Ilja", + "Kemal", "Mehmet", "Emir", "Rauf", "Nail", "Pablo", "William", "Musa", + "Ibrahim", "Mohammad", "Ladislav", "Wiktor", "Rashid", "Dani", "Da", "Levon", + "Arif", "Ronald", "Salim", "Aron", "Mohamad", "Vakhtang", "Suren", "Vazgen", + "Anis", "Luis", "Kosta", "Valerii", "Patrick", "Elvis", "Rashad", "Dzhamal", + "Dzianis", "Mikhaylo", "Vardan", "Narek", "Pedro", "Migel", "Irakli", "Alexy", + "Mohammed", "Edgard", "Levan", "Pawel", "Parviz", "Abdul", "Andranik", "Asel", + "Svetoslav", "Dante", "Yunus", "Gospodin", "Arseni", "Wladimir", +}; + +const std::vector belarusianFemalesFirstNames = { + "Olga", "Tatyana", "Ekaterina", "Natalya", "Elena", "Anastasiya", "Irina", "Svetlana", + "Anna", "Marina", "Darya", "Denis", "Viktoriya", "Mariya", "Yuliya", "Kristina", + "Anastasia", "Nikita", "Alina", "Veronika", "Lyudmila", "Yulia", "Nadezhda", "Viktoria", + "Anya", "Alyona", "Aleksandra", "Elizaveta", "Yana", "Diana", "Valentina", "Galina", + "Kseniya", "Inna", "Valeriya", "Polina", "Karina", "Maria", "Oksana", "Oxana", + "Margarita", "Alexandra", "Alla", "Evgeniya", "Angelina", "Sasha", "Alena", "Lyubov", + "Zhanna", "Larisa", "Olesya", "Nina", "Tamara", "Vera", "Zhenya", "Ksenia", + "Valeria", "Evgenia", "Natalia", "Anzhelika", "Nataliya", "Nika", "Arina", "Ulyana", + "Valery", "Snezhana", "Violetta", "Danila", "Anzhela", "Ilona", "Yan", "Alisa", + "Antonina", "Milana", "Inga", "Vladislava", "Marta", "Lilia", "Karolina", "Sofiya", + "Liliya", "Sanya", "Dina", "Kira", "Zoya", "Lidiya", "Inessa", "Raisa", + "Yanina", "Lina", "Varvara", "Zinaida", "Elvira", "Sofya", "Mayya", "Yuliana", + "Darina", "Mila", "Eva", "Lidia", "Dana", "Vasilisa", "Albina", "Milena", + "Lilya", "Asya", "Lika", "Sofia", "Nelli", "Regina", "Lana", "Lolita", + "Vitalina", "Sashka", "Zlata", "Evelina", "Sabina", "Julia", "Elina", "Marianna", + "Renata", "Liana", "Yulianna", "Rimma", "Inka", "Vasilina", "Ruslana", "Kate", + "Anita", "Tina", "Tatiana", "Emma", "Zarina", "Daria", "Miroslava", "Lada", + "Lora", "Alevtina", "Ilonka", "Irena", "Eleonora", "Taisa", "Nadka", "Sandra", + "Yaroslava", "Roza", "Maryana", "Victoria", "Taisia", "Erika", "Veta", "Agata", + "Dominika", "Rina", "Ann", "Katrina", "Faina", "Viola", "Mira", "Anfisa", + "Liya", "Natallia", "Vitaliya", "Dinara", "Kamilla", "Vitalia", "Mari", "Tatsiana", + "Verka", "Leyla", "Elmira", "Danuta", "Emiliya", "Tereza", "Lia", "Emilia", + "Stella", "Helen", "Sabrina", "Dayana", "Amina", "Maya", "Dariya", "Tania", + "Nonna", "Dinka", "Violeta", "Stanislava", "Lara", "Dan", "Luiza", "Kamila", + "Klavdiya", "Nastia", "Mary", "Ludmila", "Alesia", "Katarina", "Ninel", "Nadin", + "Malvina", "Yulian", "Katia", "Adelina", "Elka", "Rada", "Ariana", "Gulnara", + "Syuzanna", "Aksana", "Karen", "Teresa", "Liliana", "Ivanna", "Ada", "Bella", + "Elza", "Alexa", "Meri", "Linda", "Anuta", "Iya", "Tonka", "Laura", + "Kim", "Nadia", "Marika", "Lisa", "Christina", "Maryan", "Izabella", "Yuri", + "Nikola", "Ariadna", "Daniela", "Hanna", "Glafira", "Monika", "Ina", "Lili", + "Valeri", "Ilia", "Vanda", "Snezhanka", "Ana", "Iryna", "Sara", "Alisha", + "Fatima", "Elen", "Danka", "Ivona", "Nataly", "Anet", "Sana", "Anika", + "Adriana", "Madina", "Nona", "Edita", "Helena", "Aida", "Mishel", "Zena", + "Bogdana", "Aleksandrina", "Elizabet", "Samira", "Pavlina", "Ganna", "Irma", "Slavka", + "Elizabeth", "Eliza", "Darinka", "Ania", "Stefaniya", "Nelya", "Beata", "Ani", + "Jane", "Venera", "Veronica", "Sania", "Angelika", "Katy", "Sima", "Mariyka", + "Tanja", "Stefania", "Sava", "Ioanna", "Alice", "Pavla", "Nella", "Vania", + "Yanis", "Li", "Tatjana", "Annet", "Mama", "Gala", "Klara", "Sacha", + "Vanessa", "Kati", "Natalie", "Mariana", "Nana", "Nadzeya", "Ya", "Islam", + "Radmila", "Ayna", "Nila", "Tamila", "Roksana", "Katja", "Petra", "Dennis", + "Mika", "Beronika", "Arianna", "Angela", "Helga", "Verona", "Zara", "Viktoryia", + "Elis", "Victoriya", "Jana", "Alexandrina", "Mariam", "Liudmila", "Tinka", "Juli", + "Lyubka", "Dunya", "Emili", "Amira", "Dara", "Roxana", "Tana", "Anastacia", + "Barbara", "Maryna", "Lady", "Aliona", "Halina", "Nelly", +}; +} diff --git a/src/modules/person/data/belarus/BelarusianLastNames.h b/src/modules/person/data/belarus/BelarusianLastNames.h new file mode 100644 index 000000000..e9da00945 --- /dev/null +++ b/src/modules/person/data/belarus/BelarusianLastNames.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector belarusianMalesLastNames = { + "Ivanov", "Novik", "Zhuk", "Moroz", "Petrov", "Novikov", "Kravchenko", + "Kovalenko", "Makarevich", "Kovalchuk", "Karpovich", "Pashkevich", "Kozlov", "Volkov", + "Shevchenko", "Kotov", "Klimovich", "Morozov", "Smirnov", "Bondarenko", "Stankevich", + "Tarasevich", "Marchenko", "Zaytsev", "Lukashevich", "Kot", "Savchenko", "Bogdanovich", + "Pinchuk", "Kovalyov", "Boyko", "Kuzmich", "Melnik", "Korol", "Matskevich", + "Sinkevich", "Bondar", "Pavlovich", "Petrovich", "Melnikov", "Kazak", "Markevich", + "Romanov", "Borisevich", "Sidorenko", "Yushkevich", "Kovalevich", "Kozlovsky", "Zayats", + "Kuznetsov", "Abramovich", "Romanenko", "Dashkevich", "Yurchenko", "Sokolov", "Borisenko", + "Kovalev", "Rusak", "Makarenko", "Adamovich", "Poznyak", "Drozd", "Kozel", + "Ignatovich", "Khomich", "Vorobey", "Kravchuk", "Romanyuk", "Baranov", "Shevchuk", + "Dubovik", "Vasilevsky", "Akulich", "Kisel", "Frolov", "Romanovich", "Savchuk", + "Sakovich", "Goncharov", "Popov", "Mironov", "Orlov", "Kulik", "Murashko", + "Golub", "Pavlov", "Gorbach", "Gavrilenko", "Andreev", "Vashkevich", "Timoshenko", + "Vasilenko", "Solovey", "Makarov", "Vasilevich", "Sidorovich", "Prokopovich", "Kravtsov", + "Lis", "Zhdanovich", "Kholod", "Fedorovich", "Matusevich", "Gerasimovich", "Nikitin", + "Zhukov", "Yaroshevich", "Mikhaylov", "Yurkevich", "Zakharenko", "Bely", "Burak", + "Demidovich", "Volk", "Shinkevich", "Zhukovsky", "Gurinovich", "Belov", "Naumenko", + "Shpak", "Sergeev", "Koval", "Golovach", "Mitskevich", "Kovalevsky", "Nesterovich", + "Prikhodko", "Medvedev", "Meleshko", "Kasperovich", "Stepanov", "Korotkevich", "Alexandrovich", + "Lebedev", "Baranovsky", "Titov", "Radkevich", "Prokopenko", "Ignatenko", "Kazakevich", + "Savich", "Yakimovich", "Kachan", "Sergeevich", "Ermakovich", "Nikitenko", "Babich", + "Verenich", "Davidovich", "Yaskevich", "Komar", "Nikolaev", "Grinevich", "Aleksandrovich", + "Sokolovsky", "Potapenko", "Savitsky", "Kononovich", "Kuntsevich", "Marchuk", "Egorov", + "Urbanovich", "Belous", "Gayduk", "Semashko", "Kruk", "Chernyavsky", "Savko", + "Drozdov", "Nikolaevich", "Kulesh", "Korzun", "Antonovich", "Sushko", "Leshkevich", + "Kolesnik", "Tarasenko", "Karpenko", "Ermolenko", "Sokol", "Antonov", "Radyuk", + "Loyko", "Romanovsky", "Vasilyev", "Vasilev", "Grib", "Belyy", "Gonchar", + "Leonovich", "Kondratenko", "Bondarev", "Sobol", "Nesterenko", "Semyonov", "Kostyukevich", + "Malinovsky", "Vladimirovich", "Bogdanov", "Denisenko", "Astapenko", "Petkevich", "Gromyko", + "Viktorovich", "Petrovsky", "Yakovlev", "Kostyuk", "Polyakov", "Pavlovsky", "Shevtsov", + "Stasevich", "Lyakh", "Sadovsky", "Butko", "Belko", "Golubev", "Martinovich", + "Kondratovich", "Karpov", "Yanushkevich", "German", "Mikulich", "Romanchuk", "Zakharov", + "Senko", "Tarasyuk", "Borovik", "Velichko", "Reut", "Gulevich", "Yankovskaya", + "Chernyak", "Gritsuk", "Shilo", "Filipovich", "Osipenko", "Senkevich", "Antonenko", + "Korsak", "Tereshko", "Levchuk", "Borisov", "Panasyuk", "Gritskevich", "Sidorov", + "Voytovich", "Fedorenko", "Dudko", "Ivashkevich", "Kolesnikova", "Nazarenko", "Moiseenko", + "Tarasov", "Rudko", "Solovyov", "Lavrinovich", "Savitskiy", "Parkhomenko", "Mikhalevich", + "Petrenko", "Korolyov", +}; + +const std::vector belarusianFemalesLastNames = { + "Ivanova", "Novikova", "Kotova", "Volkova", "Petrova", "Morozova", "Smirnova", + "Kozlova", "Romanova", "Mironova", "Zaytseva", "Kovalyova", "Savitskaya", "Melnikova", + "Kuznetsova", "Andreeva", "Kovaleva", "Vasilevskaya", "Sokolova", "Sergeeva", "Goncharova", + "Orlova", "Pavlova", "Mikhaylova", "Kozlovskaya", "Frolova", "Kravtsova", "Nikitina", + "Lebedeva", "Malinovskaya", "Sokolovskaya", "Kovalevskaya", "Belaya", "Vysotskaya", "Novitskaya", + "Vasileva", "Titova", "Vishnevskaya", "Makarova", "Baranova", "Medvedeva", "Zhukovskaya", + "Shulga", "Zhukova", "Filatova", "Belova", "Bogdanova", "Popova", "Nikolaeva", + "Stepanova", "Baranovskaya", "Romanovskaya", "Polyakova", "Soroka", "Chernyavskaya", "Yakovleva", + "Golubeva", "Aleksandrova", "Sadovskaya", "Matveeva", "Ermakova", "Starovoytova", "Pavlovskaya", + "Drozdova", "Semyonova", "Antonova", "Lyubimova", "Petrovskaya", "Sergeevna", "Vasilyeva", + "Tkachenko", "Solovyova", "Shevtsova", "Fyodorova", "Starovoytov", "Korolyova", "Alexandrova", + "Zakharova", "Tarasova", "Koleda", "Egorova", "Rudenko", "Belskaya", "Borisova", + "Bondareva", "Emelyanova", "Kazakova", "Markova", "Litvinova", +}; +} diff --git a/src/modules/person/data/belarus/BelarusianPeopleNames.h b/src/modules/person/data/belarus/BelarusianPeopleNames.h new file mode 100644 index 000000000..ead95d2f9 --- /dev/null +++ b/src/modules/person/data/belarus/BelarusianPeopleNames.h @@ -0,0 +1,16 @@ +#pragma once + +#include "../NameFormats.h" +#include "../PeopleNames.h" +#include "BelarusianFirstNames.h" +#include "BelarusianLastNames.h" + +namespace faker +{ +const NameFormats belarusianPersonNameFormats{{"{firstName} {lastName}", 1}}; + +const PeopleNames belarusianPeopleNames{{belarusianMalesFirstNames, {}, belarusianMalesLastNames, {}, {}}, + {belarusianFemalesFirstNames, {}, belarusianFemalesLastNames, {}, {}}, + belarusianPersonNameFormats}; + +} diff --git a/src/modules/person/data/estonia/EstonianFirstNames.h b/src/modules/person/data/estonia/EstonianFirstNames.h new file mode 100644 index 000000000..c249d3bd5 --- /dev/null +++ b/src/modules/person/data/estonia/EstonianFirstNames.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector estonianMalesFirstNames = { + "Aleksandr", "Andres", "Sergei", "Vladimir", "Andrei", "Igor", "Martin", "Marko", + "Ene", "Dmitri", "Aleksei", "Oleg", "Viktor", "Juri", "Roman", "Marek", + "Raul", "Malle", "Nikolai", "Heli", "Aleksander", "Alexander", "Sven", "Terje", + "Pavel", "Eduard", "Kai", "Sergey", "Anton", "Artur", "Vadim", "Maksim", + "Timo", "Ivar", "Allan", "Erik", "Karl", "Anatoli", "Vitali", "Ivo", + "Jan", "Silver", "Hannes", "Robert", "Andrey", "Konstantin", "Rainer", "Harri", + "Ivan", "Sander", "Stanislav", "Paul", "Oliver", "Mark", "Hans", "Peter", + "Lars", "Matti", "Alexey", "Gunnar", "Dmitry", "Deniss", "Ilja", "Leonid", + "Vladislav", "Kirill", "Mikhail", "Ruslan", "Andre", "Henri", "Gert", "Roland", + "Alex", "Ragnar", "Imre", "Vassili", "Arne", "Arno", "Boris", "Michael", + "Victor", "Daniel", "Rasmus", "David", "Valentin", "Mario", "Yury", "John", + "Joel", "Edgar", "Markus", "Harry", "Thomas", "Einar", "Leo", "Albert", + "Johannes", "Evgeny", "Per", "Hendrik", "Nikolay", "Ari", "Georg", "Anders", + "Egon", "Richard", "Alvar", "Georgi", "Henry", "Oleksandr", "Guido", "Arnold", + "Ervin", "Henrik", "Merlin", "Valter", "Raimond", "Karel", "Elmar", "Maxim", + "Aleksandrs", "Carl", "Kristian", "Fred", "Johan", "Nils", "Sergejs", "Kevin", + "Daniil", "Christian", "Anatoly", "Aleks", "Tom", "Magnus", "Oskar", "German", + "Andris", "Grigori", "Olav", "Tomas", "Andrew", "Marco", "Ilya", "Sami", + "Alan", "Andrejs", "Rudolf", "Stefan", "Marti", "Bruno", "Rolf", "Artem", + "Erich", "Vitaly", "Elmo", "Valeriy", "Vyacheslav", "Udo", "Volodymyr", "Steven", + "Heiko", "Gennady", "Ken", "Harald", "Jens", "Arkadi", "Ulf", "Mauri", + "Ralf", "Danel", "August", "Lennart", "Hugo", "James", "Otto", "Simo", + "Andi", "Aldo", "Jonas", "Ove", "Mikael", "Marius", "Aksel", "Mattias", + "Helmut", "Ali", "Roberto", "Timur", "Feliks", "Lasse", "Holger", "Stig", + "Lev", "Ronald", "Leif", "Vlad", "Helge", "Marin", "Vasily", "Dmytro", + "Roger", "Chris", "Klaus", "Kjell", "Igors", "Stepan", "Gustav", "Alexandre", + "Rune", "William", "Mihail", "Andrii", "Armin", "Juris", "Max", "Aleksey", + "Tony", "Vladimirs", "Alfred", "Eric", "Dmitrijs", "Edward", "Aleksejs", "Kris", + "Alexandr", "Edvin", "Gleb", "Simon", "Dmitriy", "Kenneth", "Jakob", "Mykola", + "Petr", "Patrick", "Artyom", "Gabriel", "Aliaksandr", "Olegs", "Ander", "Dimitri", + "Elvis", "Andro", "Viktors", "Siarhei", "Pauli", "Ole", "Niklas", "Stephen", + "Keith", "Arthur", "Mindaugas", "Olaf", "Bogdan", "Christopher", "Frank", "Yuriy", + "Sergii", "Mirko", "Remo", "Paolo", "Andriy", "Marcus", "Jurijs", "Matthias", + "Heinrich", "Ernst", "Marat", "Bert", "Egor", "Morten", "Niko", "Edvard", + "Fredrik", "Iurii", "Darius", "Georgy", "Viacheslav", "Antonio", "Evgeniy", "Filipp", + "Jon", "Andrius", "Eugen", "Jaroslav", "Edgars", "George", "Algis", "Kurt", + "Emil", "Niels", "Norman", "Ian", "Andry", "Tommy", "Rustam", "Pavlo", + "Valerii", "Evgeni", "Jurgen", "Sebastian", "Herbert", "Pierre", "Oleksii", "Marc", + "Samuel", "Adam", "Patrik", "Aron", "Hakan", "Serguei", "Petro", "Franz", + "Vasyl", "Sergej", "Benjamin", "Brian", "Joakim", "Vitalii", "Benno", "Carlos", + "Sergiy", "Vitaliy", "Jack", "Knut", "Rodion", "Enrico", "Grigory", "Herman", + "Philip", "Jose", "Tim", "Omar", "Armand", "Vilmar", "Rafael", "Adrian", + "Renat", "Anatolii", "Dzmitry", "Danil", "Eldar", "Gerhard", "Fedor", "Raoul", + "Sergo", "Anthony", "Jesper", "Matthew", "Francesco", "Gary", +}; + +const std::vector estonianFemalesFirstNames = { + "Olga", "Irina", "Jelena", "Svetlana", "Tatjana", "Katrin", "Natalja", "Anna", + "Anne", "Marina", "Galina", "Maria", "Julia", "Anneli", "Valentina", "Marika", + "Karin", "Natalia", "Kristina", "Eve", "Helen", "Merle", "Margit", "Mati", + "Annika", "Jana", "Kaja", "Kristel", "Jekaterina", "Elena", "Mari", "Valeri", + "Diana", "Viktoria", "Krista", "Ingrid", "Lea", "Monika", "Larissa", "Oksana", + "Maris", "Evelin", "Maire", "Helle", "Inna", "Alla", "Inga", "Tamara", + "Signe", "Eva", "Rita", "Linda", "Aili", "Ilona", "Rene", "Tatiana", + "Laura", "Veronika", "Janne", "Kati", "Aleksandra", "Jane", "Aime", "Margarita", + "Helena", "Ruth", "Erika", "Eda", "Denis", "Elina", "Alina", "Heidi", + "Inge", "Kari", "Sigrid", "Anastassia", "Regina", "Agnes", "Maia", "Ester", + "Margo", "Birgit", "Mai", "Sandra", "Ellen", "Karina", "Ekaterina", "Leida", + "Marit", "Angela", "Nele", "Nadezda", "Asta", "Karmen", "Liudmila", "Marianne", + "Nina", "Andreas", "Mirjam", "Grete", "Kristin", "Silvia", "Egle", "Hanna", + "Lidia", "Mika", "Raissa", "Valeria", "Ksenia", "Astrid", "Tea", "Anastasia", + "Lilian", "Nikita", "Antonina", "Yulia", "Anni", "Zinaida", "Evelyn", "Nelli", + "Lilia", "Aimar", "Silva", "Ann", "Darja", "Vera", "Larisa", "Janis", + "Marianna", "Ludmilla", "Saima", "Ella", "Julija", "Andra", "Anita", "Leena", + "Irene", "Elen", "Petri", "Johanna", "Helga", "Margot", "Stella", "Marta", + "Kirsti", "Mariann", "Liana", "Nadezhda", "Vilma", "Arina", "Kaur", "Angelika", + "Marie", "Polina", "Elis", "Lia", "Monica", "Angelina", "Gerda", "Bo", + "Elvira", "Valery", "Yana", "Liubov", "Victoria", "Alice", "Dagmar", "Natalija", + "Rimma", "Olena", "Irena", "Marion", "Ulla", "Thea", "Maila", "Carmen", + "Irma", "Sofia", "Berit", "Ursula", "Kristine", "Oxana", "Kelly", "Lena", + "Tatyana", "Alena", "Viktorija", "Erna", "Dina", "Alexandra", "Natalya", "Leila", + "Karen", "Elsa", "Yuliya", "Katerina", "Iris", "Marja", "Agne", "Renee", + "Alisa", "Helene", "Alevtina", "Hilda", "Nataliya", "Kerstin", "Katja", "Marilin", + "Ira", "Doris", "Kim", "Viktoriya", "Tanja", "Lina", "Paula", "Edith", + "Katrina", "Zhanna", "Iryna", "Christina", "Dan", "Pia", "Eleonora", "Dima", + "Gea", "Elisabeth", "Marian", "Selma", "Andrea", "Ilse", "Ruta", "Albina", + "Sasha", "Ines", "Aina", "Evelina", "Marija", "Marleen", "Ada", "Susanna", + "Tetiana", "Katarina", "Liza", "Aira", "Natali", "Elin", "Inessa", "Lyudmila", + "Ethel", "Vivian", "Ludmila", "Anette", "Karolina", "Evgenia", "Karol", "Marili", + "Iuliia", "Kristen", "Juliana", "Reena", "Britta", "Lilli", "Mariana", "Anastasiya", + "Mariya", "Iveta", "Marita", "Elise", "Lydia", "Emma", "Alma", "Marlen", + "Violetta", "Lily", "Iren", "Raisa", "Nataliia", "Evgeniya", "Elizaveta", "Mia", + "Mary", "Naima", "Lee", "Renata", "Greta", "Daisy", "Varvara", "Raja", + "Yuri", "Iraida", "Ilze", "Robin", "Britt", "Renate", "Daria", "Anzelika", + "Kira", "Karine", "Tetyana", "Anya", "Dana", "Alyona", "Svitlana", "Nadja", + "Livia", "Ina", "Ana", "Katya", "Lisa", "Ksenija", "Janina", "Lada", + "Maryna", "Merlyn", "Lana", "Veronica", "Alissa", "Elga", "Dennis", "Sanna", + "Maren", "Brit", "Laila", "Enna", "Emilia", "Natasha", "Nika", "Inger", + "Olesya", "Rena", "Susanne", "Dasha", "Nora", "Kateryna", "Mae", "Dea", + "Heidy", "Larysa", "Anastasiia", "Joanna", "Anett", "Magda", "Natalie", "Nataly", + "Ida", "Faina", "Roza", "Milana", "Lili", "Amanda", +}; +} diff --git a/src/modules/person/data/estonia/EstonianLastNames.h b/src/modules/person/data/estonia/EstonianLastNames.h new file mode 100644 index 000000000..a5b913295 --- /dev/null +++ b/src/modules/person/data/estonia/EstonianLastNames.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector estonianLastNames = { + "Tamm", "Saar", "Sepp", "Kask", "Mägi", "Kukk", "Rebane", "Koppel", + "Karu", "Ilves", "Lepik", "Oja", "Ivanov", "Kuusk", "Kaasik", "Cuca", + "Luik", "Raudsepp", "Vaher", "Kallas", "Lepp", "Laur", "Pärn", "Kuusik", + "Kivi", "Ots", "Liiv", "Peterson", "Teder", "Mets", "Põder", "Kull", + "Kütt", "Puusepp", "Kangur", "Jakobson", "Rand", "Toom", "Saks", "Smirnov", + "Leppik", "Raud", "Mitt", "Sild", "Sarapuu", "Ivanova", "Mölder", "Roos", + "Tamme", "Allik", "Kõiv", "Paju", "Paas", "Laas", "Pukk", "Miller", + "Palm", "Tomson", "Uibo", "Põld", "Jürgenson", "Kalda", "Lill", "Männik", + "Nõmm", "Johanson", "Orav", "Unt", "Parts", "Lind", "Hunt", "Petrov", + "Arro", "Adamson", "Hein", "Lember", "Rätsep", "Järv", "Nurk", "Tali", + "Pihlak", "Kase", "Aavik", "Kruus", "Valk", "Hansen", "Järve", "Väli", + "Vares", "Aru", "Rohtla", "Kikas", "Sikk", "Mõttus", "Soosaar", "Kuznetsov", + "Vassiljev", "Kolk", "Must", "Sarv", "Martin", "Mänd", "Annus", "Kala", + "Tilk", "Luts", "Varik", "Tomingas", "Raid", "Smirnova", "Pavlov", "Kirsipuu", + "Laine", "Aas", "Anderson", "Lang", "Kaur", "Anton", "Post", "Aus", + "Abel", "Ojala", "Kokk", "Palu", "Schmidt", "Kuus", "Kink", "Gross", + "Popov", "Ott", "Martinson", "Rosenberg", "Roots", "Reimann", "Sokolov", "Allas", + "Toome", "Volkov", "Sander", "Kirs", "Lipp", "Põldma", "Taal", "Hanson", + "Kalmus", "Paal", "Petrova", "Link", "Berg", "Aun", "Simson", "Müürsepp", + "Eller", "Liivak", "Kurg", "Stepanov", "Laan", "Kass", "Trei", "Leis", + "Koit", "Morozov", "Susi", "Raja", "Lumi", "Meier", "Vain", "Lass", + "Kim", "Aasa", "Parve", "Mark", "Lauri", "Kozlov", "Sutt", "Soo", + "Erm", "Lebedev", "Saul", "Holm", "Kuznetsova", "Popova", "Poom", "Soots", + "Andersson", "Jürgens", "Kelder", "Kalm", "Eriksson", "Kont", "Kroon", "Kutsar", + "Pajula", "Kasak", "Salu", "Koger", "Nikitin", "Peets", "Siim", "Johansson", + "Ader", "Savi", "Novikov", "Alas", "Padar", "Muru", "Silm", "Suvi", + "Rosin", "Kuzmin", "Aleksandrov", "Markus", "Zaitsev", "Pihl", "Joost", "Meister", + "Pavlova", "Viik", "Karp", "Remmel", "Orlov", "Piho", "Braun", "Raidma", + "Maksimov", "Bergmann", "Kool", "Laks", "Romanov", "Li", "Filippov", "Antonov", + "Hendrikson", "Talvik", "Laos", "Kruuse", "Reinhold", "Virtanen", "Borissov", "Solovjov", + "Oks", "Malm", "Moor", "Trofimov", "Kovalenko", "Türk", "Tomberg", "Jensen", + "Noor", "Fjodorova", "Kapp", "Paap", "Treier", "Savolainen", "Bondarenko", "Kalle", + "Rist", "Ross", "Stepanova", "Larsson", "Smith", "Paulus", "Orlova", "Sillaots", + "Jaanus", "Vene", "Semjonova", "Vahi", "Pent", "Tisler", "Volkova", "Nilsson", + "Lee", "Roose", "Janson", "Makarov", "Lehtonen", "Kaup", "Lille", "Vill", + "Frolov", "Sisask", "Erik", "Raun", "Karlsson", "Belov", "Loo", "Vinogradov", + "Lehtinen", "Tasa", "Pajo", "Aava", "Klein", "Merila", "Alt", "Evert", + "Pool", "Lukas", "Lääts", "Mere", "Pill", "Vare", "Baranov", "Matt", + "Steinberg", "Reiman", "Bogdanov", "Pulk", "Grünberg", "Press", "Koch", "Soon", + "Mandel", "Jakovleva", "Andersen", "Aleksandrova", "Kaldma", "Sommer", "Vilu", "Mustonen", + "Melnikov", "Jaakson", "Korhonen", "Nieminen", "Borissova", "Rinne", "Makarova", "Otsa", + "Hurt", "Sorokin", "Valdmann", "Kanter", "Kipper", "Tint", "Hint", "Sein", + "Nael", "Bachmann", "Laar", "Suviste", "Raig", "Grigorjeva", "Sergejev", "Klaas", + "Nikitina", "Haas", "Lebedeva", "Margus", "Saag", "Kirt", +}; +} diff --git a/src/modules/person/data/estonia/EstonianPeopleNames.h b/src/modules/person/data/estonia/EstonianPeopleNames.h new file mode 100644 index 000000000..4d37adbb3 --- /dev/null +++ b/src/modules/person/data/estonia/EstonianPeopleNames.h @@ -0,0 +1,16 @@ +#pragma once + +#include "../NameFormats.h" +#include "../PeopleNames.h" +#include "EstonianFirstNames.h" +#include "EstonianLastNames.h" + +namespace faker +{ +const NameFormats estonianPersonNameFormats{{"{firstName} {lastName}", 1}}; + +const PeopleNames estonianPeopleNames{{estonianMalesFirstNames, {}, estonianLastNames, {}, {}}, + {estonianFemalesFirstNames, {}, estonianLastNames, {}, {}}, + estonianPersonNameFormats}; + +} diff --git a/src/modules/person/data/ireland/IrishFirstNames.h b/src/modules/person/data/ireland/IrishFirstNames.h new file mode 100644 index 000000000..53192f188 --- /dev/null +++ b/src/modules/person/data/ireland/IrishFirstNames.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector irishMalesFirstNames = { + "John", "Michael", "Patrick", "Thomas", "James", "David", "Joseph", "Paul", + "Sean", "William", "Martin", "Peter", "Gerard", "Brian", "Kevin", "Brendan", + "Liam", "Anthony", "Richard", "Robert", "Frank", "Daniel", "Stephen", "Edward", + "Mark", "Alan", "Tony", "Timothy", "Andrew", "Declan", "Philip", "Conor", + "Vincent", "Christopher", "Niall", "Kieran", "Gerry", "Bernard", "Aidan", "Raymond", + "Barry", "George", "Colm", "Derek", "Eugene", "Matthew", "Kenneth", "Eamon", + "Desmond", "Hugh", "Charles", "Oliver", "Shane", "Ciaran", "Ian", "Micheal", + "Damien", "Chris", "Gary", "Keith", "Ronan", "Adrian", "Maurice", "Neil", + "Colin", "Nicholas", "Jeremiah", "Owen", "Eddie", "Simon", "Henry", "Jerry", + "Darren", "Terry", "Jack", "Tommy", "Gerald", "Terence", "Billy", "Jimmy", + "Jason", "Rory", "Larry", "Jonathan", "Harry", "Leo", "Graham", "Trevor", + "Eric", "Donald", "Arthur", "Gavin", "Dominic", "Karl", "Phillip", "Steven", + "Edmond", "Nigel", "Walter", "Austin", "Albert", "Damian", "Gabriel", "Cyril", + "Tomas", "Greg", "Luke", "Roger", "Bill", "Joe", "Adam", "Charlie", + "Gordon", "Victor", "Ivan", "Justin", "Alexander", "Bryan", "Norman", "Garry", + "Stuart", "Roy", "Louis", "Alex", "Gareth", "Ronald", "Cornelius", "Leonard", + "Ross", "Wayne", "Jerome", "Marcin", "Jim", "Edmund", "Gregory", "Piotr", + "Fredrick", "Jamie", "Samuel", "Cian", "Tomasz", "Carl", "Ben", "Sam", + "Pawel", "Johnny", "Julian", "Ken", "Marcus", "Nick", "Aaron", "Clive", + "Benjamin", "Marc", "Ali", "Marek", "Fran", "Lukasz", "Hubert", "Shaun", + "Douglas", "Ray", "Malcolm", "Pascal", "Krzysztof", "Ryan", "Geoffrey", "Michal", + "Mervyn", "Ronnie", "Jan", "Nicky", "Craig", "Bob", "Bobby", "Dean", + "Lawrence", "Rafal", "Ernest", "Edwin", "Steve", "Christian", "Robbie", "Mathew", + "Glen", "Scott", "Aiden", "Tim", "Jose", "Muhammad", "Killian", "Alfred", + "Glenn", "Grzegorz", "Stanley", "Sebastian", "Jeremy", "Sylvester", "Antonio", "Mariusz", + "Ivor", "Frankie", "Frederick", "Jeff", "Connor", "Harold", "Mohammed", "Neville", + "Dominick", "Felix", "Marius", "Ralph", "Maciej", "Benny", "Bart", "Wesley", + "Jacek", "Herbert", "Ron", "Andrzej", "Allan", "Ahmed", "Wojciech", "Teddy", + "Warren", "Dick", "Stefan", "Artur", "Roland", "Mario", "Bruce", "Jon", + "Clement", "Stewart", "Jude", "Marco", "Emmanuel", "Russell", "Allen", "Andre", + "Mohammad", "Howard", "Joey", "Alec", "Dariusz", "Max", "Christoph", "Basil", + "Evan", "Igor", "Nicolas", "Carlos", "Rodney", "Iain", "Stan", "Jaroslaw", + "Reginald", "Matt", "Roman", "Dylan", "Augustine", "Leon", "Przemyslaw", "Arkadiusz", + "Stephan", "Darius", "Hans", "Mohamed", "Vladimir", "Freddie", "Kenny", "Graeme", + "Luis", "Hugo", "Bruno", "Norbert", "Nathan", "Clifford", "Syed", "Pierre", + "Duncan", "Roderick", "Kamil", "Alfie", "Patrice", "Jay", "Jakub", "Abdul", + "Raphael", "Oleg", "Radoslaw", "Derrick", "Conrad", "Lukas", "Bartosz", "Bert", + "Roberto", "Anton", "Manuel", "Ioan", "Fabio", "Jeffrey", "Percy", "Alistair", + "Mateusz", "Miguel", "Andrei", "Ricky", "Pavel", "Pedro", "Guy", "Luca", + "Gilbert", "Jacob", "Kelvin", "Benedict", "Morris", "Antony", "Sergio", "Alessandro", + "Zbigniew", "Slawomir", "Omar", "Ricardo", "Jordan", "Guillaume", "Arnold", "Christophe", + "Joshua", "Markus", "Dominik", "Javier", "Marcel", "Johnathan", "Cedric", "Rick", + "Lucas", "Angelo", "Frederic", "Lionel", "Olivier", "Angus", "Andrius", "Cristian", + "Erik", "Francisco", "Daryl", "Eduardo", "Wolfgang", "Jorge", +}; + +const std::vector irishFemalesFirstNames = { + "Mary", "Margaret", "Ann", "Kathleen", "Anne", "Catherine", "Elizabeth", "Patricia", + "Noel", "Eileen", "Marie", "Denis", "Bridget", "Helen", "Teresa", "Sarah", + "Joan", "Geraldine", "Maureen", "Caroline", "Deirdre", "Susan", "Michelle", "Bernadette", + "Fiona", "Carmel", "Angela", "Maria", "Anna", "Karen", "Nora", "Sheila", + "Claire", "Sinead", "Pauline", "Sharon", "Siobhan", "Lisa", "Francis", "Linda", + "Sandra", "Josephine", "Maura", "Louise", "Elaine", "Martina", "Frances", "Rose", + "Niamh", "Lorraine", "Laura", "Jennifer", "Rita", "Barbara", "Christina", "Valerie", + "Noreen", "Carol", "Paula", "Yvonne", "Ellen", "Christine", "Marian", "Emma", + "Theresa", "Philomena", "Jane", "Annie", "Nuala", "Denise", "Nicola", "Una", + "Alice", "Ciara", "Julie", "Christy", "Gillian", "Rachel", "Laurence", "Amanda", + "Clare", "Brigid", "Joanne", "Aoife", "Suzanne", "Ruth", "Monica", "Evelyn", + "Annette", "Veronica", "Aisling", "Aine", "Colette", "Rosemary", "Brenda", "Jean", + "Olive", "Irene", "Kate", "Agnes", "Audrey", "Maeve", "Jacqueline", "Edel", + "Marion", "Betty", "Tara", "Miriam", "Kay", "Pamela", "Alison", "Julia", + "Grace", "Dolores", "Helena", "Deborah", "Phyllis", "Aileen", "Olivia", "Esther", + "Tracey", "Nancy", "Imelda", "Vera", "Eleanor", "Cathy", "Andrea", "Rebecca", + "Tracy", "Therese", "Anita", "Janet", "Tina", "Maire", "Lucy", "Stephanie", + "Peggy", "Celine", "Danny", "Donna", "Jacinta", "Jenny", "Dorothy", "Robin", + "Lorna", "Emily", "Sally", "Liz", "Hannah", "Samantha", "Amy", "Florence", + "Joanna", "Sylvia", "June", "Ursula", "Shirley", "Antoinette", "Gemma", "Martha", + "Debbie", "Regina", "Katherine", "May", "Eva", "Dennis", "Hazel", "Dara", + "Katie", "Doreen", "Georgina", "Moira", "Natasha", "Victoria", "Wendy", "Kitty", + "Adrienne", "Sara", "Hilary", "Johanna", "Tanya", "Avril", "Leslie", "Kelly", + "Kim", "Jessica", "Joyce", "Connie", "Winifred", "Judith", "Lynn", "Cora", + "Diane", "Vivienne", "Lynda", "Marcella", "Natalie", "Olga", "Monika", "Charlotte", + "Kathy", "Stella", "Agnieszka", "Madeline", "Heather", "Vanessa", "Josie", "Muriel", + "Annemarie", "Bernadett", "Marguerite", "Melissa", "Norma", "Marta", "Diana", "Judy", + "Marina", "Melanie", "Mona", "Dawn", "Lena", "Morgan", "Lily", "Celia", + "Sonia", "Magdalena", "Nellie", "Beatrice", "Sadie", "Joy", "Lee", "Sabrina", + "Delia", "Janice", "Vivian", "Gina", "Mai", "Jill", "Noelle", "Margret", + "Hilda", "Nicole", "Loretta", "Kathryn", "Naomi", "Leanne", "Gwen", "Elena", + "Ashley", "Marjorie", "Cecilia", "Violet", "Natalia", "Lesley", "Clara", "Gertrude", + "Sue", "Freda", "Sheena", "Michele", "Norah", "Rachael", "Rosemarie", "Vicky", + "Lucia", "Leona", "Anastasia", "Danielle", "Iris", "Mel", "Katarzyna", "Lillian", + "Gladys", "Alexandra", "Malgorzata", "Sophie", "Marianne", "Beata", "Myra", "Jeanette", + "Cathleen", "Gabrielle", "Inga", "Karol", "Carole", "Ethel", "Ana", "Cathrine", + "Ena", "Karina", "Ewa", "Carolyn", "Nina", "Sonya", "Zoe", "Alma", + "Edith", "Ingrid", "Gail", "Claudia", "Edwina", "Kerry", "Gloria", "Katrina", + "Elsie", "Madeleine", "Rosie", "Dan", "Shelia", "Margo", "Cristina", "Kristina", + "Susanne", "Isobel", "Belinda", "Debra", "Iwona", "Lynne", "Doris", "Erika", + "Charlene", "Lauren", "Lilian", "Simone", "Molly", "Nadine", "Rena", "Adele", + "Renata", "Janette", "Lilly", "Ina", "Leah", "Irina", "Svetlana", "Virginia", + "Assumpta", "Silvia", "Sylwia", "Ella", "Cheryl", "Karolina", "Maggie", "Stacey", + "Rasa", "Agata", "Dorota", "Arlene", "Maud", "Cynthia", +}; +} diff --git a/src/modules/person/data/ireland/IrishLastNames.h b/src/modules/person/data/ireland/IrishLastNames.h new file mode 100644 index 000000000..112a3bdce --- /dev/null +++ b/src/modules/person/data/ireland/IrishLastNames.h @@ -0,0 +1,55 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector irishLastNames = { + "Murphy", "Kelly", "Byrne", "Walsh", "Ryan", "Doyle", "Lynch", "Mccarthy", + "Brennan", "Dunne", "Murray", "Burke", "Smith", "Daly", "Nolan", "Kennedy", + "Fitzgerald", "Gallagher", "Flynn", "Collins", "Power", "Quinn", "Farrell", "Carroll", + "Kavanagh", "Connolly", "Healy", "Clarke", "Duffy", "Doherty", "Brady", "Whelan", + "Kenny", "Fitzpatrick", "Moore", "Keane", "Moran", "Reilly", "Mcgrath", "Barry", + "Foley", "Hayes", "Maher", "Buckley", "Martin", "Casey", "Roche", "Hughes", + "Smyth", "Browne", "Butler", "Mcmahon", "Hogan", "Griffin", "Egan", "White", + "Sweeney", "Cullen", "Hickey", "Ward", "Cunningham", "Maguire", "Lyons", "Mcdonnell", + "Delaney", "Cronin", "Sheehan", "Keogh", "Mccormack", "Higgins", "Curran", "Cahill", + "Mcloughlin", "Boyle", "Crowley", "Mckenna", "Sheridan", "Molloy", "Barrett", "Flanagan", + "King", "Moloney", "Phelan", "Dowling", "Mooney", "Mcnamara", "Corcoran", "Costello", + "Hennessy", "Malone", "Lawlor", "Conway", "Fox", "Kearney", "Carey", "Dempsey", + "Duggan", "Donnelly", "Mccabe", "Mcdermott", "Dolan", "Gleeson", "Cleary", "Joyce", + "Mcdonagh", "Kelleher", "Mcdonald", "Jones", "Redmond", "Mchugh", "Conroy", "Coleman", + "Reynolds", "Coughlan", "Cummins", "Kinsella", "Hurley", "Dillon", "Fleming", "Lee", + "Keating", "Clancy", "Tobin", "Breen", "Campbell", "Leahy", "Sullivan", "Morrissey", + "Leonard", "Rooney", "Greene", "Mahon", "Finn", "Coffey", "Cassidy", "Forde", + "Heffernan", "Long", "Bourke", "Cooney", "Madden", "Hynes", "Mcevoy", "Woods", + "Williams", "Finnegan", "Kirwan", "Geraghty", "Morris", "Wilson", "Doran", "Larkin", + "Meehan", "Hegarty", "Galvin", "Harrington", "Mulligan", "Allen", "Farrelly", "Fahy", + "Kiely", "Jordan", "Mcguinness", "Conlon", "Kane", "Lennon", "Callaghan", "Mccann", + "Coyle", "Boland", "Twomey", "Morgan", "Monaghan", "Treacy", "Gorman", "Dalton", + "Quigley", "Reid", "Mcgovern", "Mitchell", "Noonan", "Bradley", "Keenan", "Brown", + "Russell", "Mulcahy", "Fagan", "Dooley", "Wall", "Davis", "Mclaughlin", "Mullen", + "Horgan", "Burns", "Dwyer", "Carr", "Tierney", "Keegan", "Purcell", "Cotter", + "Naughton", "Kearns", "Scanlon", "Lane", "Fogarty", "Horan", "Thompson", "Murtagh", + "Harte", "Fallon", "Flood", "Wallace", "Hannon", "Grant", "Hanley", "Scully", + "Kehoe", "Johnston", "Slattery", "Ahern", "Glynn", "Taylor", "Connor", "Corrigan", + "Scott", "Kiernan", "Curtin", "Rogers", "Gannon", "Bolger", "Shanahan", "Regan", + "Flaherty", "Donohoe", "Nugent", "Behan", "Mannion", "Gibbons", "Donovan", "Quirke", + "Bergin", "Clifford", "Downey", "Graham", "Hyland", "Quinlan", "Henry", "Mcmanus", + "Prendergast", "Gaffney", "Robinson", "Moriarty", "Carolan", "Gavin", "Condon", "Mcgowan", + "Coyne", "Moco", "Young", "Bennett", "Mcgee", "Mcnally", "Mullins", "Brophy", + "Howard", "Matthews", "Hayden", "Fitzsimons", "Obrien", "Gill", "Feeney", "Reidy", + "Brosnan", "Donoghue", "Darcy", "Mcsweeney", "Jennings", "Johnson", "Walshe", "Cox", + "Cooke", "Moynihan", "Stewart", "Owens", "Geoghegan", "Sheehy", "Ennis", "Lawless", + "Crowe", "Shannon", "Gray", "Boylan", "Mangan", "Rice", "Holland", "Furlong", + "Jackson", "Connell", "Vaughan", "Oconnor", "Sexton", "Maloney", "Whyte", "Devine", + "Broderick", "Anderson", "Hunt", "English", "Halpin", "Blake", "Dunphy", "Mcguire", + "Harris", "Walker", "Devlin", "Mcbride", "O'brien", "O'connor", "O'sullivan", "O'neill", + "O'reilly", "O'connell", "O'donnell", "O'shea", "O'leary", "O'keeffe", "O'donovan", "O'mahony", + "O'callaghan", "O'donoghue", "O'rourke", "O'toole", "O'dwyer", "O'driscoll", "O'grady", "O'regan", + "O'malley", "O'riordan", "O'gorman", "O'halloran", "O'hara", "O'meara", "O'loughlin", "O'flynn", + "O'hanlon", "O'dowd", "O'flaherty", "O'byrne", "O'carroll", "O'farrell", + +}; +} diff --git a/src/modules/person/data/ireland/IrishPeopleNames.h b/src/modules/person/data/ireland/IrishPeopleNames.h new file mode 100644 index 000000000..f5119ef7a --- /dev/null +++ b/src/modules/person/data/ireland/IrishPeopleNames.h @@ -0,0 +1,22 @@ +#pragma once + +#include "../NameFormats.h" +#include "../PeopleNames.h" +#include "IrishFirstNames.h" +#include "IrishLastNames.h" +#include "IrishPrefixes.h" +#include "IrishSuffixes.h" + +namespace faker +{ +// TODO: add handling lastName-lastName + +const NameFormats irishPersonNameFormats{{{"{firstName} {lastName}", 49}, + {"{prefix} {firstName} {lastName}", 7}, + {"{firstName} {lastName} {suffix}", 7}, + {"{prefix} {firstName} {lastName} {suffix}", 1}}}; + +const PeopleNames irishPeopleNames{{irishMalesFirstNames, {}, irishLastNames, irishMalesPrefixes, irishSuffixes}, + {irishFemalesFirstNames, {}, irishLastNames, irishFemalesPrefixes, irishSuffixes}, + irishPersonNameFormats}; +} diff --git a/src/modules/person/data/ireland/IrishPrefixes.h b/src/modules/person/data/ireland/IrishPrefixes.h new file mode 100644 index 000000000..889b92619 --- /dev/null +++ b/src/modules/person/data/ireland/IrishPrefixes.h @@ -0,0 +1,11 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector irishMalesPrefixes{"Mr.", "Dr."}; + +const std::vector irishFemalesPrefixes{"Mrs.", "Ms.", "Miss", "Dr."}; +} diff --git a/src/modules/person/data/ireland/IrishSuffixes.h b/src/modules/person/data/ireland/IrishSuffixes.h new file mode 100644 index 000000000..1fbbc6595 --- /dev/null +++ b/src/modules/person/data/ireland/IrishSuffixes.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector irishSuffixes{"Jr.", "Sr.", "I", "II", "III", "IV", "V", "MD", "DDS", "PhD", "DVM"}; +} diff --git a/src/modules/person/data/latvia/LatvianFirstNames.h b/src/modules/person/data/latvia/LatvianFirstNames.h new file mode 100644 index 000000000..3cd6535ea --- /dev/null +++ b/src/modules/person/data/latvia/LatvianFirstNames.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector latvianMalesFirstNames = { + "Ainārs", "Alfrēds", "Aloīzs", "Aļģirds", "Aļģis", "Andris", "Andžejs", "Andžs", "Anrijs", + "Anšlavs", "Arkādijs", "Armīns", "Artūrs", "Arvīds", "Ādams", "Ādolfs", "Ārijs", "Āris", + "Boļeslavs", "Broņislavs", "Dāgs", "Dāvids", "Dāvis", "Edgars", "Edvīns", "Eduards", "Edžus", + "Egīls", "Einārs", "Eižens", "Elmārs", "Emīls", "Ermīns", "Ervīns", "Ēriks", "Ēvalds", + "Gunārs", "Ģederts", "Ģirts", "Ilgmārs", "Ilmārs", "Inārs", "Indriķis", "Ingmārs", "Jānis", + "Jāzeps", "Jevgeņijs", "Jēkabs", "Jurģis", "Jūlijs", "Kārlis", "Klāvs", "Konrāds", "Konstantīns", + "Kristiāns", "Krišjānis", "Krišs", "Leonīds", "Marģers", "Matīss", "Mārcis", "Māris", "Mārtiņš", + "Miķelis", "Monvīds", "Niklāvs", "Ojārs", "Oļegs", "Oļģerts", "Pāvils", "Pēteris", "Regnārs", + "Renārs", "Ričards", "Romāns", "Rūdis", "Rūdolfs", "Rūsiņš", "Tālis", "Tālivaldis", "Tālrīts", + "Uģis", "Valdemārs", "Valentīns", "Valērijs", "Vilmārs", "Vitālijs", "Voldemārs", "Zigfrīds", "Zigmārs", + "Žanis", +}; + +const std::vector latvianFemalesFirstNames = { + "Aīda", "Akvelīna", "Albertīne", "Alvīne", "Amālija", "Astrīda", "Aurēlija", "Ārija", "Baņuta", + "Bārbala", "Beāte", "Dagmāra", "Dainuvīte", "Dārta", "Diāna", "Dzirkstīte", "Dzīle", "Edīte", + "Elfrīda", "Elīna", "Elīza", "Elmīra", "Elvīra", "Emīlija", "Ernestīne", "Evelīna", "Ērika", + "Frīda", "Gabriela", "Gudrīte", "Ģertrūde", "Helēna", "Hermīne", "Ināra", "Ingrīda", "Ingūna", + "Irēna", "Īrisa", "Janīna", "Jasmīna", "Jautrīte", "Judīte", "Justīne", "Jūlija", "Jūsma", + "Karīna", "Katrīna", "Klāra", "Kristiāna", "Kristīne", "Lavīze", "Lāsma", "Leonīda", "Leontīne", + "Liāna", "Liliāna", "Lība", "Līga", "Līksma", "Līna", "Līva", "Līvija", "Līze", + "Luīze", "Lūcija", "Malvīne", "Māra", "Mārīte", "Mētra", "Modrīte", "Mudīte", "Olīvija", + "Otīlija", "Patrīcija", "Paulīne", "Pārsla", "Regīna", "Renāte", "Rudīte", "Rūta", "Sabīne", + "Sarmīte", "Saulcerīte", "Skaidrīte", "Spīdola", "Tamāra", "Terēze", "Tīna", "Trīne", "Undīne", + "Valentīna", "Valērija", "Vēsma", "Vijolīte", "Vilhelmīne", "Vizbulīte", "Zeltīte", "Ziedīte", "Zigfrīda", + "Zigrīda", "Zīle", "Žanete", "Žanna", "Ženija", "Žubīte", +}; +} diff --git a/src/modules/person/data/latvia/LatvianLastNames.h b/src/modules/person/data/latvia/LatvianLastNames.h new file mode 100644 index 000000000..56c69caa7 --- /dev/null +++ b/src/modules/person/data/latvia/LatvianLastNames.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector latvianMalesLastNames = { + "Aigars", "Alksnis", "Andersons", "Aspers", "Auziņš", "Ābele", "Āboliņš", "Āboltiņš", + "Balodis", "Beļavskis", "Bergmanis", "Bērziņš", "Bērzīts", "Birziņš", "Birznieks", "Bīriņš", + "Blaus", "Blekte", "Breņķis", "Briedis", "Brunkevičs", "Builis", "Bušs", "Caune", + "Cālītis", "Cīrulis", "Čudars", "Danielsons", "Dīriķis", "Dombrovskis", "Dreimanis", "Dzenis", + "Eglītis", "Endziņš", "Fogelis", "Freimanis", "Gailis", "Gailītis", "Gibala", "Graudiņš", + "Gribusts", "Grīnbergs", "Grūbe", "Jansons", "Jēkabsons", "Jukums", "Kalējs", "Kalniņš", + "Karlsons", "Kauliņš", "Kārkliņš", "Kļaviņš", "Kohs", "Koks", "Krancis", "Krastiņš", + "Kraulis", "Krauze", "Krēsliņš", "Krieviņš", "Krievs", "Kronbergs", "Krūmiņš", "Kulmanis", + "Laiviņš", "Landmanis", "Lapiņš", "Lapsiņš", "Lasmanis", "Laubergs", "Lācis", "Legzdiņš", + "Lielmanis", "Liepiņš", "Līcis", "Līdaks", "Ločs", "Lodiņš", "Lūsis", "Matisons", + "Mednis", "Meiers", "Mekšs", "Melderis", "Melngailis", "Mihailovs", "Miķelsons", "Niedra", + "Osis", "Ostrovskis", "Ozers", "Ozoliņš", "Ozols", "Palters", "Pavlovskis", "Pencis", + "Petrovskis", "Pērkons", "Pētersons", "Podziņš", "Polis", "Pretkalniņš", "Priedītis", "Puķītis", + "Putniņš", "Riekstiņš", "Romanovskis", "Rozenbahs", "Rozītis", "Rubenis", "Rudzītis", "Runcis", + "Salmiņš", "Seržants", "Sietnieks", "Siliņš", "Sīlis", "Skudra", "Smuģis", "Sproģis", + "Sprūde", "Strautiņš", "Strautmanis", "Strazdiņš", "Širovs", "Šīrants", "Šmits", "Šteins", + "Tālbergs", "Teicāns", "Tiltiņš", "Tīrelis", "Tučs", "Ūdris", "Valters", "Vasils", + "Vecumnieks", "Veinbergs", "Veiss", "Vilks", "Vilsons", "Viļums", "Vinters", "Vītiņš", + "Vītoliņš", "Vītols", "Vītums", "Vollis", "Zariņš", "Zālītis", "Zeidmanis", "Zeltiņš", + "Ziemelis", "Zībers", "Zunda", "Zvaigzne", "Zvejnieks", "Zvinelis", "Mucenieks", "Dzirkalis", + "Arājs", "Sējējs", "Podnieks", "Ratnieks", "Deģis", "Bondars", "Sondors", "Namiķis", + "Jumiķis", "Muižnieks", "Bajārs", "Ķēniņš", "Ķeizars", "Barons", "Vaivads", "Zviedrs", + "Vācietis", "Lejiņš", "Vanags", "Celms", "Liepa", "Kalns", "Celmiņš", "Lejnieks", + "Bisenieks", "Kurzemnieks", "Saulietis", "Pakalnietis", "Pridāns", "Grodums", "Kalnājs", "Porgants", + "Sukuts", "Meškūns", "Rožkalns", "Mazjānis", "Latkovskis", "Jankovskis", "Šileiko", "Budreiko", + "Ivanovs", "Morozovs", "Logins", "Gasjūns", "Pauļuks", "Sosārs", +}; + +const std::vector latvianFemalesLastNames = { + "Aigare", "Alksne", "Andersone", "Aspere", "Auziņa", "Ābele", "Āboliņa", "Āboltiņa", + "Balode", "Beļavske", "Bergmane", "Bērziņa", "Bērzīte", "Birziņa", "Birzniece", "Bīriņa", + "Blaua", "Blekte", "Breņķe", "Briede", "Brunkeviča", "Buile", "Buša", "Cauna", + "Cālīte", "Cīrule", "Čudara", "Danielsone", "Dīriķe", "Dombrovska", "Dreimane", "Dzene", + "Eglīte", "Endziņa", "Fogele", "Freimane", "Gaile", "Gailīte", "Gibala", "Graudiņa", + "Gribuste", "Grīnberga", "Grūba", "Jansone", "Jēkabsone", "Jukuma", "Kalēja", "Kalniņa", + "Karlsone", "Kauliņa", "Kārkliņa", "Kļaviņa", "Koha", "Koka", "Krance", "Krastiņa", + "Kraule", "Krauze", "Krēsliņa", "Krieviņa", "Krieva", "Kronberga", "Krūmiņa", "Kulmane", + "Laiviņa", "Landmane", "Lapiņa", "Lapsiņa", "Lasmane", "Lauberga", "Lāce", "Legzdiņa", + "Lielmane", "Liepiņa", "Līce", "Līdaka", "Loča", "Lodiņa", "Lūse", "Matisone", + "Medne", "Meiere", "Mekša", "Meldere", "Melngaile", "Mihailova", "Miķelsone", "Niedra", + "Ose", "Ostrovska", "Ozere", "Ozoliņa", "Ozola", "Paltere", "Pavlovska", "Pence", + "Petrovska", "Pērkona", "Pētersone", "Podziņa", "Pole", "Pretkalniņa", "Priedīte", "Puķīte", + "Putniņa", "Riekstiņa", "Romanovska", "Rozenbaha", "Rozīte", "Rubene", "Rudzīte", "Runce", + "Salmiņa", "Seržante", "Sietniece", "Siliņa", "Sīle", "Skudra", "Smuģe", "Sproģe", + "Sprūde", "Strautiņa", "Strautmane", "Strazdiņa", "Širova", "Šīrante", "Šmite", "Šteina", + "Tālberga", "Teicāne", "Tiltiņa", "Tīrele", "Tuča", "Ūdre", "Valtere", "Vasile", + "Vecumniece", "Veinberga", "Veisa", "Vilka", "Vilsone", "Viļuma", "Vintere", "Vītiņa", + "Vītoliņa", "Vītola", "Vītuma", "Volle", "Zariņa", "Zālīte", "Zeidmane", "Zeltiņa", + "Ziemele", "Zībere", "Zunda", "Zvaigzne", "Zvejniece", "Zvinele", "Muceniece", "Dzirkale", + "Arāja", "Sējēja", "Podniece", "Ratniece", "Deģe", "Bondare", "Sondore", "Namiķe", + "Jumiķe", "Muižniece", "Bajāre", "Ķēniņa", "Ķeizare", "Barone", "Vaivade", "Zviedre", + "Vāciete", "Lejiņa", "Vanaga", "Celma", "Liepa", "Kalna", "Celmiņa", "Lejniece", + "Biseniece", "Kurzemniece", "Sauliete", "Pakalniete", "Pridāne", "Groduma", "Kalnāja", "Porgante", + "Sukute", "Meškūna", "Rožkalne", "Mazjāne", "Latkovska", "Jankovska", "Šileiko", "Budreiko", + "Ivanova", "Morozova", "Logina", "Gasjūne", "Pauļuka", "Sosāre", "Meškūne", +}; +} diff --git a/src/modules/person/data/latvia/LatvianPeopleNames.h b/src/modules/person/data/latvia/LatvianPeopleNames.h new file mode 100644 index 000000000..e35ac35f6 --- /dev/null +++ b/src/modules/person/data/latvia/LatvianPeopleNames.h @@ -0,0 +1,18 @@ +#pragma once + +#include "../NameFormats.h" +#include "../PeopleNames.h" +#include "LatvianFirstNames.h" +#include "LatvianLastNames.h" +#include "LatvianPrefixes.h" +#include "LatvianSuffixes.h" + +namespace faker +{ +const NameFormats latvianPersonNameFormats{ + {{"{firstName} {lastName}", 8}, {"{prefix} {firstName} {lastName}", 1}, {"{firstName} {lastName} {suffix}", 1}}}; + +const PeopleNames latvianPeopleNames{{latvianMalesFirstNames, {}, latvianMalesLastNames, latvianPrefixes, latvianSuffixes}, + {latvianFemalesFirstNames, {}, latvianFemalesLastNames, latvianPrefixes, latvianSuffixes}, + latvianPersonNameFormats}; +} diff --git a/src/modules/person/data/latvia/LatvianPrefixes.h b/src/modules/person/data/latvia/LatvianPrefixes.h new file mode 100644 index 000000000..a99c508aa --- /dev/null +++ b/src/modules/person/data/latvia/LatvianPrefixes.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector latvianPrefixes{"Prof.", "Dr.", "Biedrs"}; +} diff --git a/src/modules/person/data/latvia/LatvianSuffixes.h b/src/modules/person/data/latvia/LatvianSuffixes.h new file mode 100644 index 000000000..a9c2743ca --- /dev/null +++ b/src/modules/person/data/latvia/LatvianSuffixes.h @@ -0,0 +1,9 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector latvianSuffixes{"k-dze", "kundze"}; +} diff --git a/src/modules/string/String.cpp b/src/modules/string/String.cpp index 4a118e009..42478a5dd 100644 --- a/src/modules/string/String.cpp +++ b/src/modules/string/String.cpp @@ -67,6 +67,48 @@ std::string generateAtleastString(const GuaranteeMap& guarantee) return result; } +std::string String::generateStringWithGuarantee(GuaranteeMap& guarantee, std::set& targetCharacters, + unsigned int length) +{ + std::string output{}; + output += generateAtleastString(guarantee); + // string with least required chars cannot be greater than the total length + assert(output.size() <= length); + // we will generate chars for remaining length only + length -= static_cast(output.size()); + for (unsigned i = 0; i < length; ++i) + { + char generatedChar; + // generate chars till we find a usable char + while (true) + { + // pick random char from targetCharacters + generatedChar = Helper::setElement(targetCharacters); + + auto it = guarantee.find(generatedChar); + // if no constraint on generated char, break out of loop + if (it == guarantee.end()) + break; + auto remainingUses = it->second.atmostCount - it->second.atleastCount; + if (remainingUses > 0) + { + // decrement no of possible uses as we will use it right now + --it->second.atmostCount; + break; + } + // remove this char from targetCharacters as it is no longer valid and regenerate char + else + { + targetCharacters.erase(it->first); + } + } + output += generatedChar; + } + // shuffle the generated string as the atleast string generated earlier was not generated randomly + output = Helper::shuffleString(output); + return output; +} + std::string String::sample(unsigned int length) { std::string sample; @@ -164,8 +206,19 @@ std::string String::hexadecimal(unsigned int length, HexCasing casing, HexPrefix return hexadecimal; } +std::string String::binary(unsigned int length) +{ + std::string binaryNumber; + for (unsigned int i = 0; i < length; ++i) + { + binaryNumber += static_cast(Number::integer(1)); + } + return "0b" + binaryNumber; +} + std::string String::binary(GuaranteeMap&& guarantee, unsigned int length) { + // numbers used by binary representation std::set targetCharacters{'0', '1'}; // throw if guarantee is invalid if (!isValidGuarantee(guarantee, targetCharacters, length)) @@ -173,54 +226,28 @@ std::string String::binary(GuaranteeMap&& guarantee, unsigned int length) throw std::invalid_argument{"Invalid guarantee."}; } - std::string binary{}; - binary += generateAtleastString(guarantee); - // string with least required chars cannot be greater than the total length - assert(binary.size() <= length); - // we will generate chars for remaining length only - length -= static_cast(binary.size()); - for (unsigned i = 0; i < length; ++i) - { - char generatedChar; - // generate chars till we find a usable char - while (true) - { - // pick random char from targetCharacters - generatedChar = Helper::setElement(targetCharacters); - - auto it = guarantee.find(generatedChar); - // if no constraint on generated char, break out of loop - if (it == guarantee.end()) - break; - auto remainingUses = it->second.atmostCount - it->second.atleastCount; - if (remainingUses > 0) - { - // decrement no of possible uses as we will use it right now - --it->second.atmostCount; - break; - } - // remove this char from targetCharacters as it is no longer valid and regenerate char - else - { - targetCharacters.erase(it->first); - } - } - binary += generatedChar; - } - // shuffle the generated string as the atleast string generated earlier was not generated randomly - binary = Helper::shuffleString(binary); - return "0b" + binary; + return "0b" + generateStringWithGuarantee(guarantee, targetCharacters, length); } std::string String::octal(unsigned int length) { - std::string octal{"0o"}; - - for (unsigned i = 0; i < length; i++) + std::string octalNumber; + for (unsigned int i = 0; i < length; ++i) { - octal += static_cast(Number::integer(7)); + octalNumber += static_cast(Number::integer(7)); + } + return "0o" + octalNumber; +} +std::string String::octal(GuaranteeMap&& guarantee, unsigned int length) +{ + // numbers used by octal representation + std::set targetCharacters{'0', '1', '2', '3', '4', '5', '6', '7'}; + // throw if guarantee is invalid + if (!isValidGuarantee(guarantee, targetCharacters, length)) + { + throw std::invalid_argument{"Invalid guarantee."}; } - return octal; + return "0o" + generateStringWithGuarantee(guarantee, targetCharacters, length); } } diff --git a/src/modules/string/StringTest.cpp b/src/modules/string/StringTest.cpp index 5b55236f0..79b20f1a3 100644 --- a/src/modules/string/StringTest.cpp +++ b/src/modules/string/StringTest.cpp @@ -355,7 +355,7 @@ TEST_F(StringTest, shouldGenerateBinary) { const auto binaryLength = 8; - const auto binary = String::binary({}, binaryLength); + const auto binary = String::binary(binaryLength); const auto prefix = binary.substr(0, 2); const auto binaryNumber = binary.substr(2); @@ -373,19 +373,25 @@ TEST_F(StringTest, shouldGenerateBinaryWithGuarantee1) // atleast 3 '0' and 2 '1' // atmost 7 '0' and 7 '1' faker::GuaranteeMap guarantee{{'0', {3, 7}}, {'1', {2, 7}}}; - const auto binary = String::binary(std::move(guarantee), binaryLength); - - const auto prefix = binary.substr(0, 2); - const auto binaryNumber = binary.substr(2); - - ASSERT_EQ(binaryNumber.size(), binaryLength); - ASSERT_EQ(prefix, "0b"); - ASSERT_TRUE(std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) - { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); - auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); - auto count_1 = std::count(binaryNumber.begin(), binaryNumber.end(), '1'); - ASSERT_TRUE(count_0 >= 3 && count_0 <= 7); - ASSERT_TRUE(count_1 >= 2 && count_1 <= 7); + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto binary = String::binary(std::move(copyGuarantee), binaryLength); + + const auto prefix = binary.substr(0, 2); + const auto binaryNumber = binary.substr(2); + + ASSERT_EQ(binaryNumber.size(), binaryLength); + ASSERT_EQ(prefix, "0b"); + ASSERT_TRUE( + std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) + { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); + auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); + auto count_1 = std::count(binaryNumber.begin(), binaryNumber.end(), '1'); + ASSERT_TRUE(count_0 >= 3 && count_0 <= 7); + ASSERT_TRUE(count_1 >= 2 && count_1 <= 7); + } } TEST_F(StringTest, shouldGenerateBinaryWithGuarantee2) { @@ -393,19 +399,25 @@ TEST_F(StringTest, shouldGenerateBinaryWithGuarantee2) // exactly 8 '0' and 2 '1' faker::GuaranteeMap guarantee{{'0', {8, 8}}, {'1', {2, 2}}}; - const auto binary = String::binary(std::move(guarantee), binaryLength); - - const auto prefix = binary.substr(0, 2); - const auto binaryNumber = binary.substr(2); - - ASSERT_EQ(binaryNumber.size(), binaryLength); - ASSERT_EQ(prefix, "0b"); - ASSERT_TRUE(std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) - { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); - auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); - auto count_1 = std::count(binaryNumber.begin(), binaryNumber.end(), '1'); - ASSERT_TRUE(count_0 == 8); - ASSERT_TRUE(count_1 == 2); + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto binary = String::binary(std::move(copyGuarantee), binaryLength); + + const auto prefix = binary.substr(0, 2); + const auto binaryNumber = binary.substr(2); + + ASSERT_EQ(binaryNumber.size(), binaryLength); + ASSERT_EQ(prefix, "0b"); + ASSERT_TRUE( + std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) + { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); + auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); + auto count_1 = std::count(binaryNumber.begin(), binaryNumber.end(), '1'); + ASSERT_TRUE(count_0 == 8); + ASSERT_TRUE(count_1 == 2); + } } TEST_F(StringTest, shouldGenerateBinaryWithGuarantee3) { @@ -413,17 +425,23 @@ TEST_F(StringTest, shouldGenerateBinaryWithGuarantee3) // atleast 10 '0' faker::GuaranteeMap guarantee{{'0', {10}}}; - const auto binary = String::binary(std::move(guarantee), binaryLength); - - const auto prefix = binary.substr(0, 2); - const auto binaryNumber = binary.substr(2); - - ASSERT_EQ(binaryNumber.size(), binaryLength); - ASSERT_EQ(prefix, "0b"); - ASSERT_TRUE(std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) - { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); - auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); - ASSERT_TRUE(count_0 == 10); + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto binary = String::binary(std::move(copyGuarantee), binaryLength); + + const auto prefix = binary.substr(0, 2); + const auto binaryNumber = binary.substr(2); + + ASSERT_EQ(binaryNumber.size(), binaryLength); + ASSERT_EQ(prefix, "0b"); + ASSERT_TRUE( + std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) + { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); + auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); + ASSERT_TRUE(count_0 == 10); + } } TEST_F(StringTest, shouldGenerateBinaryWithGuarantee4) @@ -432,17 +450,23 @@ TEST_F(StringTest, shouldGenerateBinaryWithGuarantee4) // atmost 0 '0' faker::GuaranteeMap guarantee{{'0', {0, 0}}}; - const auto binary = String::binary(std::move(guarantee), binaryLength); - - const auto prefix = binary.substr(0, 2); - const auto binaryNumber = binary.substr(2); - - ASSERT_EQ(binaryNumber.size(), binaryLength); - ASSERT_EQ(prefix, "0b"); - ASSERT_TRUE(std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) - { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); - auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); - ASSERT_TRUE(count_0 == 0); + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto binary = String::binary(std::move(copyGuarantee), binaryLength); + + const auto prefix = binary.substr(0, 2); + const auto binaryNumber = binary.substr(2); + + ASSERT_EQ(binaryNumber.size(), binaryLength); + ASSERT_EQ(prefix, "0b"); + ASSERT_TRUE( + std::ranges::any_of(binaryNumber, [](char binaryNumberCharacter) + { return std::string("01").find(binaryNumberCharacter) != std::string::npos; })); + auto count_0 = std::count(binaryNumber.begin(), binaryNumber.end(), '0'); + ASSERT_TRUE(count_0 == 0); + } } TEST_F(StringTest, invalidGuaranteeForBinary1) @@ -488,3 +512,105 @@ TEST_F(StringTest, shouldGenerateOctalWithPrefix) std::ranges::any_of(octal, [](char octalNumberCharacter) { return std::string("01234567").find(octalNumberCharacter) != std::string::npos; })); } + +TEST_F(StringTest, shouldGenerateOctalWithGuarantee1) +{ + const auto octalLength = 10; + // exactly 2 '3' - 0 '5' + // atleast 2 '0' - 3 '6' - 1 '7' + // atmost 10 '6' - 10 '7' + GuaranteeMap guarantee{{'0', {2}}, {'3', {2, 2}}, {'5', {0, 0}}, {'6', {3, 10}}, {'7', {1, 10}}}; + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto octal = String::octal(std::move(copyGuarantee), octalLength); + + const auto prefix = octal.substr(0, 2); + const auto octalNumber = octal.substr(2); + + ASSERT_EQ(octalNumber.size(), octalLength); + ASSERT_EQ(prefix, "0o"); + ASSERT_TRUE( + std::ranges::any_of(octal, [](char octalNumberCharacter) + { return std::string("01234567").find(octalNumberCharacter) != std::string::npos; })); + auto count_0 = std::ranges::count(octalNumber, '0'); + auto count_3 = std::ranges::count(octalNumber, '3'); + auto count_5 = std::ranges::count(octalNumber, '5'); + auto count_6 = std::ranges::count(octalNumber, '6'); + auto count_7 = std::ranges::count(octalNumber, '7'); + ASSERT_TRUE(count_0 >= 2); + ASSERT_TRUE(count_3 == 2); + ASSERT_TRUE(count_5 == 0); + ASSERT_TRUE(count_6 >= 3 && count_6 <= 10); + ASSERT_TRUE(count_7 >= 1 && count_7 <= 10); + } +} + +TEST_F(StringTest, shouldGenerateOctalWithGuarantee2) +{ + const auto octalLength = 20; + // exactly 0 '2' '3' '4' '5' '6' '7' + // atleast 18 '0' + GuaranteeMap guarantee{{'0', {18}}, {'2', {0, 0}}, {'3', {0, 0}}, {'4', {0, 0}}, + {'5', {0, 0}}, {'6', {0, 0}}, {'7', {0, 0}}}; + // it is a random function so lets test for 20 random generations + for (int i = 0; i < 20; ++i) + { + auto copyGuarantee = guarantee; + const auto octal = String::octal(std::move(copyGuarantee), octalLength); + + const auto prefix = octal.substr(0, 2); + const auto octalNumber = octal.substr(2); + + ASSERT_EQ(octalNumber.size(), octalLength); + ASSERT_EQ(prefix, "0o"); + ASSERT_TRUE( + std::ranges::any_of(octal, [](char octalNumberCharacter) + { return std::string("01234567").find(octalNumberCharacter) != std::string::npos; })); + auto count_0 = std::ranges::count(octalNumber, '0'); + auto count_2 = std::ranges::count(octalNumber, '2'); + auto count_3 = std::ranges::count(octalNumber, '3'); + auto count_4 = std::ranges::count(octalNumber, '4'); + auto count_5 = std::ranges::count(octalNumber, '5'); + auto count_6 = std::ranges::count(octalNumber, '6'); + auto count_7 = std::ranges::count(octalNumber, '7'); + + ASSERT_TRUE(count_0 >= 18); + ASSERT_TRUE(count_2 == 0); + ASSERT_TRUE(count_3 == 0); + ASSERT_TRUE(count_4 == 0); + ASSERT_TRUE(count_5 == 0); + ASSERT_TRUE(count_6 == 0); + ASSERT_TRUE(count_7 == 0); + } +} + +TEST_F(StringTest, invalidGuaranteeForOctal1) +{ + const auto octalLength = 10; + // exactly 0 '4' + // atleast 8 '0' - 9 '2' 9 '3' // invalid // total string size will be atleast 26 which is wrong + // atmost + GuaranteeMap guarantee{{'0', {8}}, {'2', {9}}, {'3', {9}}, {'4', {0, 0}}}; + ASSERT_THROW(String::octal(std::move(guarantee), octalLength), std::invalid_argument); +} + +TEST_F(StringTest, invalidGuaranteeForOctal2) +{ + const auto octalLength = 20; + // atmost 2 '0' '1' '2' '3' '4' '5' '6' '7' // invalid // octal string won't exceed 16 which is wrong + GuaranteeMap guarantee{{'0', {0, 2}}, {'1', {0, 2}}, {'2', {0, 2}}, {'3', {0, 2}}, + {'4', {0, 2}}, {'5', {0, 2}}, {'6', {0, 2}}, {'7', {0, 2}}}; + ASSERT_THROW(String::octal(std::move(guarantee), octalLength), std::invalid_argument); +} + +TEST_F(StringTest, invalidGuaranteeForOctal3) +{ + const auto octalLength = 20; + + // atleast 2 '8' // invalid // octal numbers cannot have '8' + // atmost 3 '8' + GuaranteeMap guarantee{{'0', {0, 2}}, {'1', {0, 2}}, {'8', {2, 3}}, {'2', {0, 2}}, {'3', {0, 2}}}; + ASSERT_THROW(String::octal(std::move(guarantee), octalLength), std::invalid_argument); +} diff --git a/src/modules/string/data/Characters.h b/src/modules/string/data/Characters.h index f448daf26..2cf093b0a 100644 --- a/src/modules/string/data/Characters.h +++ b/src/modules/string/data/Characters.h @@ -14,4 +14,5 @@ const std::string upperAlphanumericCharacters = upperCharacters + numericCharact const std::string mixedAlphanumericCharacters = upperCharacters + lowerCharacters + numericCharacters; const std::string hexUpperCharacters = "0123456789ABCDEF"; const std::string hexLowerCharacters = "0123456789abcdef"; +const std::string symbolCharacters = "~`!@#$%^&*()_-+={[}]|:;\"'<,>.?/"; }