Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
9ee0db60cb42346f78d4d3532a32fedc93547138
[simgrid.git] / teshsuite / smpi / io-simple / io-simple.c
1 #include "mpi.h"
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <memory.h>
6
7 /* Test reading and writing zero bytes (set status correctly) */
8
9 int main( int argc, char *argv[] )
10 {
11     int errs = 0;
12     int size, rank, i, *buf, count;
13     MPI_File fh;
14     MPI_Comm comm;
15     MPI_Status status;
16  
17     MPI_Init( &argc, &argv );
18  
19     comm = MPI_COMM_WORLD;
20     MPI_File_open( comm, (char*)"/scratch/lib/libsimgrid.so.3.6.2", MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE, MPI_INFO_NULL, &fh );
21     MPI_Comm_size( comm, &size );
22     MPI_Comm_rank( comm, &rank );
23     buf = (int *)malloc( size * sizeof(int) );
24     buf[0] = rank;
25  
26     /* Write to file */
27     MPI_File_seek( fh, sizeof(int)*rank, MPI_SEEK_SET ); 
28     MPI_File_write( fh, buf, 1, MPI_INT, &status );
29     MPI_Get_count( &status, MPI_INT, &count );
30     if (count != 1) {
31         errs++;
32         fprintf( stderr, "Wrong count (%d) on write\n", count );fflush(stderr);
33     }
34
35     /* Read nothing (check status) */
36     memset( &status, 0xff, sizeof(MPI_Status) );
37     MPI_File_read( fh, buf, 0, MPI_INT, &status );
38     MPI_Get_count( &status, MPI_INT, &count );
39     if (count != 0) {
40         errs++;
41         fprintf( stderr, "Count not zero (%d) on read\n", count );fflush(stderr);
42     }
43
44     /* Write nothing (check status) */
45     memset( &status, 0xff, sizeof(MPI_Status) );
46     MPI_File_write( fh, buf, 0, MPI_INT, &status );
47     if (count != 0) {
48         errs++;
49         fprintf( stderr, "Count not zero (%d) on write\n", count );fflush(stderr);
50     }
51
52     MPI_Barrier( comm );
53
54     MPI_File_seek( fh, sizeof(int)*rank, MPI_SEEK_SET );
55     for (i=0; i<size; i++) buf[i] = -1;
56     MPI_File_read( fh, buf, 1, MPI_INT, &status );
57     // if (buf[0] != rank) {
58         // errs++;
59         // fprintf( stderr, "%d: buf = %d\n", rank, buf[0] );fflush(stderr);
60     // }
61  
62     free( buf );
63     MPI_File_close( &fh );
64  
65     MPI_Finalize();
66     return errs;
67 }