ncdf4a13/libsrc4/tst_grps.c File Reference

#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)


Define Documentation

#define DIM1_LEN   3
 

Definition at line 15 of file tst_grps.c.

#define DIM1_NAME   "kingdom"
 

Definition at line 14 of file tst_grps.c.

#define DIM2_NAME   "year"
 

Definition at line 16 of file tst_grps.c.

#define DYNASTY   "Tudor"
 

Definition at line 18 of file tst_grps.c.

Referenced by main().

#define FILE_NAME   "tst_grps.nc"
 

Definition at line 13 of file tst_grps.c.

#define HENRY_VII   "Henry_VII"
 

Definition at line 19 of file tst_grps.c.

Referenced by main().

#define JAMES_V_OF_SCOTLAND   "James_V_of_Scotland"
 

Definition at line 21 of file tst_grps.c.

Referenced by main().

#define JAMES_VI_OF_SCOTLAND_AND_I_OF_ENGLAND   "James_VI_of_Scotland_and_I_of_England"
 

Definition at line 23 of file tst_grps.c.

Referenced by main().

#define MARGARET   "Margaret"
 

Definition at line 20 of file tst_grps.c.

Referenced by main().

#define MARY_I_OF_SCOTLAND   "Mary_I_of_Scotland"
 

Definition at line 22 of file tst_grps.c.

Referenced by main().

#define MAX_SIBLING_GROUPS   10
 

Definition at line 24 of file tst_grps.c.

Referenced by main().

#define NUM_CASTLES_NAME   "Number_of_Castles"
 

Definition at line 25 of file tst_grps.c.

Referenced by main().

#define VAR1_NAME   "Number_of_Beheadings_in_Family"
 

Definition at line 17 of file tst_grps.c.


Function Documentation

int main int  argc,
char **  argv
 

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 }


Generated on Thu Mar 16 18:11:43 2006 for nco by  doxygen 1.4.4