]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/mpi/test/groups_test.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / mpi / test / groups_test.cpp
CommitLineData
7c673cae
FG
1// Copyright (C) 2013 Andreas Hehn <hehn@phys.ethz.ch>, ETH Zurich
2
3// Use, modification and distribution is subject to the Boost Software
4// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7// A test of communicators created from groups.
8
9#include <boost/mpi/environment.hpp>
10#include <boost/mpi/communicator.hpp>
11#include <boost/mpi/group.hpp>
7c673cae
FG
12#include <vector>
13#include <algorithm>
14
92f5a8d4
TL
15#define BOOST_TEST_MODULE mpi_group_test
16#include <boost/test/included/unit_test.hpp>
7c673cae 17
92f5a8d4 18namespace mpi = boost::mpi;
7c673cae
FG
19
20template <typename T>
21struct iota
22{
23 iota() : state(0){};
24 T operator()()
25 {
26 return state++;
27 }
28 T state;
29};
30
31void group_test(const mpi::communicator& comm)
32{
33 std::vector<int> grp_a_ranks(comm.size() / 2);
34 std::generate(grp_a_ranks.begin(),grp_a_ranks.end(),iota<int>());
35
36 mpi::group grp_a = comm.group().include(grp_a_ranks.begin(),grp_a_ranks.end());
37 mpi::group grp_b = comm.group().exclude(grp_a_ranks.begin(),grp_a_ranks.end());
38
39 mpi::communicator part_a(comm,grp_a);
40 mpi::communicator part_b(comm,grp_b);
41
42 if(part_a)
43 {
44 std::cout << "comm rank: " << comm.rank() << " -> part_a rank:" << part_a.rank() << std::endl;
45 BOOST_CHECK(part_a.rank() == comm.rank());
46 }
47 if(part_b)
48 {
49 std::cout << "comm rank: " << comm.rank() << " -> part_b rank:" << part_b.rank() << std::endl;
50 BOOST_CHECK(part_b.rank() == comm.rank() - comm.size()/2);
51 }
52}
53
92f5a8d4 54BOOST_AUTO_TEST_CASE(group)
7c673cae 55{
92f5a8d4 56 mpi::environment env;
7c673cae
FG
57 mpi::communicator comm;
58 group_test(comm);
7c673cae 59}