Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'mc++'
[simgrid.git] / teshsuite / smpi / mpich3-test / topo / cartshift1.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *
4  *  (C) 2003 by Argonne National Laboratory.
5  *      See COPYRIGHT in top-level directory.
6  */
7 #include "mpi.h"
8 #include <stdio.h>
9 #include "mpitest.h"
10
11 int main( int argc, char *argv[] )
12 {
13     int errs = 0;
14     int size, rank;
15     int source, dest;
16     int dims[2], periods[2];
17     MPI_Comm comm;
18
19     MTest_Init( &argc, &argv );
20     
21     MPI_Comm_size( MPI_COMM_WORLD, &size );
22     MPI_Comm_rank( MPI_COMM_WORLD, &rank );
23     dims[0]    = size;
24     periods[0] = 1;
25     MPI_Cart_create( MPI_COMM_WORLD, 1, dims, periods, 0, &comm );
26     MPI_Cart_shift( comm, 0, 1, &source, &dest );
27     if (source != ((rank - 1 + size) % size)) {
28         errs++;
29         printf( "source for shift 1 is %d\n", source );
30     }
31     if (dest != ((rank + 1) % size)) {
32         errs++;
33         printf( "dest for shift 1 is %d\n", dest );
34     }
35     MPI_Cart_shift( comm, 0, 0, &source, &dest );
36     if (source != rank) {
37         errs++;
38         printf( "Source for shift 0 is %d\n", source );
39     }
40     if (dest != rank) {
41         errs++;
42         printf( "Dest for shift 0 is %d\n", dest );
43     }
44     MPI_Cart_shift( comm, 0, -1, &source, &dest );
45     if (source != ((rank + 1) % size)) {
46         errs++;
47         printf( "source for shift -1 is %d\n", source );
48     }
49     if (dest != ((rank - 1 + size) % size)) {
50         errs++;
51         printf( "dest for shift -1 is %d\n", dest );
52     }
53
54     /* Now, with non-periodic */
55     MPI_Comm_free( &comm );
56     periods[0] = 0;
57     MPI_Cart_create( MPI_COMM_WORLD, 1, dims, periods, 0, &comm );
58     MPI_Cart_shift( comm, 0, 1, &source, &dest );
59     if ((rank > 0 && source != (rank - 1)) || 
60         (rank == 0 && source != MPI_PROC_NULL)) {
61         errs++;
62         printf( "source for non-periodic shift 1 is %d\n", source );
63     }
64     if ((rank < size-1 && dest != rank + 1) || 
65         ((rank == size-1) && dest != MPI_PROC_NULL)) {
66         errs++;
67         printf( "dest for non-periodic shift 1 is %d\n", dest );
68     }
69     MPI_Cart_shift( comm, 0, 0, &source, &dest );
70     if (source != rank) {
71         errs++;
72         printf( "Source for non-periodic shift 0 is %d\n", source );
73     }
74     if (dest != rank) {
75         errs++;
76         printf( "Dest for non-periodic shift 0 is %d\n", dest );
77     }
78     MPI_Cart_shift( comm, 0, -1, &source, &dest );
79     if ((rank < size - 1 && source != rank + 1) ||
80         (rank == size - 1 && source != MPI_PROC_NULL)) {
81         
82         errs++;
83         printf( "source for non-periodic shift -1 is %d\n", source );
84     }
85     if ((rank > 0 && dest != rank - 1) ||
86         (rank == 0 && dest != MPI_PROC_NULL)) {
87         errs++;
88         printf( "dest for non-periodic shift -1 is %d\n", dest );
89     }
90     MPI_Comm_free( &comm );
91     
92     MTest_Finalize( errs );
93     MPI_Finalize();
94     return 0;
95   
96 }