X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3928c9b3860770cd5efbaa3515e9df6d09273e52..b195400e3382f070aa49293a0ab7d9441889f5e4:/teshsuite/smpi/mpich3-test/coll/allred.c diff --git a/teshsuite/smpi/mpich3-test/coll/allred.c b/teshsuite/smpi/mpich3-test/coll/allred.c index e9becde7a1..431fcdb68d 100644 --- a/teshsuite/smpi/mpich3-test/coll/allred.c +++ b/teshsuite/smpi/mpich3-test/coll/allred.c @@ -20,11 +20,26 @@ int count, size, rank; int cerrcnt; -struct int_test { int a; int b; }; -struct long_test { long a; int b; }; -struct short_test { short a; int b; }; -struct float_test { float a; int b; }; -struct double_test { double a; int b; }; +struct int_test { + int a; + int b; +}; +struct long_test { + long a; + int b; +}; +struct short_test { + short a; + int b; +}; +struct float_test { + float a; + int b; +}; +struct double_test { + double a; + int b; +}; #define mpi_op2str(op) \ ((op == MPI_SUM) ? "MPI_SUM" : \ @@ -89,19 +104,19 @@ struct double_test { double a; int b; }; rank, name, mpi_op2str(mpi_op)); \ } \ free(in); free(out); free(sol); \ - } while(0) + } while (0) -/* The logic on the error check on MPI_Allreduce assumes that all +/* The logic on the error check on MPI_Allreduce assumes that all MPI_Allreduce routines return a failure if any do - this is sufficient for MPI implementations that reject some of the valid op/datatype pairs - (and motivated this addition, as some versions of the IBM MPI + (and motivated this addition, as some versions of the IBM MPI failed in just this way). */ #define ALLREDUCE_AND_FREE(mpi_type, mpi_op, in, out, sol) \ { \ int i, rc, lerrcnt = 0; \ rc = MPI_Allreduce(in, out, count, mpi_type, mpi_op, MPI_COMM_WORLD); \ - if (rc) { lerrcnt++; cerrcnt++; MTestPrintError( rc ); } \ + if (rc) { lerrcnt++; cerrcnt++; MTestPrintError(rc); } \ else { \ for (i = 0; i < count; i++) { \ if (out[i] != sol[i]) { \ @@ -117,7 +132,7 @@ struct double_test { double a; int b; }; { \ int i, rc, lerrcnt = 0; \ rc = MPI_Allreduce(in, out, count, mpi_type, mpi_op, MPI_COMM_WORLD); \ - if (rc) { lerrcnt++; cerrcnt++; MTestPrintError( rc ); } \ + if (rc) { lerrcnt++; cerrcnt++; MTestPrintError(rc); } \ else { \ for (i = 0; i < count; i++) { \ if ((out[i].a != sol[i].a) || (out[i].b != sol[i].b)) { \ @@ -264,70 +279,72 @@ struct double_test { double a; int b; }; } #if MTEST_HAVE_MIN_MPI_VERSION(2,2) -#define test_types_set_mpi_2_2_integer(op,post) do { \ - op##_test##post(int8_t, MPI_INT8_T); \ - op##_test##post(int16_t, MPI_INT16_T); \ - op##_test##post(int32_t, MPI_INT32_T); \ - op##_test##post(int64_t, MPI_INT64_T); \ - op##_test##post(uint8_t, MPI_UINT8_T); \ - op##_test##post(uint16_t, MPI_UINT16_T); \ - op##_test##post(uint32_t, MPI_UINT32_T); \ - op##_test##post(uint64_t, MPI_UINT64_T); \ - op##_test##post(MPI_Aint, MPI_AINT); \ - op##_test##post(MPI_Offset, MPI_OFFSET); \ - } while (0) +#define test_types_set_mpi_2_2_integer(op, post) \ + do { \ + _XBT_CONCAT3(op, _test, post)(int8_t, MPI_INT8_T); \ + _XBT_CONCAT3(op, _test, post)(int16_t, MPI_INT16_T); \ + _XBT_CONCAT3(op, _test, post)(int32_t, MPI_INT32_T); \ + _XBT_CONCAT3(op, _test, post)(int64_t, MPI_INT64_T); \ + _XBT_CONCAT3(op, _test, post)(uint8_t, MPI_UINT8_T); \ + _XBT_CONCAT3(op, _test, post)(uint16_t, MPI_UINT16_T); \ + _XBT_CONCAT3(op, _test, post)(uint32_t, MPI_UINT32_T); \ + _XBT_CONCAT3(op, _test, post)(uint64_t, MPI_UINT64_T); \ + _XBT_CONCAT3(op, _test, post)(MPI_Aint, MPI_AINT); \ + _XBT_CONCAT3(op, _test, post)(MPI_Offset, MPI_OFFSET); \ + } while (0) #else #define test_types_set_mpi_2_2_integer(op,post) do { } while (0) #endif #if MTEST_HAVE_MIN_MPI_VERSION(3,0) -#define test_types_set_mpi_3_0_integer(op,post) do { \ - op##_test##post(MPI_Count, MPI_COUNT); \ - } while (0) +#define test_types_set_mpi_3_0_integer(op, post) \ + do { \ + _XBT_CONCAT3(op, _test, post)(MPI_Count, MPI_COUNT); \ + } while (0) #else #define test_types_set_mpi_3_0_integer(op,post) do { } while (0) #endif -#define test_types_set1(op, post) \ - { \ - op##_test##post(int, MPI_INT); \ - op##_test##post(long, MPI_LONG); \ - op##_test##post(short, MPI_SHORT); \ - op##_test##post(unsigned short, MPI_UNSIGNED_SHORT); \ - op##_test##post(unsigned, MPI_UNSIGNED); \ - op##_test##post(unsigned long, MPI_UNSIGNED_LONG); \ - op##_test##post(unsigned char, MPI_UNSIGNED_CHAR); \ - test_types_set_mpi_2_2_integer(op,post); \ - test_types_set_mpi_3_0_integer(op,post); \ - } - -#define test_types_set2(op, post) \ - { \ - test_types_set1(op, post); \ - op##_test##post(float, MPI_FLOAT); \ - op##_test##post(double, MPI_DOUBLE); \ - } - -#define test_types_set3(op, post) \ - { \ - op##_test##post(unsigned char, MPI_BYTE); \ - } - -/* Make sure that we test complex and double complex, even if long +#define test_types_set1(op, post) \ + { \ + _XBT_CONCAT3(op, _test, post)(int, MPI_INT); \ + _XBT_CONCAT3(op, _test, post)(long, MPI_LONG); \ + _XBT_CONCAT3(op, _test, post)(short, MPI_SHORT); \ + _XBT_CONCAT3(op, _test, post)(unsigned short, MPI_UNSIGNED_SHORT); \ + _XBT_CONCAT3(op, _test, post)(unsigned, MPI_UNSIGNED); \ + _XBT_CONCAT3(op, _test, post)(unsigned long, MPI_UNSIGNED_LONG); \ + _XBT_CONCAT3(op, _test, post)(unsigned char, MPI_UNSIGNED_CHAR); \ + test_types_set_mpi_2_2_integer(op, post); \ + test_types_set_mpi_3_0_integer(op, post); \ + } + +#define test_types_set2(op, post) \ + { \ + test_types_set1(op, post); \ + _XBT_CONCAT3(op, _test, post)(float, MPI_FLOAT); \ + _XBT_CONCAT3(op, _test, post)(double, MPI_DOUBLE); \ + } + +#define test_types_set3(op, post) \ + { \ + _XBT_CONCAT3(op, _test, post)(unsigned char, MPI_BYTE); \ + } + +/* Make sure that we test complex and double complex, even if long double complex is not available */ #if defined(USE_LONG_DOUBLE_COMPLEX) #if MTEST_HAVE_MIN_MPI_VERSION(2,2) && defined(HAVE_FLOAT__COMPLEX) \ && defined(HAVE_DOUBLE__COMPLEX) \ && defined(HAVE_LONG_DOUBLE__COMPLEX) -#define test_types_set4(op, post) \ - do { \ - op##_test##post(float _Complex, MPI_C_FLOAT_COMPLEX); \ - op##_test##post(double _Complex, MPI_C_DOUBLE_COMPLEX); \ - if (MPI_C_LONG_DOUBLE_COMPLEX != MPI_DATATYPE_NULL) { \ - op##_test##post(long double _Complex, MPI_C_LONG_DOUBLE_COMPLEX); \ - } \ - } while (0) +#define test_types_set4(op, post) \ + do { \ + _XBT_CONCAT3(op, _test, post)(float _Complex, MPI_C_FLOAT_COMPLEX); \ + _XBT_CONCAT3(op, _test, post)(double _Complex, MPI_C_DOUBLE_COMPLEX); \ + if (MPI_C_LONG_DOUBLE_COMPLEX != MPI_DATATYPE_NULL) { \ + _XBT_CONCAT3(op, _test, post)(long double _Complex, MPI_C_LONG_DOUBLE_COMPLEX); \ + } \ + } while (0) #else #define test_types_set4(op, post) do { } while (0) @@ -335,12 +352,12 @@ struct double_test { double a; int b; }; #else #if MTEST_HAVE_MIN_MPI_VERSION(2,2) && defined(HAVE_FLOAT__COMPLEX) \ - && defined(HAVE_DOUBLE__COMPLEX) -#define test_types_set4(op, post) \ - do { \ - op##_test##post(float _Complex, MPI_C_FLOAT_COMPLEX); \ - op##_test##post(double _Complex, MPI_C_DOUBLE_COMPLEX); \ - } while (0) + && defined(HAVE_DOUBLE__COMPLEX) +#define test_types_set4(op, post) \ + do { \ + _XBT_CONCAT3(op, _test, post)(float _Complex, MPI_C_FLOAT_COMPLEX); \ + _XBT_CONCAT3(op, _test, post)(double _Complex, MPI_C_DOUBLE_COMPLEX); \ + } while (0) #else #define test_types_set4(op, post) do { } while (0) @@ -349,43 +366,41 @@ struct double_test { double a; int b; }; #endif /* defined(USE_LONG_DOUBLE_COMPLEX) */ #if MTEST_HAVE_MIN_MPI_VERSION(2,2) && defined(HAVE__BOOL) -#define test_types_set5(op, post) \ - do { \ - op##_test##post(_Bool, MPI_C_BOOL); \ - } while (0) +#define test_types_set5(op, post) \ + do { \ + _XBT_CONCAT3(op, _test, post)(_Bool, MPI_C_BOOL); \ + } while (0) #else #define test_types_set5(op, post) do { } while (0) #endif -int main( int argc, char **argv ) +int main(int argc, char **argv) { - MTest_Init( &argc, &argv ); + MTest_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (size < 2) { - fprintf( stderr, "At least 2 processes required\n" ); - MPI_Abort( MPI_COMM_WORLD, 1 ); - exit(1); + fprintf(stderr, "At least 2 processes required\n"); + MPI_Abort(MPI_COMM_WORLD, 1); } - /* Set errors return so that we can provide better information - should a routine reject one of the operand/datatype pairs */ - MPI_Errhandler_set( MPI_COMM_WORLD, MPI_ERRORS_RETURN ); + /* Set errors return so that we can provide better information + * should a routine reject one of the operand/datatype pairs */ + MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN); count = 10; /* Allow an argument to override the count. - Note that the product tests may fail if the count is very large. + * Note that the product tests may fail if the count is very large. */ if (argc >= 2) { - count = atoi( argv[1] ); - if (count <= 0) { - fprintf( stderr, "Invalid count argument %s\n", argv[1] ); - MPI_Abort( MPI_COMM_WORLD, 1 ); - exit(1); - } + count = atoi(argv[1]); + if (count <= 0) { + fprintf(stderr, "Invalid count argument %s\n", argv[1]); + MPI_Abort(MPI_COMM_WORLD, 1); + } } test_types_set2(sum, 1); @@ -442,8 +457,8 @@ int main( int argc, char **argv ) minloc_test(struct float_test, MPI_FLOAT_INT); minloc_test(struct double_test, MPI_DOUBLE_INT); - MPI_Errhandler_set( MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL ); - MTest_Finalize( cerrcnt ); + MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL); + MTest_Finalize(cerrcnt); MPI_Finalize(); return 0; }