From 2e937ce02cac2fd88236f23c9f6c1d224d45768d Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sat, 15 Apr 2023 23:25:00 -0700 Subject: [PATCH] Implements clans and tests. --- sbf-cpp/Clans.cpp | 19 ++++++ sbf-cpp/Clans.h | 8 ++- sbf-cpp/Clans_test.cpp | 131 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 3 deletions(-) diff --git a/sbf-cpp/Clans.cpp b/sbf-cpp/Clans.cpp index e69de29..c78d4c7 100644 --- a/sbf-cpp/Clans.cpp +++ b/sbf-cpp/Clans.cpp @@ -0,0 +1,19 @@ +#include "Clans.h" +#include +#include + +namespace SBF { +std::string GetClanLabel(int clanId) { + if (clanId > 0 && clanId <= kClansCount) { + return kClanLabels[clanId]; + } + return ""; +} + +void FillClanLabels(std::vector& labels) { + labels.clear(); + for (int id = 1; id <= kClansCount; id++) { + labels.push_back(GetClanLabel(id)); + } +} +} // End namespace SBF diff --git a/sbf-cpp/Clans.h b/sbf-cpp/Clans.h index 48dc5a3..d1dbc3c 100644 --- a/sbf-cpp/Clans.h +++ b/sbf-cpp/Clans.h @@ -41,7 +41,7 @@ namespace SBF { const int kClanVentrue = 18; const std::string kClanVentrueLabel = "Ventrue"; const int kClansCount = 18; - const std::string kClans[] = { + const std::string kClanLabels[] = { "", kClanAnarchLabel, kClanAssamiteLabel, @@ -49,6 +49,7 @@ namespace SBF { kClanBrujahLabel, kClanCaitiffLabel, kClanCappadocianLabel, + kClanGangrelLabel, kClanGiovanniLabel, kClanInconnuLabel, kClanLasombraLabel, @@ -58,9 +59,10 @@ namespace SBF { kClanSettiteLabel, kClanToreadorLabel, kClanTremereLabel, + kClanTzismiceLabel, kClanVentrueLabel, }; - const std::string& GetClanLabel(int clanId); - void FillClanLabels(std::vector clans); + std::string GetClanLabel(int clanId); + void FillClanLabels(std::vector& clans); } // End namespace SBF #endif // End !defined CLANS_H__ diff --git a/sbf-cpp/Clans_test.cpp b/sbf-cpp/Clans_test.cpp index 400e8ae..d95b206 100644 --- a/sbf-cpp/Clans_test.cpp +++ b/sbf-cpp/Clans_test.cpp @@ -1,10 +1,141 @@ #include "Clans.h" #include "test.h" +#include +#include +#include +#include + using namespace SBF; using namespace Test; +using namespace std; + +namespace Test::Clans { +TestResults test_GetClanLabel(); +TestResults test_FillClanLabels(); +} // End namespace Test::Clans +using namespace Test::Clans; TestResults main_test_Clans(int argc, char** argv) { TestResults results; + + results += test_GetClanLabel(); + results += test_FillClanLabels(); return results; } + +namespace Test::Clans { +TestResults test_GetClanLabel() { + return execute_suite(make_test_suite( + "SBF::GetClanLabel", + GetClanLabel, + vector>({ + make_test( + "should get \"\" for invalid clan 0", + "", + make_tuple(0)), + make_test( + "should get \"Anarch\" for clan 1 kClanAnarch", + "Anarch", + make_tuple(1)), + make_test( + "should get \"Assamite\" for clan 2 kClanAssamite", + "Assamite", + make_tuple(2)), + make_test( + "should get \"Baali\" for clan 3 kClanBaali", + "Baali", + make_tuple(3)), + make_test( + "should get \"Brujah\" for clan 4 kClanBrujah", + "Brujah", + make_tuple(4)), + make_test( + "should get \"Caitiff\" for clan 5 kClanCaitiff", + "Caitiff", + make_tuple(5)), + make_test( + "should get \"Cappadocian\" for clan 6 kClanCappadocian", + "Cappadocian", + make_tuple(6)), + make_test( + "should get \"Gangrel\" for clan 7 kClanGangrel", + "Gangrel", + make_tuple(7)), + make_test( + "should get \"Giovanni\" for clan 8 kClanGiovanni", + "Giovanni", + make_tuple(8)), + make_test( + "should get \"Inconnu\" for clan 9 kClanInconnu", + "Inconnu", + make_tuple(9)), + make_test( + "should get \"Lasombra\" for clan 10 kClanLasombra", + "Lasombra", + make_tuple(10)), + make_test( + "should get \"Malkavian\" for clan 11 kClanMalkavian", + "Malkavian", + make_tuple(11)), + make_test( + "should get \"Nosferatu\" for clan 12 kClanNosferatu", + "Nosferatu", + make_tuple(12)), + make_test( + "should get \"Ravanos\" for clan 13 kClanRavanos", + "Ravanos", + make_tuple(13)), + make_test( + "should get \"Settite\" for clan 14 kClanSettite", + "Settite", + make_tuple(14)), + make_test( + "should get \"Toreador\" for clan 15 kClanToreador", + "Toreador", + make_tuple(15)), + make_test( + "should get \"Tremere\" for clan 16 kClanTremere", + "Tremere", + make_tuple(16)), + make_test( + "should get \"Tzismice\" for clan 17 kClanTzismice", + "Tzismice", + make_tuple(17)), + make_test( + "should get \"Ventrue\" for clan 18 kClanVentrue", + "Ventrue", + make_tuple(18)), + make_test( + "should get \"\" for invalid clan 19", + "", + make_tuple(19)), + }) + )); +} + +TestResults test_FillClanLabels() { + return execute_suite(make_test_suite( + "SBF::FillClanLabels", + []()->string { + ostringstream error_message; + vector expected = {"Anarch", "Assamite", "Baali", "Brujah", "Caitiff", "Cappadocian", "Gangrel", "Giovanni", "Inconnu", "Lasombra", "Malkavian", "Nosferatu", "Ravanos", "Settite", "Toreador", "Tremere", "Tzismice", "Ventrue"}; + vector actual = {"This should be removed."}; + FillClanLabels(actual); + compare(error_message, expected, actual); + string error = error_message.str(); + if (error.size() > 0) { + return error; + } + return "no errors"; + }, + vector>({ + make_test( + "should fill clan labels", + "no errors", + make_tuple()), + }) + + )); +} +} // End namespace Test::Clans