-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtests.cpp
More file actions
123 lines (112 loc) · 4.71 KB
/
Copy pathtests.cpp
File metadata and controls
123 lines (112 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "log_duration.h"
#include "process_queries.h"
#include "search_server.h"
#include "search_server_tests.h"
#include "test_example_functions.h"
#include <execution>
#include <iostream>
#include <random>
#include <string>
#include <vector>
using namespace std;
template <typename ExecutionPolicy>
void TestMatch(string_view mark, SearchServer search_server, const string& query, ExecutionPolicy&& policy) {
LOG_DURATION(mark);
const int document_count = search_server.GetDocumentCount();
int word_count = 0;
for (int id = 0; id < document_count; ++id) {
const auto [words, status] = search_server.MatchDocument(policy, query, id);
word_count += static_cast<int>(words.size());
}
cout << word_count << endl;
}
#define TEST_MATCH(policy) TestMatch(#policy, search_server, query, execution::policy)
template <typename ExecutionPolicy>
void TestRemove(string_view mark, SearchServer search_server, ExecutionPolicy&& policy) {
LOG_DURATION(mark);
const int document_count = search_server.GetDocumentCount();
for (int id = 0; id < document_count; ++id) {
search_server.RemoveDocument(policy, id);
}
cout << search_server.GetDocumentCount() << endl;
}
#define TEST_REMOVE(policy) TestRemove(#policy, search_server, execution::policy)
template <typename QueriesProcessor>
void TestProcessQueries(string_view mark, QueriesProcessor processor, const SearchServer& search_server, const vector<string>& queries) {
LOG_DURATION(mark);
const auto documents = processor(search_server, queries);
cout << documents.size() << endl;
}
#define TEST_PQ(processor) TestProcessQueries(#processor, processor, search_server, queries)
template <typename ExecutionPolicy>
void TestFindTopDocuments(string_view mark, const SearchServer& search_server, const vector<string>& queries, ExecutionPolicy&& policy) {
LOG_DURATION(mark);
double total_relevance = 0;
for (const string_view query : queries) {
for (const auto& document : search_server.FindTopDocuments(policy, query)) {
total_relevance += document.relevance;
}
}
cout << total_relevance << endl;
}
#define TEST_FTD(policy) TestFindTopDocuments(#policy, search_server, queries, execution::policy)
int main() {
TestSearchServer ();
cout << endl;
mt19937 generator;
// TestProcessQueries
{
const auto dictionary = GenerateDictionary(generator, 10000, 25);
const auto documents = GenerateQueries(generator, dictionary, 100'000, 10);
SearchServer search_server(dictionary[0]);
for (size_t i = 0; i < documents.size(); ++i) {
search_server.AddDocument(static_cast<int>(i), documents[i], DocumentStatus::ACTUAL, {1, 2, 3});
}
const auto queries = GenerateQueries(generator, dictionary, 10'000, 7);
cout << "Testing ProcessQueries speed: "s << endl;
TEST_PQ(ProcessQueries);
TEST_PQ(ProcessQueriesJoined);
}
cout << endl;
// TestRemove
{
const auto dictionary = GenerateDictionary(generator, 10000, 25);
const auto documents = GenerateQueries(generator, dictionary, 10'000, 100);
SearchServer search_server(dictionary[0]);
for (size_t i = 0; i < documents.size(); ++i) {
search_server.AddDocument(static_cast<int>(i), documents[i], DocumentStatus::ACTUAL, {1, 2, 3});
}
cout << "Testing Remove speed: "s << endl;
TEST_REMOVE(seq);
TEST_REMOVE(par);
}
cout << endl;
// Test Match
{
const auto dictionary = GenerateDictionary(generator, 1000, 10);
const auto documents = GenerateQueries(generator, dictionary, 10'000, 70);
const string query = GenerateQuery(generator, dictionary, 500, 0.1);
SearchServer search_server(dictionary[0]);
for (size_t i = 0; i < documents.size(); ++i) {
search_server.AddDocument(static_cast<int>(i), documents[i], DocumentStatus::ACTUAL, {1, 2, 3});
}
cout << "Testing Match speed: "s << endl;
TEST_MATCH(seq);
TEST_MATCH(par);
}
cout << endl;
// Test Find Top
{
const auto dictionary = GenerateDictionary(generator, 1000, 10);
const auto documents = GenerateQueries(generator, dictionary, 10'000, 70);
SearchServer search_server(dictionary[0]);
for (size_t i = 0; i < documents.size(); ++i) {
search_server.AddDocument(static_cast<int>(i), documents[i], DocumentStatus::ACTUAL, {1, 2, 3});
}
const auto queries = GenerateQueries(generator, dictionary, 100, 70);
cout << "Testing FindTopDocuments speed: "s << endl;
TEST_FTD(seq);
TEST_FTD(par);
}
return 0;
}