Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
same thing elsewhere
[simgrid.git] / teshsuite / smpi / mpich3-test / coll / allred.c
index e9becde..431fcdb 100644 (file)
 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;
 }