Files
MeanField/tests/mpi/mpi_test_main.cpp
2026-09-04 07:54:10 -04:00

59 lines
1.6 KiB
C++

#include <catch2/catch_session.hpp>
#include <cstdint>
#include <iostream>
#include <mfem.hpp>
#include <string>
#include <vector>
int main(
int argc,
char *argv[]
) {
mfem::Mpi::Init(argc, argv);
const int rank = mfem::Mpi::WorldRank();
std::vector<std::string> arguments;
arguments.reserve(static_cast<std::size_t>(argc) + 6);
for (int index = 0; index < argc; ++index) {
arguments.emplace_back(argv[index]);
}
arguments.emplace_back("--order");
arguments.emplace_back("lex");
arguments.emplace_back("--rng-seed");
arguments.emplace_back("184467");
if (rank != 0) {
arguments.emplace_back("--out");
arguments.emplace_back("/dev/null");
}
std::vector<const char *> catch_arguments;
catch_arguments.reserve(arguments.size());
for (const std::string &argument : arguments) {
catch_arguments.push_back(argument.c_str());
}
int local_result = 0;
{
Catch::Session session;
if (const int parse_result =
session.applyCommandLine(static_cast<int>(catch_arguments.size()), catch_arguments.data());
parse_result != 0) {
local_result = parse_result;
} else {
local_result = session.run();
}
}
int global_result = 0;
MPI_Allreduce(&local_result, &global_result, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
if (rank == 0 && global_result != 0 && local_result == 0) {
std::cerr << "At least one non-root MPI rank reported a test failure.\n";
}
mfem::Mpi::Finalize();
return global_result;
}