59 lines
1.6 KiB
C++
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;
|
|
}
|