diff --git a/sbf-cpp/Genders.cpp b/sbf-cpp/Genders.cpp index e69de29..357b7dd 100644 --- a/sbf-cpp/Genders.cpp +++ b/sbf-cpp/Genders.cpp @@ -0,0 +1,22 @@ +#include "Genders.h" +#include +#include + +namespace SBF { +using std::string; +using std::vector; + +string GetGenderLabel(int genderId) { + if (genderId > 0 && genderId <= kGendersCount) { + return kGenderLabels[genderId]; + } + return ""; +} + +void FillGenderLabels(vector& labels) { + labels.clear(); + for (int id = 1; id <= kGendersCount; id++) { + labels.push_back(GetGenderLabel(id)); + } +} +} // End namespace SBF diff --git a/sbf-cpp/Genders.h b/sbf-cpp/Genders.h index d69ab1f..c983f62 100644 --- a/sbf-cpp/Genders.h +++ b/sbf-cpp/Genders.h @@ -34,8 +34,8 @@ namespace SBF { kGenderTransFemaleLabel, kGenderNonBinaryLabel, }; - const std::string& GetGenderLabel(int genderId); - void FillGenderLabels(std::vector genderLabels); + std::string GetGenderLabel(int genderId); + void FillGenderLabels(std::vector& genderLabels); } // End namespace SBF /** @}*/ #endif // End !defined GENDERS_H__ diff --git a/sbf-cpp/Genders_test.cpp b/sbf-cpp/Genders_test.cpp index 7b3a233..41e35ea 100644 --- a/sbf-cpp/Genders_test.cpp +++ b/sbf-cpp/Genders_test.cpp @@ -1,10 +1,95 @@ #include "Genders.h" #include "test.h" +#include +#include +#include +#include + using namespace SBF; using namespace Test; +using namespace std; + +namespace Test::Genders { +TestResults test_GetGenderLabel(); +TestResults test_FillGenderLabels(); +} // End namespace Test::Genders +using namespace Test::Genders; TestResults main_test_Genders(int argc, char** argv) { TestResults results; - + + results += test_GetGenderLabel(); + results += test_FillGenderLabels(); + return results; } + +namespace Test::Genders { +TestResults test_GetGenderLabel() { + return execute_suite(make_test_suite( + "SBF::GetGenderLabel", + GetGenderLabel, + vector>({ + make_test( + "should get \"\" for invalid gender id 0", + "", + make_tuple(0)), + make_test( + "should get \"Male\" for gender id 1", + "Male", + make_tuple(1)), + make_test( + "should get \"Female\" for gender id 2", + "Female", + make_tuple(2)), + make_test( + "should get \"Trans-Male\" for gender id 3", + "Trans-Male", + make_tuple(3)), + make_test( + "should get \"Trans-Female\" for gender id 4", + "Trans-Female", + make_tuple(4)), + make_test( + "should get \"Non-Binary\" for gender id 5", + "Non-Binary", + make_tuple(5)), + make_test( + "should get \"\" for invalid gender id 6", + "", + make_tuple(6)), + }) + )); +} + +TestResults test_FillGenderLabels() { + auto fnToTest = []()->string { + ostringstream error_message; + vector expected = { + kGenderMaleLabel, + kGenderFemaleLabel, + kGenderTransMaleLabel, + kGenderTransFemaleLabel, + kGenderNonBinaryLabel, + }; + vector actual = {"This should be removed."}; + FillGenderLabels(actual); + compare(error_message, expected, actual); + string error = error_message.str(); + if (error.size() > 0) { + return error; + } + return "no errors"; + }; + return execute_suite(make_test_suite( + "SBF::FillGenderLabels", + fnToTest, + vector>({ + make_test( + "should fill genders", + "no errors", + make_tuple()), + }) + )); +} +} // End namespace Test::Genders