chevengur

СПРИНТ № 3 | Введение в тестирование | Урок 7: Юнит-тестирование поисковой системы

Nov 10th, 2023 (edited)
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.70 KB | None | 0 0
  1. // -------- Начало модульных тестов поисковой системы ----------
  2.  
  3. // Тест проверяет, что поисковая система исключает стоп-слова при добавлении документов
  4. void TestExcludeStopWordsFromAddedDocumentContent() {
  5.     const int doc_id = 42;
  6.     const string content = "cat in the city"s;
  7.     const vector<int> ratings = {1, 2, 3};
  8.     // Сначала убеждаемся, что поиск слова, не входящего в список стоп-слов,
  9.     // находит нужный документ
  10.     {
  11.         SearchServer server;
  12.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  13.         const auto found_docs = server.FindTopDocuments("in"s);
  14.         assert(found_docs.size() == 1);
  15.         const Document& doc0 = found_docs[0];
  16.         assert(doc0.id == doc_id);
  17.     }
  18.  
  19.     // Затем убеждаемся, что поиск этого же слова, входящего в список стоп-слов,
  20.     // возвращает пустой результат
  21.     {
  22.         SearchServer server;
  23.         server.SetStopWords("in the"s);
  24.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  25.         assert(server.FindTopDocuments("in"s).empty());
  26.     }
  27. }
  28.  
  29. void TestAddDocument(){
  30.     const int doc_id = 25;
  31.     const string content = "shaman - i'm russian";
  32.     const vector<int>ratings = {0, 1, 2};
  33.     const vector<int>ratings1 = {1};
  34.     {
  35.         SearchServer server;
  36.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  37.         server.AddDocument(1, "FUCK THE POLICE"s, DocumentStatus::ACTUAL, ratings1);
  38.         server.AddDocument(2, "shaman forever"s, DocumentStatus::ACTUAL, {0});
  39.         assert(!server.FindTopDocuments("shaman").empty());
  40.         assert(server.GetDocumentCount() == 3);
  41.     }
  42.    
  43. }
  44.  
  45. void TestMinusWords(){
  46.     {
  47.         SearchServer server;
  48.         server.AddDocument(1, "shaman isn't the russian"s, DocumentStatus::ACTUAL, {2,3,1});
  49.         server.AddDocument(2, "killreal this the superman"s, DocumentStatus::ACTUAL, {5,12,3,1,1});
  50.         server.AddDocument(3, "the famous people of great britain", DocumentStatus::ACTUAL, {3,1,2,3,1,1});
  51.         server.AddDocument(4, "lalipop bob dad the", DocumentStatus::ACTUAL, {5});
  52.        
  53.         assert(server.GetDocumentCount() == 4);
  54.         auto doc_vec = server.FindTopDocuments("-shaman -killreal the"s);
  55.         assert(doc_vec[0].id == 4);
  56.         assert(doc_vec[1].id == 3);
  57.     }
  58.    
  59. }
  60.  
  61. void TestMatchDoc(){
  62.     const int doc_id = 1;
  63.     const string content = "just look in my eyes and you'll see russian paradise"s;
  64.     const string content2 = "just russian paradise"s;
  65.     vector<int>rating {1,3,4};
  66.     {
  67.         SearchServer server;
  68.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, rating);
  69.         server.AddDocument(2, content2, DocumentStatus::ACTUAL, {1,3,4});
  70.         const string raw_query = "just moment russian";
  71.         const string min_raw_query = "-see";
  72.  
  73.         auto match_doc = server.MatchDocument(min_raw_query, doc_id);
  74.         const auto [str, doc_st] = match_doc;
  75.         assert(str.empty());
  76.  
  77.         auto pl_match_doc = server.MatchDocument(raw_query, 2);
  78.         const auto [s, dt] = pl_match_doc;
  79.         assert(!s.empty());
  80.     }
  81. }
  82.  
  83. void TestRelevance(){
  84.     {
  85.         SearchServer server;
  86.         server.AddDocument(3, "hello world i'm from Pesua"s, DocumentStatus::ACTUAL, {2,3,4});
  87.         server.AddDocument(2, "hello world i'm"s, DocumentStatus::ACTUAL, {2,3,4});
  88.         server.AddDocument(1, "hello world"s, DocumentStatus::ACTUAL, {2,3,4});
  89.        
  90.         auto find_top = server.FindTopDocuments("hello world i'm from Pesua", DocumentStatus::ACTUAL);
  91.  
  92.         assert(find_top[0].id == 3);
  93.         assert(find_top[1].id == 2);
  94.         assert(find_top[2].id == 1);
  95.     }
  96. }
  97.  
  98. void TestByRating(){
  99.  
  100.     {
  101.         SearchServer server;
  102.         server.AddDocument(3, "hello world i'm from Pesua"s, DocumentStatus::ACTUAL, {2,3,4});
  103.         server.AddDocument(4, "sss psss add"s, DocumentStatus::ACTUAL, {6,1,2,7});
  104.         auto find_top = server.FindTopDocuments("hello world i'm from Pesua sss", DocumentStatus::ACTUAL);
  105.  
  106.         assert(find_top[0].rating == 3);
  107.         assert(find_top[1].rating == 4);
  108.     }
  109.  
  110. }
  111.  
  112. void TestStatus(){
  113.    
  114.     const int doc_id = 1;
  115.     const string content = "blue cat and red dog";
  116.     vector<int>rating = {1, 1, 2, 3, 4};
  117.  
  118.     const int doc_id2 = 2;
  119.     const string content2 = "yellow rabbit blue cat matrix";
  120.     vector<int>rating2 = {2, 2, 3, 3, 1};
  121.  
  122.     const int doc_id3 = 3;
  123.     const string content3 = "slut and river blue cat minner";
  124.     vector<int>rating3 = {2, 0, 1, 2, 3, 1};
  125.  
  126.     const int doc_id4 = 4;
  127.     const string content4 = "upload blue image";
  128.     vector<int>rating4 = {1, 2, 3};
  129.  
  130.     const string raw_query = "blue cat";
  131.  
  132.     {
  133.         SearchServer server;
  134.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, rating);
  135.         server.AddDocument(doc_id2, content2, DocumentStatus::BANNED, rating2);
  136.         server.AddDocument(doc_id3, content3, DocumentStatus::IRRELEVANT, rating3);
  137.         server.AddDocument(doc_id4, content4, DocumentStatus::REMOVED, rating4);
  138.  
  139.         auto doc_act = server.FindTopDocuments(raw_query, DocumentStatus::ACTUAL);
  140.         auto doc_ban = server.FindTopDocuments(raw_query, DocumentStatus::BANNED);
  141.         auto doc_irr = server.FindTopDocuments(raw_query, DocumentStatus::IRRELEVANT);
  142.         auto doc_rem = server.FindTopDocuments(raw_query, DocumentStatus::REMOVED);
  143.  
  144.         assert(doc_act[0].id == 1);
  145.         assert(doc_ban[0].id == 2);
  146.         assert(doc_irr[0].id == 3);
  147.         assert(doc_rem[0].id == 4);
  148.     }
  149. }
  150.  
  151. void TestPredicate(){
  152.     {
  153.         SearchServer server;
  154.         server.AddDocument(1, "blue green red bad"s, DocumentStatus::ACTUAL, {0});
  155.         server.AddDocument(2, "sick peek world word"s, DocumentStatus::BANNED, {2});
  156.  
  157.         server.FindTopDocuments("peek"s);
  158.         server.FindTopDocuments("raw"s, DocumentStatus::BANNED);
  159.         server.FindTopDocuments("sick", [](int document_id, DocumentStatus doc_status, int rating){ return doc_status == DocumentStatus::BANNED;
  160.  
  161.         });
  162.  
  163.        
  164.     }
  165. }
  166.  
  167. void TestRelevanceNum(){
  168.     SearchServer search_server;
  169.     int document_id = 1;
  170.     vector<int> rating1 = {1, 7, 13};
  171.     DocumentStatus status = DocumentStatus::ACTUAL;
  172.     string document1 = "tabby cat with big eyes"s;
  173.     search_server.AddDocument(document_id, document1, status, rating1);
  174.    
  175.     document_id = 2;
  176.     vector<int> rating2 = {2, 4, 10};
  177.     string document2 = "small dog and tabby bird"s;
  178.     search_server.AddDocument(document_id, document2, status, rating2);
  179.  
  180.     vector<Document> document = search_server.FindTopDocuments("cat"s);
  181.     assert(round(document[0].relevance*1000000)/1000000 == 0.138629);
  182.    
  183. }
  184.  
  185. /*
  186. Разместите код остальных тестов здесь
  187. */
  188.  
  189. // Функция TestSearchServer является точкой входа для запуска тестов
  190. void TestSearchServer() {
  191.     TestExcludeStopWordsFromAddedDocumentContent();
  192.     TestAddDocument();
  193.     TestMinusWords();
  194.     TestStatus();
  195.     TestMatchDoc();
  196.     TestRelevance();
  197.     TestByRating();
  198.     TestPredicate();
  199.     TestRelevanceNum();
  200. }
  201.  
  202. // --------- Окончание модульных тестов поисковой системы -----------
  203.  
  204. int main() {
  205.     TestSearchServer();
  206.     // Если вы видите эту строку, значит все тесты прошли успешно
  207.     cout << "Search server testing finished"s << endl;
  208. }
Add Comment
Please, Sign In to add comment