Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix+activate rma test
[simgrid.git] / teshsuite / smpi / mpich3-test / rma / attrorderwin.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *
4  *  (C) 2001 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 /*
12 static char MTestDescrip[] = "Test creating and inserting attributes in \
13 different orders to ensure that the list management code handles all cases.";
14 */
15
16 int checkAttrs(MPI_Win win, int n, int key[], int attrval[]);
17 int checkNoAttrs(MPI_Win win, int n, int key[]);
18
19 int main(int argc, char *argv[])
20 {
21     int errs = 0;
22     int key[3], attrval[3];
23     int i;
24     int buf[1];
25     MPI_Comm comm;
26     MPI_Win win;
27
28     MTest_Init(&argc, &argv);
29
30     {
31         comm = MPI_COMM_WORLD;
32         MPI_Win_create(buf, sizeof(int), sizeof(int), MPI_INFO_NULL, comm, &win);
33
34         /* Create key values */
35         for (i = 0; i < 3; i++) {
36             MPI_Win_create_keyval(MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN, &key[i], (void *) 0);
37             attrval[i] = 1024 * i;
38         }
39
40         /* Insert attribute in several orders.  Test after put with get,
41          * then delete, then confirm delete with get. */
42
43         MPI_Win_set_attr(win, key[2], &attrval[2]);
44         MPI_Win_set_attr(win, key[1], &attrval[1]);
45         MPI_Win_set_attr(win, key[0], &attrval[0]);
46
47         errs += checkAttrs(win, 3, key, attrval);
48
49         MPI_Win_delete_attr(win, key[0]);
50         MPI_Win_delete_attr(win, key[1]);
51         MPI_Win_delete_attr(win, key[2]);
52
53         errs += checkNoAttrs(win, 3, key);
54
55         MPI_Win_set_attr(win, key[1], &attrval[1]);
56         MPI_Win_set_attr(win, key[2], &attrval[2]);
57         MPI_Win_set_attr(win, key[0], &attrval[0]);
58
59         errs += checkAttrs(win, 3, key, attrval);
60
61         MPI_Win_delete_attr(win, key[2]);
62         MPI_Win_delete_attr(win, key[1]);
63         MPI_Win_delete_attr(win, key[0]);
64
65         errs += checkNoAttrs(win, 3, key);
66
67         MPI_Win_set_attr(win, key[0], &attrval[0]);
68         MPI_Win_set_attr(win, key[1], &attrval[1]);
69         MPI_Win_set_attr(win, key[2], &attrval[2]);
70
71         errs += checkAttrs(win, 3, key, attrval);
72
73         MPI_Win_delete_attr(win, key[1]);
74         MPI_Win_delete_attr(win, key[2]);
75         MPI_Win_delete_attr(win, key[0]);
76
77         errs += checkNoAttrs(win, 3, key);
78
79         for (i = 0; i < 3; i++) {
80             MPI_Win_free_keyval(&key[i]);
81         }
82         MPI_Win_free(&win);
83     }
84
85     MTest_Finalize(errs);
86     MPI_Finalize();
87     return 0;
88
89 }
90
91 int checkAttrs(MPI_Win win, int n, int key[], int attrval[])
92 {
93     int errs = 0;
94     int i, flag, *val_p;
95
96     for (i = 0; i < n; i++) {
97         MPI_Win_get_attr(win, key[i], &val_p, &flag);
98         if (!flag) {
99             errs++;
100             fprintf(stderr, "Attribute for key %d not set\n", i);
101         }
102         else if (val_p != &attrval[i]) {
103             errs++;
104             fprintf(stderr, "Atribute value for key %d not correct\n", i);
105         }
106     }
107
108     return errs;
109 }
110
111 int checkNoAttrs(MPI_Win win, int n, int key[])
112 {
113     int errs = 0;
114     int i, flag, *val_p;
115
116     for (i = 0; i < n; i++) {
117         MPI_Win_get_attr(win, key[i], &val_p, &flag);
118         if (flag) {
119             errs++;
120             fprintf(stderr, "Attribute for key %d set but should be deleted\n", i);
121         }
122     }
123
124     return errs;
125 }