#include <netcdf.h>#include <nc4internal.h>#include <nc_tests.h>#include <signal.h>Include dependency graph for tst_atts.c:

Go to the source code of this file.
Defines | |
| #define | FILE_NAME "tst_atts.nc" |
| #define | VAR1_NAME "Horace_Rumpole" |
| #define | VAR2_NAME "Claude_Erskine-Brown" |
| #define | VAR3_NAME "Phillida_Erskine-Brown_Q.C." |
| #define | DIM1_NAME "Old_Bailey_case_number" |
| #define | DIM1_LEN 10 |
| #define | DIM2_NAME "occupancy_in_chambers" |
| #define | DIM2_LEN 15 |
| #define | ATT_INT_NAME "Old_Bailey_Room_Numbers" |
| #define | ATT_DOUBLE_NAME "Equity_Court_Canteen_Charges" |
| #define | ATT_SHORT_NAME "Ecclesiastical_Court_Appearences" |
| #define | ATT_TEXT_NAME "Speech_to_Jury" |
| #define | ATT_TEXT_NAME2 "Speech_to_She_Who_Must_be_Obeyed" |
| #define | ATT_UCHAR_NAME "Number_of_current_briefs" |
| #define | ATT_SCHAR_NAME "Slate_totals_at_Pomeroys_Wine_Bar" |
| #define | ATT_USHORT_NAME "brief_no" |
| #define | ATT_UINT_NAME "Orders_from_SWMBO" |
| #define | ATT_INT64_NAME "judges_golf_score" |
| #define | ATT_UINT64_NAME "Number_of_drinks_in_career_to_date" |
| #define | ATT_FLOAT_NAME "Average_Nanoseconds_for_Lose_Win_or_Appeal" |
| #define | ATT_LEN 3 |
| #define | ATT0 "Maturin" |
| #define | ATT1 "Aubery" |
| #define | VAR_NAME "i" |
| #define | A1_NAME "i" |
| #define | A2_NAME "f" |
| #define | A3_NAME "d" |
| #define | A1_LEN 3 |
| #define | A2_LEN 4 |
| #define | A3_LEN 5 |
Functions | |
| int | main (int argc, char **argv) |
Variables | |
| char | speech [] |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Referenced by main(). |
|
|
Definition at line 23 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 37 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 31 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 22 of file tst_atts.c. Referenced by main(). |
|
|
|
Definition at line 28 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 24 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 25 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 26 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 27 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 32 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 30 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 29 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 19 of file tst_atts.c. Referenced by check_file(), create_file(), and main(). |
|
|
Definition at line 18 of file tst_atts.c. Referenced by create_file(), main(), test_axis(), and test_system(). |
|
|
Definition at line 21 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 20 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 14 of file tst_atts.c. Referenced by check_file(), create_file(), main(), and test_redef(). |
|
|
Definition at line 15 of file tst_atts.c. Referenced by alien_visitor(), check_file(), create_file(), and main(). |
|
|
Definition at line 16 of file tst_atts.c. Referenced by main(). |
|
|
Definition at line 17 of file tst_atts.c. Referenced by main(). |
|
|
Referenced by main(). |
|
||||||||||||
|
Definition at line 76 of file tst_atts.c. References A1_LEN, A1_NAME, A2_LEN, A2_NAME, A3_LEN, A3_NAME, ATT0, ATT1, ATT_DOUBLE_NAME, ATT_FLOAT_NAME, ATT_INT64_NAME, ATT_INT_NAME, ATT_LEN, att_len, ATT_SCHAR_NAME, ATT_SHORT_NAME, ATT_TEXT_NAME, ATT_TEXT_NAME2, att_type, ATT_UCHAR_NAME, ATT_UINT64_NAME, ATT_UINT_NAME, ATT_USHORT_NAME, DIM1_LEN, DIM1_NAME, DIM2_LEN, DIM2_NAME, ERR, FILE_NAME, FINAL_RESULTS, len, natts, NC_BYTE, NC_CHAR, nc_close, nc_create, nc_def_dim, nc_def_var, nc_del_att, NC_DOUBLE, NC_ECHAR, nc_enddef, NC_ENOTATT, NC_ERANGE, NC_FLOAT, nc_get_att_double, nc_get_att_float, nc_get_att_int, nc_get_att_longlong(), nc_get_att_schar, nc_get_att_short, nc_get_att_text, nc_get_att_uchar, nc_get_att_uint(), nc_get_att_ulonglong(), nc_get_att_ushort(), NC_GLOBAL, nc_inq_att, nc_inq_attid, nc_inq_attname, nc_inq_varids(), nc_inq_varnatts, NC_INT, NC_INT64, NC_MAX_BYTE, NC_MAX_CHAR, NC_MAX_INT64, NC_MAX_NAME, NC_MAX_SHORT, NC_MAX_UINT, NC_MAX_UINT64, NC_MAX_USHORT, NC_MIN_BYTE, NC_MIN_INT64, NC_MIN_SHORT, NC_NETCDF4, nc_open, nc_put_att_double, nc_put_att_float, nc_put_att_int, nc_put_att_longlong(), nc_put_att_schar, nc_put_att_short, nc_put_att_text, nc_put_att_uchar, nc_put_att_uint(), nc_put_att_ulonglong(), nc_put_att_ushort(), nc_redef, nc_rename_att, NC_SHORT, NC_UBYTE, NC_UINT, NC_UINT64, NC_USHORT, NC_WRITE, ncid, nvars, speech, SUMMARIZE_ERR, VAR1_NAME, VAR2_NAME, and VAR_NAME. 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 /*int int_in[ATT_LEN], int_out[ATT_LEN] = {NC_MIN_INT, 128, NC_MAX_INT};*/ 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 /*nc_set_log_level(3);*/ 00102 00103 /* Create a file with a global attribute of each type. */ 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 /* Open the file and check attributes. */ 00119 if (nc_open(FILE_NAME, 0, &ncid)) ERR; 00120 /* Check text. */ 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 /* Check numeric values. */ 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 /* Reopen the file and try different type conversions. */ 00165 if (nc_open(FILE_NAME, 0, &ncid)) ERR; 00166 00167 /* No text conversions are allowed, and people who try them shold 00168 * be locked up, away from decent folk! */ 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 /* if (nc_get_att_ubyte(ncid, NC_GLOBAL, ATT_TEXT_NAME, uchar_in) != NC_ECHAR) ERR;*/ 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 /* Read all atts (except text) as double. */ 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 /* Read all atts (except text) as float. */ 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 /* Read all atts (except text) as int. */ 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 /* Read all atts (except text) as short. */ 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 /* Read all atts (except text) as schar. Some range errors will 00232 * result converting to schar. */ 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 /* Create a file with two vars, attaching to each an attribute of 00251 * each type. */ 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 /* Open the file and check attributes. */ 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 /* Create a file with a global attribute of each type of zero length. */ 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 /* if (nc_put_att_uchar(ncid, NC_GLOBAL, ATT_UCHAR_NAME, NC_UCHAR, ATT_LEN, uchar_out)) ERR;*/ 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 /* Make sure we can read all these zero-length atts. */ 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 /* Conversions no longer result in range errors, since there's no data. */ 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 /* Create a file with a global attribute of each type of zero length. */ 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 /* if (nc_put_att_uchar(ncid, NC_GLOBAL, ATT_UCHAR_NAME, NC_UCHAR, ATT_LEN, uchar_out)) ERR;*/ 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 /* Make sure we can read all these zero-length atts added during a 00362 * redef. */ 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 /* Conversions no longer result in range errors, since there's no data. */ 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 /* Create a file with a global attribute. */ 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 /* Rename it. */ 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 /* Now delete the att. */ 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 /* Now create a file with a variable, which has an att. */ 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 /* Reopen the file and delete it. Make sure it's gone. */ 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 /* Reopen the file and readd the attribute. Enddef and redef, 00432 * and delete it, then check to make sure it's gone. */ 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 /* Create a file with several global attributes. */ 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 /* Open it and check the order. */ 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 /* Now create a file with a variable, which has two atts. */ 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 /* Reopen the file and check the order of the attributes on the var. */ 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 /* Create a file with one var, and attach three atts to it. */ 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 /* Reopen the file and check. */ 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 /* Close up shop. */ 00522 if (nc_close(ncid)) ERR; 00523 } 00524 00525 SUMMARIZE_ERR; 00526 00527 FINAL_RESULTS; 00528 }
|
|
|
Definition at line 40 of file tst_atts.c. Referenced by main(). |
1.4.4