working code

This commit is contained in:
TinyAtoms
2020-02-03 15:10:29 -03:00
commit 90e3e0d274
39 changed files with 3393 additions and 0 deletions

View File

@@ -0,0 +1,151 @@
#ifndef ATESTS_H
#define ATESTS_H
#include <string>
#include "./tests.h"
#include <ostream>
#include <iostream>
std::vector<int> sizes = {
50000, 100000, 150000, 200000, 250000, 300000, 350000, 400000, 500000,
600000, 700000, 800000, 900000, 1000000,
2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000,
15000000, 20000000, 25000000, 30000000, 35000000, 40000000, 45000000, 50000000
};
// to print type info
template <typename T>
constexpr auto type_name()
{
std::string_view name, prefix, suffix;
#ifdef __clang__
name = __PRETTY_FUNCTION__;
prefix = "auto type_name() [T = ";
suffix = "]";
#elif defined(__GNUC__)
name = __PRETTY_FUNCTION__;
prefix = "constexpr auto type_name() [with T = ";
suffix = "]";
#elif defined(_MSC_VER)
name = __FUNCSIG__;
prefix = "auto __cdecl type_name<";
suffix = ">(void)";
#endif
name.remove_prefix(prefix.size());
name.remove_suffix(suffix.size());
return name;
}
template<class T>
std::basic_string_view<char> name(T var){
return type_name<decltype(var)>();
}
template<class T>
int int_test(T map, int repeats=30){
std::ofstream output{"results.csv", std::ios_base::app};
// insert int tests
for (int i = 0; i < repeats; ++i){
std::string resultline = "insert_int, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
std::cout << size << ", ";
float result = insert_int_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// lookup int
for (int i = 0; i < repeats; ++i){
std::string resultline = "lookup_int, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = lookup_int_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// unsuccesful lookup
for (int i = 0; i < repeats; ++i){
std::string resultline = "nolookup_int, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = nolookup_int_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// deletion
for (int i = 0; i < repeats; ++i){
std::string resultline = "delete_int, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = delete_int_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
return 0;
}
template<class T>
int string_test(T map, int repeats=30){
std::ofstream output{"results.csv", std::ios_base::app};
// insert int tests
for (int i = 0; i < repeats; ++i){
std::string resultline = "insert_string, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = insert_string_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// lookup int
for (int i = 0; i < repeats; ++i){
std::string resultline = "lookup_string, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = lookup_string_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// unsuccesful lookup
for (int i = 0; i < repeats; ++i){
std::string resultline = "nolookup_string, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = nolookup_string_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
// deletion
for (int i = 0; i < repeats; ++i){
std::string resultline = "delete_string, '" + std::string{name(map)} + "', ";
for (auto size: sizes){
float result = delete_string_test(size, T{}).count();
resultline += std::to_string(result);
resultline += ", ";
}
output << resultline << "\n";
}
return 0;
}
#endif