Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add mpich3 topo tests
[simgrid.git] / teshsuite / smpi / mpich3-test / topo / dims1.c
diff --git a/teshsuite/smpi/mpich3-test/topo/dims1.c b/teshsuite/smpi/mpich3-test/topo/dims1.c
new file mode 100644 (file)
index 0000000..b429776
--- /dev/null
@@ -0,0 +1,144 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *  (C) 2003 by Argonne National Laboratory.
+ *      See COPYRIGHT in top-level directory.
+ */
+#include "mpi.h"
+#include <stdio.h>
+#include "mpitest.h"
+
+int prodof( int ndims, const int dims[] );
+int increasing( int ndims, const int dims[] );
+
+int prodof( int ndims, const int dims[] )
+{
+    int i, prod=1;
+    for (i=0; i<ndims; i++) 
+       prod *= dims[i];
+    return prod;
+}
+
+int increasing( int ndims, const int dims[] )
+{
+    int i, err=0;
+    for (i=1; i<ndims; i++) {
+       if (dims[i] > dims[i-1]) {
+           printf ("%d = dims[%d] > dims[%d] = %d\n", dims[i], i, 
+                   i-1, dims[i-1] );
+           err = 1;
+       }
+    }
+    return err;
+}
+int main( int argc, char *argv[] )
+{
+    int errs = 0;
+    int dims[4], nnodes, ndims;
+
+    MTest_Init( &argc, &argv );
+
+    /* Test multiple dims create values.  For each, make sure that the 
+       product of dims is the number of input nodes */
+    nnodes = 2*3*5*7*11;
+    ndims  = 2;
+    dims[0] = dims[1] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    /* Test multiple dims create values.  For each, make sure that the 
+       product of dims is the number of input nodes */
+    nnodes = 2*7;
+    ndims  = 2;
+    dims[0] = dims[1] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    nnodes = 2*2*3*3*5*7*11;
+    ndims  = 2;
+    dims[0] = dims[1] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    nnodes = 11;
+    ndims  = 2;
+    dims[0] = dims[1] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    nnodes = 5*7*11;
+    ndims  = 4;
+    dims[0] = dims[1] = dims[2] = dims[3] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    nnodes = 64;
+    ndims  = 4;
+    dims[0] = dims[1] = dims[2] = dims[3] = 0;
+    MPI_Dims_create( nnodes, ndims, dims );
+    if (prodof(ndims,dims) != nnodes) {
+       errs++;
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+    if (increasing( ndims, dims )) {
+       errs++;
+       printf( "dims create returned a decomposition with increasing dimensions (see MPI-1 standard section 6.5)\n" );
+       printf( "dims create returned the wrong decomposition for %d in %d dims\n",
+               nnodes, ndims );
+    }
+
+    MTest_Finalize( errs );
+    MPI_Finalize();
+    return 0;
+  
+}