//#define CATCH_CONFIG_ENABLE_BENCHMARKING #include "logtest.h" #include #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 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(); }