mirror of
https://github.com/microsoft/mscclpp.git
synced 2026-05-11 17:00:22 +00:00
Add performance test filtering and remove HTML coverage
- Add isPerfTest field to TestInfoInternal struct - Add --exclude-perf-tests command line argument - Add PERF_TEST and PERF_TEST_F macros for marking performance tests - Update runAllTests to filter performance tests when requested - Remove genhtml dependency and HTML report generation - Keep only coverage.info file generation with lcov Performance tests can now be excluded with: ./build/bin/unit_tests --exclude-perf-tests ./build/bin/mp_unit_tests --exclude-perf-tests Co-authored-by: chhwang <8018170+chhwang@users.noreply.github.com>
This commit is contained in:
@@ -169,11 +169,13 @@ TestRegistry& TestRegistry::instance() {
|
||||
return registry;
|
||||
}
|
||||
|
||||
void TestRegistry::registerTest(const std::string& test_suite, const std::string& test_name, TestFactory factory) {
|
||||
void TestRegistry::registerTest(const std::string& test_suite, const std::string& test_name, TestFactory factory,
|
||||
bool isPerfTest) {
|
||||
TestInfoInternal info;
|
||||
info.suiteName = test_suite;
|
||||
info.testName = test_name;
|
||||
info.factory = factory;
|
||||
info.isPerfTest = isPerfTest;
|
||||
tests_.push_back(info);
|
||||
}
|
||||
|
||||
@@ -190,8 +192,10 @@ int TestRegistry::runAllTests(int argc, char* argv[]) {
|
||||
utils::initializeMPI(argc, argv);
|
||||
}
|
||||
|
||||
// Parse command line arguments for test filter
|
||||
// Parse command line arguments
|
||||
std::string filter = "";
|
||||
bool excludePerfTests = false;
|
||||
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
std::string arg = argv[i];
|
||||
if (arg.find("--gtest_filter=") == 0) {
|
||||
@@ -199,6 +203,8 @@ int TestRegistry::runAllTests(int argc, char* argv[]) {
|
||||
} else if (arg == "--gtest_filter" && i + 1 < argc) {
|
||||
filter = argv[i + 1];
|
||||
++i;
|
||||
} else if (arg == "--exclude-perf-tests") {
|
||||
excludePerfTests = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,6 +228,13 @@ int TestRegistry::runAllTests(int argc, char* argv[]) {
|
||||
int total_to_run = 0;
|
||||
for (const auto& test_info : tests_) {
|
||||
std::string full_name = test_info.suiteName + "." + test_info.testName;
|
||||
|
||||
// Skip performance tests if requested
|
||||
if (excludePerfTests && test_info.isPerfTest) {
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!filter.empty() && full_name.find(filter) == std::string::npos) {
|
||||
skipped++;
|
||||
continue;
|
||||
@@ -232,7 +245,7 @@ int TestRegistry::runAllTests(int argc, char* argv[]) {
|
||||
if (gMpiRank == 0) {
|
||||
std::cout << "[==========] Running " << total_to_run << " tests";
|
||||
if (skipped > 0) {
|
||||
std::cout << " (" << skipped << " skipped by filter)";
|
||||
std::cout << " (" << skipped << " skipped)";
|
||||
}
|
||||
std::cout << ".\n";
|
||||
}
|
||||
@@ -240,6 +253,11 @@ int TestRegistry::runAllTests(int argc, char* argv[]) {
|
||||
for (const auto& test_info : tests_) {
|
||||
std::string full_name = test_info.suiteName + "." + test_info.testName;
|
||||
|
||||
// Skip performance tests if requested
|
||||
if (excludePerfTests && test_info.isPerfTest) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Apply filter
|
||||
if (!filter.empty() && full_name.find(filter) == std::string::npos) {
|
||||
continue;
|
||||
|
||||
@@ -91,7 +91,7 @@ class TestRegistry {
|
||||
|
||||
static TestRegistry& instance();
|
||||
|
||||
void registerTest(const std::string& test_suite, const std::string& test_name, TestFactory factory);
|
||||
void registerTest(const std::string& test_suite, const std::string& test_name, TestFactory factory, bool isPerfTest = false);
|
||||
void addGlobalTestEnvironment(Environment* env);
|
||||
int runAllTests(int argc, char* argv[]);
|
||||
void initGoogleTest(int* argc, char** argv);
|
||||
@@ -102,6 +102,7 @@ class TestRegistry {
|
||||
std::string suiteName;
|
||||
std::string testName;
|
||||
TestFactory factory;
|
||||
bool isPerfTest;
|
||||
};
|
||||
std::vector<TestInfoInternal> tests_;
|
||||
std::vector<Environment*> environments_;
|
||||
@@ -216,7 +217,8 @@ class SkipHelper {
|
||||
static bool test_suite##_##test_name##_registered = []() { \
|
||||
::mscclpp::test::TestRegistry::instance().registerTest( \
|
||||
#test_suite, #test_name, \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_suite##_##test_name##_Test(); }); \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_suite##_##test_name##_Test(); }, \
|
||||
false); \
|
||||
return true; \
|
||||
}(); \
|
||||
void test_suite##_##test_name##_Test::TestBody()
|
||||
@@ -230,11 +232,43 @@ class SkipHelper {
|
||||
static bool test_fixture##_##test_name##_registered = []() { \
|
||||
::mscclpp::test::TestRegistry::instance().registerTest( \
|
||||
#test_fixture, #test_name, \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_fixture##_##test_name##_Test(); }); \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_fixture##_##test_name##_Test(); }, \
|
||||
false); \
|
||||
return true; \
|
||||
}(); \
|
||||
void test_fixture##_##test_name##_Test::TestBody()
|
||||
|
||||
// Performance test registration macros
|
||||
#define PERF_TEST(test_suite, test_name) \
|
||||
class test_suite##_##test_name##_Test : public ::mscclpp::test::TestCase { \
|
||||
public: \
|
||||
test_suite##_##test_name##_Test() {} \
|
||||
void TestBody() override; \
|
||||
}; \
|
||||
static bool test_suite##_##test_name##_registered = []() { \
|
||||
::mscclpp::test::TestRegistry::instance().registerTest( \
|
||||
#test_suite, #test_name, \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_suite##_##test_name##_Test(); }, \
|
||||
true); \
|
||||
return true; \
|
||||
}(); \
|
||||
void test_suite##_##test_name##_Test::TestBody()
|
||||
|
||||
#define PERF_TEST_F(test_fixture, test_name) \
|
||||
class test_fixture##_##test_name##_Test : public test_fixture { \
|
||||
public: \
|
||||
test_fixture##_##test_name##_Test() {} \
|
||||
void TestBody() override; \
|
||||
}; \
|
||||
static bool test_fixture##_##test_name##_registered = []() { \
|
||||
::mscclpp::test::TestRegistry::instance().registerTest( \
|
||||
#test_fixture, #test_name, \
|
||||
[]() -> ::mscclpp::test::TestCase* { return new test_fixture##_##test_name##_Test(); }, \
|
||||
true); \
|
||||
return true; \
|
||||
}(); \
|
||||
void test_fixture##_##test_name##_Test::TestBody()
|
||||
|
||||
// Test runner macro
|
||||
#define RUN_ALL_TESTS() ::mscclpp::test::TestRegistry::instance().runAllTests(argc, argv)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user