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:
copilot-swe-agent[bot]
2026-02-11 02:29:50 +00:00
parent 6da12fade1
commit 7e4365f014
2 changed files with 58 additions and 6 deletions

View File

@@ -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;

View File

@@ -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)