47 #include "Tpetra_Core.hpp"
85 typedef int test_lid_t;
86 typedef int test_gid_t;
93 directory_t directory(comm,
false, 0);
98 std::vector<test_gid_t> writeGIDs;
100 if(comm->getRank() == 0) {
101 writeGIDs = { 1, 5, 7, 10 };
109 std::vector<user_t> writeUser;
110 if(comm->getRank() == 0) {
111 writeUser = { 10, 50, 70, 100 };
118 directory.update(writeGIDs.size(), &writeGIDs[0], NULL, &writeUser[0], NULL,
122 std::vector<test_gid_t> findIds = { 3, 5 };
128 std::vector<user_t> findUser(findIds.size());
139 directory.find(findIds.size(), &findIds[0], NULL, &findUser[0], NULL, NULL);
143 if(findUser[0] != 30) {
144 std::cout <<
"We should have gotten 30 for this value." << std::endl;
149 if(findUser[1] != 50) {
150 std::cout <<
"We should have gotten 50 for this value." << std::endl;
154 catch(std::logic_error &e) {
155 if(comm->getSize() != 1) {
159 std::cout <<
"Successfully detected throw since find failed." << std::endl;
168 std::vector<test_gid_t> writeGIDs2;
170 if(comm->getRank() == 0) {
171 writeGIDs2 = { 5, 700, 1000 };
174 writeGIDs2 = { 3, 200 };
177 std::vector<user_t> writeUser2;
178 if(comm->getRank() == 0) {
179 writeUser2 = { 50, 7000, 10000 };
182 writeUser2 = { 30, 2000 };
186 directory.update(writeGIDs2.size(), &writeGIDs2[0], NULL, &writeUser2[0], NULL,
190 std::vector<test_gid_t> findIds2 = { 1, 5, 1000 };
193 std::vector<user_t> findUser2(findIds2.size());
194 directory.find(findIds2.size(), &findIds2[0], NULL, &findUser2[0], NULL, NULL);
200 if(findUser2[0] != 10) {
201 std::cout <<
"We should have gotten 10 for this value. " << std::endl;
204 if(findUser2[1] != 50) {
205 std::cout <<
"We should have gotten 50 for this value." << std::endl;
210 if(findUser2[2] != 10000) {
211 std::cout <<
"We should have gotten 10000 for this value." << std::endl;
224 typedef int test_lid_t;
225 typedef long test_gid_t;
226 typedef std::vector<long long>
user_t;
236 directory_t directory(comm,
false, 0);
239 std::vector<test_gid_t> writeGIDs;
240 switch(comm->getRank()) {
242 writeGIDs = { 3, 5 };
245 writeGIDs = { 3, 7 };
254 std::vector<user_t> writeUser;
255 switch(comm->getRank()) {
257 writeUser = { {1,2}, {4,8,10} };
260 writeUser = { {2,10}, {6,8} };
263 writeUser = { {1,2,10} };
268 directory.update(writeGIDs.size(), &writeGIDs[0], NULL, &writeUser[0], NULL,
272 std::vector<test_gid_t> findIds = { 3, 5 };
280 std::vector<user_t> findUser(findIds.size());
283 directory.find(findIds.size(), &findIds[0], NULL, &findUser[0], NULL, NULL);
293 user_t expectedValue0 =
294 (comm->getSize() == 1) ?
user_t({1,2}) :
user_t({1,2,10});
295 if(findUser[0] != expectedValue0) {
296 std::cout <<
"findUser[0] did not match expected." << std::endl;
308 user_t expectedValue1 =
309 (comm->getSize() <= 2) ?
user_t({4,8,10}) :
user_t({1,2,4,8,10});
310 if(findUser[1] != expectedValue1) {
311 std::cout <<
"findUser[1] did not match expected." << std::endl;
324 typedef int test_lid_t;
333 directory_t directory(comm,
false, 0);
337 std::vector<test_gid_t> writeGIDs;
338 test_gid_t gid1(1, 8, 7, 3);
339 test_gid_t gid2(1, 8, 7, 4);
342 if(comm->getRank() == 0) {
343 writeGIDs = { gid1, gid2 };
346 writeGIDs = { gid2 };
354 std::vector<user_t> writeUser;
355 if(comm->getRank() == 0) {
356 writeUser = { 1, 1 };
363 directory.update(writeGIDs.size(), &writeGIDs[0], NULL, &writeUser[0], NULL,
367 std::vector<test_gid_t> findIds = { gid1, gid2 };
373 std::vector<user_t> findUser(findIds.size());
376 directory.find(findIds.size(), &findIds[0], NULL, &findUser[0], NULL, NULL);
379 if(findUser[0] != 1) {
380 std::cout <<
"We should have gotten 1 for gid1. Only rank 0 wrote to gid1"
381 " so the sum should have been 1." << std::endl;
387 if(findUser[1] != comm->getSize()) {
388 std::cout <<
"We should have gotten the proc count " << comm->getSize()
389 <<
" since every rank wrote to gid2." << std::endl;
413 directory_t directory(comm,
true, 0);
417 std::vector<test_gid_t> writeGIDs;
418 test_gid_t gid1(1, 8, 7, 3);
419 test_gid_t gid2(1, 8, 7, 4);
423 std::vector<test_lid_t> writeLIDs;
424 test_lid_t lid1(500, 2009);
425 test_lid_t lid2(500, 8000);
428 if(comm->getRank() == 0) {
429 writeGIDs = { gid1, gid2 };
430 writeLIDs = { lid1, lid2 };
433 writeGIDs = { gid2 };
434 writeLIDs = { lid2 };
437 std::vector<user_t> writeUser;
438 if(comm->getRank() == 0) {
439 writeUser = { 1, 1 };
446 directory.update(writeGIDs.size(), &writeGIDs[0], &writeLIDs[0], &writeUser[0],
450 std::vector<test_gid_t> findGIDs = { gid1, gid2 };
453 std::vector<test_lid_t> findLIDs(findGIDs.size());
456 directory.find(findGIDs.size(), &findGIDs[0], &findLIDs[0], NULL, NULL, NULL);
459 if(findLIDs[0].val[0] != lid1.val[0] || findLIDs[0].val[1] != lid1.val[1]) {
460 std::cout <<
"We should have gotten [500,2009] for lid1." << std::endl;
465 if(findLIDs[1].val[0] != lid2.val[0] || findLIDs[1].val[1] != lid2.val[1]) {
466 std::cout <<
"We should have gotten [500,8000] for lid1." << std::endl;
471 std::vector<user_t> findUser(findGIDs.size());
474 directory.find(findGIDs.size(), &findGIDs[0], &findLIDs[0], &findUser[0],
478 if(findUser[0] != 1) {
479 std::cout <<
"We should have gotten 1 for gid1. Only rank 0 wrote to gid1"
480 " so the sum should have been 1." << std::endl;
486 if(findUser[1] != 1) {
487 std::cout <<
"We should have gotten the proc count " << comm->getSize()
488 <<
" since every rank wrote to gid2." << std::endl;
495 int main(
int narg,
char **arg) {
496 Tpetra::ScopeGuard tscope(&narg, &arg);
497 Teuchos::RCP<const Teuchos::Comm<int> > comm =
498 Teuchos::DefaultComm<int>::getComm();
511 Teuchos::reduceAll<int>(*comm,Teuchos::REDUCE_SUM, err,
512 Teuchos::outArg(errGlobal));
516 if(comm->getRank() == 0) {
518 std::cout <<
"Passed" << std::endl;
521 std::cout <<
"FAILED!" << std::endl;
int test_multiple_lid(Teuchos::RCP< const Teuchos::Comm< int > > comm)
int main(int narg, char **arg)
lid_struct(unsigned long v0, unsigned long v1)
int test_multiple_gid(Teuchos::RCP< const Teuchos::Comm< int > > comm)
gid_struct(int v0, int v1, int v2, int v3)
int test_simple_replace(Teuchos::RCP< const Teuchos::Comm< int > > comm)
int test_aggregate(Teuchos::RCP< const Teuchos::Comm< int > > comm)
Zoltan2::BasicUserTypes< zscalar_t, zlno_t, zgno_t > user_t