1#include <nc_tests.h>
2#include "err_macros.h"
3#include <stdio.h>
4#include <stdlib.h>
5#include <netcdf.h>
6
7#define FILENAME "tst_bug324.nc"
8#define RANK_LAT 1
9#define RANK_H   1
10#define LEN_LAT  2
11#define LEN_H    2
12#define NAME_LAT "lat"
13#define NAME_H   "h"
14
15int
16main(int argc, char **argv)
17{/* Test bug fix for NCF-324, file that caused nc_close() failure for
18  * non-coordinate variable and dimension with the same name */
19
20    int ncid;
21    int lat_dim; /* dimension with associated coordinate variable */
22    int h_dim; /* dimension with no associated coordinate variable */
23
24    size_t lat_len = LEN_LAT;
25    size_t h_len = LEN_H;
26    int lat_id;
27    int h_id;
28
29#   define RANK_LAT 1
30#   define RANK_H 1
31    int lat_dims[RANK_LAT];
32    int h_dims[RANK_H];
33
34   printf("\n*** Testing fix for non-coord var bug.\n");
35   printf("*** creating bug test file %s...", FILENAME);
36
37    if (nc_create(FILENAMENC_CLOBBER|NC_NETCDF4|NC_CLASSIC_MODEL, &ncid)) ERR;
38    if (nc_def_dim(ncidNAME_LATlat_len, &lat_dim)) ERR;
39    if (nc_def_dim(ncidNAME_Hh_len, &h_dim)) ERR;
40    lat_dims[0] = lat_dim;
41    if (nc_def_var(ncidNAME_LATNC_DOUBLERANK_LATlat_dims, &lat_id)) ERR;
42    h_dims[0] = lat_dim;
43    if (nc_def_var(ncidNAME_HNC_DOUBLERANK_Hh_dims, &h_id)) ERR;
44    if (nc_enddef (ncid)) ERR;
45
46    {
47 double lat_data[LEN_LAT] = {((double)-45), ((double)45)} ;
48 size_t lat_startset[1] = {0} ;
49 size_t lat_countset[1] = {LEN_LAT};
50 if ( nc_put_vara(ncidlat_idlat_startsetlat_countsetlat_data) ) ERR;
51    }
52
53    {
54 double h_data[2] = {((double)5), ((double)6)} ;
55 size_t h_startset[1] = {0} ;
56 size_t h_countset[1] = {LEN_H};
57 if ( nc_put_vara(ncidh_idh_startseth_countseth_data) ) ERR;
58    }
59
60    /* Bug caused nc_close to fail with NC_EHDFERR (HDF Error) */
61    if (nc_close(ncid)) ERR;
62
63    /* Check file can be opened and read correctly */
64    {
65 int format;
66 int ndimsnvarsngattsxdimidnunlim;
67 nc_type lat_typeh_type;
68 int lat_ranklat_nattsh_rankh_natts;
69 if (nc_open(FILENAMENC_NOWRITE, &ncid)) ERR;
70 if ( nc_inq_format(ncid, &format) ) ERR;
71 if ( format != NC_FORMAT_NETCDF4_CLASSIC ) ERR;
72 if ( nc_inq(ncid, &ndims, &nvars, &ngatts, &xdimid) ) ERR;
73 if ( nc_inq_varid(ncidNAME_LAT, &lat_id) ) ERR;
74 if ( nc_inq_var(ncidlat_idNULL, &lat_type, &lat_ranklat_dims, &lat_natts) ) ERR;
75 if ( lat_type != NC_DOUBLE || lat_rank != RANK_LAT || lat_natts != 0 ) ERR;
76 if ( nc_inq_varid(ncidNAME_H, &h_id) ) ERR;
77 if ( nc_inq_var(ncidh_idNULL, &h_type, &h_rankh_dims, &h_natts) ) ERR;
78 if ( h_type != NC_DOUBLE || h_rank != RANK_H || h_natts != 0 ) ERR;
79 {
80     double lat_data[LEN_LAT];
81     size_t start[RANK_LAT] = {0} ;
82     size_t count[1] = {LEN_LAT};
83     if ( nc_get_vara(ncidlat_idstartcountlat_data) ) ERR;
84     if ( lat_data[0] != -45.0 || lat_data[1] != 45.0 ) ERR;
85 }
86 {
87     double h_data[LEN_H];
88     size_t start[RANK_H] = {0} ;
89     size_t count[1] = {LEN_H};
90     if ( nc_get_vara(ncidh_idstartcounth_data) ) ERR;
91     if ( h_data[0] != 5 || h_data[1] != 6 ) ERR;
92 }
93    }
94    if (nc_close(ncid)) ERR;
95
96   SUMMARIZE_ERR;
97   FINAL_RESULTS;
98}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed