-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_example_functions.h
155 lines (122 loc) · 4.55 KB
/
test_example_functions.h
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#pragma once
#include "process_queries.h"
#include "remove_duplicates.h"
#include "request_queue.h"
#include "search_server.h"
#include <iomanip>
#include <iostream>
#include <map>
#include <set>
#include <vector>
using std::string_literals::operator""s;
template <typename T>
void Print(std::ostream& out, T container) {
int size = container.size();
for (auto element : container) {
--size;
if (size > 0) {
out << element << ", "s;
} else {
out << element;
}
}
}
// Шаблон для вывода вектора
template <typename T>
std::ostream& operator<<(std::ostream& out, const std::vector<T>& container) {
out << "["s;
Print(out, container);
out << "]"s;
return out;
}
// Шаблон для вывода множества
template <typename T>
std::ostream& operator<<(std::ostream& out, const std::set<T>& container) {
out << "{"s;
Print(out, container);
out << "}"s;
return out;
}
// Шаблон для вывода словаря 1.1
template <typename Key, typename Value>
std::ostream& operator<<(std::ostream& out, const std::map<Key, Value>& container) {
out << "{"s;
Print(out, container);
out << "}"s;
return out;
}
// Шаблон для вывода словаря 1.2
template <typename L, typename R>
std::ostream& operator<<(std::ostream& out, const std::pair<L, R>& mypair) {
const auto& [l, r] = mypair;
out << l;
out << ": "s;
out << r;
return out;
}
// Шаблонная функция для проверки равенства двух произвольных элементов
template <typename T, typename U>
void AssertEqualImpl(const T& t, const U& u, const std::string& t_str, const std::string& u_str,
const std::string& file, const std::string& func, unsigned line, const std::string& hint) {
if (t != u) {
std::cerr << std::boolalpha;
std::cerr << file << "("s << line << "): "s << func << ": "s;
std::cerr << "ASSERT_EQUAL("s << t_str << ", "s << u_str << ") failed: "s;
std::cerr << t << " != "s << u << "."s;
if (!hint.empty()) {
std::cerr << " Hint: "s << hint;
}
std::cerr << std::endl;
std::abort();
}
}
// Функция для проверки истинности логического выражения
void AssertImpl(bool value, const std::string& expr_str, const std::string& file, const std::string& func,
unsigned line, const std::string& hint);
// Макросы подставляющие функции с параметрами на место ASSERT...
#define ASSERT_EQUAL(a, b) AssertEqualImpl((a), (b), #a, #b, __FILE__, __FUNCTION__, __LINE__, ""s)
#define ASSERT_EQUAL_HINT(a, b, hint) AssertEqualImpl((a), (b), #a, #b, __FILE__, __FUNCTION__, __LINE__, (hint))
#define ASSERT(expr) AssertImpl(!!(expr), #expr, __FILE__, __FUNCTION__, __LINE__, ""s)
#define ASSERT_HINT(expr, hint) AssertImpl(!!(expr), #expr, __FILE__, __FUNCTION__, __LINE__, (hint))
// Шаблонная функция для вызова теста по имени его функции
template <typename F>
void RunTestImpl(F foo, const std::string& function_name) {
foo();
std::cerr << function_name << " OK" << std::endl;
}
#define RUN_TEST(func) RunTestImpl((func), #func)
void TestExcludeStopWordsFromAddedDocumentContent();
void TestAddDocument();
void TestStopWordsSupport();
void TestMinusWords();
void TestMatching();
void TestSortRelevance();
void TestRatingCalc();
void TestFilterPredicat();
void TestSearchWitnStatus();
void TestRelevanceCalc();
// sprint 3 Added Exeptions
void TestExeptionConstructorInvalidChar();
void TestExeptionAddDocumentInvalidChar();
void TestExeptionAddDocumentInvalidDocumentID();
void TestExeptionAddDocumentSameDocumentID();
void TestExeptionFindTopDocumentsIllegalWordQuery();
void TestExeptionFindTopDocumentsAnotherMinus();
void TestExeptionMatchDocumentWrongID();
void TestExeptionMatchDocumentIllegalWordQuery();
void TestExeptionMatchDocumentAnotherMinus();
// sprint 4 Added Paginator and ReguestQueue class
void TestPaginator();
void TestRequestQueue();
// sprint 5 Added RemoveDuplicate function
bool InTheVicinity(const double d1, const double d2, const double delta);
void TestRemoveDocument();
void TestDuplicateDocumentsRemove();
// sprint 8 Added
void TestProcessQueries();
void TestProcessQueriesJoined();
void TestRemoveDocumentMultiTread();
void TestMatchDocumentMultiTread();
void TestFindTopDocumentsMultiTread();
// Entry point
void TestSearchServer();