@@ -85,6 +85,78 @@ tst_fmt(char *filename, int cmode)
8585 return nerrs ;
8686}
8787
88+ #define WAIT_CHECK { \
89+ CHECK_ERR \
90+ err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL); \
91+ CHECK_ERR \
92+ }
93+
94+ static int
95+ tst_fmt_nb (char * filename , int cmode )
96+ {
97+ int err , nerrs = 0 , ncid , varid , buf ;
98+ MPI_Offset start [1 ], count [1 ], stride [1 ], imap [1 ];
99+
100+ /* No test NetCDF-4 as nonblocking APIs are not defined in NetCDF-4 */
101+ err = ncmpi_create (MPI_COMM_WORLD , filename , NC_CLOBBER | cmode ,
102+ MPI_INFO_NULL , & ncid ); CHECK_ERR
103+
104+ /* define a scalar variable of integer type */
105+ err = ncmpi_def_var (ncid , "scalar_var" , NC_INT , 0 , NULL , & varid ); CHECK_ERR
106+ err = ncmpi_enddef (ncid ); CHECK_ERR
107+
108+ buf = 1 ;
109+ start [0 ] = 1 ;
110+ count [0 ] = 2 ;
111+ stride [0 ] = 2 ;
112+ imap [0 ] = 2 ;
113+
114+ /* put */
115+ err = ncmpi_iput_var1_int (ncid , varid , NULL , & buf , NULL ); WAIT_CHECK
116+ err = ncmpi_iput_var1_int (ncid , varid , start , & buf , NULL ); WAIT_CHECK
117+
118+ err = ncmpi_iput_vara_int (ncid , varid , start , count , & buf , NULL ); WAIT_CHECK
119+ err = ncmpi_iput_vara_int (ncid , varid , NULL , count , & buf , NULL ); WAIT_CHECK
120+ err = ncmpi_iput_vara_int (ncid , varid , start , NULL , & buf , NULL ); WAIT_CHECK
121+ err = ncmpi_iput_vara_int (ncid , varid , NULL , NULL , & buf , NULL ); WAIT_CHECK
122+
123+ err = ncmpi_iput_vars_int (ncid , varid , start , count , stride , & buf , NULL ); WAIT_CHECK
124+ err = ncmpi_iput_vars_int (ncid , varid , NULL , count , stride , & buf , NULL ); WAIT_CHECK
125+ err = ncmpi_iput_vars_int (ncid , varid , start , NULL , stride , & buf , NULL ); WAIT_CHECK
126+ err = ncmpi_iput_vars_int (ncid , varid , start , count , NULL , & buf , NULL ); WAIT_CHECK
127+ err = ncmpi_iput_vars_int (ncid , varid , NULL , NULL , NULL , & buf , NULL ); WAIT_CHECK
128+
129+ err = ncmpi_iput_varm_int (ncid , varid , start , count , stride , imap , & buf , NULL ); WAIT_CHECK
130+ err = ncmpi_iput_varm_int (ncid , varid , NULL , NULL , NULL , NULL , & buf , NULL ); WAIT_CHECK
131+
132+ err = ncmpi_close (ncid ); CHECK_ERR
133+
134+ err = ncmpi_open (MPI_COMM_WORLD , filename , NC_NOWRITE , MPI_INFO_NULL , & ncid ); CHECK_ERR
135+
136+ err = ncmpi_inq_varid (ncid , "scalar_var" , & varid ); CHECK_ERR
137+
138+ /* get */
139+ err = ncmpi_iget_var1_int (ncid , varid , NULL , & buf , NULL ); WAIT_CHECK
140+ err = ncmpi_iget_var1_int (ncid , varid , start , & buf , NULL ); WAIT_CHECK
141+
142+ err = ncmpi_iget_vara_int (ncid , varid , start , count , & buf , NULL ); WAIT_CHECK
143+ err = ncmpi_iget_vara_int (ncid , varid , NULL , count , & buf , NULL ); WAIT_CHECK
144+ err = ncmpi_iget_vara_int (ncid , varid , start , NULL , & buf , NULL ); WAIT_CHECK
145+ err = ncmpi_iget_vara_int (ncid , varid , NULL , NULL , & buf , NULL ); WAIT_CHECK
146+
147+ err = ncmpi_iget_vars_int (ncid , varid , start , count , stride , & buf , NULL ); WAIT_CHECK
148+ err = ncmpi_iget_vars_int (ncid , varid , NULL , count , stride , & buf , NULL ); WAIT_CHECK
149+ err = ncmpi_iget_vars_int (ncid , varid , start , NULL , stride , & buf , NULL ); WAIT_CHECK
150+ err = ncmpi_iget_vars_int (ncid , varid , start , count , NULL , & buf , NULL ); WAIT_CHECK
151+ err = ncmpi_iget_vars_int (ncid , varid , NULL , NULL , NULL , & buf , NULL ); WAIT_CHECK
152+
153+ err = ncmpi_iget_varm_int (ncid , varid , start , count , stride , imap , & buf , NULL ); WAIT_CHECK
154+ err = ncmpi_iget_varm_int (ncid , varid , NULL , NULL , NULL , NULL , & buf , NULL ); WAIT_CHECK
155+
156+ err = ncmpi_close (ncid ); CHECK_ERR
157+ return nerrs ;
158+ }
159+
88160/*----< main() >------------------------------------------------------------*/
89161int main (int argc , char * * argv )
90162{
@@ -121,6 +193,12 @@ int main(int argc, char **argv)
121193 free (hint_value );
122194 }
123195
196+ /* test nonblocking APIs */
197+ nerrs += tst_fmt_nb (filename , 0 );
198+ nerrs += tst_fmt_nb (filename , NC_64BIT_OFFSET );
199+ nerrs += tst_fmt_nb (filename , NC_64BIT_DATA );
200+
201+ /* test blocking APIs */
124202 nerrs += tst_fmt (filename , 0 );
125203 nerrs += tst_fmt (filename , NC_64BIT_OFFSET );
126204 if (!bb_enabled ) {
0 commit comments