Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add mpich3 test suite, to replace older one.
[simgrid.git] / teshsuite / smpi / mpich3-test / coll / bcastzerotype.c
diff --git a/teshsuite/smpi/mpich3-test/coll/bcastzerotype.c b/teshsuite/smpi/mpich3-test/coll/bcastzerotype.c
new file mode 100644 (file)
index 0000000..65a6055
--- /dev/null
@@ -0,0 +1,51 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <mpi.h>
+
+/* test broadcast behavior with non-zero counts but zero-sized types */
+
+int main(int argc, char *argv[])
+{
+    int i, type_size;
+    MPI_Datatype type = MPI_DATATYPE_NULL;
+    char *buf = NULL;
+    int wrank, wsize;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
+    MPI_Comm_size(MPI_COMM_WORLD, &wsize);
+
+    /* a random non-zero sized buffer */
+#define NELEM (10)
+    buf = malloc(NELEM*sizeof(int));
+    assert(buf);
+
+    for (i = 0; i < NELEM; i++) {
+        buf[i] = wrank * NELEM + i;
+    }
+
+    /* create a zero-size type */
+    MPI_Type_contiguous(0, MPI_INT, &type);
+    MPI_Type_commit(&type);
+    MPI_Type_size(type, &type_size);
+    assert(type_size == 0);
+
+    /* do the broadcast, which will break on some MPI implementations */
+    MPI_Bcast(buf, NELEM, type, 0, MPI_COMM_WORLD);
+
+    /* check that the buffer remains unmolested */
+    for (i = 0; i < NELEM; i++) {
+        assert(buf[i] == wrank * NELEM + i);
+    }
+
+    MPI_Type_free(&type);
+    MPI_Finalize();
+
+    if (wrank == 0) {
+        printf(" No errors\n");
+    }
+
+    return 0;
+}