//#define CATCH_CONFIG_ENABLE_BENCHMARKING
#include "logtest.h"
#include <thread>
#define TEST(name) TEST_CASE("bench: " name, "[bench]")
//TEST("log") {
// auto logger = [](const string&, const Info&){};
// set_logger(logger);
//
// BENCHMARK("enabled") {
// panda_log_error("epta");
// };
// BENCHMARK("disabled") {
// panda_log_debug("epta");
// };
//}
TEST_CASE("thread-safe test", "[.]") {
int nthr = 0, cnt = 0;
auto nthr_str = getenv("NTHR");
if (nthr_str) nthr = atoi(nthr_str);
auto cnt_str = getenv("CNT");
if (cnt_str) cnt = atoi(cnt_str);
if (!nthr) nthr = 8;
if (!cnt) cnt = 1000000;
struct Logger : ILogger {
void log (const string&, const Info&) override {
//std::time(NULL);
}
};
auto logger = [](const string&, const Info&){
//std::this_thread::sleep_for(std::chrono::microseconds(10));
//printf("log\n");
};
set_logger(logger);
set_logger(ILoggerSP(new Logger()));
std::vector<std::thread> v;
for (int i = 0; i < nthr; ++i) {
v.push_back(std::thread([](int cnt) {
for (int i = 0; i < cnt; ++i) {
panda_log_warning("");
}
}, cnt));
}
if (1) v.push_back(std::thread([](int cnt) {
for (int i = 0; i < cnt; ++i) {
if (i % 2 == 0) set_logger(ILoggerSP(new Logger()));
else set_logger(nullptr);
}
}, cnt));
for (auto& t : v) t.join();
}