#include <gtest/gtest.h>
#include "megdnn/basic_types.h"
#include "src/common/utils.h"
#include "test/common/random_state.h"
namespace {
class ResetSeedListener : public ::testing::EmptyTestEventListener {
void OnTestStart(const ::testing::TestInfo&) override {
megdnn::test::RandomState::reset();
}
};
megdnn::LogLevel min_log_level;
void set_log_level() {
megdnn::LogLevel level = megdnn::LogLevel::INFO;
auto setting = std::getenv("MEGDNN_LOG_LEVEL");
if (setting) {
if (!strcmp(setting, "INFO")) {
level = megdnn::LogLevel::INFO;
} else if (!strcmp(setting, "DEBUG")) {
level = megdnn::LogLevel::DEBUG;
} else if (!strcmp(setting, "WARN")) {
level = megdnn::LogLevel::WARN;
} else {
megdnn_assert(!strcmp(setting, "ERROR"));
level = megdnn::LogLevel::ERROR;
}
}
min_log_level = level;
}
void log_handler(
megdnn::LogLevel level, const char* file, const char* func, int line,
const char* fmt, va_list ap) {
if (level < min_log_level) {
return;
}
char msg[1024];
vsnprintf(msg, sizeof(msg), fmt, ap);
fprintf(stderr, "[megdnn] %s @%s:%d %s\n", msg, file, line, func);
}
}
#if MEGDNN_X86
#include "../src/x86/utils.h"
#endif
extern "C" int gtest_main(int argc, char** argv) {
::megdnn::set_log_handler(log_handler);
set_log_level();
ResetSeedListener listener;
auto&& listeners = ::testing::UnitTest::GetInstance()->listeners();
::testing::InitGoogleTest(&argc, argv);
listeners.Append(&listener);
auto ret = RUN_ALL_TESTS();
listeners.Release(&listener);
return ret;
}