chevengur

СПРИНТ № 3 | Фреймворк для юнит-тестов | Урок 8: Фреймворк и поисковая система

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