Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add io test in mpich testsuite.
[simgrid.git] / teshsuite / smpi / mpich3-test / io / setviewcur.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 <stdlib.h>
10 #include "mpitest.h"
11
12 /*
13 static char MTEST_Descrip[] = "Test set_view with DISPLACEMENT_CURRENT";
14 */
15
16 int main(int argc, char *argv[])
17 {
18     int errs = 0, err;
19     int size, rank, *buf;
20     MPI_Offset offset;
21     MPI_File fh;
22     MPI_Comm comm;
23     MPI_Status status;
24
25     MTest_Init(&argc, &argv);
26
27     /* This test reads a header then sets the view to every "size" int,
28      * using set view and current displacement.  The file is first written
29      * using a combination of collective and ordered writes */
30
31     comm = MPI_COMM_WORLD;
32     err = MPI_File_open(comm, (char *) "/scratch/test.ord",
33                         MPI_MODE_WRONLY | MPI_MODE_CREATE, MPI_INFO_NULL, &fh);
34     if (err) {
35         errs++;
36         MTestPrintErrorMsg("Open(1)", err);
37     }
38     MPI_Comm_size(comm, &size);
39     MPI_Comm_rank(comm, &rank);
40     buf = (int *) malloc(size * sizeof(int));
41     buf[0] = size;
42     err = MPI_File_write_all(fh, buf, 1, MPI_INT, &status);
43     if (err) {
44         errs++;
45         MTestPrintErrorMsg("Write_all", err);
46     }
47     err = MPI_File_get_position(fh, &offset);
48     if (err) {
49         errs++;
50         MTestPrintErrorMsg("Get_position", err);
51     }
52     err = MPI_File_seek_shared(fh, offset, MPI_SEEK_SET);
53     if (err) {
54         errs++;
55         MTestPrintErrorMsg("Seek_shared", err);
56     }
57     buf[0] = rank;
58     err = MPI_File_write_ordered(fh, buf, 1, MPI_INT, &status);
59     if (err) {
60         errs++;
61         MTestPrintErrorMsg("Write_ordered", err);
62     }
63     err = MPI_File_close(&fh);
64     if (err) {
65         errs++;
66         MTestPrintErrorMsg("Close(1)", err);
67     }
68
69     /* Reopen the file as sequential */
70     err = MPI_File_open(comm, (char *) "/scratch/test.ord",
71                         MPI_MODE_RDONLY | MPI_MODE_SEQUENTIAL |
72                         MPI_MODE_DELETE_ON_CLOSE, MPI_INFO_NULL, &fh);
73     if (err) {
74         errs++;
75         MTestPrintErrorMsg("Open(Read)", err);
76     }
77
78     if (rank == 0) {
79         err = MPI_File_read_shared(fh, buf, 1, MPI_INT, &status);
80         if (err) {
81             errs++;
82             MTestPrintErrorMsg("Read_all", err);
83         }
84 /*        if (buf[0] != size) {*/
85 /*            errs++;*/
86 /*            fprintf(stderr, "Unexpected value for the header = %d, should be %d\n", buf[0], size);*/
87 /*            fflush(stderr);*/
88 /*        }*/
89     }
90     MPI_Barrier(comm);
91     /* All processes must provide the same file view for MODE_SEQUENTIAL */
92     /* See MPI 2.1, 13.3 - DISPLACEMENT_CURRENT is *required* for
93      * MODE_SEQUENTIAL files */
94     err = MPI_File_set_view(fh, MPI_DISPLACEMENT_CURRENT, MPI_INT,
95                             MPI_INT, (char *) "native", MPI_INFO_NULL);
96     if (err) {
97         errs++;
98         MTestPrintErrorMsg("Set_view (DISPLACEMENT_CURRENT)", err);
99     }
100     buf[0] = -1;
101     err = MPI_File_read_ordered(fh, buf, 1, MPI_INT, &status);
102     if (err) {
103         errs++;
104         MTestPrintErrorMsg("Read_all", err);
105     }
106     if (buf[0] != rank) {
107         errs++;
108         fprintf(stderr, "%d: buf[0] = %d\n", rank, buf[0]);
109         fflush(stderr);
110     }
111
112     free(buf);
113     err = MPI_File_close(&fh);
114     if (err) {
115         errs++;
116         MTestPrintErrorMsg("Close(2)", err);
117     }
118
119     MTest_Finalize(errs);
120     MPI_Finalize();
121     return 0;
122 }