
Hi, it doesn't work for me. I tried the following code: /// Generate automatically the 'main' function for the test module #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MODULE mpi_test #include <boost/test/unit_test.hpp> #include <iostream> #include "mpi.h" struct MPIFixture { MPIFixture() { std::cout << "Global fixture constructor:" << std::endl; int argc = boost::unit_test::framework::master_test_suite().argc; char** argv = boost::unit_test::framework::master_test_suite().argv; MPI_Init(&argc,&argv); int is_initialized; int is_finalized; MPI_Initialized(&is_initialized); MPI_Finalized(&is_finalized); std::cout << "MPI environment is initialized: " << is_initialized << std::endl; std::cout << "MPI environment is finalized: " << is_finalized << std::endl; } ~MPIFixture() { std::cout << "Global fixture destructor" << std::endl; int is_initialized; int is_finalized; MPI_Initialized(&is_initialized); MPI_Finalized(&is_finalized); std::cout << "MPI environment is initialized: " << is_initialized << std::endl; std::cout << "MPI environment is finalized: " << is_finalized << std::endl; MPI_Finalize(); MPI_Initialized(&is_initialized); MPI_Finalized(&is_finalized); std::cout << "MPI environment is initialized: " << is_initialized << std::endl; std::cout << "MPI environment is finalized: " << is_finalized << std::endl; } }; struct MyTestSuiteFixture { }; BOOST_GLOBAL_FIXTURE( MPIFixture ) BOOST_FIXTURE_TEST_SUITE( MyTestSuite, MyTestSuiteFixture ) BOOST_AUTO_TEST_CASE( dummy_test ) { std::cout << "Running dummy test case" << std::endl; } BOOST_AUTO_TEST_SUITE_END() The output when running with mpirun: Global fixture constructor: MPI environment is initialized: 1 MPI environment is finalized: 0 Running 1 test case... Running dummy test case Global fixture destructor MPI environment is initialized: 1 MPI environment is finalized: 0 MPI environment is initialized: 1 MPI environment is finalized: 1 Output when running directly the executable: Global fixture constructor: MPI environment is initialized: 1 MPI environment is finalized: 0 Running 1 test case... Running dummy test case Global fixture destructor MPI environment is initialized: 1 MPI environment is finalized: 0 Segmentation fault (core dumped) I'm using boost 1.55.0 and gcc 4.8.2 on linux. Best regards, Martin Vymazal On Friday 21 February 2014 10:38:21 Rhys Ulerich wrote:
A global fixture seems like a more appropriate solution than implementing main().
BOOST_GLOBAL_FIXTURE
Indeed. Something like the following works just fine:
struct MPIFixture { MPIFixture() { MPI_Init(NULL, NULL); } ~MPIFixture() { MPI_Finalize(); } }; BOOST_GLOBAL_FIXTURE(MPIFixture);
- Rhys _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users