1 #include <libmesh/parallel.h>
13 CPPUNIT_TEST( testGather );
14 CPPUNIT_TEST( testAllGather );
15 CPPUNIT_TEST( testGatherString );
16 CPPUNIT_TEST( testAllGatherString );
17 CPPUNIT_TEST( testAllGatherVectorString );
18 CPPUNIT_TEST( testAllGatherEmptyVectorString );
19 CPPUNIT_TEST( testAllGatherHalfEmptyVectorString );
20 CPPUNIT_TEST( testBroadcast );
21 CPPUNIT_TEST( testBroadcastNestedType );
22 CPPUNIT_TEST( testScatter );
23 CPPUNIT_TEST( testBarrier );
24 CPPUNIT_TEST( testMin );
25 CPPUNIT_TEST( testMax );
26 CPPUNIT_TEST( testMinloc );
27 CPPUNIT_TEST( testMaxloc );
28 CPPUNIT_TEST( testMinlocReal );
29 CPPUNIT_TEST( testMaxlocReal );
30 CPPUNIT_TEST( testInfinityMin );
31 CPPUNIT_TEST( testInfinityMax );
32 CPPUNIT_TEST( testIsendRecv );
33 CPPUNIT_TEST( testIrecvSend );
34 CPPUNIT_TEST( testRecvIsendSets );
35 CPPUNIT_TEST( testRecvIsendVecVecs );
36 CPPUNIT_TEST( testSendRecvVecVecs );
37 CPPUNIT_TEST( testSemiVerify );
38 CPPUNIT_TEST( testSplit );
40 CPPUNIT_TEST_SUITE_END();
68 std::vector<processor_id_type> vals;
73 CPPUNIT_ASSERT_EQUAL( i , vals[i] );
80 std::vector<std::string> vals;
85 CPPUNIT_ASSERT_EQUAL(
"Processor" + _number[i % 10] , vals[i] );
92 std::vector<processor_id_type> vals;
96 CPPUNIT_ASSERT_EQUAL( i , vals[i] );
103 std::vector<std::string> vals;
107 CPPUNIT_ASSERT_EQUAL(
"Processor" + _number[i % 10] , vals[i] );
114 std::vector<std::string> vals;
115 vals.push_back(
"Processor" + _number[
TestCommWorld->rank() % 10] +
"A");
116 vals.push_back(
"Processor" + _number[
TestCommWorld->rank() % 10] +
"B");
121 CPPUNIT_ASSERT_EQUAL(
"Processor" + _number[i % 10] +
"A" , vals[2*i] );
122 CPPUNIT_ASSERT_EQUAL(
"Processor" + _number[i % 10] +
"B" , vals[2*i+1] );
130 std::vector<std::string> vals;
133 CPPUNIT_ASSERT( vals.empty() );
140 std::vector<std::string> vals;
143 vals.push_back(
"Proc 0 only");
147 CPPUNIT_ASSERT_EQUAL( vals[0], std::string(
"Proc 0 only") );
154 std::vector<unsigned int> src(3), dest(3);
165 for (std::size_t i=0; i<src.size(); i++)
166 CPPUNIT_ASSERT_EQUAL( src[i] , dest[i] );
174 typedef pair<pair<pair<pair<int, int>,
int>,
int>,
int> pppp;
175 std::vector<pppp> src(3), dest(3);
177 src[0].first.first.first.first=0;
178 src[0].first.first.first.second=-1;
179 src[0].first.second = -2;
181 src[1].first.first.first.first=10;
182 src[1].first.first.first.second=9;
183 src[1].first.second = 8;
185 src[2].first.first.first.first=20;
186 src[2].first.first.first.second=19;
187 src[2].first.second = 18;
195 for (std::size_t i=0; i<src.size(); i++)
197 CPPUNIT_ASSERT_EQUAL(src[i].first.first.first.first,
198 dest[i].first.first.first.first);
199 CPPUNIT_ASSERT_EQUAL(src[i].first.first.first.second,
200 dest[i].first.first.first.second);
201 CPPUNIT_ASSERT_EQUAL(src[i].first.first.second,
202 dest[i].first.first.second);
203 CPPUNIT_ASSERT_EQUAL(src[i].first.second,
204 dest[i].first.second);
205 CPPUNIT_ASSERT_EQUAL(src[i].second,
216 std::vector<processor_id_type> src;
233 std::vector<unsigned int> src;
234 std::vector<unsigned int> dest;
235 static const unsigned int CHUNK_SIZE = 3;
240 for (std::size_t i=0; i<src.size(); i++)
246 for (
unsigned int i=0; i<CHUNK_SIZE; i++)
247 CPPUNIT_ASSERT_EQUAL(
TestCommWorld->rank() * CHUNK_SIZE + i, dest[i] );
252 std::vector<unsigned int> src;
253 std::vector<unsigned int> dest;
254 std::vector<int> counts;
262 for (std::size_t i=0; i<src.size(); i++)
265 counts[i] = static_cast<int>(i+1);
272 CPPUNIT_ASSERT_EQUAL( start_value + i, dest[i] );
277 std::vector<std::vector<unsigned int>> src;
278 std::vector<unsigned int> dest;
284 for (std::size_t i=0; i<src.size(); ++i)
287 unsigned int global_counter = 0;
288 for (std::size_t i=0; i<src.size(); i++)
289 for (std::size_t j=0; j<src[i].size(); j++)
290 src[i][j] = global_counter++;
297 CPPUNIT_ASSERT_EQUAL( start_value + i, dest[i] );
316 CPPUNIT_ASSERT_EQUAL (min, static_cast<unsigned int>(0));
327 CPPUNIT_ASSERT_EQUAL (cast_int<processor_id_type>(max+1),
336 unsigned int minid = 0;
340 CPPUNIT_ASSERT_EQUAL (min, static_cast<int>(0));
341 CPPUNIT_ASSERT_EQUAL (minid, static_cast<unsigned int>(
TestCommWorld->size()-1));
349 unsigned int maxid = 0;
353 CPPUNIT_ASSERT_EQUAL (max+1,
355 CPPUNIT_ASSERT_EQUAL (maxid, static_cast<unsigned int>(
TestCommWorld->size()-1));
363 unsigned int minid = 0;
367 CPPUNIT_ASSERT_EQUAL (min,
Real(0));
368 CPPUNIT_ASSERT_EQUAL (minid, static_cast<unsigned int>(
TestCommWorld->size()-1));
376 unsigned int maxid = 0;
382 CPPUNIT_ASSERT_EQUAL (maxid, static_cast<unsigned int>(
TestCommWorld->size()-1));
389 double min = std::numeric_limits<double>::infinity();
393 CPPUNIT_ASSERT_EQUAL (min, std::numeric_limits<double>::infinity());
395 min = -std::numeric_limits<double>::infinity();
399 CPPUNIT_ASSERT_EQUAL (min, -std::numeric_limits<double>::infinity());
406 double max = std::numeric_limits<double>::infinity();
410 CPPUNIT_ASSERT_EQUAL (max, std::numeric_limits<double>::infinity());
412 max = -std::numeric_limits<double>::infinity();
416 CPPUNIT_ASSERT_EQUAL (max, -std::numeric_limits<double>::infinity());
429 std::vector<unsigned int> src_val(3), recv_val(3);
435 Parallel::Request request;
449 Parallel::wait (request);
451 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
453 for (std::size_t i=0; i<src_val.size(); i++)
454 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
458 TestCommWorld->send_mode(Parallel::Communicator::SYNCHRONOUS);
459 std::fill (recv_val.begin(), recv_val.end(), 0);
468 Parallel::wait (request);
470 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
472 for (std::size_t i=0; i<src_val.size(); i++)
473 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
490 std::vector<unsigned int> src_val(3), recv_val(3);
496 Parallel::Request request;
510 Parallel::wait (request);
512 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
514 for (std::size_t i=0; i<src_val.size(); i++)
515 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
518 TestCommWorld->send_mode(Parallel::Communicator::SYNCHRONOUS);
519 std::fill (recv_val.begin(), recv_val.end(), 0);
529 Parallel::wait (request);
531 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
533 for (std::size_t i=0; i<src_val.size(); i++)
534 CPPUNIT_ASSERT_EQUAL( src_val[i] , recv_val[i] );
550 std::set<unsigned int> src_val, recv_val;
554 src_val.insert(1337);
556 Parallel::Request request;
565 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
567 for (std::set<unsigned int>::const_iterator
568 it = src_val.begin(),
end = src_val.end(); it !=
end;
570 CPPUNIT_ASSERT ( recv_val.count(*it) );
572 Parallel::wait (request);
588 std::vector<std::vector<unsigned int> > src_val(3), recv_val;
590 src_val[0].push_back(4);
591 src_val[2].push_back(procup);
594 Parallel::Request request;
603 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
605 for (std::size_t i = 0; i != 3; ++i)
606 CPPUNIT_ASSERT_EQUAL ( src_val[i].size(), recv_val[i].size() );
608 CPPUNIT_ASSERT_EQUAL ( recv_val[0][0], static_cast<unsigned int> (4) );
609 CPPUNIT_ASSERT_EQUAL ( recv_val[2][0], static_cast<unsigned int> (
TestCommWorld->rank()) );
610 CPPUNIT_ASSERT_EQUAL ( recv_val[2][1], procdown );
612 Parallel::wait (request);
631 std::vector<std::vector<unsigned int> > src_val(3), recv_val;
633 src_val[0].push_back(4);
634 src_val[2].push_back(procup);
646 CPPUNIT_ASSERT_EQUAL ( src_val.size() , recv_val.size() );
648 for (std::size_t i = 0; i != 3; ++i)
649 CPPUNIT_ASSERT_EQUAL ( src_val[i].size(), recv_val[i].size() );
651 CPPUNIT_ASSERT_EQUAL ( recv_val[0][0], static_cast<unsigned int> (4) );
652 CPPUNIT_ASSERT_EQUAL ( recv_val[2][0], static_cast<unsigned int> (
TestCommWorld->rank()) );
653 CPPUNIT_ASSERT_EQUAL ( recv_val[2][1], procdown );
663 double inf = std::numeric_limits<double>::infinity();
669 inf = -std::numeric_limits<double>::infinity();
677 Parallel::Communicator subcomm;
679 unsigned int color = rank % 2;
682 CPPUNIT_ASSERT(subcomm.size() >= 1);
684 CPPUNIT_ASSERT(subcomm.size() <=
TestCommWorld->size() / 2 + 1);
690 Parallel::Communicator subcomm;
692 Parallel::info i = 0;
694 #ifdef LIBMESH_HAVE_MPI
695 type = MPI_COMM_TYPE_SHARED;
700 CPPUNIT_ASSERT(subcomm.size() >= 1);