// Copyright (C) 2005, 2006 Douglas Gregor. // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // A test of the broadcast() collective. #include #include #include #include #include #include #include #include #include #define BOOST_TEST_MODULE mpi_broadcast_stl #include namespace mpi = boost::mpi; typedef std::vector > sparse; template void broadcast_test(const mpi::communicator& comm, const T& bc_value, std::string const& kind, int root) { using boost::mpi::broadcast; T value; if (comm.rank() == root) { value = bc_value; std::cout << "Broadcasting " << kind << " from root " << root << "..."; std::cout.flush(); } broadcast(comm, value, root); BOOST_CHECK(value == bc_value); if (comm.rank() == root) { if (value == bc_value) { std::cout << "OK." << std::endl; } else { std::cout << "FAIL." << std::endl; } } comm.barrier(); } template void broadcast_test(const mpi::communicator& comm, const T& bc_value, std::string const& kind) { for (int root = 0; root < comm.size(); ++root) { broadcast_test(comm, bc_value, kind, root); } } BOOST_AUTO_TEST_CASE(broadcast_stl) { boost::mpi::environment env; mpi::communicator comm; BOOST_TEST_REQUIRE(comm.size() > 1); sparse s; s.resize(2); s[0][12] = 0.12; s[1][13] = 1.13; broadcast_test(comm, s, "sparse"); }