-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
81 lines (72 loc) · 2.46 KB
/
main.cpp
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
#include "engine/ansReduction.hpp"
#include "engine/algorithm.hpp"
#include "engine/entropy.hpp"
#include "engine/randomAccess.hpp"
#include "engine/baseline.hpp"
#include <string>
#include <chrono>
#include <iostream>
void run_algorithm(engine::Base * instance, std::string multithreading);
auto main(int argv, char ** argc) -> int {
int requests = 0;
try
{
while (++requests < argv - 1)
{
argc = std::next(argc);
std::string query = *argc;
++requests;
argc = std::next(argc);
std::string starting_word = *argc;
if (starting_word.size() != engine::word_size)
{
std::cout << "Word '" << starting_word << "' is invalid" << std::endl;
continue;
}
if (query == "ra" || query == "ra+")
{
engine::RandomAccess ra_instance("validSolutions.csv", "randomAccess", starting_word);
run_algorithm(&ra_instance, query);
}
else if (query == "bl" || query == "bl+")
{
engine::Baseline bl_instance("validSolutions.csv", "baseline", starting_word);
run_algorithm(&bl_instance, query);
}
else if (query == "red" || query == "red+")
{
engine::AnsReduction red_instance("validSolutions.csv", "ansReduction", starting_word);
run_algorithm(&red_instance, query);
}
else if (query == "en" || query == "en+")
{
engine::Entropy en_instance("validSolutions.csv", "entropy", starting_word);
run_algorithm(&en_instance, query);
}
else
{
std::cout << query << " query is invalid" << std::endl;
}
}
}
catch (const std::exception & e)
{
std::cerr << e.what() << std::endl;
exit(EXIT_FAILURE);
}
return 0;
}
void run_algorithm(engine::Base * instance, std::string multithreading)
{
auto start = std::chrono::high_resolution_clock::now();
if (multithreading.at(multithreading.size() - 1) == '+')
{
instance->validate_algorithm_multithreaded();
}
else
{
instance->validate_algorithm();
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "Time taken: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;
}