ncdf4a13/libsrc4/tst_vl.c File Reference

#include <netcdf.h>
#include <nc_tests.h>

Include dependency graph for tst_vl.c:

Go to the source code of this file.

Defines

#define FILE_NAME   "tst_vl.nc"
#define DIM_LEN   3
#define VLEN_NAME   "vlen_name"
#define ATT_NAME   "att_name"
#define DIM_NAME   "dim"
#define VAR_NAME   "var"

Functions

int main (int argc, char **argv)


Define Documentation

#define ATT_NAME   "att_name"
 

Definition at line 16 of file tst_vl.c.

#define DIM_LEN   3
 

Definition at line 14 of file tst_vl.c.

#define DIM_NAME   "dim"
 

Definition at line 17 of file tst_vl.c.

#define FILE_NAME   "tst_vl.nc"
 

Definition at line 13 of file tst_vl.c.

#define VAR_NAME   "var"
 

Definition at line 18 of file tst_vl.c.

#define VLEN_NAME   "vlen_name"
 

Definition at line 15 of file tst_vl.c.

Referenced by main().


Function Documentation

int main int  argc,
char **  argv
 

Definition at line 26 of file tst_vl.c.

References ATT_NAME, DIM_LEN, DIM_NAME, ERR, FILE_NAME, FINAL_RESULTS, len, natts, nc_close, nc_create, nc_def_dim, nc_def_var, nc_def_vlen(), NC_EBADTYPE, NC_ENOMEM, nc_get_att, nc_get_var(), NC_GLOBAL, nc_inq, nc_inq_att, nc_inq_compound(), nc_inq_user_type(), nc_inq_var, nc_inq_vlen(), NC_INT, NC_MAX_NAME, NC_NETCDF4, NC_NOWRITE, nc_open, nc_put_att, nc_put_var(), ncid, ndims, nvars, SUMMARIZE_ERR, VAR_NAME, var_name, var_type, and VLEN_NAME.

00027 {
00028    int ncid, typeid;
00029    hvl_t data[DIM_LEN], data_in[DIM_LEN];
00030    size_t size_in, len_in;
00031    nc_type base_nc_type_in;
00032    char name_in[NC_MAX_NAME + 1];
00033    int *phoney, class_in;
00034    int i, j;
00035 
00036    printf("\n*** Testing netcdf-4 variable length type functions.\n");
00037 
00038    /* Create phoney data. */
00039    for (i=0; i<DIM_LEN; i++)
00040    {
00041       if (!(phoney = malloc(sizeof(int) * i+1)))
00042          return NC_ENOMEM;
00043       for (j=0; j<i+1; j++)
00044          phoney[j] = -99;
00045       data[i].p = phoney;
00046       data[i].len = i+1;
00047    }
00048 
00049    /*nc_set_log_level(5);*/
00050 
00051    printf("*** testing vlen (of ints) attribute...");
00052    {
00053       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00054       if (nc_def_vlen(ncid, "name1", NC_INT, &typeid)) ERR;
00055       if (nc_inq_vlen(ncid, typeid, name_in, &size_in, &base_nc_type_in)) ERR;
00056       if (base_nc_type_in != NC_INT || (size_in != sizeof(int) && strcmp(name_in, VLEN_NAME))) ERR;
00057       if (nc_inq_user_type(ncid, typeid, name_in, &size_in, &base_nc_type_in, NULL, &class_in)) ERR;
00058       if (base_nc_type_in != NC_INT || (size_in != sizeof(int) && strcmp(name_in, VLEN_NAME))) ERR;
00059       if (nc_inq_compound(ncid, typeid, name_in, &size_in, NULL) != NC_EBADTYPE) ERR;
00060       if (nc_put_att(ncid, NC_GLOBAL, ATT_NAME, typeid, DIM_LEN, data)) ERR;
00061       if (nc_close(ncid)) ERR;
00062 
00063       /* Check it out. */
00064       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00065       if (nc_get_att(ncid, NC_GLOBAL, ATT_NAME, data_in)) ERR;
00066       for (i=0; i<DIM_LEN; i++)
00067          for (j=0; j<data_in[i].len; j++)
00068             if (*((int *)data_in[i].p) != *((int *)data[i].p))
00069             {
00070                printf("*((int *)data_in[%d].p = %d (0x%x)\n", i, *((int *)data_in[i].p),
00071                       *((int *)data_in[i].p));
00072                ERR;
00073             }
00074       if (nc_inq_att(ncid, NC_GLOBAL, ATT_NAME, &typeid, &len_in)) ERR;
00075       if (len_in != DIM_LEN) ERR;
00076       if (nc_inq_vlen(ncid, typeid, name_in, &size_in, &base_nc_type_in)) ERR;
00077       if (base_nc_type_in != NC_INT || (size_in != 4 && strcmp(name_in, VLEN_NAME)))
00078       {
00079          printf("base_nc_type_in = %d size_in = %d name_in = %s\n", base_nc_type_in, 
00080                 (int)size_in, name_in);
00081          ERR;
00082       }
00083       if (nc_inq_user_type(ncid, typeid, name_in, &size_in, &base_nc_type_in, NULL, &class_in)) ERR;
00084       if (base_nc_type_in != NC_INT || (size_in != 4 && strcmp(name_in, VLEN_NAME))) ERR;
00085       if (nc_close(ncid)) ERR;
00086    }
00087 
00088    SUMMARIZE_ERR;
00089 
00090    printf("*** testing vlen (of ints) variable...");
00091    {
00092       int dimid, varid, dimids[] = {0};
00093       char var_name[NC_MAX_NAME+1];
00094       int nvars, natts, ndims, unlimdimid, dimids_var[1];
00095       nc_type var_type;
00096 
00097       if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00098       if (nc_def_vlen(ncid, "name1", NC_INT, &typeid)) ERR;
00099       if (nc_def_dim(ncid, DIM_NAME, DIM_LEN, &dimid)) ERR;
00100       if (nc_def_var(ncid, VAR_NAME, typeid, 1, dimids, &varid)) ERR;
00101       if (nc_put_var(ncid, varid, data)) ERR;
00102       if (nc_close(ncid)) ERR;
00103       
00104       /* Check it out. */
00105       if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
00106       if (nc_inq(ncid, &ndims, &nvars, &natts, &unlimdimid)) ERR;
00107       if (ndims != 1 || nvars != 1 || natts != 0 || unlimdimid != -1) ERR;
00108       if (nc_inq_var(ncid, 0, var_name, &var_type, &ndims, dimids_var, &natts)) ERR;
00109       if (ndims != 1 || strcmp(var_name, VAR_NAME) || 
00110           dimids_var[0] != dimids[0] || natts != 0) ERR;
00111       if (nc_get_var(ncid, 0, data_in)) ERR;
00112       for (i=0; i<DIM_LEN; i++)
00113          for (j=0; j<data_in[i].len; j++)
00114             if (*((int *)data_in[i].p) != *((int *)data[i].p))
00115             {
00116                printf("*((int *)data_in[%d].p = %d (0x%x)\n", i, *((int *)data_in[i].p),
00117                       *((int *)data_in[i].p));
00118                ERR;
00119             }
00120       if (nc_close(ncid)) ERR;
00121    }
00122 
00123    SUMMARIZE_ERR;
00124 
00125    /* Free the memory used in our phoney data. */
00126    for (i=0; i<DIM_LEN; i++)
00127       free(data[i].p);
00128 
00129    FINAL_RESULTS;
00130 }


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