Advertisement
chevengur

СПРИНТ № 3 | Введение в тестирование | Урок 5: Юнит-тестирование класса

Nov 2nd, 2023 (edited)
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. #include <cassert>
  2. #include <iostream>
  3. #include <map>
  4. #include <set>
  5. #include <sstream>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. class Synonyms {
  11. public:
  12.     void Add(const string& first_word, const string& second_word) {
  13.         synonyms_[first_word].insert(second_word);
  14.         synonyms_[second_word].insert(first_word);
  15.     }
  16.  
  17.     size_t GetSynonymCount(const string& word) const {
  18.         if (synonyms_.count(word) != 0) {
  19.             return synonyms_.at(word).size();
  20.         }
  21.         return 0;
  22.     }
  23.  
  24.     bool AreSynonyms(const string& first_word, const string& second_word) const {
  25.         if(synonyms_.count(first_word) > 0){
  26.             auto word1 = synonyms_.at(first_word);
  27.             for(const auto& w: word1){
  28.                 if(w == second_word)
  29.                     return true;
  30.             }
  31.         }
  32.  
  33.         return false;
  34.     }
  35.  
  36. private:
  37.     map<string, set<string>> synonyms_;
  38. };
  39.  
  40. void TestAddingSynonymsIncreasesTheirCount() {
  41.     Synonyms synonyms;
  42.     assert(synonyms.GetSynonymCount("music"s) == 0);
  43.     assert(synonyms.GetSynonymCount("melody"s) == 0);
  44.  
  45.     synonyms.Add("music"s, "melody"s);
  46.     assert(synonyms.GetSynonymCount("music"s) == 1);
  47.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  48.  
  49.     synonyms.Add("music"s, "tune"s);
  50.     assert(synonyms.GetSynonymCount("music"s) == 2);
  51.     assert(synonyms.GetSynonymCount("tune"s) == 1);
  52.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  53. }
  54.  
  55. void TestAreSynonyms() {
  56.     Synonyms synonyms;
  57.  
  58.     synonyms.Add("music", "tune");
  59.     assert(synonyms.AreSynonyms("music", "tune") == true);
  60.  
  61.     synonyms.Add("melody", "tune");
  62.     assert(synonyms.AreSynonyms("music", "melody") == false);
  63.     assert(synonyms.AreSynonyms("melody", "tune") == true);
  64. }
  65.  
  66. void TestSynonyms() {
  67.     TestAddingSynonymsIncreasesTheirCount();
  68.     TestAreSynonyms();
  69. }
  70.  
  71. int main() {
  72.     TestSynonyms();
  73.  
  74.     Synonyms synonyms;
  75.  
  76.     string line;
  77.     while (getline(cin, line)) {
  78.         istringstream command(line);
  79.         string action;
  80.         command >> action;
  81.  
  82.         if (action == "ADD"s) {
  83.             string first_word, second_word;
  84.             command >> first_word >> second_word;
  85.             synonyms.Add(first_word, second_word);
  86.         } else if (action == "COUNT"s) {
  87.             string word;
  88.             command >> word;
  89.             cout << synonyms.GetSynonymCount(word) << endl;
  90.         } else if (action == "CHECK"s) {
  91.             string first_word, second_word;
  92.             command >> first_word >> second_word;
  93.             if (synonyms.AreSynonyms(first_word, second_word)) {
  94.                 cout << "YES"s << endl;
  95.             } else {
  96.                 cout << "NO"s << endl;
  97.             }
  98.         } else if (action == "EXIT"s) {
  99.             break;
  100.         }
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement