|
|
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
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
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
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
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
00126 for (i=0; i<DIM_LEN; i++)
00127 free(data[i].p);
00128
00129 FINAL_RESULTS;
00130 }
|