1/* This is part of the netCDF package.
2   Copyright 2010 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test dim rename that is causing problems with v2 API.
6*/
7
8#include <nc_tests.h>
9#include "err_macros.h"
10
11#define FILE_NAME "tst_rename.nc"
12
13void
14check_err(const int stat, const int line, const char *file) {
15    if (stat != NC_NOERR) {
16        (void)fprintf(stderr,"line %d of %s: %s\n", linefilenc_strerror(stat));
17        fflush(stderr);
18        exit(1);
19    }
20}
21
22int
23create_file()
24{
25   int  stat;  /* return status */
26   int  ncid;  /* netCDF id */
27
28   /* dimension ids */
29   int ii_dim;
30   int jj_dim;
31   int kk_dim;
32   int i1_dim;
33   int i2_dim;
34   int i3_dim;
35   int rec_dim;
36   int ll_dim;
37   int mm_dim;
38   int nn_dim;
39
40   /* dimension lengths */
41   size_t ii_len = 4;
42   size_t jj_len = 3;
43   size_t kk_len = 3;
44   size_t i1_len = 5;
45   size_t i2_len = 3;
46   size_t i3_len = 7;
47   size_t rec_len = NC_UNLIMITED;
48   size_t ll_len = 3;
49   size_t mm_len = 1;
50   size_t nn_len = 1;
51
52   /* variable ids */
53   int aa_id;
54   int bb_id;
55   int cc_id;
56   int cd_id;
57   int ce_id;
58   int dd_id;
59
60   /* rank (number of dimensions) for each variable */
61#   define RANK_aa 1
62#   define RANK_bb 2
63#   define RANK_cc 1
64#   define RANK_cd 2
65#   define RANK_ce 3
66#   define RANK_dd 1
67
68   /* variable shapes */
69   int aa_dims[RANK_aa];
70   int bb_dims[RANK_bb];
71   int cc_dims[RANK_cc];
72   int cd_dims[RANK_cd];
73   int ce_dims[RANK_ce];
74   int dd_dims[RANK_dd];
75
76   /* enter define mode */
77   stat = nc_create(FILE_NAMENC_CLOBBER, &ncid);
78   check_err(stat,__LINE__,__FILE__);
79
80   /* define dimensions */
81   stat = nc_def_dim(ncid, "ii", ii_len, &ii_dim);
82   check_err(stat,__LINE__,__FILE__);
83   stat = nc_def_dim(ncid, "jj", jj_len, &jj_dim);
84   check_err(stat,__LINE__,__FILE__);
85   stat = nc_def_dim(ncid, "kk", kk_len, &kk_dim);
86   check_err(stat,__LINE__,__FILE__);
87   stat = nc_def_dim(ncid, "i1", i1_len, &i1_dim);
88   check_err(stat,__LINE__,__FILE__);
89   stat = nc_def_dim(ncid, "i2", i2_len, &i2_dim);
90   check_err(stat,__LINE__,__FILE__);
91   stat = nc_def_dim(ncid, "i3", i3_len, &i3_dim);
92   check_err(stat,__LINE__,__FILE__);
93   stat = nc_def_dim(ncid, "rec", rec_len, &rec_dim);
94   check_err(stat,__LINE__,__FILE__);
95   stat = nc_def_dim(ncid, "ll", ll_len, &ll_dim);
96   check_err(stat,__LINE__,__FILE__);
97   stat = nc_def_dim(ncid, "mm", mm_len, &mm_dim);
98   check_err(stat,__LINE__,__FILE__);
99   stat = nc_def_dim(ncid, "nn", nn_len, &nn_dim);
100   check_err(stat,__LINE__,__FILE__);
101
102   /* define variables */
103
104   aa_dims[0] = ii_dim;
105   stat = nc_def_var(ncid, "aa", NC_INTRANK_aaaa_dims, &aa_id);
106   check_err(stat,__LINE__,__FILE__);
107
108   bb_dims[0] = kk_dim;
109   bb_dims[1] = jj_dim;
110   stat = nc_def_var(ncid, "bb", NC_INTRANK_bbbb_dims, &bb_id);
111   check_err(stat,__LINE__,__FILE__);
112
113   cc_dims[0] = rec_dim;
114   stat = nc_def_var(ncid, "cc", NC_INTRANK_cccc_dims, &cc_id);
115   check_err(stat,__LINE__,__FILE__);
116
117   cd_dims[0] = rec_dim;
118   cd_dims[1] = i2_dim;
119   stat = nc_def_var(ncid, "cd", NC_SHORTRANK_cdcd_dims, &cd_id);
120   check_err(stat,__LINE__,__FILE__);
121
122   ce_dims[0] = rec_dim;
123   ce_dims[1] = i2_dim;
124   ce_dims[2] = i3_dim;
125   stat = nc_def_var(ncid, "ce", NC_FLOATRANK_cece_dims, &ce_id);
126   check_err(stat,__LINE__,__FILE__);
127
128   dd_dims[0] = ll_dim;
129   stat = nc_def_var(ncid, "dd", NC_SHORTRANK_dddd_dims, &dd_id);
130   check_err(stat,__LINE__,__FILE__);
131
132   /* assign global attributes */
133   { /* title */
134      stat = nc_put_att_text(ncidNC_GLOBAL, "title", 11, "test netcdf");
135      check_err(stat,__LINE__,__FILE__);
136   }
137
138
139   /* assign per-variable attributes */
140   { /* units */
141      stat = nc_put_att_text(ncidaa_id, "units", 8, "furlongs");
142      check_err(stat,__LINE__,__FILE__);
143   }
144   { /* valid_range */
145      static const float bb_valid_range_att[2] = {0, 100} ;
146      stat = nc_put_att_float(ncidbb_id, "valid_range", NC_FLOAT, 2, bb_valid_range_att);
147      check_err(stat,__LINE__,__FILE__);
148   }
149   { /* units */
150      stat = nc_put_att_text(ncidcc_id, "units", 5, "moles");
151      check_err(stat,__LINE__,__FILE__);
152   }
153   { /* units */
154      stat = nc_put_att_text(ncidcd_id, "units", 5, "moles");
155      check_err(stat,__LINE__,__FILE__);
156   }
157   { /* units */
158      stat = nc_put_att_text(ncidce_id, "units", 5, "moles");
159      check_err(stat,__LINE__,__FILE__);
160   }
161   { /* fill_value */
162      static const short dd_fill_value_att[1] = {-999} ;
163      stat = nc_put_att_short(nciddd_id, "fill_value", NC_SHORT, 1, dd_fill_value_att);
164      check_err(stat,__LINE__,__FILE__);
165   }
166
167
168   /* leave define mode */
169   stat = nc_enddef (ncid);
170   check_err(stat,__LINE__,__FILE__);
171
172   /* assign variable data */
173   {
174      int aa_data[4] = {-2147483647, -2147483647, -2147483647, -2147483647} ;
175      size_t aa_startset[1] = {0} ;
176      size_t aa_countset[1] = {4} ;
177      stat = nc_put_vara(ncidaa_idaa_startsetaa_countsetaa_data);
178      check_err(stat,__LINE__,__FILE__);
179   }
180
181   {
182      int bb_data[9] = {-2147483647, -2147483647, -2147483647, -2147483647, -2147483647, -2147483647, -2147483647, -2147483647, -2147483647} ;
183      size_t bb_startset[2] = {0, 0} ;
184      size_t bb_countset[2] = {3, 3} ;
185      stat = nc_put_vara(ncidbb_idbb_startsetbb_countsetbb_data);
186      check_err(stat,__LINE__,__FILE__);
187   }
188
189   {
190      short dd_data[3] = {1, 2, -32767} ;
191      size_t dd_startset[1] = {0} ;
192      size_t dd_countset[1] = {3} ;
193      stat = nc_put_vara(nciddd_iddd_startsetdd_countsetdd_data);
194      check_err(stat,__LINE__,__FILE__);
195   }
196
197
198   stat = nc_close(ncid);
199   check_err(stat,__LINE__,__FILE__);
200   return 0;
201}
202
203int
204main(int argc, char **argv)
205{
206   printf("\n*** Testing v3/v4 API versions of some v2 tests.\n");
207   printf("*** testing simple dim rename...");
208   {
209#define PP1 "pp"
210#define PP1_SIZE 7
211#define P1_NAME "p"
212
213      int ncidpp_dimiddimid_in;
214
215      /* Create a file with one dimension. */
216      if (nc_create(FILE_NAMENC_CLOBBER, &ncid)) ERR;
217      if (nc_def_dim(ncidPP1PP1_SIZE, &pp_dimid)) ERR;
218
219      /* Renaming to shorter name is possible in data mode... */
220      if (nc_enddef(ncid)) ERR;
221      if (nc_rename_dim(ncidpp_dimidP1_NAME)) ERR;
222      if (nc_inq_dimid(ncidP1_NAME, &dimid_in)) ERR;
223      if (dimid_in != pp_dimidERR;
224      if (nc_close(ncid)) ERR;
225   }
226   SUMMARIZE_ERR;
227   printf("*** testing dim rename from nctest...");
228   {
229#define PP "pp"
230#define PP_SIZE 7
231#define QQ "qq"
232#define QQ_SIZE 10
233#define NEW_NAME "new_name"
234#define ANOTHER_NAME "another_name"
235#define P_NAME "p"
236
237      int ncidpp_dimidqq_dimiddimid_in;
238      char name_in[NC_MAX_NAME + 1];
239
240      /* Create the same file as nctest.c does. */
241      if (create_file()) ERR;
242
243      /* Open it and test renames of dimensions. */
244      if (nc_open(FILE_NAMENC_WRITE, &ncid)) ERR;
245      if (nc_redef(ncid)) ERR;
246      if (nc_def_dim(ncidPPPP_SIZE, &pp_dimid)) ERR;
247      if (nc_def_dim(ncidQQQQ_SIZE, &qq_dimid)) ERR;
248      if (nc_rename_dim(ncidpp_dimidNEW_NAME)) ERR;
249      if (nc_inq_dimname(ncidpp_dimidname_in)) ERR;
250      if (strcmp(NEW_NAMEname_in)) ERR;
251      if (nc_rename_dim(ncidpp_dimidQQ) != NC_ENAMEINUSEERR;
252      if (nc_rename_dim(ncid, -1, ANOTHER_NAME) != NC_EBADDIMERR;
253      if (nc_rename_dim(ncid, 12, ANOTHER_NAME) != NC_EBADDIMERR;
254      if (nc_enddef(ncid)) ERR;
255      if (nc_rename_dim(ncidpp_dimidP_NAME)) ERR;
256      if (nc_inq_dimid(ncidP_NAME, &dimid_in)) ERR;
257      if (dimid_in != pp_dimidERR;
258      if (nc_inq_dimid(ncidP_NAMENULL)) ERR;
259      if (nc_close(ncid)) ERR;
260   }
261   SUMMARIZE_ERR;
262   FINAL_RESULTS;
263}


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