From 6ba52ab73f7f0b2592daa50cf9d51724ec09cdcb Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Wed, 20 Mar 2024 16:37:00 +0100 Subject: [PATCH] refactor: extract test runs --- vector_search_cli/main.cpp | 63 ++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/vector_search_cli/main.cpp b/vector_search_cli/main.cpp index 0d31e5b..37c2171 100644 --- a/vector_search_cli/main.cpp +++ b/vector_search_cli/main.cpp @@ -1,3 +1,4 @@ +#include "grouped_finder.h" #include "linear_finder.h" #include "parallel_finder.h" #include "timer.h" @@ -6,10 +7,8 @@ #include #include -#include -using std::string, std::string_view, std::vector, std::thread, std::cout, - std::endl; +using std::string, std::string_view, std::vector, std::cout, std::endl; vector generate_word_list() { cout << "\ngenerating word list" << endl; @@ -24,36 +23,37 @@ vector generate_word_list() { return word_list; } +void test_finder_search(Finder &finder, std::string_view name, + std::string_view search_term) { + Timer find_timer; + auto result = finder.find_prefix(search_term); + find_timer.stop(); + + cout << name << "(" << search_term << ") took " << find_timer << endl; + cout << "result list is " << std::distance(result.cbegin(), result.cend()) + << " element(s) long" << endl; +} + +void test_finder(Finder &finder, std::string_view name) { + for (const auto &search_term : {"A", "AB", "ABC", "ABCD"}) { + test_finder_search(finder, name, search_term); + } +} + void test_linear_finder(const vector &word_list) { cout << "\nrunning linear finder" << endl; LinearFinder linear_finder(word_list); - Timer find_timer; - auto result = linear_finder.find_prefix("ABCD"); - find_timer.stop(); - - cout << "linear finder took " << find_timer << endl; - cout << "result list is " << std::distance(result.cbegin(), result.cend()) - << " element(s) long" << endl; + test_finder(linear_finder, "linear finder"); } void test_parallel_finder(const vector &word_list) { cout << "\nrunning parallel finder" << endl; - const size_t thread_count = thread::hardware_concurrency(); + ParallelFinder parallel_finder(word_list); - cout << "using " << thread_count << " threads" << endl; - - ParallelFinder parallel_finder(word_list, thread_count); - - Timer find_timer; - auto result = parallel_finder.find_prefix("ABCD"); - find_timer.stop(); - - cout << "parallel finder took " << find_timer << endl; - cout << "result list is " << std::distance(result.cbegin(), result.cend()) - << " element(s) long" << endl; + test_finder(parallel_finder, "parallel finder"); } void test_tree_finder(const vector &word_list) { @@ -62,16 +62,20 @@ void test_tree_finder(const vector &word_list) { Timer constructor_timer; TreeFinder tree_finder(word_list); constructor_timer.stop(); - cout << "tree finder constructor took " << constructor_timer << endl; - Timer find_timer; - auto result = tree_finder.find_prefix("ABCD"); - find_timer.stop(); + test_finder(tree_finder, "tree finder"); +} - cout << "tree finder took " << find_timer << endl; - cout << "result list is " << std::distance(result.cbegin(), result.cend()) - << " element(s) long" << endl; +void test_grouped_finder(const vector &word_list) { + cout << "\nrunning grouped finder" << endl; + + Timer constructor_timer; + GroupedFinder grouped_finder(word_list); + constructor_timer.stop(); + cout << "grouped finder constructor took " << constructor_timer << endl; + + test_finder(grouped_finder, "grouped_finder"); } int main(int argc, char *argv[]) { @@ -82,6 +86,7 @@ int main(int argc, char *argv[]) { test_linear_finder(word_list); test_parallel_finder(word_list); test_tree_finder(word_list); + test_grouped_finder(word_list); return EXIT_SUCCESS; }