#include "lfhmap.hpp" #include #include #include #include template void repeat(size_t nb, fn v) { while(nb--) { v(); } } int main() { constexpr size_t thread_cnt = 16; size_t v = 0; auto map = new mct20::lfhmap(); std::vector> finals; auto start = std::chrono::high_resolution_clock::now(); repeat(thread_cnt, [&](){ size_t v2 = v; v++; finals.push_back(std::async(std::launch::async, [&map, v2](){ for(int a = v2; a < 250000; a+=thread_cnt) { map->set(a, std::to_string(a)); } for(int a = v2; a < 250000; a+=thread_cnt) { if(auto acc = map->get(a); acc) { const std::string& t = acc.value(); if(t != std::to_string(a)) return 1; } else return 1; } for(int a = v2; a < 250000; a+=thread_cnt) { map->remove(a); } return 0; })); }); for(auto& a : finals) a.wait(); int ret = 0; for(auto& a : finals) ret += a.get(); auto time = std::chrono::high_resolution_clock::now() - start; std::cout << "Test 08 took " << std::chrono::duration_cast(time).count() << "ms" << std::endl; std::cout << "Per 1R1W1D ("<< thread_cnt << " threads) " << std::chrono::duration_cast(time).count()/250000 << "ns" << std::endl; return ret; }