Advertisement
kutuzzzov

Спринт 2. Ревью

Dec 3rd, 2021 (edited)
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.97 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.         SearchServer server;
  10.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  11.         const auto found_docs = server.FindTopDocuments("in"s);
  12.         ASSERT_EQUAL(found_docs.size(), 1u);
  13.         const Document& doc0 = found_docs[0];
  14.         ASSERT_EQUAL(doc0.id, doc_id);
  15.     }
  16.  
  17.     {
  18.         SearchServer server;
  19.         server.SetStopWords("in the"s);
  20.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  21.         ASSERT_HINT(server.FindTopDocuments("in"s).empty(), "Stop words must be excluded from documents"s);
  22.     }
  23. }
  24.  
  25. /*
  26. Разместите код остальных тестов здесь
  27. */
  28. // Добавление документов. Добавленный документ должен находиться по поисковому запросу, который содержит слова из документа.
  29. void TestFindAddedDocumentByDocumentWord() {
  30.     const int doc_id = 42;
  31.     const string content = "cat in the city"s;
  32.     const vector<int> ratings = {1, 2, 3};
  33.     {
  34.         SearchServer server;
  35.         ASSERT_EQUAL(server.GetDocumentCount(), 0);
  36.         server.AddDocument(doc_id, content, DocumentStatus::ACTUAL, ratings);
  37.         ASSERT_EQUAL(server.GetDocumentCount(), 1);
  38.         server.AddDocument(doc_id + 1, "black dog fluffy tail", DocumentStatus::ACTUAL, ratings);
  39.         ASSERT_EQUAL(server.GetDocumentCount(), 2);
  40.         const auto found_docs = server.FindTopDocuments("cat"s);
  41.         ASSERT_EQUAL(found_docs.size(), 1u);
  42.         const Document& doc0 = found_docs[0];
  43.         ASSERT_EQUAL(doc0.id, doc_id);
  44.     }
  45. }
  46.  
  47. // Поддержка минус-слов. Документы, содержащие минус-слова из поискового запроса, не должны включаться в результаты поиска.
  48. void TestExcludeDocumentsWithMinusWordsFromResults() {
  49.     SearchServer server;
  50.     server.AddDocument(101, "fluffy cat fluffy tail"s, DocumentStatus::ACTUAL, {1,2,3});
  51.     server.AddDocument(102, "fluffy red dog "s, DocumentStatus::ACTUAL, {1,2,3});
  52.     {
  53.         const auto found_docs = server.FindTopDocuments("fluffy -dog"s);
  54.         ASSERT_EQUAL(found_docs.size(), 1u);
  55.         ASSERT_EQUAL(found_docs[0].id, 101);
  56.     }
  57.     {
  58.         const auto found_docs = server.FindTopDocuments("fluffy -cat"s);
  59.         ASSERT_EQUAL(found_docs.size(), 1u);
  60.         ASSERT_EQUAL(found_docs[0].id, 102);
  61.     }
  62. }
  63.  
  64. // Соответствие документов поисковому запросу.
  65. void TestMatchedDocuments() {
  66.     SearchServer server;
  67.     server.SetStopWords("and in on"s);
  68.     server.AddDocument(100, "fluffy cat and black dog in a collar"s, DocumentStatus::ACTUAL, {1, 2, 3});
  69.     {
  70.         const auto [matched_words, status] = server.MatchDocument("dog and cat"s, 100);
  71.         const vector<string> expected_result = {"cat"s, "dog"s};
  72.         ASSERT_EQUAL(expected_result, matched_words);
  73.     }
  74.     {
  75.         const auto [matched_words, status] = server.MatchDocument("dog and -cat"s, 100);
  76.         const vector<string> expected_result = {}; // пустой результат поскольку есть минус-слово
  77.         ASSERT_EQUAL(expected_result, matched_words);
  78.         ASSERT(matched_words.empty());
  79.     }
  80. }
  81.  
  82. // Сортировка найденных документов по релевантности.
  83. void TestSortResultsByRelevance() {
  84.     SearchServer server;
  85.     server.AddDocument(100, "fluffy cat fluffy tail"s, DocumentStatus::ACTUAL, {1, 2, 3});
  86.     server.AddDocument(101, "fluffy dog"s, DocumentStatus::ACTUAL, {1, 2, 3});
  87.     server.AddDocument(102, "dog leather collar"s, DocumentStatus::ACTUAL, {1, 2, 3});
  88.     {
  89.         const auto found_docs = server.FindTopDocuments("fluffy cat"s);
  90.         ASSERT_EQUAL(found_docs.size(), 2u);
  91.         for (size_t i = 1; i < found_docs.size(); i++) {
  92.             ASSERT(found_docs[i - 1].relevance >= found_docs[i].relevance);
  93.         }
  94.     }
  95. }
  96.  
  97. // Вычисление рейтинга документов.
  98. void TestCalculateDocumentRating() {
  99.     SearchServer server;
  100.     const vector<int> ratings = {10, 11, 3};
  101.     const int average = (10 + 11 + 3) / 3;
  102.     server.AddDocument(0, "fluffy cat fluffy tail"s, DocumentStatus::ACTUAL, ratings);
  103.     {
  104.         const auto found_docs = server.FindTopDocuments("fluffy cat"s);
  105.         ASSERT_EQUAL(found_docs.size(), 1u);
  106.         ASSERT_EQUAL(found_docs[0].rating, average);
  107.     }
  108. }
  109.  
  110. // Фильтрация результатов поиска с использованием предиката.
  111. void TestDocumentSearchByPredicate() {
  112.     SearchServer server;
  113.     server.AddDocument(100, "cat in the city"s, DocumentStatus::ACTUAL, {1, 2, 3});
  114.     server.AddDocument(101, "dog in the town"s, DocumentStatus::IRRELEVANT, {-1, -2, -3});
  115.     server.AddDocument(102, "dog and rabbit in the town"s, DocumentStatus::ACTUAL, {-4, -5, -6});
  116.     const auto found_docs = server.FindTopDocuments("in the cat"s, [](int document_id, DocumentStatus status, int rating) { return rating > 0; });
  117.    
  118.     ASSERT_HINT(found_docs[0].id == 100, "Wrong predicate");
  119. }
  120.  
  121. // Поиск документов, имеющих заданный статус.
  122. void TestDocumentSearchByStatus() {
  123.     const int doc_id1 = 42;
  124.     const int doc_id2 = 43;
  125.     const int doc_id3 = 44;
  126.     const string content1 = "cat in the city"s;
  127.     const string content2 = "cat in the town"s;
  128.     const string content3 = "cat in the town or city"s;  
  129.     const vector<int> ratings = {1, 2, 3};
  130.     SearchServer server;
  131.     server.AddDocument(doc_id1, content1, DocumentStatus::ACTUAL, ratings);
  132.     server.AddDocument(doc_id2, content2, DocumentStatus::IRRELEVANT, ratings);
  133.     server.AddDocument(doc_id3, content3, DocumentStatus::IRRELEVANT, ratings);  
  134.     const auto found_docs = server.FindTopDocuments("in the cat"s, DocumentStatus::IRRELEVANT);
  135.    
  136.     ASSERT_HINT(found_docs[0].id == doc_id2, "Wrong status");
  137.     ASSERT_HINT(found_docs[1].id == doc_id3, "Wrong status");
  138.     ASSERT_HINT(found_docs.size() == 2, "Wrong status request");
  139. }
  140.  
  141. // Корректное вычисление релевантности найденных документов.
  142. void TestCalculateRelevance() {
  143.     SearchServer server;
  144.     server.AddDocument(100, "white cat with new ring"s, DocumentStatus::ACTUAL, {1, 2, 3});
  145.     server.AddDocument(101, "fluffy cat fluffy tail"s, DocumentStatus::ACTUAL, {1, 2, 3});
  146.     server.AddDocument(102, "good dog big eyes"s, DocumentStatus::ACTUAL, {1, 2, 3});
  147.     const auto found_docs = server.FindTopDocuments("fluffy good cat"s);
  148.     double relevance_query =  log((3 * 1.0)/1) * (2.0 / 4.0) + log((3 * 1.0)/2) * (1.0 / 4.0);
  149.    
  150.     ASSERT_HINT(fabs(found_docs[0].relevance - relevance_query) < 1e-6, "Wrong calculation relevance");
  151. }
  152.  
  153. // Функция TestSearchServer является точкой входа для запуска тестов
  154. void TestSearchServer() {
  155.     RUN_TEST(TestExcludeStopWordsFromAddedDocumentContent);
  156.     // Не забудьте вызывать остальные тесты здесь
  157.     RUN_TEST(TestFindAddedDocumentByDocumentWord);
  158.     RUN_TEST(TestExcludeDocumentsWithMinusWordsFromResults);
  159.     RUN_TEST(TestMatchedDocuments);
  160.     RUN_TEST(TestSortResultsByRelevance);
  161.     RUN_TEST(TestCalculateDocumentRating);
  162.     RUN_TEST(TestDocumentSearchByPredicate);
  163.     RUN_TEST(TestDocumentSearchByStatus);
  164.     RUN_TEST(TestCalculateRelevance);
  165. }
  166. // --------- Окончание модульных тестов поисковой системы -----------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement