Advertisement
RobertDeMilo

Юнит-тестирование поисковой системы

Oct 29th, 2023
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.06 KB | None | 0 0
  1. void TestExcludeStopWordsFromAddedDocumentContent() {
  2.  
  3.     const int doc_id = 42;
  4.     const string document = "cat in the city"s;
  5.     const vector<int> ratings = { 1, 2, 3 };
  6.  
  7.     // Сначала убеждаемся, что поиск слова, не входящего в список стоп-слов,
  8.     // находит нужный документ
  9.     {
  10.         SearchServer server;
  11.  
  12.         server.AddDocument(doc_id, document, DocumentStatus::ACTUAL, ratings);
  13.  
  14.         const auto found_docs = server.FindTopDocuments("in"s);
  15.         assert(found_docs.size() == 1);
  16.  
  17.         const Document& doc0 = found_docs[0];
  18.         assert(doc0.id == doc_id);
  19.     }
  20.  
  21.     // Затем убеждаемся, что поиск этого же слова, входящего в список стоп-слов,
  22.     // возвращает пустой результат
  23.     {
  24.         SearchServer server;
  25.  
  26.         server.SetStopWords("in the"s);
  27.  
  28.         server.AddDocument(doc_id, document, DocumentStatus::ACTUAL, ratings);
  29.  
  30.         assert(server.FindTopDocuments("in"s).empty());
  31.     }
  32. }
  33.  
  34. void TestAverageRating() {
  35.  
  36.     SearchServer server;
  37.  
  38.     const vector<vector<int>> ratings = { {8 , -3}, {7, 2, 7}, {5, -12, 2, 1} };
  39.  
  40.     const vector<string> documents = {
  41.         "белый кот и модный ошейник",
  42.         "пушистый кот пушистый хвост",
  43.         "ухоженный пёс выразительные глаза" };
  44.  
  45.     server.SetStopWords("и в на");
  46.  
  47.     for (int i = 0; i < 3; ++i)
  48.     {
  49.         server.AddDocument(i, documents[i], DocumentStatus::ACTUAL, ratings[i]);
  50.     }
  51.  
  52.     const vector <Document> result_documents = server.FindTopDocuments("пушистый ухоженный кот");
  53.  
  54.     assert(result_documents[0].rating == 5);
  55.     assert(result_documents[1].rating == -1);
  56.     assert(result_documents[2].rating == 2);
  57. }
  58.  
  59. void TestRelevance() {
  60.  
  61.     SearchServer server;
  62.  
  63.     const vector<int> ratings = { 1,2,3,4,5 };
  64.  
  65.     const vector<string> documents = {
  66.         "a colorful parrot with green wings and red tail is lost",
  67.         "a grey hound with black ears is found at the railway station",
  68.         "a white cat with long furry tail is found near the red square" };
  69.  
  70.     server.SetStopWords("is are was a an in the with near at");
  71.  
  72.     for (int i = 0; i < 3; ++i)
  73.     {
  74.         server.AddDocument(i, documents[i], DocumentStatus::ACTUAL, ratings);
  75.     }
  76.  
  77.     const vector <Document> result_documents = server.FindTopDocuments("white cat long tail");
  78.  
  79.     //setprecision(6);
  80.     //assert(result_documents[0].relevance == 0.462663);
  81.     /*assert(result_documents[1].relevance == 0.0506831);*/
  82. }
  83.  
  84. void TestFindWithStatus()
  85. {
  86.     SearchServer search_server;
  87.  
  88.     search_server.SetStopWords("и в на"s);
  89.  
  90.     search_server.AddDocument(0, "белый кот и модный ошейник"s, DocumentStatus::ACTUAL, { 8, -3 });
  91.     search_server.AddDocument(1, "пушистый кот пушистый хвост"s, DocumentStatus::ACTUAL, { 7, 2, 7 });
  92.     search_server.AddDocument(2, "ухоженный пёс выразительные глаза"s, DocumentStatus::ACTUAL, { 5, -12, 2, 1 });
  93.     search_server.AddDocument(3, "ухоженный скворец евгений"s, DocumentStatus::BANNED, { 9 });
  94.  
  95.     // Actual documents
  96.     {
  97.         const vector <Document> actual_documetns = search_server.FindTopDocuments("пушистый ухоженный кот"s);
  98.  
  99.         assert(actual_documetns.size() == 3);
  100.     }
  101.     // Banned documents
  102.     {
  103.         const vector <Document> banned_documetns = search_server.FindTopDocuments("пушистый ухоженный кот"s, DocumentStatus::BANNED);
  104.         assert(banned_documetns.size() == 1);
  105.     }
  106. }
  107.  
  108. void TestPredicate()
  109. {
  110.     SearchServer search_server;
  111.     search_server.SetStopWords("и в на"s);
  112.     search_server.AddDocument(0, "белый кот и модный ошейник"s, DocumentStatus::ACTUAL, { 8, -3 });
  113.     search_server.AddDocument(1, "пушистый кот пушистый хвост"s, DocumentStatus::ACTUAL, { 7, 2, 7 });
  114.     search_server.AddDocument(2, "ухоженный пёс выразительные глаза"s, DocumentStatus::ACTUAL, { 5, -12, 2, 1 });
  115.     search_server.AddDocument(3, "ухоженный скворец евгений"s, DocumentStatus::BANNED, { 9 });
  116.  
  117.     //ACTUAL by default
  118.     {
  119.         const vector<Document> actual_by_default = search_server.FindTopDocuments("пушистый ухоженный кот"s);
  120.  
  121.         assert(actual_by_default.size() == 3);
  122.     }
  123.     //ACTUAL by default
  124.     {
  125.         const vector<Document> actual = search_server.FindTopDocuments("пушистый ухоженный кот"s, [](int document_id, DocumentStatus status, int rating) { return status == DocumentStatus::ACTUAL; });
  126.         assert(actual.size() == 3);
  127.     }
  128.     //Even ids
  129.     {
  130.         const vector<Document> even = search_server.FindTopDocuments("пушистый ухоженный кот"s, [](int document_id, DocumentStatus status, int rating) { return document_id % 2 == 0; });
  131.         assert(even.size() == 2);
  132.     }
  133. }
  134.  
  135. void TestMinusWords()
  136. {
  137.     SearchServer search_server;
  138.  
  139.     search_server.SetStopWords("и в на с"s);
  140.     search_server.AddDocument(0, "найден белый кот . на нём модный ошейник"s, DocumentStatus::ACTUAL, { 8, -3 });
  141.     search_server.AddDocument(1, "пушистый кот ищет хозяина . особые приметы : пушистый хвост"s, DocumentStatus::ACTUAL, { 7, 2, 7 });
  142.     search_server.AddDocument(2, "в парке горького найден ухоженный пёс с выразительными глазами"s, DocumentStatus::ACTUAL, { 5, -12, 2, 1 });
  143.  
  144.     {
  145.         const vector<Document> documents_without_minus_words = search_server.FindTopDocuments("пушистый ухоженный кот -ошейник "s);
  146.         assert(documents_without_minus_words.size() == 2);
  147.     }
  148. }
  149.  
  150. void TestMatch()
  151. {
  152.     SearchServer search_server;
  153.  
  154.     search_server.SetStopWords("и в на"s);
  155.     search_server.AddDocument(0, "белый кот и модный ошейник"s, DocumentStatus::ACTUAL, { 8, -3 });
  156.     search_server.AddDocument(1, "пушистый кот пушистый хвост"s, DocumentStatus::ACTUAL, { 7, 2, 7 });
  157.     search_server.AddDocument(2, "ухоженный пёс выразительные глаза"s, DocumentStatus::ACTUAL, { 5, -12, 2, 1 });
  158.     search_server.AddDocument(3, "ухоженный скворец евгений"s, DocumentStatus::BANNED, { 9 });
  159.  
  160.     // В первом элементе кортежа верните все плюс - слова запроса, содержащиеся в документе.
  161.     {
  162.         const auto [words, status] = search_server.MatchDocument("пушистый кот"s, 0);
  163.         assert(words.size() == 1);
  164.     }
  165.     {
  166.         const auto [words, status] = search_server.MatchDocument("пушистый кот"s, 1);
  167.         assert(words.size() == 2);
  168.     }
  169.     {
  170.         const auto [words, status] = search_server.MatchDocument("пушистый кот"s, 2);
  171.         assert(words.empty());
  172.     }
  173.     {
  174.         const auto [words, status] = search_server.MatchDocument("пушистый кот"s, 3);
  175.         assert(words.empty());
  176.         //assert(words.size(), 0); так не хочет
  177.     }
  178. }
  179.  
  180. void TestSort()
  181. {
  182.     SearchServer search_server;
  183.  
  184.     search_server.SetStopWords("и в на"s);
  185.  
  186.     search_server.AddDocument(0, "белый кот и модный ошейник"s, DocumentStatus::ACTUAL, { 8, -3 });
  187.     search_server.AddDocument(1, "пушистый кот пушистый хвост"s, DocumentStatus::ACTUAL, { 7, 2, 7 });
  188.     search_server.AddDocument(2, "ухоженный пёс выразительные глаза"s, DocumentStatus::ACTUAL, { 5, -12, 2, 1 });
  189.     search_server.AddDocument(3, "ухоженный скворец евгений"s, DocumentStatus::BANNED, { 9 });
  190.  
  191.     const vector<Document> documents = search_server.FindTopDocuments("пушистый ухоженный кот"s);
  192.  
  193.     assert(documents[0].id == 1);
  194.     assert(documents[1].id == 0);
  195.     assert(documents[2].id == 2);
  196. }
  197.  
  198. // Функция TestSearchServer является точкой входа для запуска тестов
  199. void TestSearchServer() {
  200.     TestExcludeStopWordsFromAddedDocumentContent();
  201.     TestAverageRating();
  202.     TestRelevance();
  203.     TestFindWithStatus();
  204.     TestPredicate();
  205.     TestMinusWords();
  206.     TestMatch();
  207.     TestSort();
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement