Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reactivate an umpire test, once disabled in 56fefe1bf81ca.
[simgrid.git] / teshsuite / smpi / coll-alltoallv / coll-alltoallv.c
index 37fac54..aa777e0 100644 (file)
    <2> sdisp: (#3):  [0][1][3]
    <2> rdisp: (#3):  [0][2][4]
 
-   after MPI_Alltoallv :
+   after MPI_Alltoallvv :
    <0> rbuf: (#9):   [-1][-1][-1][-1][-1][-1][-1][-1][-1]
    <1> rbuf: (#9):   [1][101][201][-1][-1][-1][-1][-1][-1]
    <2> rbuf: (#9):   [3][4][103][104][203][204][-1][-1][-1]
 */
 
-static void print_buffer_int(void *buf, int len, const char *msg, int rank)
+static void print_buffer_int(const int* buf, int len, const char* msg, int rank)
 {
   printf("[%d] %s (#%d): ", rank, msg, len);
   for (int tmp = 0; tmp < len; tmp++) {
-    int* v = buf;
-    printf("[%d]", v[tmp]);
+    printf("[%d]", buf[tmp]);
   }
   printf("\n");
 }
@@ -73,6 +72,7 @@ int main(int argc, char **argv)
   }
   MPI_Comm_rank(comm, &rank);
   int size2 = size * size;
+  xbt_assert(size2 > 0);
   int* sbuf = (int*)xbt_malloc(size2 * sizeof(int));
   int* rbuf = (int*)xbt_malloc(size2 * sizeof(int));
 
@@ -93,6 +93,35 @@ int main(int argc, char **argv)
     rdispls[i] = i * rank;
     sdispls[i] = (i * (i + 1)) / 2;
   }
+  int status;
+
+  status = MPI_Alltoallv(NULL, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_BUFFER)
+    printf("MPI_Alltoallv did not return MPI_ERR_BUFFER for empty sendbuf\n");
+  status = MPI_Alltoallv(sbuf, NULL, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_ARG)
+    printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL sendcounts\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, NULL, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_ARG)
+    printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL senddispl\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_DATATYPE_NULL, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_TYPE)
+    printf("MPI_Alltoallv did not return MPI_ERR_TYPE for MPI_DATATYPE_NULL sendtype\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, NULL, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_BUFFER)
+    printf("MPI_Alltoallv did not return MPI_ERR_BUFFER for empty recvbuf\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, NULL, rdispls, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_ARG)
+    printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL recvcounts\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, NULL, MPI_INT, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_ARG)
+    printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL recvdispl\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_DATATYPE_NULL, MPI_COMM_WORLD);
+  if(status!=MPI_ERR_TYPE)
+    printf("MPI_Alltoallv did not return MPI_ERR_TYPE for MPI_DATATYPE_NULL recvtype\n");
+  status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_NULL);
+  if(status!=MPI_ERR_COMM)
+    printf("MPI_Alltoallv did not return MPI_ERR_COMM for MPI_COMM_NULL comm\n");
 
   print_buffer_int(sbuf, size2, "sbuf:", rank);
   print_buffer_int(sendcounts, size, "scount:", rank);