00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <netcdf.h>
00010 #include <nc4internal.h>
00011 #include <nc_tests.h>
00012 #include <signal.h>
00013
00014 #define FILE_NAME "tst_atts.nc"
00015 #define VAR1_NAME "Horace_Rumpole"
00016 #define VAR2_NAME "Claude_Erskine-Brown"
00017 #define VAR3_NAME "Phillida_Erskine-Brown_Q.C."
00018 #define DIM1_NAME "Old_Bailey_case_number"
00019 #define DIM1_LEN 10
00020 #define DIM2_NAME "occupancy_in_chambers"
00021 #define DIM2_LEN 15
00022 #define ATT_INT_NAME "Old_Bailey_Room_Numbers"
00023 #define ATT_DOUBLE_NAME "Equity_Court_Canteen_Charges"
00024 #define ATT_SHORT_NAME "Ecclesiastical_Court_Appearences"
00025 #define ATT_TEXT_NAME "Speech_to_Jury"
00026 #define ATT_TEXT_NAME2 "Speech_to_She_Who_Must_be_Obeyed"
00027 #define ATT_UCHAR_NAME "Number_of_current_briefs"
00028 #define ATT_SCHAR_NAME "Slate_totals_at_Pomeroys_Wine_Bar"
00029 #define ATT_USHORT_NAME "brief_no"
00030 #define ATT_UINT_NAME "Orders_from_SWMBO"
00031 #define ATT_INT64_NAME "judges_golf_score"
00032 #define ATT_UINT64_NAME "Number_of_drinks_in_career_to_date"
00033
00034
00035
00036
00037 #define ATT_FLOAT_NAME "Average_Nanoseconds_for_Lose_Win_or_Appeal"
00038 #define ATT_LEN 3
00039
00040 char speech[] = "Once more unto the breach, dear friends, once more;\n\
00041 Or close the wall up with our English dead.\n\
00042 In peace there's nothing so becomes a man\n\
00043 As modest stillness and humility:\n\
00044 But when the blast of war blows in our ears,\n\
00045 Then imitate the action of the tiger;\n\
00046 Stiffen the sinews, summon up the blood,\n\
00047 Disguise fair nature with hard-favour'd rage;\n\
00048 Then lend the eye a terrible aspect;\n\
00049 Let pry through the portage of the head\n\
00050 Like the brass cannon; let the brow o'erwhelm it\n\
00051 As fearfully as doth a galled rock\n\
00052 O'erhang and jutty his confounded base,\n\
00053 Swill'd with the wild and wasteful ocean.\n\
00054 Now set the teeth and stretch the nostril wide,\n\
00055 Hold hard the breath and bend up every spirit\n\
00056 To his full height. On, on, you noblest English.\n\
00057 Whose blood is fet from fathers of war-proof!\n\
00058 Fathers that, like so many Alexanders,\n\
00059 Have in these parts from morn till even fought\n\
00060 And sheathed their swords for lack of argument:\n\
00061 Dishonour not your mothers; now attest\n\
00062 That those whom you call'd fathers did beget you.\n\
00063 Be copy now to men of grosser blood,\n\
00064 And teach them how to war. And you, good yeoman,\n\
00065 Whose limbs were made in England, show us here\n\
00066 The mettle of your pasture; let us swear\n\
00067 That you are worth your breeding; which I doubt not;\n\
00068 For there is none of you so mean and base,\n\
00069 That hath not noble lustre in your eyes.\n\
00070 I see you stand like greyhounds in the slips,\n\
00071 Straining upon the start. The game's afoot:\n\
00072 Follow your spirit, and upon this charge\n\
00073 Cry 'God for Harry, England, and Saint George!'";
00074
00075 int
00076 main(int argc, char **argv)
00077 {
00078 int ncid, varid, dimids[2];
00079 nc_type att_type;
00080 size_t att_len;
00081 int i, v;
00082
00083 char *speech_in;
00084 signed char schar_in[ATT_LEN], schar_out[ATT_LEN] = {NC_MIN_BYTE, 1, NC_MAX_BYTE};
00085 unsigned char uchar_in[ATT_LEN], uchar_out[ATT_LEN] = {0, 128, NC_MAX_CHAR};
00086 short short_in[ATT_LEN], short_out[ATT_LEN] = {NC_MIN_SHORT, -128, NC_MAX_SHORT};
00087
00088 int int_in[ATT_LEN], int_out[ATT_LEN] = {-100000, 128, 100000};
00089 float float_in[ATT_LEN], float_out[ATT_LEN] = {-.1, 9999.99, 100.001};
00090 double double_in[ATT_LEN], double_out[ATT_LEN] = {0.02, .1128, 1090.1};
00091 unsigned short ushort_in[ATT_LEN], ushort_out[ATT_LEN] = {0, 128, NC_MAX_USHORT};
00092 unsigned int uint_in[ATT_LEN], uint_out[ATT_LEN] = {0, 128, NC_MAX_UINT};
00093 unsigned long long uint64_in[ATT_LEN], uint64_out[ATT_LEN] = {0, 128, NC_MAX_UINT64};
00094 long long int64_in[ATT_LEN], int64_out[ATT_LEN] = {NC_MIN_INT64, 128, NC_MAX_INT64};
00095
00096 (void) signal(SIGFPE, SIG_IGN);
00097
00098 printf("\n*** Testing netcdf-4 attribute functions.\n");
00099 printf("*** testing simple global atts...");
00100
00101
00102
00103
00104 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00105 if (nc_put_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, strlen(speech)+1, speech)) ERR;
00106 if (nc_put_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, NC_BYTE, ATT_LEN, schar_out)) ERR;
00107 if (nc_put_att_uchar(ncid, NC_GLOBAL, ATT_UCHAR_NAME, NC_UBYTE, ATT_LEN, uchar_out)) ERR;
00108 if (nc_put_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, NC_SHORT, ATT_LEN, short_out)) ERR;
00109 if (nc_put_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, NC_INT, ATT_LEN, int_out)) ERR;
00110 if (nc_put_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, NC_FLOAT, ATT_LEN, float_out)) ERR;
00111 if (nc_put_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, NC_DOUBLE, ATT_LEN, double_out)) ERR;
00112 if (nc_put_att_ushort(ncid, NC_GLOBAL, ATT_USHORT_NAME, NC_USHORT, ATT_LEN, ushort_out)) ERR;
00113 if (nc_put_att_uint(ncid, NC_GLOBAL, ATT_UINT_NAME, NC_UINT, ATT_LEN, uint_out)) ERR;
00114 if (nc_put_att_longlong(ncid, NC_GLOBAL, ATT_INT64_NAME, NC_INT64, ATT_LEN, int64_out)) ERR;
00115 if (nc_put_att_ulonglong(ncid, NC_GLOBAL, ATT_UINT64_NAME, NC_UINT64, ATT_LEN, uint64_out)) ERR;
00116 if (nc_close(ncid)) ERR;
00117
00118
00119 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00120
00121 if (nc_inq_att(ncid, NC_GLOBAL, ATT_TEXT_NAME, &att_type, &att_len))
00122 ERR;
00123 if (att_type != NC_CHAR || att_len != strlen(speech) + 1) ERR;
00124 if (!(speech_in = malloc(att_len + 1))) ERR;
00125 if (nc_get_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, speech_in)) ERR;
00126 if (strcmp(speech, speech_in)) ERR;
00127 free(speech_in);
00128
00129 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, schar_in)) ERR;
00130 for (i = 0; i < ATT_LEN; i++)
00131 if (schar_in[i] != schar_out[i]) ERR;
00132 if (nc_get_att_uchar(ncid, NC_GLOBAL, ATT_UCHAR_NAME, uchar_in)) ERR;
00133 for (i = 0; i < ATT_LEN; i++)
00134 if (uchar_in[i] != uchar_out[i]) ERR;
00135 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, short_in)) ERR;
00136 for (i = 0; i < ATT_LEN; i++)
00137 if (short_in[i] != short_out[i]) ERR;
00138 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, int_in)) ERR;
00139 for (i = 0; i < ATT_LEN; i++)
00140 if (int_in[i] != int_out[i]) ERR;
00141 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, float_in)) ERR;
00142 for (i = 0; i < ATT_LEN; i++)
00143 if (float_in[i] != float_out[i]) ERR;
00144 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, double_in)) ERR;
00145 for (i = 0; i < ATT_LEN; i++)
00146 if (double_in[i] != double_out[i]) ERR;
00147 if (nc_get_att_ushort(ncid, NC_GLOBAL, ATT_USHORT_NAME, ushort_in)) ERR;
00148 for (i = 0; i < ATT_LEN; i++)
00149 if (ushort_in[i] != ushort_out[i]) ERR;
00150 if (nc_get_att_uint(ncid, NC_GLOBAL, ATT_UINT_NAME, uint_in)) ERR;
00151 for (i = 0; i < ATT_LEN; i++)
00152 if (uint_in[i] != uint_out[i]) ERR;
00153 if (nc_get_att_longlong(ncid, NC_GLOBAL, ATT_INT64_NAME, int64_in)) ERR;
00154 for (i = 0; i < ATT_LEN; i++)
00155 if (int64_in[i] != int64_out[i]) ERR;
00156 if (nc_get_att_ulonglong(ncid, NC_GLOBAL, ATT_UINT64_NAME, uint64_in)) ERR;
00157 for (i = 0; i < ATT_LEN; i++)
00158 if (uint64_in[i] != uint64_out[i]) ERR;
00159 if (nc_close(ncid)) ERR;
00160
00161 SUMMARIZE_ERR;
00162 printf("*** testing attribute data type conversions...");
00163
00164
00165 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00166
00167
00168
00169 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_TEXT_NAME, short_in) != NC_ECHAR) ERR;
00170 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_TEXT_NAME, int_in) != NC_ECHAR) ERR;
00171 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_TEXT_NAME, float_in) != NC_ECHAR) ERR;
00172 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_TEXT_NAME, double_in) != NC_ECHAR) ERR;
00173
00174 if (nc_get_att_ushort(ncid, NC_GLOBAL, ATT_TEXT_NAME, ushort_in) != NC_ECHAR) ERR;
00175 if (nc_get_att_uint(ncid, NC_GLOBAL, ATT_TEXT_NAME, uint_in) != NC_ECHAR) ERR;
00176 if (nc_get_att_longlong(ncid, NC_GLOBAL, ATT_TEXT_NAME, int64_in) != NC_ECHAR) ERR;
00177 if (nc_get_att_ulonglong(ncid, NC_GLOBAL, ATT_TEXT_NAME, uint64_in) != NC_ECHAR) ERR;
00178
00179
00180 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_SCHAR_NAME, double_in)) ERR;
00181 for (i = 0; i < ATT_LEN; i++)
00182 if (double_in[i] != schar_out[i]) ERR;
00183 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_SHORT_NAME, double_in)) ERR;
00184 for (i = 0; i < ATT_LEN; i++)
00185 if (double_in[i] != short_out[i]) ERR;
00186 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_INT_NAME, double_in)) ERR;
00187 for (i = 0; i < ATT_LEN; i++)
00188 if (double_in[i] != int_out[i]) ERR;
00189 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_FLOAT_NAME, double_in)) ERR;
00190 for (i = 0; i < ATT_LEN; i++)
00191 if (double_in[i] != float_out[i]) ERR;
00192
00193 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_SCHAR_NAME, float_in)) ERR;
00194 for (i = 0; i < ATT_LEN; i++)
00195 if (float_in[i] != schar_out[i]) ERR;
00196 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_SHORT_NAME, float_in)) ERR;
00197 for (i = 0; i < ATT_LEN; i++)
00198 if (float_in[i] != short_out[i]) ERR;
00199 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_INT_NAME, float_in)) ERR;
00200 for (i = 0; i < ATT_LEN; i++)
00201 if (float_in[i] != (float)int_out[i]) ERR;
00202 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, float_in)) ERR;
00203 for (i = 0; i < ATT_LEN; i++)
00204 if (float_in[i] != (float)double_out[i]) ERR;
00205
00206 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_SCHAR_NAME, int_in)) ERR;
00207 for (i = 0; i < ATT_LEN; i++)
00208 if (int_in[i] != schar_out[i]) ERR;
00209 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_SHORT_NAME, int_in)) ERR;
00210 for (i = 0; i < ATT_LEN; i++)
00211 if (int_in[i] != short_out[i]) ERR;
00212 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_FLOAT_NAME, int_in)) ERR;
00213 for (i = 0; i < ATT_LEN; i++)
00214 if (int_in[i] != (int)float_out[i]) ERR;
00215 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, int_in)) ERR;
00216 for (i = 0; i < ATT_LEN; i++)
00217 if (int_in[i] != (int)double_out[i]) ERR;
00218
00219 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_SCHAR_NAME, short_in)) ERR;
00220 for (i = 0; i < ATT_LEN; i++)
00221 if (short_in[i] != schar_out[i]) ERR;
00222 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_INT_NAME, short_in) != NC_ERANGE) ERR;
00223 for (i = 0; i < ATT_LEN; i++)
00224 if (short_in[i] != (short)int_out[i]) ERR;
00225 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_FLOAT_NAME, short_in)) ERR;
00226 for (i = 0; i < ATT_LEN; i++)
00227 if (short_in[i] != (short)float_out[i]) ERR;
00228 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, short_in)) ERR;
00229 for (i = 0; i < ATT_LEN; i++)
00230 if (short_in[i] != (short)double_out[i]) ERR;
00231
00232
00233 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SHORT_NAME, schar_in) != NC_ERANGE) ERR;
00234 for (i = 0; i < ATT_LEN; i++)
00235 if (schar_in[i] != (signed char)short_out[i]) ERR;
00236 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_INT_NAME, schar_in) != NC_ERANGE) ERR;
00237 for (i = 0; i < ATT_LEN; i++)
00238 if (schar_in[i] != (signed char)int_out[i]) ERR;
00239 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_FLOAT_NAME, schar_in) != NC_ERANGE) ERR;
00240 for (i = 0; i < ATT_LEN; i++)
00241 if (schar_in[i] != (signed char)float_out[i]) ERR;
00242 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, schar_in) != NC_ERANGE) ERR;
00243 for (i = 0; i < ATT_LEN; i++)
00244 if (schar_in[i] != (signed char)double_out[i]) ERR;
00245 if (nc_close(ncid)) ERR;
00246
00247 SUMMARIZE_ERR;
00248 printf("*** testing simple variable atts...");
00249
00250
00251
00252 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00253 if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR;
00254 if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR;
00255 if (nc_def_var(ncid, VAR1_NAME, NC_INT, 2, dimids, &varid)) ERR;
00256 if (nc_put_att_text(ncid, varid, ATT_TEXT_NAME, strlen(speech)+1, speech)) ERR;
00257 if (nc_put_att_schar(ncid, varid, ATT_SCHAR_NAME, NC_BYTE, ATT_LEN, schar_out)) ERR;
00258 if (nc_put_att_short(ncid, varid, ATT_SHORT_NAME, NC_SHORT, 3, short_out)) ERR;
00259 if (nc_put_att_int(ncid, varid, ATT_INT_NAME, NC_INT, 3, int_out)) ERR;
00260 if (nc_put_att_float(ncid, varid, ATT_FLOAT_NAME, NC_FLOAT, 3, float_out)) ERR;
00261 if (nc_put_att_double(ncid, varid, ATT_DOUBLE_NAME, NC_DOUBLE, 3, double_out)) ERR;
00262 if (nc_def_var(ncid, VAR2_NAME, NC_UINT, 2, dimids, &varid)) ERR;
00263 if (nc_put_att_text(ncid, varid, ATT_TEXT_NAME, strlen(speech)+1, speech)) ERR;
00264 if (nc_put_att_schar(ncid, varid, ATT_SCHAR_NAME, NC_BYTE, ATT_LEN, schar_out)) ERR;
00265 if (nc_put_att_short(ncid, varid, ATT_SHORT_NAME, NC_SHORT, 3, short_out)) ERR;
00266 if (nc_put_att_int(ncid, varid, ATT_INT_NAME, NC_INT, 3, int_out)) ERR;
00267 if (nc_put_att_float(ncid, varid, ATT_FLOAT_NAME, NC_FLOAT, 3, float_out)) ERR;
00268 if (nc_put_att_double(ncid, varid, ATT_DOUBLE_NAME, NC_DOUBLE, 3, double_out)) ERR;
00269 if (nc_close(ncid)) ERR;
00270
00271
00272 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00273 for (v=0; v<2; v++)
00274 {
00275 if (nc_inq_att(ncid, v, ATT_TEXT_NAME, &att_type, &att_len)) ERR;
00276 if (att_type != NC_CHAR || att_len != strlen(speech) + 1) ERR;
00277 if (!(speech_in = malloc(att_len + 1))) ERR;
00278 if (nc_get_att_text(ncid, v, ATT_TEXT_NAME, speech_in)) ERR;
00279 if (strcmp(speech, speech_in)) ERR;
00280 free(speech_in);
00281 if (nc_get_att_schar(ncid, v, ATT_SCHAR_NAME, schar_in)) ERR;
00282 for (i = 0; i < ATT_LEN; i++)
00283 if (schar_in[i] != schar_out[i]) ERR;
00284 if (nc_get_att_short(ncid, v, ATT_SHORT_NAME, short_in)) ERR;
00285 for (i = 0; i < ATT_LEN; i++)
00286 if (short_in[i] != short_out[i]) ERR;
00287 if (nc_get_att_int(ncid, v, ATT_INT_NAME, int_in)) ERR;
00288 for (i = 0; i < ATT_LEN; i++)
00289 if (int_in[i] != int_out[i]) ERR;
00290 if (nc_get_att_float(ncid, v, ATT_FLOAT_NAME, float_in)) ERR;
00291 for (i = 0; i < ATT_LEN; i++)
00292 if (float_in[i] != float_out[i]) ERR;
00293 if (nc_get_att_double(ncid, v, ATT_DOUBLE_NAME, double_in)) ERR;
00294 for (i = 0; i < ATT_LEN; i++)
00295 if (double_in[i] != double_out[i]) ERR;
00296 }
00297 if (nc_close(ncid)) ERR;
00298
00299 SUMMARIZE_ERR;
00300 printf("*** testing zero-length attributes...");
00301
00302
00303 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00304 if (nc_put_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, 0, NULL)) ERR;
00305 if (nc_put_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, NC_BYTE, 0, NULL)) ERR;
00306
00307 if (nc_put_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, NC_SHORT, 0, NULL)) ERR;
00308 if (nc_put_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, NC_INT, 0, NULL)) ERR;
00309 if (nc_put_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, NC_FLOAT, 0, NULL)) ERR;
00310 if (nc_put_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, NC_DOUBLE, 0, NULL)) ERR;
00311 if (nc_close(ncid)) ERR;
00312
00313
00314 {
00315 size_t len;
00316 nc_type xtype;
00317
00318 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00319 if (nc_get_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, NULL)) ERR;
00320 if (nc_inq_att(ncid, NC_GLOBAL, ATT_TEXT_NAME, &xtype, &len)) ERR;
00321 if (len || xtype != NC_CHAR) ERR;
00322 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, schar_in)) ERR;
00323 if (nc_inq_att(ncid, NC_GLOBAL, ATT_SCHAR_NAME, &xtype, &len)) ERR;
00324 if (len || xtype != NC_BYTE) ERR;
00325 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, short_in)) ERR;
00326 if (nc_inq_att(ncid, NC_GLOBAL, ATT_SHORT_NAME, &xtype, &len)) ERR;
00327 if (len || xtype != NC_SHORT) ERR;
00328 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, int_in)) ERR;
00329 if (nc_inq_att(ncid, NC_GLOBAL, ATT_INT_NAME, &xtype, &len)) ERR;
00330 if (len || xtype != NC_INT) ERR;
00331 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, float_in)) ERR;
00332 if (nc_inq_att(ncid, NC_GLOBAL, ATT_FLOAT_NAME, &xtype, &len)) ERR;
00333 if (len || xtype != NC_FLOAT) ERR;
00334 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, double_in)) ERR;
00335 if (nc_inq_att(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, &xtype, &len)) ERR;
00336 if (len || xtype != NC_DOUBLE) ERR;
00337
00338 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, schar_in)) ERR;
00339 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_FLOAT_NAME, schar_in)) ERR;
00340 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_INT_NAME, schar_in)) ERR;
00341 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SHORT_NAME, schar_in)) ERR;
00342 if (nc_close(ncid)) ERR;
00343 }
00344
00345 SUMMARIZE_ERR;
00346 printf("*** testing zero-length attributes and redef...");
00347
00348
00349 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00350 if (nc_enddef(ncid)) ERR;
00351 if (nc_redef(ncid)) ERR;
00352 if (nc_put_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, 0, NULL)) ERR;
00353 if (nc_put_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, NC_BYTE, 0, NULL)) ERR;
00354
00355 if (nc_put_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, NC_SHORT, 0, NULL)) ERR;
00356 if (nc_put_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, NC_INT, 0, NULL)) ERR;
00357 if (nc_put_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, NC_FLOAT, 0, NULL)) ERR;
00358 if (nc_put_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, NC_DOUBLE, 0, NULL)) ERR;
00359 if (nc_close(ncid)) ERR;
00360
00361
00362
00363 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00364 if (nc_get_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, NULL)) ERR;
00365 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SCHAR_NAME, schar_in)) ERR;
00366 if (nc_get_att_short(ncid, NC_GLOBAL, ATT_SHORT_NAME, short_in)) ERR;
00367 if (nc_get_att_int(ncid, NC_GLOBAL, ATT_INT_NAME, int_in)) ERR;
00368 if (nc_get_att_float(ncid, NC_GLOBAL, ATT_FLOAT_NAME, float_in)) ERR;
00369 if (nc_get_att_double(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, double_in)) ERR;
00370
00371 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_DOUBLE_NAME, schar_in)) ERR;
00372 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_FLOAT_NAME, schar_in)) ERR;
00373 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_INT_NAME, schar_in)) ERR;
00374 if (nc_get_att_schar(ncid, NC_GLOBAL, ATT_SHORT_NAME, schar_in)) ERR;
00375 if (nc_close(ncid)) ERR;
00376
00377 SUMMARIZE_ERR;
00378
00379 printf("*** testing attribute deletes and renames...");
00380
00381 {
00382 char name_in[NC_MAX_NAME + 1];
00383 int attid_in, natts_in;
00384
00385
00386 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00387 if (nc_put_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, strlen(speech)+1,
00388 speech)) ERR;
00389 if (nc_close(ncid)) ERR;
00390
00391
00392 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00393 if (nc_inq_attid(ncid, NC_GLOBAL, ATT_TEXT_NAME, &attid_in)) ERR;
00394 if (attid_in != 0) ERR;
00395 if (nc_inq_attname(ncid, NC_GLOBAL, attid_in, name_in)) ERR;
00396 if (strcmp(name_in, ATT_TEXT_NAME)) ERR;
00397 if (nc_rename_att(ncid, NC_GLOBAL, ATT_TEXT_NAME, ATT_TEXT_NAME2)) ERR;
00398 if (nc_inq_attname(ncid, NC_GLOBAL, attid_in, name_in)) ERR;
00399 if (strcmp(name_in, ATT_TEXT_NAME2)) ERR;
00400 if (nc_close(ncid)) ERR;
00401
00402 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00403 if (nc_inq_att(ncid, NC_GLOBAL, ATT_TEXT_NAME2, &att_type, &att_len)) ERR;
00404 if (att_type != NC_CHAR || att_len != strlen(speech) + 1) ERR;
00405 if (!(speech_in = malloc(att_len + 1))) ERR;
00406 if (nc_get_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME2, speech_in)) ERR;
00407 if (strcmp(speech, speech_in)) ERR;
00408 free(speech_in);
00409 if (nc_get_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, speech_in) != NC_ENOTATT) ERR;
00410 if (nc_close(ncid)) ERR;
00411
00412
00413 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00414 if (nc_del_att(ncid, NC_GLOBAL, ATT_TEXT_NAME2)) ERR;
00415 if (nc_close(ncid)) ERR;
00416
00417
00418 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00419 if (nc_put_att_text(ncid, NC_GLOBAL, ATT_TEXT_NAME, strlen(speech)+1, speech)) ERR;
00420 if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR;
00421 if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR;
00422 if (nc_def_var(ncid, VAR1_NAME, NC_INT, 2, dimids, &varid)) ERR;
00423 if (nc_put_att_int(ncid, varid, ATT_INT_NAME, NC_INT, 3, int_out)) ERR;
00424 if (nc_close(ncid)) ERR;
00425
00426
00427 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00428 if (nc_del_att(ncid, 0, ATT_INT_NAME)) ERR;
00429 if (nc_close(ncid)) ERR;
00430
00431
00432
00433 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00434 if (nc_put_att_int(ncid, varid, ATT_INT_NAME, NC_INT, 3, int_out)) ERR;
00435 if (nc_enddef(ncid)) ERR;
00436 if (nc_redef(ncid)) ERR;
00437 if (nc_del_att(ncid, 0, ATT_INT_NAME)) ERR;
00438 if (nc_inq_varnatts(ncid, 0, &natts_in)) ERR;
00439 if (natts_in != 0) ERR;
00440 if (nc_close(ncid)) ERR;
00441 }
00442
00443 SUMMARIZE_ERR;
00444 printf("*** testing attribute create order...");
00445
00446 #define ATT0 "Maturin"
00447 #define ATT1 "Aubery"
00448 {
00449 int attid_in;
00450 const int number = 42;
00451
00452
00453 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00454 if (nc_put_att_int(ncid, NC_GLOBAL, ATT0, NC_INT, 1, &number)) ERR;
00455 if (nc_put_att_int(ncid, NC_GLOBAL, ATT1, NC_INT, 1, &number)) ERR;
00456 if (nc_close(ncid)) ERR;
00457
00458
00459 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00460 if (nc_inq_attid(ncid, NC_GLOBAL, ATT0, &attid_in)) ERR;
00461 if (attid_in != 0) ERR;
00462 if (nc_inq_attid(ncid, NC_GLOBAL, ATT1, &attid_in)) ERR;
00463 if (attid_in != 1) ERR;
00464 if (nc_close(ncid)) ERR;
00465
00466
00467 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00468 if (nc_def_dim(ncid, DIM1_NAME, DIM1_LEN, &dimids[0])) ERR;
00469 if (nc_def_dim(ncid, DIM2_NAME, DIM2_LEN, &dimids[1])) ERR;
00470 if (nc_def_var(ncid, VAR1_NAME, NC_INT, 2, dimids, &varid)) ERR;
00471 if (nc_put_att_int(ncid, varid, ATT0, NC_INT, 1, &number)) ERR;
00472 if (nc_put_att_int(ncid, varid, ATT1, NC_INT, 1, &number)) ERR;
00473 if (nc_close(ncid)) ERR;
00474
00475
00476 if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR;
00477 if (nc_inq_attid(ncid, 0, ATT0, &attid_in)) ERR;
00478 if (attid_in != 0) ERR;
00479 if (nc_inq_attid(ncid, 0, ATT1, &attid_in)) ERR;
00480 if (attid_in != 1) ERR;
00481 if (nc_close(ncid)) ERR;
00482 }
00483
00484 SUMMARIZE_ERR;
00485 printf("*** testing attribute ordering some more...");
00486
00487 #define VAR_NAME "i"
00488 #define A1_NAME "i"
00489 #define A2_NAME "f"
00490 #define A3_NAME "d"
00491 #define A1_LEN 3
00492 #define A2_LEN 4
00493 #define A3_LEN 5
00494 {
00495 int varid, natts, nvars;
00496 double dvalue[] = {999.99, 999.99, 999.99, 999.99, 999.99};
00497 int varids[1];
00498 char name_in[NC_MAX_NAME + 1];
00499
00500
00501 if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
00502 if (nc_def_var(ncid, VAR_NAME, NC_INT, 0, NULL, &varid)) ERR;
00503 if (nc_put_att_double(ncid, varid, A1_NAME, NC_INT, A1_LEN, dvalue)) ERR;
00504 if (nc_put_att_double(ncid, varid, A2_NAME, NC_INT, A2_LEN, dvalue)) ERR;
00505 if (nc_put_att_double(ncid, varid, A3_NAME, NC_INT, A3_LEN, dvalue)) ERR;
00506 if (nc_close(ncid)) ERR;
00507
00508
00509 if (nc_open(FILE_NAME, 0, &ncid)) ERR;
00510 if (nc_inq_varids(ncid, &nvars, varids)) ERR;
00511 if (nvars != 1 || varids[0] != 0) ERR;
00512 if (nc_inq_varnatts(ncid, 0, &natts)) ERR;
00513 if (natts != 3) ERR;
00514 if (nc_inq_attname(ncid, 0, 0, name_in)) ERR;
00515 if (strcmp(name_in, A1_NAME)) ERR;
00516 if (nc_inq_attname(ncid, 0, 1, name_in)) ERR;
00517 if (strcmp(name_in, A2_NAME)) ERR;
00518 if (nc_inq_attname(ncid, 0, 2, name_in)) ERR;
00519 if (strcmp(name_in, A3_NAME)) ERR;
00520
00521
00522 if (nc_close(ncid)) ERR;
00523 }
00524
00525 SUMMARIZE_ERR;
00526
00527 FINAL_RESULTS;
00528 }
00529
00530