Advertisement
YaMolekula

Untitled

Mar 21st, 2023
693
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.46 KB | None | 0 0
  1. #include "search_server.h"
  2. #include "process_queries.h"
  3.  
  4. #include <iostream>
  5. #include <string>
  6. #include <vector>
  7. #include <execution>
  8.  
  9. using namespace std;
  10.  
  11. void PrintMatchDocumentResultUTest(int document_id,  std::vector<std::string> words,
  12.                                    DocumentStatus status) {
  13.     std::cout << "{ "
  14.               << "document_id = " << document_id << ", "
  15.               << "status = " << static_cast<int>(status) << ", "
  16.               << "words =";
  17.     for (const string& word : words) {
  18.         std::cout << ' ' << word;
  19.     }
  20.     std::cout << "}" << std::endl;
  21. }
  22.  
  23. void PrintDocumentUTest(const Document& document) {
  24.     std::cout << "{ "
  25.               << "document_id = " << document.id << ", "
  26.               << "relevance = " << document.relevance << ", "
  27.               << "rating = " << document.rating << " }" << std::endl;
  28. }
  29.  
  30. void TestMatch() {
  31.     const std::vector<int> ratings1 = {1, 2, 3, 4, 5};
  32.     const std::vector<int> ratings2 = {-1, -2, 30, -3, 44, 5};
  33.     const std::vector<int> ratings3 = {12, -20, 80, 0, 8, 0, 0, 9, 67};
  34.     const std::vector<int> ratings4 = {7, 0, 3, -49, 5};
  35.     const std::vector<int> ratings5 = {81, -6, 7, 94, -7};
  36.     const std::vector<int> ratings6 = {41, 8, -7, 897, 5};
  37.     const std::vector<int> ratings7 = {543, 0, 43, 4, -5};
  38.     const std::vector<int> ratings8 = {91, 7, 3, -88, 56};
  39.     const std::vector<int> ratings9 = {0, -87, 93, 66, 5};
  40.     const std::vector<int> ratings10 = {11, 2, -43, 4, 895};
  41.     std::string stop_words = "и в на";
  42.     SearchServer search_server(stop_words);
  43.  
  44.     search_server.AddDocument(0, "белый кот и модный ошейник", DocumentStatus::ACTUAL, ratings1);
  45.     search_server.AddDocument(1, "пушистый кот пушистый хвост", DocumentStatus::ACTUAL, ratings2);
  46.     search_server.AddDocument(2, "ухоженный пёс выразительные глаза", DocumentStatus::ACTUAL,
  47.                               ratings3);
  48.     search_server.AddDocument(3, "белый модный кот", DocumentStatus::IRRELEVANT, ratings1);
  49.     search_server.AddDocument(4, "пушистый кот пёс", DocumentStatus::IRRELEVANT, ratings2);
  50.     search_server.AddDocument(5, "ухоженный ошейник выразительные глаза",
  51.                               DocumentStatus::IRRELEVANT, ratings3);
  52.     search_server.AddDocument(6, "кот и ошейник", DocumentStatus::BANNED, ratings1);
  53.     search_server.AddDocument(7, "пёс и хвост", DocumentStatus::BANNED, ratings2);
  54.     search_server.AddDocument(8, "модный пёс пушистый хвост", DocumentStatus::BANNED, ratings3);
  55.     search_server.AddDocument(9, "кот пушистый ошейник", DocumentStatus::REMOVED, ratings1);
  56.     search_server.AddDocument(10, "ухоженный кот и пёс", DocumentStatus::REMOVED, ratings2);
  57.     search_server.AddDocument(11, "хвост и выразительные глаза", DocumentStatus::REMOVED, ratings3);
  58.  
  59.     const std::string query = "пушистый ухоженный кот -ошейник";
  60.     const auto documents = search_server.FindTopDocuments(query);
  61.  
  62.     std::cout << "Top documents for query:" << std::endl;
  63.     for (const Document& document : documents) {
  64.         PrintDocumentUTest(document);
  65.     }
  66.  
  67.     std::cout << "Documents' statuses:" << std::endl;
  68.     const int document_count = search_server.GetDocumentCount();
  69.    
  70.     for (int document_id = 0; document_id < document_count; ++document_id) {
  71.         //tuple<vector<string>, DocumentStatus> p = search_server.MatchDocument(query, document_id);
  72.         //tuple<vector<string>, DocumentStatus> tpl = search_server.MatchDocument(query, document_id);
  73.         //PrintMatchDocumentResultUTest(document_id, get<0>(tpl), get<1>(tpl));
  74.         const auto [words, status] = search_server.MatchDocument(query, document_id);
  75.         vector<string> words2;
  76.         for(string_view s: words) words2.push_back(string(s));
  77.         PrintMatchDocumentResultUTest(document_id, words2, status);
  78.     }
  79. }
  80.  
  81. void Test2(){
  82.  
  83.     //SearchServer search_server("and with"s);
  84.     string stop_words = "and with"s;
  85.     SearchServer search_server(stop_words);
  86.  
  87.     int id = 0;
  88.     for (
  89.         const string& text : {
  90.             "funny pet and nasty rat"s,
  91.             "funny pet with curly hair"s,
  92.             "funny pet and not very nasty rat"s,
  93.             "pet with rat and rat and rat"s,
  94.             "nasty rat with curly hair"s,
  95.         }
  96.     ) {
  97.         search_server.AddDocument(++id, text, DocumentStatus::ACTUAL, {1, 2});
  98.     }
  99.  
  100.     const string query = "curly and funny curly -not -not"s;
  101.  
  102.     {
  103.         //std::cout << "ex1:start"<<std::endl;
  104.         const auto [words, status] = search_server.MatchDocument(query, 1);
  105.         cout << words.size() << " words for document 1"s << endl;
  106.         // 1 words for document 1
  107.         //std::cout << "ex1:end"<<std::endl;
  108.     }
  109.  
  110.     {
  111.         const auto [words, status] = search_server.MatchDocument(execution::par, query, 2);
  112.         cout << words.size() << " words for document 2"s << endl;
  113.         // 2 words for document 2
  114.     }
  115.  
  116.     {
  117.         const auto [words, status] = search_server.MatchDocument(execution::par, query, 3);
  118.         cout << words.size() << " words for document 3"s << endl;
  119.         // 0 words for document 3
  120.     }
  121. }
  122.  
  123. int main() {
  124.     //std::cout << "main: start"<<std::endl;
  125.     //Test2();
  126.     TestMatch();
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement