ncdf4a13/libsrc4/tst_atts.c File Reference

#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 []


Define Documentation

#define A1_LEN   3
 

Referenced by main().

#define A1_NAME   "i"
 

Referenced by main().

#define A2_LEN   4
 

Referenced by main().

#define A2_NAME   "f"
 

Referenced by main().

#define A3_LEN   5
 

Referenced by main().

#define A3_NAME   "d"
 

Referenced by main().

#define ATT0   "Maturin"
 

Referenced by main().

#define ATT1   "Aubery"
 

Referenced by main().

#define ATT_DOUBLE_NAME   "Equity_Court_Canteen_Charges"
 

Definition at line 23 of file tst_atts.c.

Referenced by main().

#define ATT_FLOAT_NAME   "Average_Nanoseconds_for_Lose_Win_or_Appeal"
 

Definition at line 37 of file tst_atts.c.

Referenced by main().

#define ATT_INT64_NAME   "judges_golf_score"
 

Definition at line 31 of file tst_atts.c.

Referenced by main().

#define ATT_INT_NAME   "Old_Bailey_Room_Numbers"
 

Definition at line 22 of file tst_atts.c.

Referenced by main().

#define ATT_LEN   3
 

Definition at line 38 of file tst_atts.c.

Referenced by check_atts(), check_atts_double(), check_atts_float(), check_atts_int(), check_atts_long(), check_atts_schar(), check_atts_short(), check_atts_text(), check_atts_uchar(), main(), put_atts(), test_nc_copy_att(), test_nc_get_att(), test_nc_get_att_double(), test_nc_get_att_float(), test_nc_get_att_int(), test_nc_get_att_long(), test_nc_get_att_schar(), test_nc_get_att_short(), test_nc_get_att_text(), test_nc_get_att_uchar(), test_nc_inq_att(), test_nc_inq_attlen(), test_nc_put_att(), test_nc_put_att_double(), test_nc_put_att_float(), test_nc_put_att_int(), test_nc_put_att_long(), test_nc_put_att_schar(), test_nc_put_att_short(), test_nc_put_att_text(), test_nc_put_att_uchar(), and test_nc_rename_att().

#define ATT_SCHAR_NAME   "Slate_totals_at_Pomeroys_Wine_Bar"
 

Definition at line 28 of file tst_atts.c.

Referenced by main().

#define ATT_SHORT_NAME   "Ecclesiastical_Court_Appearences"
 

Definition at line 24 of file tst_atts.c.

Referenced by main().

#define ATT_TEXT_NAME   "Speech_to_Jury"
 

Definition at line 25 of file tst_atts.c.

Referenced by main().

#define ATT_TEXT_NAME2   "Speech_to_She_Who_Must_be_Obeyed"
 

Definition at line 26 of file tst_atts.c.

Referenced by main().

#define ATT_UCHAR_NAME   "Number_of_current_briefs"
 

Definition at line 27 of file tst_atts.c.

Referenced by main().

#define ATT_UINT64_NAME   "Number_of_drinks_in_career_to_date"
 

Definition at line 32 of file tst_atts.c.

Referenced by main().

#define ATT_UINT_NAME   "Orders_from_SWMBO"
 

Definition at line 30 of file tst_atts.c.

Referenced by main().

#define ATT_USHORT_NAME   "brief_no"
 

Definition at line 29 of file tst_atts.c.

Referenced by main().

#define DIM1_LEN   10
 

Definition at line 19 of file tst_atts.c.

Referenced by check_file(), create_file(), and main().

#define DIM1_NAME   "Old_Bailey_case_number"
 

Definition at line 18 of file tst_atts.c.

Referenced by create_file(), main(), test_axis(), and test_system().

#define DIM2_LEN   15
 

Definition at line 21 of file tst_atts.c.

Referenced by main().

#define DIM2_NAME   "occupancy_in_chambers"
 

Definition at line 20 of file tst_atts.c.

Referenced by main().

#define FILE_NAME   "tst_atts.nc"
 

Definition at line 14 of file tst_atts.c.

Referenced by check_file(), create_file(), main(), and test_redef().

#define VAR1_NAME   "Horace_Rumpole"
 

Definition at line 15 of file tst_atts.c.

Referenced by alien_visitor(), check_file(), create_file(), and main().

#define VAR2_NAME   "Claude_Erskine-Brown"
 

Definition at line 16 of file tst_atts.c.

Referenced by main().

#define VAR3_NAME   "Phillida_Erskine-Brown_Q.C."
 

Definition at line 17 of file tst_atts.c.

Referenced by main().

#define VAR_NAME   "i"
 

Referenced by main().


Function Documentation

int main int  argc,
char **  argv
 

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 }


Variable Documentation

char speech[]
 

Definition at line 40 of file tst_atts.c.

Referenced by main().


Generated on Thu Mar 16 18:11:37 2006 for nco by  doxygen 1.4.4