#include <nc4internal.h>#include <netcdf.h>#include <nc_tests.h>Include dependency graph for tst_grps.c:

Go to the source code of this file.
Defines | |
| #define | FILE_NAME "tst_grps.nc" |
| #define | DIM1_NAME "kingdom" |
| #define | DIM1_LEN 3 |
| #define | DIM2_NAME "year" |
| #define | VAR1_NAME "Number_of_Beheadings_in_Family" |
| #define | DYNASTY "Tudor" |
| #define | HENRY_VII "Henry_VII" |
| #define | MARGARET "Margaret" |
| #define | JAMES_V_OF_SCOTLAND "James_V_of_Scotland" |
| #define | MARY_I_OF_SCOTLAND "Mary_I_of_Scotland" |
| #define | JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND "James_VI_of_Scotland_and_I_of_England" |
| #define | MAX_SIBLING_GROUPS 10 |
| #define | NUM_CASTLES_NAME "Number_of_Castles" |
Functions | |
| int | main (int argc, char **argv) |
|
|
Definition at line 15 of file tst_grps.c. |
|
|
Definition at line 14 of file tst_grps.c. |
|
|
Definition at line 16 of file tst_grps.c. |
|
|
Definition at line 18 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 13 of file tst_grps.c. |
|
|
Definition at line 19 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 21 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 23 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 20 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 22 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 24 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 25 of file tst_grps.c. Referenced by main(). |
|
|
Definition at line 17 of file tst_grps.c. |
|
||||||||||||
|
Definition at line 28 of file tst_grps.c. References DIM1_LEN, DIM1_NAME, DYNASTY, ERR, FILE_NAME, FINAL_RESULTS, HENRY_VII, JAMES_V_OF_SCOTLAND, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, MARGARET, MARY_I_OF_SCOTLAND, MAX_SIBLING_GROUPS, nc_close, nc_create, nc_def_dim, nc_def_grp(), nc_def_var, nc_get_var_int, nc_get_vara_int, NC_GLOBAL, nc_inq_dim, nc_inq_dimid, nc_inq_dimname, nc_inq_grpname(), nc_inq_grps(), nc_inq_ncid(), nc_inq_var, nc_inq_varids(), NC_INT, NC_MAX_NAME, NC_NETCDF4, NC_NOWRITE, nc_open, nc_put_att_int, nc_put_var_int, nc_put_vara_int, NC_UNLIMITED, ncid, NUM_CASTLES_NAME, SUMMARIZE_ERR, and VAR1_NAME. 00029 { 00030 int ncid; 00031 int henry_vii_id, margaret_id, james_v_of_scotland_id, mary_i_of_scotland_id; 00032 int james_i_of_england_id, tudor_id; 00033 char name_in[NC_MAX_NAME]; 00034 int grpid_in[MAX_SIBLING_GROUPS], varids_in[MAX_SIBLING_GROUPS]; 00035 int dimids_in[MAX_SIBLING_GROUPS], nvars_in, ndims_in, ncid_in; 00036 int num_grps; 00037 00038 printf("\n*** Testing netcdf-4 group functions.\n"); 00039 printf("*** testing simple group create..."); 00040 00041 /*nc_set_log_level(4);*/ 00042 00043 /* Create a file with one group, a group to contain data about 00044 * Henry VII. */ 00045 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00046 if (nc_def_grp(ncid, HENRY_VII, &henry_vii_id)) ERR; 00047 if (nc_close(ncid)) ERR; 00048 00049 /* Check it out. */ 00050 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00051 if (nc_inq_grps(ncid, &num_grps, NULL)) ERR; 00052 if (num_grps != 1) ERR; 00053 if (nc_inq_grps(ncid, NULL, grpid_in)) ERR; 00054 if (nc_inq_grpname(ncid, name_in)) ERR; 00055 if (strcmp(name_in, "/")) ERR; 00056 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00057 if (strcmp(name_in, HENRY_VII)) ERR; 00058 if (nc_inq_varids(grpid_in[0], &nvars_in, varids_in)) ERR; 00059 if (nvars_in != 0) ERR; 00060 if (nc_inq_varids(grpid_in[0], &ndims_in, dimids_in)) ERR; 00061 if (ndims_in != 0) ERR; 00062 if (nc_inq_ncid(ncid, HENRY_VII, &ncid_in)) ERR; 00063 if (ncid_in != grpid_in[0]) ERR; 00064 if (nc_close(ncid)) ERR; 00065 00066 SUMMARIZE_ERR; 00067 printf("*** testing simple nested group creates..."); 00068 00069 /* Create a file with some nested groups in it, suitable 00070 * to storing information about the Tudor dynasty of England. */ 00071 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00072 if (nc_def_grp(ncid, HENRY_VII, &henry_vii_id)) ERR; 00073 if (nc_def_grp(henry_vii_id, MARGARET, &margaret_id)) ERR; 00074 if (nc_def_grp(margaret_id, JAMES_V_OF_SCOTLAND, &james_v_of_scotland_id)) ERR; 00075 if (nc_def_grp(james_v_of_scotland_id, MARY_I_OF_SCOTLAND, &mary_i_of_scotland_id)) ERR; 00076 if (nc_def_grp(mary_i_of_scotland_id, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &james_i_of_england_id)) ERR; 00077 if (nc_close(ncid)) ERR; 00078 00079 /* Check it out. */ 00080 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00081 if (nc_inq_grps(ncid, &num_grps, NULL)) ERR; 00082 if (num_grps != 1) ERR; 00083 if (nc_inq_grps(ncid, NULL, grpid_in)) ERR; 00084 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00085 if (strcmp(name_in, HENRY_VII)) ERR; 00086 if (nc_inq_grps(grpid_in[0], &num_grps, grpid_in)) ERR; 00087 if (num_grps != 1) ERR; 00088 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00089 if (strcmp(name_in, MARGARET)) ERR; 00090 if (nc_inq_grps(grpid_in[0], &num_grps, grpid_in)) ERR; 00091 if (num_grps != 1) ERR; 00092 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00093 if (strcmp(name_in, JAMES_V_OF_SCOTLAND)) ERR; 00094 if (nc_inq_grps(grpid_in[0], &num_grps, grpid_in)) ERR; 00095 if (num_grps != 1) ERR; 00096 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00097 if (strcmp(name_in, MARY_I_OF_SCOTLAND)) ERR; 00098 if (nc_inq_grps(grpid_in[0], &num_grps, grpid_in)) ERR; 00099 if (num_grps != 1) ERR; 00100 if (nc_inq_grpname(grpid_in[0], name_in)) ERR; 00101 if (strcmp(name_in, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND)) ERR; 00102 if (nc_close(ncid)) ERR; 00103 00104 SUMMARIZE_ERR; 00105 printf("*** testing simple sibling group creates..."); 00106 00107 /* Create a file with one group, and beneath it a group for each Tudor. */ 00108 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00109 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00110 if (nc_def_grp(tudor_id, HENRY_VII, &henry_vii_id)) ERR; 00111 if (nc_def_grp(tudor_id, MARGARET, &margaret_id)) ERR; 00112 if (nc_def_grp(tudor_id, JAMES_V_OF_SCOTLAND, &james_v_of_scotland_id)) ERR; 00113 if (nc_def_grp(tudor_id, MARY_I_OF_SCOTLAND, &mary_i_of_scotland_id)) ERR; 00114 if (nc_def_grp(tudor_id, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &james_i_of_england_id)) ERR; 00115 if (nc_close(ncid)) ERR; 00116 00117 /* Make sure we've got all the tudors where we want them. */ 00118 { 00119 int dynasty, ncid_in; 00120 00121 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00122 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00123 if (num_grps != 1) ERR; 00124 if (nc_inq_grpname(dynasty, name_in)) ERR; 00125 if (strcmp(name_in, DYNASTY)) ERR; 00126 if (nc_inq_grps(dynasty, &num_grps, grpid_in)) ERR; 00127 if (num_grps != 5) ERR; 00128 if (nc_inq_ncid(dynasty, HENRY_VII, &ncid_in)) ERR; 00129 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00130 if (strcmp(name_in, HENRY_VII)) ERR; 00131 if (nc_inq_ncid(dynasty, MARGARET, &ncid_in)) ERR; 00132 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00133 if (strcmp(name_in, MARGARET)) ERR; 00134 if (nc_inq_ncid(dynasty, JAMES_V_OF_SCOTLAND, &ncid_in)) ERR; 00135 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00136 if (strcmp(name_in, JAMES_V_OF_SCOTLAND)) ERR; 00137 if (nc_inq_ncid(dynasty, MARY_I_OF_SCOTLAND, &ncid_in)) ERR; 00138 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00139 if (strcmp(name_in, MARY_I_OF_SCOTLAND)) ERR; 00140 if (nc_inq_ncid(dynasty, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &ncid_in)) ERR; 00141 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00142 if (strcmp(name_in, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND)) ERR; 00143 if (nc_close(ncid)) ERR; 00144 } 00145 00146 SUMMARIZE_ERR; 00147 printf("*** testing more group attributes..."); 00148 00149 { 00150 int num_castles_henry_vii = 1, num_castles_margaret = 0, num_castles_james_v = 2; 00151 int num_castles_mary_i = 3, num_castles_james_vi = 4; 00152 00153 /* Create a file with one group, and beneath it a group for each 00154 * Tudor. We will have some attributes in the groups.*/ 00155 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00156 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00157 if (nc_def_grp(tudor_id, HENRY_VII, &henry_vii_id)) ERR; 00158 if (nc_put_att_int(henry_vii_id, NC_GLOBAL, NUM_CASTLES_NAME, NC_INT, 00159 1, &num_castles_henry_vii)) ERR; 00160 if (nc_def_grp(tudor_id, MARGARET, &margaret_id)) ERR; 00161 if (nc_put_att_int(margaret_id, NC_GLOBAL, NUM_CASTLES_NAME, NC_INT, 00162 1, &num_castles_margaret)) ERR; 00163 if (nc_def_grp(tudor_id, JAMES_V_OF_SCOTLAND, &james_v_of_scotland_id)) ERR; 00164 if (nc_put_att_int(james_v_of_scotland_id, NC_GLOBAL, NUM_CASTLES_NAME, NC_INT, 00165 1, &num_castles_james_v)) ERR; 00166 if (nc_def_grp(tudor_id, MARY_I_OF_SCOTLAND, &mary_i_of_scotland_id)) ERR; 00167 if (nc_put_att_int(mary_i_of_scotland_id, NC_GLOBAL, NUM_CASTLES_NAME, NC_INT, 00168 1, &num_castles_mary_i)) ERR; 00169 if (nc_def_grp(tudor_id, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, 00170 &james_i_of_england_id)) ERR; 00171 if (nc_put_att_int(james_i_of_england_id, NC_GLOBAL, NUM_CASTLES_NAME, 00172 NC_INT, 1, &num_castles_james_vi)) ERR; 00173 if (nc_close(ncid)) ERR; 00174 } 00175 00176 /* Make sure we've got all the tudors where we want them. */ 00177 { 00178 int dynasty, ncid_in; 00179 00180 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00181 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00182 if (num_grps != 1) ERR; 00183 if (nc_inq_grpname(dynasty, name_in)) ERR; 00184 if (strcmp(name_in, DYNASTY)) ERR; 00185 if (nc_inq_grps(dynasty, &num_grps, grpid_in)) ERR; 00186 if (num_grps != 5) ERR; 00187 if (nc_inq_ncid(dynasty, HENRY_VII, &ncid_in)) ERR; 00188 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00189 if (strcmp(name_in, HENRY_VII)) ERR; 00190 if (nc_inq_ncid(dynasty, MARGARET, &ncid_in)) ERR; 00191 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00192 if (strcmp(name_in, MARGARET)) ERR; 00193 if (nc_inq_ncid(dynasty, JAMES_V_OF_SCOTLAND, &ncid_in)) ERR; 00194 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00195 if (strcmp(name_in, JAMES_V_OF_SCOTLAND)) ERR; 00196 if (nc_inq_ncid(dynasty, MARY_I_OF_SCOTLAND, &ncid_in)) ERR; 00197 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00198 if (strcmp(name_in, MARY_I_OF_SCOTLAND)) ERR; 00199 if (nc_inq_ncid(dynasty, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &ncid_in)) ERR; 00200 if (nc_inq_grpname(ncid_in, name_in)) ERR; 00201 if (strcmp(name_in, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND)) ERR; 00202 if (nc_close(ncid)) ERR; 00203 } 00204 00205 SUMMARIZE_ERR; 00206 printf("*** testing groups and dimensions..."); 00207 00208 { 00209 int dimid, dimid_in, dynasty; 00210 size_t len_in; 00211 char name_in[NC_MAX_NAME + 1]; 00212 00213 /* Create a file with one group, and within that group, a dimension.*/ 00214 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00215 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00216 if (nc_def_dim(tudor_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00217 if (nc_close(ncid)) ERR; 00218 00219 /* Now check the file to see if the dimension is there. */ 00220 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00221 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00222 if (num_grps != 1) ERR; 00223 if (nc_inq_grpname(dynasty, name_in)) ERR; 00224 if (strcmp(name_in, DYNASTY)) ERR; 00225 if (nc_inq_dimid(dynasty, DIM1_NAME, &dimid_in)) ERR; 00226 if (dimid_in != 0) ERR; 00227 if (nc_inq_dimname(dynasty, 0, name_in)) ERR; 00228 if (strcmp(name_in, DIM1_NAME)) ERR; 00229 if (nc_inq_dim(dynasty, 0, name_in, &len_in)) ERR; 00230 if (strcmp(name_in, DIM1_NAME)) ERR; 00231 if (len_in != DIM1_LEN) ERR; 00232 if (nc_close(ncid)) ERR; 00233 } 00234 00235 SUMMARIZE_ERR; 00236 printf("*** testing groups and vars..."); 00237 00238 { 00239 int dimid, dynasty, varid; 00240 size_t len_in; 00241 int natts_in, dimids_in[10], ndims_in; 00242 nc_type xtype_in; 00243 char name_in[NC_MAX_NAME + 1]; 00244 00245 /* Create a file with one group, and within that group, a 00246 * dimension, and a variable.*/ 00247 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00248 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00249 if (nc_def_dim(tudor_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00250 if (nc_def_var(tudor_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00251 if (nc_close(ncid)) ERR; 00252 00253 /* Now check the file to see if the dimension and variable are 00254 * there. */ 00255 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00256 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00257 if (num_grps != 1) ERR; 00258 if (nc_inq_dim(dynasty, 0, name_in, &len_in)) ERR; 00259 if (strcmp(name_in, DIM1_NAME) || len_in != DIM1_LEN) ERR; 00260 if (nc_inq_var(dynasty, 0, name_in, &xtype_in, &ndims_in, dimids_in, 00261 &natts_in)) ERR; 00262 if (strcmp(name_in, VAR1_NAME) || xtype_in != NC_INT || ndims_in != 1 || 00263 dimids_in[0] != 0 || natts_in != 0) ERR; 00264 if (nc_close(ncid)) ERR; 00265 } 00266 00267 SUMMARIZE_ERR; 00268 printf("*** testing groups and vars..."); 00269 00270 { 00271 int dimid, dynasty, varid; 00272 size_t len_in; 00273 int natts_in, dimids_in[10], ndims_in; 00274 int grpids_in[10]; 00275 nc_type xtype_in; 00276 char name_in[NC_MAX_NAME + 1]; 00277 int data_out[DIM1_LEN] = {-99, 0, 99}, data_in[DIM1_LEN]; 00278 int i, j; 00279 00280 /* Create a file with a group, DYNASTY, containing 5 groups, 00281 * each with a dimension and one int variable. */ 00282 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00283 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00284 /* Henry VII. */ 00285 if (nc_def_grp(tudor_id, HENRY_VII, &henry_vii_id)) ERR; 00286 if (nc_def_dim(henry_vii_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00287 if (nc_def_var(henry_vii_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00288 if (nc_put_var_int(henry_vii_id, varid, data_out)) ERR; 00289 /* Margaret. */ 00290 if (nc_def_grp(tudor_id, MARGARET, &margaret_id)) ERR; 00291 if (nc_def_dim(margaret_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00292 if (nc_def_var(margaret_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00293 if (nc_put_var_int(margaret_id, varid, data_out)) ERR; 00294 /* James V of Scotland. */ 00295 if (nc_def_grp(tudor_id, JAMES_V_OF_SCOTLAND, &james_v_of_scotland_id)) ERR; 00296 if (nc_def_dim(james_v_of_scotland_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00297 if (nc_def_var(james_v_of_scotland_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00298 if (nc_put_var_int(james_v_of_scotland_id, varid, data_out)) ERR; 00299 /* Mary I of Scotland. */ 00300 if (nc_def_grp(tudor_id, MARY_I_OF_SCOTLAND, &mary_i_of_scotland_id)) ERR; 00301 if (nc_def_dim(mary_i_of_scotland_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00302 if (nc_def_var(mary_i_of_scotland_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00303 if (nc_put_var_int(mary_i_of_scotland_id, varid, data_out)) ERR; 00304 /* James VI of Scotland and I of England. */ 00305 if (nc_def_grp(tudor_id, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &james_i_of_england_id)) ERR; 00306 if (nc_def_dim(james_i_of_england_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00307 if (nc_def_var(james_i_of_england_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00308 if (nc_put_var_int(james_i_of_england_id, varid, data_out)) ERR; 00309 00310 /*nc_show_metadata(ncid);*/ 00311 00312 /* Check it out. */ 00313 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00314 if (num_grps != 1) ERR; 00315 if (nc_inq_grps(dynasty, &num_grps, grpids_in)) ERR; 00316 if (num_grps != 5) ERR; 00317 for (i = 0; i < 5; i++) 00318 { 00319 if (nc_inq_dim(grpids_in[i], i, name_in, &len_in)) ERR; 00320 if (strcmp(name_in, DIM1_NAME) || len_in != DIM1_LEN) ERR; 00321 if (nc_inq_var(grpids_in[i], 0, name_in, &xtype_in, &ndims_in, dimids_in, 00322 &natts_in)) ERR; 00323 if (strcmp(name_in, VAR1_NAME) || xtype_in != NC_INT || ndims_in != 1 || 00324 dimids_in[0] != i || natts_in != 0) ERR; 00325 if (nc_get_var_int(grpids_in[i], 0, data_in)) ERR; 00326 for (j=0; j<DIM1_LEN; j++) 00327 if (data_in[j] != data_out[j]) ERR; 00328 } 00329 00330 if (nc_close(ncid)) ERR; 00331 00332 /* Reopen. */ 00333 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00334 00335 /* Check it out. */ 00336 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00337 if (num_grps != 1) ERR; 00338 if (nc_inq_grps(dynasty, &num_grps, grpids_in)) ERR; 00339 if (num_grps != 5) ERR; 00340 for (i = 0; i < 5; i++) 00341 { 00342 /* We actually get the groups in alphabetical order, so our 00343 * dimid is not i. */ 00344 /*if (nc_inq_dim(grpids_in[i], i, name_in, &len_in)) ERR; 00345 if (strcmp(name_in, DIM1_NAME) || len_in != DIM1_LEN) ERR;*/ 00346 if (nc_inq_var(grpids_in[i], 0, name_in, &xtype_in, &ndims_in, dimids_in, 00347 &natts_in)) ERR; 00348 if (strcmp(name_in, VAR1_NAME) || xtype_in != NC_INT || ndims_in != 1 || 00349 natts_in != 0) ERR; 00350 if (nc_get_var_int(grpids_in[i], 0, data_in)) ERR; 00351 for (j=0; j<DIM1_LEN; j++) 00352 if (data_in[j] != data_out[j]) ERR; 00353 } 00354 00355 if (nc_close(ncid)) ERR; 00356 } 00357 00358 SUMMARIZE_ERR; 00359 printf("*** testing groups and dimension scoping..."); 00360 00361 { 00362 int dimid, dynasty, varid; 00363 size_t len_in; 00364 int natts_in, dimids_in[10], ndims_in; 00365 int grpids_in[10]; 00366 nc_type xtype_in; 00367 char name_in[NC_MAX_NAME + 1]; 00368 int data_out[DIM1_LEN] = {0, 2, 6}, data_in[DIM1_LEN]; 00369 int i, j; 00370 00371 /* A bunch of groups, each with a variable. This time with a shared dimension. */ 00372 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00373 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00374 if (nc_def_dim(tudor_id, DIM1_NAME, DIM1_LEN, &dimid)) ERR; 00375 if (nc_def_grp(tudor_id, HENRY_VII, &henry_vii_id)) ERR; 00376 if (nc_def_var(henry_vii_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00377 if (nc_put_var_int(henry_vii_id, varid, data_out)) ERR; 00378 if (nc_def_grp(tudor_id, MARGARET, &margaret_id)) ERR; 00379 if (nc_def_var(margaret_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00380 if (nc_put_var_int(margaret_id, varid, data_out)) ERR; 00381 if (nc_def_grp(tudor_id, JAMES_V_OF_SCOTLAND, &james_v_of_scotland_id)) ERR; 00382 if (nc_def_var(james_v_of_scotland_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00383 if (nc_put_var_int(james_v_of_scotland_id, varid, data_out)) ERR; 00384 if (nc_def_grp(tudor_id, MARY_I_OF_SCOTLAND, &mary_i_of_scotland_id)) ERR; 00385 if (nc_def_var(mary_i_of_scotland_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00386 if (nc_put_var_int(mary_i_of_scotland_id, varid, data_out)) ERR; 00387 if (nc_def_grp(tudor_id, JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND, &james_i_of_england_id)) ERR; 00388 if (nc_def_var(james_i_of_england_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00389 if (nc_put_var_int(james_i_of_england_id, varid, data_out)) ERR; 00390 if (nc_close(ncid)) ERR; 00391 00392 /* Now check the file to see if the dimension and variable are 00393 * there. */ 00394 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00395 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00396 if (num_grps != 1) ERR; 00397 if (nc_inq_grps(dynasty, &num_grps, grpids_in)) ERR; 00398 if (num_grps != 5) ERR; 00399 for (i = 0; i < 5; i++) 00400 { 00401 if (nc_inq_dim(grpids_in[i], 0, name_in, &len_in)) ERR; 00402 if (strcmp(name_in, DIM1_NAME) || len_in != DIM1_LEN) ERR; 00403 if (nc_inq_var(grpids_in[i], 0, name_in, &xtype_in, &ndims_in, dimids_in, 00404 &natts_in)) ERR; 00405 if (strcmp(name_in, VAR1_NAME) || xtype_in != NC_INT || ndims_in != 1 || 00406 dimids_in[0] != 0 || natts_in != 0) ERR; 00407 if (nc_get_var_int(grpids_in[i], 0, data_in)) ERR; 00408 for (j=0; j<DIM1_LEN; j++) 00409 if (data_in[j] != data_out[j]) ERR; 00410 } 00411 if (nc_close(ncid)) ERR; 00412 } 00413 00414 SUMMARIZE_ERR; 00415 printf("*** testing groups and unlimited dimensions..."); 00416 00417 { 00418 int dimid, dynasty, varid; 00419 size_t len_in; 00420 int natts_in, dimids_in[10], ndims_in; 00421 int grpids_in[10]; 00422 nc_type xtype_in; 00423 char name_in[NC_MAX_NAME + 1]; 00424 int data_out[DIM1_LEN] = {0, 2, 6}, data_in[DIM1_LEN]; 00425 size_t start[1] = {0}, count[1] = {3}; 00426 int j; 00427 00428 /* Create one group, with one var, which has one dimension, which is unlimited. */ 00429 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR; 00430 if (nc_def_grp(ncid, DYNASTY, &tudor_id)) ERR; 00431 if (nc_def_dim(tudor_id, DIM1_NAME, NC_UNLIMITED, &dimid)) ERR; 00432 if (nc_def_grp(tudor_id, HENRY_VII, &henry_vii_id)) ERR; 00433 if (nc_def_var(henry_vii_id, VAR1_NAME, NC_INT, 1, &dimid, &varid)) ERR; 00434 if (nc_put_vara_int(henry_vii_id, varid, start, count, data_out)) ERR; 00435 if (nc_close(ncid)) ERR; 00436 00437 /* Now check the file to see if the dimension and variable are 00438 * there. */ 00439 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; 00440 if (nc_inq_grps(ncid, &num_grps, &dynasty)) ERR; 00441 if (num_grps != 1) ERR; 00442 if (nc_inq_grps(dynasty, &num_grps, grpids_in)) ERR; 00443 if (num_grps != 1) ERR; 00444 if (nc_inq_dim(grpids_in[0], 0, name_in, &len_in)) ERR; 00445 if (strcmp(name_in, DIM1_NAME) || len_in != DIM1_LEN) ERR; 00446 if (nc_inq_var(grpids_in[0], 0, name_in, &xtype_in, &ndims_in, dimids_in, 00447 &natts_in)) ERR; 00448 if (strcmp(name_in, VAR1_NAME) || xtype_in != NC_INT || ndims_in != 1 || 00449 dimids_in[0] != 0 || natts_in != 0) ERR; 00450 if (nc_get_vara_int(grpids_in[0], 0, start, count, data_in)) ERR; 00451 for (j=0; j<DIM1_LEN; j++) 00452 if (data_in[j] != data_out[j]) ERR; 00453 if (nc_close(ncid)) ERR; 00454 } 00455 00456 SUMMARIZE_ERR; 00457 00458 FINAL_RESULTS; 00459 }
|
1.4.4