kutuzzzov

Урок 5. Юнит-тестирование класса

Nov 23rd, 2021 (edited)
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 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.         // Напишите недостающий код
  26.         if ((synonyms_.count(first_word) && synonyms_.count(second_word)) != 0) {
  27.             cout << "Слова синонимы: "s << first_word << ", "s << second_word << endl;
  28.             return true;
  29.         } else {
  30.             cout << "Слова НЕ синонимы: "s << first_word << ", "s << second_word << endl;
  31.             return false;
  32.         }
  33.     }
  34.  
  35. private:
  36.     map<string, set<string>> synonyms_;
  37. };
  38.  
  39. void TestAddingSynonymsIncreasesTheirCount() {
  40.     Synonyms synonyms;
  41.     assert(synonyms.GetSynonymCount("music"s) == 0);
  42.     assert(synonyms.GetSynonymCount("melody"s) == 0);
  43.  
  44.     synonyms.Add("music"s, "melody"s);
  45.     assert(synonyms.GetSynonymCount("music"s) == 1);
  46.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  47.  
  48.     synonyms.Add("music"s, "tune"s);
  49.     assert(synonyms.GetSynonymCount("music"s) == 2);
  50.     assert(synonyms.GetSynonymCount("tune"s) == 1);
  51.     assert(synonyms.GetSynonymCount("melody"s) == 1);
  52. }
  53.  
  54. void TestAreSynonyms() {
  55.     // Напишите недостающий код
  56.     Synonyms synonyms;
  57.    
  58.     synonyms.Add("music"s, "melody"s);
  59.     // Два слова являются синонимами друг друга
  60.     assert(synonyms.AreSynonyms("music"s, "melody"s) == true);
  61.     // Два слова НЕ являются синонимами друг друга
  62.     assert(synonyms.AreSynonyms("music"s, "box"s) == false);
  63. }
  64.  
  65. void TestSynonyms() {
  66.     TestAddingSynonymsIncreasesTheirCount();
  67.     TestAreSynonyms();
  68. }
  69.  
  70. int main() {
  71.     TestSynonyms();
  72.  
  73.     Synonyms synonyms;
  74.  
  75.     string line;
  76.     while (getline(cin, line)) {
  77.         istringstream command(line);
  78.         string action;
  79.         command >> action;
  80.  
  81.         if (action == "ADD"s) {
  82.             string first_word, second_word;
  83.             command >> first_word >> second_word;
  84.             synonyms.Add(first_word, second_word);
  85.         } else if (action == "COUNT"s) {
  86.             string word;
  87.             command >> word;
  88.             cout << synonyms.GetSynonymCount(word) << endl;
  89.         } else if (action == "CHECK"s) {
  90.             string first_word, second_word;
  91.             command >> first_word >> second_word;
  92.             if (synonyms.AreSynonyms(first_word, second_word)) {
  93.                 cout << "YES"s << endl;
  94.             } else {
  95.                 cout << "NO"s << endl;
  96.             }
  97.         } else if (action == "EXIT"s) {
  98.             break;
  99.         }
  100.     }
  101. }
  102. /*
  103. ручная проверка
  104. ADD music2 melody3
  105. COUNT box
  106. CHECK music2 box
  107. CHECK music2 melody3
  108. CHECK melody2 music3
  109. */
Add Comment
Please, Sign In to add comment