Explorar el Código

more tests

master
Ludovic 'Archivist' Lagouardette hace 4 años
padre
commit
e0953bd79a
Se han modificado 3 ficheros con 101 adiciones y 3 borrados
  1. +9
    -3
      tests.sh
  2. +44
    -0
      tests/test05.cpp
  3. +48
    -0
      tests/test06.cpp

+ 9
- 3
tests.sh Ver fichero

@ -6,8 +6,14 @@ g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test01.cpp
g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test02.cpp
./a.out || echo "FAILURE ON TEST02"
g++ -pthread -Iinclude -std=c++17 -O0 -g tests/test03.cpp
g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test03.cpp
./a.out || echo "FAILURE ON TEST03"
g++ -pthread -Iinclude -std=c++17 -O0 -g tests/test04.cpp
./a.out || echo "FAILURE ON TEST04"
g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test04.cpp
./a.out || echo "FAILURE ON TEST04"
g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test05.cpp
./a.out || echo "FAILURE ON TEST05"
g++ -pthread -Iinclude -std=c++17 -O3 -g tests/test06.cpp
./a.out || echo "FAILURE ON TEST06"

+ 44
- 0
tests/test05.cpp Ver fichero

@ -0,0 +1,44 @@
#include "lfhmap.hpp"
#include <string>
#include <iostream>
#include <future>
#include <vector>
template<typename fn>
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<size_t, std::string, 80000>();
std::vector<std::future<int>> finals;
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;
}
return 0;
}));
});
for(auto& a : finals) a.wait();
int ret = 0;
for(auto& a : finals) ret += a.get();
return ret;
}

+ 48
- 0
tests/test06.cpp Ver fichero

@ -0,0 +1,48 @@
#include "lfhmap.hpp"
#include <string>
#include <iostream>
#include <future>
#include <vector>
template<typename fn>
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<size_t, std::string, 8000>();
std::vector<std::future<int>> 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;
}
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 06 took " << std::chrono::duration_cast<std::chrono::milliseconds>(time).count() << "ms" << std::endl;
std::cout << "Per 1R1W ("<< thread_cnt << " threads) " << std::chrono::duration_cast<std::chrono::nanoseconds>(time).count()/250000 << "ns" << std::endl;
return ret;
}

Cargando…
Cancelar
Guardar