#include #include #include #include #include #include int main( int argc, char *argv[] ) { mfem::Mpi::Init(argc, argv); const int rank = mfem::Mpi::WorldRank(); std::vector arguments; arguments.reserve(static_cast(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 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(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; }