/* -*- Mode: C++; c-basic-offset:4 ; -*- */ /* * (C) 2001 by Argonne National Laboratory. * See COPYRIGHT in top-level directory. * */ /* style: c++ header */ /* * Simple test program for C++ binding */ /* #include */ #include "mpi.h" #include "mpitestconf.h" #include "mpitestcxx.h" #ifdef HAVE_IOSTREAM // Not all C++ compilers have iostream instead of iostream.h #include #ifdef HAVE_NAMESPACE_STD // Those that do often need the std namespace; otherwise, a bare "cout" // is likely to fail to compile using namespace std; #endif #else #include #endif int main(int argc, char *argv[]) { int rank, size, errs = 0; MTest_Init(); rank = MPI::COMM_WORLD.Get_rank(); size = MPI::COMM_WORLD.Get_size(); if (size < 2) { cerr << "Size of comm_world must be at least 2\n"; MPI::COMM_WORLD.Abort(1); } if (rank == 0) { int *buf = new int[100]; int i; for (i = 0; i < 100; i++) buf[i] = i; MPI::COMM_WORLD.Send(buf, 100, MPI::INT, size - 1, 0); delete[]buf; } else if (rank == size - 1) { int *buf = new int[100]; int i; MPI::COMM_WORLD.Recv(buf, 100, MPI::INT, 0, 0); for (i = 0; i < 100; i++) { if (buf[i] != i) { errs++; cerr << "Error: buf[" << i << "] = " << buf[i] << "\n"; } } delete[]buf; } MTest_Finalize(errs); return 0; }