xref: /petsc/src/sys/classes/viewer/tests/ex6.c (revision efbe7e8a80d07327753dbe0b33efee01e046af3f)
1 static char help[] = "Tests binary viewers.\n\n";
2 
3 #include <petscsys.h>
4 #include <petscviewer.h>
5 
6 static PetscErrorCode TestOpen(PetscFileMode mode,PetscViewer *viewer)
7 {
8   const char     *name;
9   PetscBool      skipinfo,skipheader,skipoptions;
10   PetscErrorCode ierr;
11 
12   PetscFunctionBegin;
13   ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"binary.dat",mode,viewer);CHKERRQ(ierr);
14   ierr = PetscViewerBinarySkipInfo(*viewer);CHKERRQ(ierr);
15   ierr = PetscViewerBinarySetSkipInfo(*viewer,PETSC_FALSE);CHKERRQ(ierr);
16   ierr = PetscViewerBinarySetSkipHeader(*viewer,PETSC_FALSE);CHKERRQ(ierr);
17   ierr = PetscViewerBinarySetSkipOptions(*viewer,PETSC_FALSE);CHKERRQ(ierr);
18   ierr = PetscViewerSetUp(*viewer);CHKERRQ(ierr);
19   ierr = PetscViewerFileGetName(*viewer,&name);CHKERRQ(ierr);
20   ierr = PetscViewerFileGetMode(*viewer,&mode);CHKERRQ(ierr);
21   ierr = PetscViewerBinaryGetSkipInfo(*viewer,&skipinfo);CHKERRQ(ierr);
22   ierr = PetscViewerBinaryGetSkipHeader(*viewer,&skipheader);CHKERRQ(ierr);
23   ierr = PetscViewerBinaryGetSkipOptions(*viewer,&skipoptions);CHKERRQ(ierr);
24   PetscFunctionReturn(0);
25 }
26 
27 static PetscErrorCode TestWrite(PetscViewer viewer)
28 {
29   PetscInt       idata = 42;
30   PetscReal      rdata = 42;
31   PetscInt       s = PETSC_DETERMINE, t = PETSC_DETERMINE;
32   PetscViewer    subviewer;
33   PetscErrorCode ierr;
34 
35   PetscFunctionBegin;
36   ierr = PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT);CHKERRQ(ierr);
37   ierr = PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr);
38 
39   ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
40   if (subviewer) {
41     ierr = PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT);CHKERRQ(ierr);
42     ierr = PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr);
43   }
44   ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
45 
46   ierr = PetscViewerBinaryWriteAll(viewer,&idata,1,s,t,PETSC_INT);CHKERRQ(ierr);
47   ierr = PetscViewerBinaryWriteAll(viewer,&rdata,1,s,t,PETSC_REAL);CHKERRQ(ierr);
48 
49   ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
50   if (subviewer) {
51     ierr = PetscViewerBinaryWrite(subviewer,&idata,1,PETSC_INT);CHKERRQ(ierr);
52     ierr = PetscViewerBinaryWrite(subviewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr);
53   }
54   ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
55 
56   ierr = PetscViewerBinaryWrite(viewer,&idata,1,PETSC_INT);CHKERRQ(ierr);
57   ierr = PetscViewerBinaryWrite(viewer,&rdata,1,PETSC_REAL);CHKERRQ(ierr);
58   PetscFunctionReturn(0);
59 }
60 
61 static PetscErrorCode TestRead(PetscViewer viewer)
62 {
63   PetscInt       idata = 0;
64   PetscReal      rdata = 0;
65   PetscInt       s = PETSC_DETERMINE, t = PETSC_DETERMINE;
66   PetscViewer    subviewer;
67   MPI_Comm       comm = PetscObjectComm((PetscObject)viewer);
68   PetscErrorCode ierr;
69 
70   PetscFunctionBegin;
71   ierr = PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr);
72   ierr = PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr);
73   if (idata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%D",idata);
74   if (rdata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
75 
76   ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
77   if (subviewer) {
78     MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
79     ierr = PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr);
80     ierr = PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr);
81     if (idata != 42) SETERRQ1(subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%D",idata);
82     if (rdata != 42) SETERRQ1(subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
83   }
84   ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
85 
86   ierr = PetscViewerBinaryReadAll(viewer,&idata,1,s,t,PETSC_INT);CHKERRQ(ierr);
87   ierr = PetscViewerBinaryReadAll(viewer,&rdata,1,s,t,PETSC_REAL);CHKERRQ(ierr);
88   if (idata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%D",idata);
89   if (rdata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
90 
91   ierr = PetscViewerGetSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
92   if (subviewer) {
93     MPI_Comm subcomm = PetscObjectComm((PetscObject)subviewer);
94     ierr = PetscViewerBinaryRead(subviewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr);
95     ierr = PetscViewerBinaryRead(subviewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr);
96     if (idata != 42) SETERRQ1(subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%D",idata);
97     if (rdata != 42) SETERRQ1(subcomm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
98   }
99   ierr = PetscViewerRestoreSubViewer(viewer,PETSC_COMM_SELF,&subviewer);CHKERRQ(ierr);
100 
101   ierr = PetscViewerBinaryRead(viewer,&idata,1,NULL,PETSC_INT);CHKERRQ(ierr);
102   ierr = PetscViewerBinaryRead(viewer,&rdata,1,NULL,PETSC_REAL);CHKERRQ(ierr);
103   if (idata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected idata=%D",idata);
104   if (rdata != 42) SETERRQ1(comm,PETSC_ERR_FILE_UNEXPECTED,"Unexpected rdata=%g",(double)rdata);
105   PetscFunctionReturn(0);
106 }
107 
108 static PetscErrorCode TestEOF(PetscViewer viewer)
109 {
110   char           data;
111   PetscInt       count = PETSC_MAX_INT;
112   MPI_Comm       comm = PetscObjectComm((PetscObject)viewer);
113   PetscErrorCode ierr;
114 
115   PetscFunctionBegin;
116   ierr = PetscViewerRead(viewer,&data,1,&count,PETSC_CHAR);CHKERRQ(ierr);
117   if (count) SETERRQ(comm,PETSC_ERR_FILE_UNEXPECTED,"Expected EOF");
118   PetscFunctionReturn(0);
119 }
120 
121 static PetscErrorCode TestClose(PetscViewer *viewer)
122 {
123   PetscFileMode  mode;
124   PetscErrorCode ierr;
125 
126   PetscFunctionBegin;
127   ierr = PetscViewerFileGetMode(*viewer,&mode);CHKERRQ(ierr);
128   if (mode == FILE_MODE_READ) {ierr = TestEOF(*viewer);CHKERRQ(ierr);}
129   ierr = PetscViewerDestroy(viewer);CHKERRQ(ierr);
130   PetscFunctionReturn(0);
131 }
132 
133 int main(int argc,char **args)
134 {
135   PetscViewer    viewer;
136   PetscErrorCode ierr;
137 
138   ierr = PetscInitialize(&argc,&args,NULL,help);if (ierr) return ierr;
139 
140   ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);
141   ierr = TestWrite(viewer);CHKERRQ(ierr);
142   ierr = TestClose(&viewer);CHKERRQ(ierr);
143 
144   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
145   ierr = TestRead(viewer);CHKERRQ(ierr);
146   ierr = TestClose(&viewer);CHKERRQ(ierr);
147 
148   ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr);
149   ierr = TestWrite(viewer);CHKERRQ(ierr);
150   ierr = TestClose(&viewer);CHKERRQ(ierr);
151 
152   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
153   ierr = TestRead(viewer);CHKERRQ(ierr);
154   ierr = TestRead(viewer);CHKERRQ(ierr);
155   ierr = TestClose(&viewer);CHKERRQ(ierr);
156 
157   ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr);
158   ierr = TestWrite(viewer);CHKERRQ(ierr);
159   ierr = TestClose(&viewer);CHKERRQ(ierr);
160 
161   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
162   ierr = TestRead(viewer);CHKERRQ(ierr);
163   ierr = TestRead(viewer);CHKERRQ(ierr);
164   ierr = TestRead(viewer);CHKERRQ(ierr);
165   ierr = TestClose(&viewer);CHKERRQ(ierr);
166 
167   ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);
168   ierr = TestWrite(viewer);CHKERRQ(ierr);
169   ierr = TestClose(&viewer);CHKERRQ(ierr);
170 
171   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
172   ierr = TestRead(viewer);CHKERRQ(ierr);
173   ierr = TestClose(&viewer);CHKERRQ(ierr);
174 
175   ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);
176   ierr = TestClose(&viewer);CHKERRQ(ierr);
177   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
178   ierr = TestClose(&viewer);CHKERRQ(ierr);
179   ierr = TestOpen(FILE_MODE_APPEND,&viewer);CHKERRQ(ierr);
180   ierr = TestClose(&viewer);CHKERRQ(ierr);
181   ierr = TestOpen(FILE_MODE_READ,&viewer);CHKERRQ(ierr);
182   ierr = TestClose(&viewer);CHKERRQ(ierr);
183 
184   {
185     FILE        *info;
186     PetscMPIInt rank;
187 
188     ierr = TestOpen(FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);
189     ierr = PetscViewerPushFormat(viewer,PETSC_VIEWER_BINARY_MATLAB);CHKERRQ(ierr);
190     ierr = PetscViewerBinaryGetInfoPointer(viewer,&info);CHKERRQ(ierr);
191     ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank);CHKERRQ(ierr);
192     if (!rank && !info) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Missing info pointer");
193     ierr = TestClose(&viewer);CHKERRQ(ierr);
194   }
195 
196   ierr = PetscFinalize();
197   return ierr;
198 }
199 
200 
201 /*TEST
202 
203 
204    testset:
205      nsize: {{1 2 3}separate_output}
206      args: -viewer_view
207      test:
208        suffix: stdio
209        args: -viewer_binary_mpiio 0
210      test:
211        requires: mpiio
212        suffix: mpiio
213        args: -viewer_binary_mpiio 1
214 
215 
216 TEST*/
217