+ 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_COUNT)
+ printf("MPI_Alltoallv did not return MPI_ERR_COUNT 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");
+ if (rank == 0)//if total recvcounts == 0 the call is not illegal, so be sure to fail for rank 0 to avoid deadlocks
+ status = MPI_Alltoallv(NULL, sendcounts, sdispls, MPI_INT, NULL, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD);
+ else
+ 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_COUNT)
+ printf("MPI_Alltoallv did not return MPI_ERR_COUNT 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);
+ print_buffer_int(recvcounts, size, "rcount:", rank);
+ print_buffer_int(sdispls, size, "sdisp:", rank);
+ print_buffer_int(rdispls, size, "rdisp:", rank);