diff options
Diffstat (limited to 'hl/test/test_ds.c')
-rw-r--r-- | hl/test/test_ds.c | 7040 |
1 files changed, 4639 insertions, 2401 deletions
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c index 8fb8604..32622ed 100644 --- a/hl/test/test_ds.c +++ b/hl/test/test_ds.c @@ -24,11 +24,56 @@ static herr_t verify_scale(hid_t dset, unsigned dim, hid_t scale, void *visitor_data); static herr_t read_scale(hid_t dset, unsigned dim, hid_t scale, void *visitor_data); static herr_t match_dim_scale(hid_t did, unsigned dim, hid_t dsid, void *visitor_data); -static herr_t op_bogus(hid_t did, unsigned dim, hid_t dsid, void *visitor_data); +static herr_t op_continue(hid_t did, unsigned dim, hid_t dsid, void *visitor_data); +static herr_t op_stop(hid_t did, unsigned dim, hid_t dsid, void *visitor_data); /* prototypes */ +static int create_test_file(const char *fileext); +static int open_test_file(const char *fileext); +herr_t create_char_dataset(hid_t fid, const char *dsidx, int fulldims); +herr_t create_short_dataset(hid_t fid, const char *dsidx, int fulldims); +herr_t create_int_dataset(hid_t fid, const char *dsidx, int fulldims); +herr_t create_long_dataset(hid_t fid, const char *dsname, const char *dsidx, int fulldims); +herr_t create_float_dataset(hid_t fid, const char *dsidx, int fulldims); +herr_t create_DS1_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf); +herr_t create_DS2_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf, char *s2_wbuf); +herr_t create_DS3_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf, char *s2_wbuf, char *s3_wbuf); +herr_t create_DS1_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf); +herr_t create_DS2_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf, short *s2_wbuf); +herr_t create_DS3_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf, short *s2_wbuf, short *s3_wbuf); +herr_t create_DS1_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf); +herr_t create_DS2_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf, int *s2_wbuf); +herr_t create_DS3_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf, int *s2_wbuf, int *s3_wbuf); +herr_t create_DS1_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf); +herr_t create_DS2_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf); +herr_t create_DS3_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf, long *s3_wbuf); +herr_t create_DS4_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf, long *s3_wbuf, long *s4_wbuf); +herr_t create_DS1_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf); +herr_t create_DS2_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf, float *s2_wbuf); +herr_t create_DS3_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf, float *s2_wbuf, float *s3_wbuf); +herr_t test_attach_scale(hid_t fid, hid_t did, const char *name, unsigned int idx); +herr_t test_detach_scale(hid_t fid, hid_t did, const char *name, unsigned int idx); +herr_t test_set_scalename(hid_t fid, hid_t did, const char *name, const char *scalename, unsigned int idx); +herr_t test_cmp_scalename(hid_t fid, hid_t did, const char *name, const char *scalename, unsigned int idx); + +static int test_char_attachscales(const char *fileext); +static int test_short_attachscales(const char *fileext); +static int test_int_attachscales(const char *fileext); +static int test_long_attachscales(const char *fileext); +static int test_duplicatelong_attachscales(const char *fileext); +static int test_float_attachscales(const char *fileext); +static int test_numberofscales(const char *fileext); +static int test_char_scalenames(const char *fileext); +static int test_short_scalenames(const char *fileext); +static int test_int_scalenames(const char *fileext); +static int test_long_scalenames(const char *fileext); +static int test_samelong_scalenames(const char *fileext); +static int test_float_scalenames(const char *fileext); +static int test_foreign_scaleattached(const char *fileforeign); + static int test_simple(void); static int test_errors(void); +static int test_errors2(void); static int test_rank(void); static int test_types(void); static int test_iterators(void); @@ -40,35 +85,55 @@ static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf ) #define DIM_DATA 12 #define DIM1_SIZE 3 #define DIM2_SIZE 4 -#define DIM3_SIZE 2 +#define DIM3_SIZE 12 +#define DIM4_SIZE 2 #define DIM0 0 #define DIM1 1 #define DIM2 2 - -#define DS_1_NAME "ds_a_1" -#define DS_11_NAME "ds_a_11" -#define DS_2_NAME "ds_a_2" -#define DS_21_NAME "ds_a_21" -#define DS_22_NAME "ds_a_22" -#define DS_3_NAME "ds_a_3" - -#define SCALE_1_NAME "Latitude set 0" -#define SCALE_11_NAME "Latitude set 1" -#define SCALE_2_NAME "Longitude set 0" -#define SCALE_21_NAME "Longitude set 1" -#define SCALE_22_NAME "Longitude set 2" +#define DIM3 3 + +#define DATASET_NAME "dset_" +#define DS_1_NAME "ds_1_" +#define DS_11_NAME "ds_11_" +#define DS_2_NAME "ds_2_" +#define DS_21_NAME "ds_21_" +#define DS_22_NAME "ds_22_" +#define DS_3_NAME "ds_3_" +#define DS_31_NAME "ds_31_" +#define DS_32_NAME "ds_32_" +#define DS_33_NAME "ds_33_" +#define DS_4_NAME "ds_4_" +#define DS_41_NAME "ds_41_" +#define DS_42_NAME "ds_42_" +#define DS_43_NAME "ds_43_" +#define DS_44_NAME "ds_44_" + +#define SCALE_1_NAME "scalename_1_" +#define SCALE_11_NAME "scalename_11_" +#define SCALE_2_NAME "scalename_2_" +#define SCALE_21_NAME "scalename_21_" +#define SCALE_22_NAME "scalename_22_" +#define SCALE_3_NAME "scalename_3_" +#define SCALE_31_NAME "scalename_31_" +#define SCALE_32_NAME "scalename_32_" +#define SCALE_33_NAME "scalename_33_" +#define SCALE_4_NAME "scalename_4_" #define DIM0_LABEL "Latitude" #define DIM1_LABEL "Longitude" -#define FILE1 "test_ds1.h5" -#define FILE2 "test_ds2.h5" -#define FILE3 "test_ds3.h5" -#define FILE4 "test_ds4.h5" -#define FILE5 "test_ds5.h5" -#define FILE6 "test_ds6.h5" - +#define FOREIGN_FILE1 "test_ds_le.h5" +#define FOREIGN_FILE2 "test_ds_be.h5" +#define FILENAME "test_ds" +#define FILEEXT ".h5" +#define FILE1 "test_ds3.h5" +#define FILE2 "test_ds4.h5" +#define FILE3 "test_ds5.h5" +#define FILE4 "test_ds6.h5" +#define FILE5 "test_ds7.h5" +#define FILE6 "test_ds8.h5" +#define FILE7 "test_ds9.h5" /*------------------------------------------------------------------------- * the main program @@ -76,22 +141,51 @@ static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf ) */ int main(void) { - int nerrors=0; - - nerrors += test_simple() < 0 ?1:0; - nerrors += test_errors() < 0 ?1:0; - nerrors += test_rank() < 0 ?1:0; - nerrors += test_iterators() < 0 ?1:0; - nerrors += test_types() < 0 ?1:0; - nerrors += test_data() < 0 ?1:0; - - if(nerrors) goto error; - printf("All dimension scales tests passed.\n"); - return 0; + int nerrors=0; + + /* create file to be used in following tests */ + if(create_test_file("1") < 0) { + nerrors = 1; + goto error; + } + nerrors += test_char_attachscales("1") < 0 ? 1 : 0; + nerrors += test_short_attachscales("1") < 0 ? 1 : 0; + nerrors += test_int_attachscales("1") < 0 ? 1 : 0; + nerrors += test_long_attachscales("1") < 0 ? 1 : 0; + nerrors += test_float_attachscales("1") < 0 ? 1 : 0; + nerrors += test_char_scalenames("1") < 0 ? 1 : 0; + nerrors += test_short_scalenames("1") < 0 ? 1 : 0; + nerrors += test_int_scalenames("1") < 0 ? 1 : 0; + nerrors += test_long_scalenames("1") < 0 ? 1 : 0; + nerrors += test_float_scalenames("1") < 0 ? 1 : 0; + nerrors += test_numberofscales("1") < 0 ? 1 : 0; + if(create_test_file("2") < 0) { + nerrors = 1; + goto error; + } + nerrors += test_long_attachscales("2") < 0 ? 1 : 0; + nerrors += test_duplicatelong_attachscales("2") < 0 ? 1 : 0; + nerrors += test_samelong_scalenames("2") < 0 ? 1 : 0; + nerrors += test_foreign_scaleattached(FOREIGN_FILE1) < 0 ? 1 : 0; + nerrors += test_foreign_scaleattached(FOREIGN_FILE2) < 0 ? 1 : 0; + +/* the following tests have not been rewritten to match those above */ + nerrors += test_simple() < 0 ?1:0; + nerrors += test_errors() < 0 ?1:0; + nerrors += test_errors2() < 0 ?1:0; + nerrors += test_rank() < 0 ?1:0; + nerrors += test_iterators() < 0 ?1:0; + nerrors += test_types() < 0 ?1:0; + nerrors += test_data() < 0 ?1:0; + + + if(nerrors) goto error; + printf("All dimension scales tests passed.\n"); + return 0; error: - printf("***** %d DIMENSION SCALES TEST%s FAILED! *****\n",nerrors, 1 == nerrors ? "" : "S"); - return 1; + printf("***** %d DIMENSION SCALES TEST%s FAILED! *****\n",nerrors, 1 == nerrors ? "" : "S"); + return 1; } @@ -101,6 +195,7 @@ error: * Functions tested: * * H5DSattach_scale + * H5DSget_num_scales * H5DSdetach_scale * H5DSset_label * H5DSget_label @@ -108,1340 +203,3219 @@ error: * H5DSget_scale_name * H5DSis_scale * H5DSiterate_scales - * H5DSget_num_scales * *------------------------------------------------------------------------- */ - -static int test_simple(void) +static hid_t create_test_file(const char *fileext) { - hid_t fid; /* file ID */ - hid_t did = -1; /* dataset ID */ - hid_t dsid; /* DS dataset ID */ - hid_t sid; /* space ID */ - hid_t gid; /* group ID */ - int rank = RANK; /* rank of data dataset */ - int rankds = 1; /* rank of DS dataset */ - hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ - int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; /* data of data dataset */ - hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ - hsize_t s2_dim[1] = {DIM2_SIZE}; /* size of DS 2 dataset */ - char sname[30]; /* scale name buffer */ - char dname[30]; /* dataset name */ - int s1_wbuf[DIM1_SIZE] = {10,20,30}; /* data of DS 1 dataset */ - int s11_wbuf[DIM1_SIZE] = {10,100,300}; /* data of DS 1 dataset */ - int s2_wbuf[DIM2_SIZE] = {100,200,300,400}; /* data of DS 2 dataset */ - int s21_wbuf[DIM2_SIZE] = {10,20,30,40}; /* data of DS 2 dataset */ - int s22_wbuf[DIM2_SIZE] = {5,10,50,300}; /* data of DS 2 dataset */ - char dim0_label[16]; /* read label for DIM 0 */ - char dim1_label[16]; /* read label for DIM 1 */ - char *dim0_labeld; /* read label for DIM 0 */ - char *dim1_labeld; /* read label for DIM 1 */ - char dim0_labels[3]; /* read label for DIM 0 */ - char dim1_labels[3]; /* read label for DIM 1 */ - ssize_t dim0_label_size; /* lenght of label buffer */ - ssize_t dim1_label_size; /* lenght of label buffer */ - unsigned int dim; /* dataset dimension index */ - int scale_idx; /* scale index */ - int nscales; /* number of scales in DIM */ - ssize_t name_len; /* lenght of name buffer */ - char *name_out=NULL; /* scale name buffer */ - char snames[3]; /* scale name buffer */ - int i, j; - - - printf("Testing API functions\n"); - -/*------------------------------------------------------------------------- - * create a file for the test - *------------------------------------------------------------------------- - */ - - /* create a file using default properties */ - if((fid=H5Fcreate(FILE1,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) - goto out; - -/*------------------------------------------------------------------------- - * create datasets: 1 "data" dataset and 4 dimension scales - *------------------------------------------------------------------------- - */ - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,buf) < 0) - goto out; - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_int(fid,DS_1_NAME,rankds,s1_dim,s1_wbuf) < 0) - goto out; - - /* make a DS dataset with an alternate scale for the 2nd dimension */ - if(H5LTmake_dataset_int(fid,DS_11_NAME,rankds,s1_dim,s11_wbuf) < 0) - goto out; - - /* make a DS dataset for the second dimension */ - if(H5LTmake_dataset_int(fid,DS_2_NAME,rankds,s2_dim,s2_wbuf) < 0) - goto out; - - /* make a DS dataset with an alternate scale for the 2nd dimension */ - if(H5LTmake_dataset_int(fid,DS_21_NAME,rankds,s2_dim,s21_wbuf) < 0) - goto out; - - /* make a DS dataset with an alternate scale for the 2nd dimension */ - if(H5LTmake_dataset_int(fid,DS_22_NAME,rankds,s2_dim,s22_wbuf) < 0) - goto out; - - -/*------------------------------------------------------------------------- - * test 1: attach scale - *------------------------------------------------------------------------- - */ - - TESTING2("attach scales"); - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the DS_1_NAME dimension scale to "dset_a" - *------------------------------------------------------------------------- - */ - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT)) < 0) - goto out; - - /* attach the DS_1_NAME dimension scale to "dset_a" at dimension 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the DS_11_NAME dimension scale to "dset_a" - *------------------------------------------------------------------------- - */ - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_11_NAME, H5P_DEFAULT)) < 0) - goto out; - - /* attach the DS_11_NAME dimension scale to "dset_a" at dimension 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the DS_2_NAME dimension scale to "dset_a" - *------------------------------------------------------------------------- - */ - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT)) < 0) - goto out; - - /* attach the "ds2" dimension scale to "dset_a" as the 2nd dimension */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the DS_21_NAME dimension scale to "dset_a" - *------------------------------------------------------------------------- - */ - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_21_NAME, H5P_DEFAULT)) < 0) - goto out; - - /* attach the DS_21_NAME dimension scale to "dset_a" as the 2nd dimension */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the DS_22_NAME dimension scale to "dset_a" - *------------------------------------------------------------------------- - */ - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_22_NAME, H5P_DEFAULT)) < 0) - goto out; - - /* attach the "ds22" dimension scale to "dset_a" as the 2nd dimension */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - - -/*------------------------------------------------------------------------- - * verify attachment - *------------------------------------------------------------------------- - */ - - if((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM0)<=0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM1)<=0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_21_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM1)<=0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_22_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM1)<=0) - goto out; - if(H5Dclose(dsid)) - goto out; - - - /* close dataset ID of "dset_a" */ - if(H5Dclose(did) < 0) - goto out; - - - PASSED(); - - -/*------------------------------------------------------------------------- - * test 2: get number of scales - *------------------------------------------------------------------------- - */ - - TESTING2("get number of scales"); - -/*------------------------------------------------------------------------- - * verify that "dset_a" has dimension scales - *------------------------------------------------------------------------- - */ - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* verify that "dset_a" has 1 dimension scale at DIM 0 */ - if((nscales = H5DSget_num_scales(did,0)) < 0) - goto out; - if(nscales!=2) - goto out; - - /* verify that "dset_a" has 3 dimension scales at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=3) - goto out; - - /* close dataset ID of "dset_a" */ - if(H5Dclose(did) < 0) - goto out; - - -/*------------------------------------------------------------------------- - * create datasets: 1 "data" dataset and 1 dimension scale - *------------------------------------------------------------------------- - */ - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_b",rank,dims,buf) < 0) - goto out; - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_int(fid,"ds_b_1",rankds,s1_dim,s1_wbuf) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach the scale to "dset_b" - *------------------------------------------------------------------------- - */ - - if((did = H5Dopen2(fid,"dset_b", H5P_DEFAULT)) < 0) - goto out; - if((dsid = H5Dopen2(fid,"ds_b_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * verify if "dset_b" has dimension scales - *------------------------------------------------------------------------- - */ - - /* get the dataset id for "dset_b" */ - if((did = H5Dopen2(fid,"dset_b", H5P_DEFAULT)) < 0) - goto out; - - /* verify that "dset_b" has 1 dimension scale at DIM 0 */ - if((nscales = H5DSget_num_scales(did,0)) < 0) - goto out; - if(nscales!=1) - goto out; - - /* verify that "dset_b" has 0 dimension scales at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=0) - goto out; - - /* close dataset ID of "dset_b" */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - - -/*------------------------------------------------------------------------- - * test 3: detach scales - *------------------------------------------------------------------------- - */ - - TESTING2("detach scales "); - - -/*------------------------------------------------------------------------- - * create datasets: one "data" dataset and 4 dimension scales - *------------------------------------------------------------------------- - */ - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_c",rank,dims,buf) < 0) - goto out; - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_int(fid,"ds_c_1",rankds,s1_dim,s1_wbuf) < 0) - goto out; - - /* make a DS dataset for the second dimension */ - if(H5LTmake_dataset_int(fid,"ds_c_2",rankds,s2_dim,s2_wbuf) < 0) - goto out; - - /* make a DS dataset with an alternate scale for the 2nd dimension */ - if(H5LTmake_dataset_int(fid,"ds_c_21",rankds,s2_dim,s2_wbuf) < 0) - goto out; - - /* make a DS dataset with an alternate scale for the 2nd dimension */ - if(H5LTmake_dataset_int(fid,"ds_c_22",rankds,s2_dim,s2_wbuf) < 0) - goto out; - - -/*------------------------------------------------------------------------- - * attach the scales to "dset_c" - *------------------------------------------------------------------------- - */ - - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_c_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_c_2", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,1) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_c_21", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,1) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_c_22", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,1) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * verify if "dset_c" has dimension scales - *------------------------------------------------------------------------- - */ - - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - /* verify that "dset_c" has 1 dimension scale at DIM 0 */ - if((nscales = H5DSget_num_scales(did,0)) < 0) - goto out; - if(nscales!=1) - goto out; - /* verify that "dset_c" has 3 dimension scales at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=3) - goto out; - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * detach the "ds_c_21" dimension scale to "dset_c" - *------------------------------------------------------------------------- - */ - - /* get the dataset id for "dset_c" */ - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_c_21", H5P_DEFAULT)) < 0) - goto out; - - /* detach the "ds_c_21" dimension scale to "dset_c" in DIM 1 */ - if(H5DSdetach_scale(did,dsid,1) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_c" */ - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * "dset_c" must have now 2 dimension scales at DIM 1 - *------------------------------------------------------------------------- - */ - - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - /* verify that "dset_c" has 2 dimension scales at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=2) - goto out; - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * detach the "ds_c_22" dimension scale to "dset_c" - *------------------------------------------------------------------------- - */ - - /* get the dataset id for "dset_c" */ - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_c_22", H5P_DEFAULT)) < 0) - goto out; - - /* detach the "ds_c_22" dimension scale to "dset_c" in DIM 1 */ - if(H5DSdetach_scale(did,dsid,1) < 0) - goto out; + char filename[65]; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_c" */ - if(H5Dclose(did) < 0) - goto out; + strcpy(filename, FILENAME); + strcat(filename, fileext); + strcat(filename, FILEEXT); + return H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); +} -/*------------------------------------------------------------------------- - * "dset_c" must have now 1 dimension scale at DIM 1 - *------------------------------------------------------------------------- - */ +static hid_t open_test_file(const char *fileext) +{ + char filename[65]; - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - /* verify that "dset_c" has 1 dimension scale at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=1) - goto out; - if(H5Dclose(did) < 0) - goto out; + strcpy(filename, FILENAME); + strcat(filename, fileext); + strcat(filename, FILEEXT); + + return H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT); +} /*------------------------------------------------------------------------- - * detach the "ds_c_2" dimension scale to "dset_c" + * create "data" dataset *------------------------------------------------------------------------- */ +herr_t create_char_dataset(hid_t fid, const char *dsidx, int fulldims) +{ + int rank = 3; + int rankds = 1; + hsize_t dims[3] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE}; + char buf[DIM_DATA*3] = {1,2,3,4,5,6,7,8,9,10,11,12, + 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + hsize_t s3_dim[1] = {DIM3_SIZE}; + char s1_wbuf[DIM1_SIZE] = {1,2,3}; + char s11_wbuf[DIM1_SIZE] = {10,20,30}; + char s2_wbuf[DIM2_SIZE] = {10,20,30,40}; + char s21_wbuf[DIM2_SIZE] = {1,2,3,4}; + char s22_wbuf[DIM2_SIZE] = {5,10,50,100}; + char s3_wbuf[DIM3_SIZE] = {10,10,10,20,20,20,30,30,30,40,40,40}; + char s31_wbuf[DIM3_SIZE] = {1,1,1,2,2,2,3,3,3,4,4,4}; + char s32_wbuf[DIM3_SIZE] = {5,5,5,10,10,10,50,50,50,100,100,100}; + char s33_wbuf[DIM3_SIZE] = {6,6,6,12,12,12,53,53,53,120,120,120}; + char name[32]; + + strcpy(name, DATASET_NAME); + strcat(name, dsidx); + /* make a dataset */ + if(H5LTmake_dataset_char(fid, name, rank, dims, buf) >= 0) { + if(fulldims==0) { + /* make a DS dataset for the first dimension */ + if(create_DS1_char_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, NULL) < 0) + return FAIL; + + /* make a DS dataset for the second dimension */ + if(create_DS2_char_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, NULL, NULL) < 0) + return FAIL; + + /* make a DS dataset for the third dimension */ + if(create_DS3_char_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, NULL, NULL, NULL) < 0) + return FAIL; + } + else { + if(create_DS1_char_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, s11_wbuf) < 0) + return FAIL; + + if(create_DS2_char_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, s21_wbuf, s22_wbuf) < 0) + return FAIL; + + if(create_DS3_char_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, s31_wbuf, s32_wbuf, s33_wbuf) < 0) + return FAIL; + } + } + else + return FAIL; + return SUCCEED; +} - /* get the dataset id for "dset_c" */ - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_c_2", H5P_DEFAULT)) < 0) - goto out; - - /* detach the "ds_c_2" dimension scale to "dset_c" in DIM 1 */ - if(H5DSdetach_scale(did,dsid,1) < 0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_c" */ - if(H5Dclose(did) < 0) - goto out; +herr_t create_short_dataset(hid_t fid, const char *dsidx, int fulldims) +{ + int rank = 3; + int rankds = 1; + hsize_t dims[3] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE}; + short buf[DIM_DATA*3] = {1,2,3,4,5,6,7,8,9,10,11,12, + 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + hsize_t s3_dim[1] = {DIM3_SIZE}; + short s1_wbuf[DIM1_SIZE] = {10,20,30}; + short s11_wbuf[DIM1_SIZE] = {10,100,300}; + short s2_wbuf[DIM2_SIZE] = {100,200,300,400}; + short s21_wbuf[DIM2_SIZE] = {10,20,30,40}; + short s22_wbuf[DIM2_SIZE] = {5,10,50,300}; + short s3_wbuf[DIM3_SIZE] = {10,10,10,20,20,20,30,30,30,40,40,40}; + short s31_wbuf[DIM3_SIZE] = {1,1,1,2,2,2,3,3,3,4,4,4}; + short s32_wbuf[DIM3_SIZE] = {5,5,5,10,10,10,50,50,50,100,100,100}; + short s33_wbuf[DIM3_SIZE] = {6,6,6,12,12,12,53,53,53,140,140,140}; + char name[32]; + + strcpy(name, DATASET_NAME); + strcat(name, dsidx); + + /* make a dataset */ + if(H5LTmake_dataset_short(fid, name, rank, dims, buf) >= 0) { + if(fulldims==0) { + /* make a DS dataset for the first dimension */ + if(create_DS1_short_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, NULL) < 0) + return FAIL; + + /* make a DS dataset for the second dimension */ + if(create_DS2_short_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, NULL, NULL) < 0) + return FAIL; + + /* make a DS dataset for the third dimension */ + if(create_DS3_short_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, NULL, NULL, NULL) < 0) + return FAIL; + } + else { + if(create_DS1_short_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, s11_wbuf) < 0) + return FAIL; + + if(create_DS2_short_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, s21_wbuf, s22_wbuf) < 0) + return FAIL; + + if(create_DS3_short_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, s31_wbuf, s32_wbuf, s33_wbuf) < 0) + return FAIL; + } + } + else + return FAIL; + return SUCCEED; +} -/*------------------------------------------------------------------------- - * "dset_c" must have now 0 dimension scales at DIM 1 - *------------------------------------------------------------------------- - */ +herr_t create_int_dataset(hid_t fid, const char *dsidx, int fulldims) +{ + int rank = RANK; + int rankds = 1; + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; + int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + int s1_wbuf[DIM1_SIZE] = {10,20,30}; + int s11_wbuf[DIM1_SIZE] = {10,100,300}; + int s2_wbuf[DIM2_SIZE] = {100,200,300,400}; + int s21_wbuf[DIM2_SIZE] = {10,20,30,40}; + int s22_wbuf[DIM2_SIZE] = {5,10,50,300}; + char name[32]; + + strcpy(name, DATASET_NAME); + strcat(name, dsidx); + + /* make a dataset */ + if(H5LTmake_dataset_int(fid, name, rank, dims, buf) >= 0) { + if(fulldims==0) { + /* make a DS dataset for the first dimension */ + if(create_DS1_int_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, NULL) < 0) + return FAIL; + + /* make a DS dataset for the second dimension */ + if(create_DS2_int_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, NULL, NULL) < 0) + return FAIL; + } + else { + if(create_DS1_int_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, s11_wbuf) < 0) + return FAIL; + + if(create_DS2_int_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, s21_wbuf, s22_wbuf) < 0) + return FAIL; + } + } + else + return FAIL; + return SUCCEED; +} - if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) - goto out; - /* verify that "dset_c" has 1 dimension scale at DIM 1 */ - if((nscales = H5DSget_num_scales(did,1)) < 0) - goto out; - if(nscales!=0) - goto out; - if(H5Dclose(did) < 0) - goto out; +herr_t create_long_dataset(hid_t fid, const char *dsname, const char *dsidx, int fulldims) +{ + int rank = 4; + int rankds = 1; + hsize_t dims[4] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE,DIM4_SIZE}; + long buf[DIM_DATA*3*2] = {1,2,3,4,5,6,7,8,9,10,11,12, + 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12, + 1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12, + 1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + hsize_t s3_dim[1] = {DIM3_SIZE}; + hsize_t s4_dim[1] = {DIM4_SIZE}; + long s1_wbuf[DIM1_SIZE] = {10,20,30}; + long s11_wbuf[DIM1_SIZE] = {10,100,300}; + long s2_wbuf[DIM2_SIZE] = {100,200,300,400}; + long s21_wbuf[DIM2_SIZE] = {10,20,30,40}; + long s22_wbuf[DIM2_SIZE] = {5,10,50,300}; + long s3_wbuf[DIM3_SIZE] = {10,10,10,20,20,20,30,30,30,40,40,40}; + long s31_wbuf[DIM3_SIZE] = {1,1,1,2,2,2,3,3,3,4,4,4}; + long s32_wbuf[DIM3_SIZE] = {5,5,5,10,10,10,50,50,50,100,100,100}; + long s33_wbuf[DIM3_SIZE] = {6,6,6,12,12,12,53,53,53,140,140,140}; + long s4_wbuf[DIM4_SIZE] = {18,18}; + long s41_wbuf[DIM4_SIZE] = {8,8}; + long s42_wbuf[DIM4_SIZE] = {80,80}; + long s43_wbuf[DIM4_SIZE] = {180,180}; + long s44_wbuf[DIM4_SIZE] = {280,280}; + char name[32]; + + strcpy(name, dsname); + + /* make a dataset */ + if(H5LTmake_dataset_long(fid, name, rank, dims, buf) >= 0) { + if(fulldims==0) { + /* make a DS dataset for the first dimension */ + if(create_DS1_long_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, NULL) < 0) + return FAIL; + + /* make a DS dataset for the second dimension */ + if(create_DS2_long_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, NULL, NULL) < 0) + return FAIL; + + /* make a DS dataset for the third dimension */ + if(create_DS3_long_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, NULL, NULL, NULL) < 0) + return FAIL; + + /* make a DS dataset for the fourth dimension */ + if(create_DS4_long_datasets(fid, dsidx, rankds, s4_dim, s4_wbuf, NULL, NULL, NULL, NULL) < 0) + return FAIL; + } + else { + if(create_DS1_long_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, s11_wbuf) < 0) + return FAIL; + + if(create_DS2_long_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, s21_wbuf, s22_wbuf) < 0) + return FAIL; + + if(create_DS3_long_datasets(fid, dsidx, rankds, s3_dim, s3_wbuf, s31_wbuf, s32_wbuf, s33_wbuf) < 0) + return FAIL; + + if(create_DS4_long_datasets(fid, dsidx, rankds, s4_dim, s4_wbuf, s41_wbuf, s42_wbuf, s43_wbuf, s44_wbuf) < 0) + return FAIL; + } + } + else + return FAIL; + return SUCCEED; +} +herr_t create_float_dataset(hid_t fid, const char *dsidx, int fulldims) +{ + int rank = RANK; + int rankds = 1; + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; + float buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + float s1_wbuf[DIM1_SIZE] = {10,20,30}; + float s11_wbuf[DIM1_SIZE] = {10,100,300}; + float s2_wbuf[DIM2_SIZE] = {100,200,300,400}; + float s21_wbuf[DIM2_SIZE] = {10,20,30,40}; + float s22_wbuf[DIM2_SIZE] = {5,10,50,300}; + char name[32]; + + strcpy(name, DATASET_NAME); + strcat(name, dsidx); + + /* make a dataset */ + if(H5LTmake_dataset_float(fid, name, rank, dims, buf) >= 0) { + if(fulldims==0) { + /* make a DS dataset for the first dimension */ + if(create_DS1_float_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, NULL) < 0) + return FAIL; + + /* make a DS dataset for the second dimension */ + if(create_DS2_float_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, NULL, NULL) < 0) + return FAIL; + } + else { + if(create_DS1_float_datasets(fid, dsidx, rankds, s1_dim, s1_wbuf, s11_wbuf) < 0) + return FAIL; + + if(create_DS2_float_datasets(fid, dsidx, rankds, s2_dim, s2_wbuf, s21_wbuf, s22_wbuf) < 0) + return FAIL; + } + } + else + return FAIL; + return SUCCEED; +} /*------------------------------------------------------------------------- - * create 3 datasets: 1 "data" dataset and 2 dimension scales + * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ - if(H5LTmake_dataset_int(fid,"dset_d",rank,dims,NULL) < 0) - goto out; - if(H5LTmake_dataset_int(fid,"ds_d_1",rankds,s1_dim,NULL) < 0) - goto out; - if(H5LTmake_dataset_int(fid,"ds_d_2",rankds,s2_dim,NULL) < 0) - goto out; +herr_t create_DS1_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf) +{ + char name[32]; + + strcpy(name, DS_1_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_11_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * attach them + * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,1) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if(H5Dclose(did) < 0) - goto out; +herr_t create_DS2_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf, char *s2_wbuf) +{ + char name[32]; + + strcpy(name, DS_2_NAME); + strcat(name, dsidx); + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_21_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_22_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * verify + * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM0)<=0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM1)<=0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if(H5Dclose(did) < 0) - goto out; - +herr_t create_DS3_char_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, char *s_wbuf, char *s1_wbuf, char *s2_wbuf, char *s3_wbuf) +{ + char name[32]; + + strcpy(name, DS_3_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_31_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_32_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_33_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_char(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * detach + * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ - - /* get the dataset id for "dset_d" */ - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) - goto out; - - /* detach the dimension scale to "dset_d" in DIM 0 */ - if(H5DSdetach_scale(did,dsid,DIM0) < 0) - goto out; - - /* verify attach, it must return 0 for no attach */ - if(H5DSis_attached(did,dsid,DIM0)!=0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_d" */ - if(H5Dclose(did) < 0) - goto out; +herr_t create_DS1_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf) +{ + char name[32]; + + strcpy(name, DS_1_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_11_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * attach again + * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ - - /* get the dataset id for "dset_d" */ - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) - goto out; - - /* attach "ds_d_1" again in DIM 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - - /* verify attach, it must return 1 for attach */ - if(H5DSis_attached(did,dsid,DIM0)!=1) - goto out; - - /* verify that "ds_d_1" has only 1 scale at DIM0 */ - if((nscales = H5DSget_num_scales(did,DIM0)) < 0) - goto out; - if(nscales!=1) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_d" */ - if(H5Dclose(did) < 0) - goto out; +herr_t create_DS2_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf, short *s2_wbuf) +{ + char name[32]; + + strcpy(name, DS_2_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_21_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_22_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * detach/detach + * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - - /* get the dataset id for "dset_d" */ - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) - goto out; - - /* detach the "ds_d_2" dimension scale to "dset_d" in DIM 1 */ - if(H5DSdetach_scale(did,dsid,DIM1) < 0) - goto out; - - /* detach again, it should fail */ - if(H5DSdetach_scale(did,dsid,DIM1)==SUCCEED) - goto out; - - /* verify attach, it must return 0 for no attach */ - if(H5DSis_attached(did,dsid,DIM1)!=0) - goto out; - - /* verify that "ds_d_1" has no scale at DIM1 */ - if((nscales = H5DSget_num_scales(did,DIM1)) < 0) - goto out; - if(nscales!=0) - goto out; - - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - - /* close dataset ID of "dset_d" */ - if(H5Dclose(did) < 0) - goto out; +herr_t create_DS3_short_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, short *s_wbuf, short *s1_wbuf, short *s2_wbuf, short *s3_wbuf) +{ + char name[32]; + + strcpy(name, DS_3_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_31_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_32_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_33_NAME); + strcat(name, dsidx); + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_short(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * attach twice + * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ +herr_t create_DS1_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf) +{ + char name[32]; - /* get the dataset id for "dset_d" */ - if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) - goto out; - - /* attach "ds_d_2" in DIM 1 */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - - /* verify attach, it must return 1 for attach */ - if(H5DSis_attached(did,dsid,DIM1)!=1) - goto out; - - /* verify that "ds_d_2" has only 1 scale at DIM1 */ - if((nscales = H5DSget_num_scales(did,DIM0)) < 0) - goto out; - if(nscales!=1) - goto out; - - /* attach "ds_d_2" again in DIM 1 */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - - /* verify attach, it must return 1 for attach */ - if(H5DSis_attached(did,dsid,DIM1)!=1) - goto out; + strcpy(name, DS_1_NAME); + strcat(name, dsidx); - /* verify that "ds_d_2" has only 1 scale at DIM1 */ - if((nscales = H5DSget_num_scales(did,DIM0)) < 0) - goto out; - if(nscales != 1) - goto out; + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; + if(s1_wbuf!=NULL) { + strcpy(name, DS_11_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } - /* close dataset ID of "dset_d" */ - if(H5Dclose(did) < 0) - goto out; + return SUCCEED; +} /*------------------------------------------------------------------------- - * create 10 datasets: 5 "data" dataset and 5 dimension scales + * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ - - /* create a group */ - if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - - /* create the data space for the dataset */ - if((sid = H5Screate_simple(rank,dims,NULL)) < 0) - goto out; - - for(i = 0; i < 5; i++) { - sprintf(dname,"dset_%d",i); - if((did = H5Dcreate2(gid, dname, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - sprintf(sname,"ds_%d",i); - if((dsid = H5Dcreate2(gid, sname, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,"scale") < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - } +herr_t create_DS2_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf, int *s2_wbuf) +{ + char name[32]; + + strcpy(name, DS_2_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_21_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_22_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * attach for DIM 0 + * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - - for(i = 0; i < 5; i++) { - sprintf(dname, "dset_%d", i); - if((did = H5Dopen2(gid, dname, H5P_DEFAULT)) < 0) - goto out; - for(j = 0; j < 5; j++) { - sprintf(sname, "ds_%d", j); - if((dsid = H5Dopen2(gid, sname, H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did, dsid, DIM0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - } - if(H5Dclose(did) < 0) - goto out; - } +herr_t create_DS3_int_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, int *s_wbuf, int *s1_wbuf, int *s2_wbuf, int *s3_wbuf) +{ + char name[32]; + + strcpy(name, DS_3_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_31_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_32_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_33_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_int(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * dettach for DIM0 + * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ +herr_t create_DS1_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf) +{ + char name[32]; - for(i = 0; i < 5; i++) { - sprintf(dname, "dset_%d", i); - if((did = H5Dopen2(gid, dname, H5P_DEFAULT)) < 0) - goto out; - for(j = 0; j < 5; j++) { - sprintf(sname, "ds_%d", j); - if((dsid = H5Dopen2(gid, sname, H5P_DEFAULT)) < 0) - goto out; - if(H5DSdetach_scale(did, dsid, DIM0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - } - if(H5Dclose(did) < 0) - goto out; - } - + strcpy(name, DS_1_NAME); + strcat(name, dsidx); -/*------------------------------------------------------------------------- - * attach again for DIM0 - *------------------------------------------------------------------------- - */ + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; - for(i=0; i<5; i++) - { - sprintf(dname,"dset_%d",i); - if((did = H5Dopen2(gid,dname, H5P_DEFAULT)) < 0) - goto out; - for(j=0; j<5; j++) - { - sprintf(sname,"ds_%d",j); - if((dsid = H5Dopen2(gid,sname, H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - } - if(H5Dclose(did) < 0) - goto out; - } - - /* close */ - if(H5Sclose(sid) < 0) - goto out; - if(H5Gclose(gid) < 0) - goto out; - - - PASSED(); + if(s1_wbuf!=NULL) { + strcpy(name, DS_11_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + return SUCCEED; +} /*------------------------------------------------------------------------- - * create a dataset and attach only to 1 dimension + * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ - - TESTING2("attach only to 1 dimension"); - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_e",rank,dims,NULL) < 0) - goto out; - - /* make a scale */ - if(H5LTmake_dataset_int(fid,"ds_e_1",rankds,s1_dim,NULL) < 0) - goto out; - - /* attach the DS to dimension 1 */ - if((did = H5Dopen2(fid,"dset_e", H5P_DEFAULT)) < 0) - goto out; - if((dsid = H5Dopen2(fid,"ds_e_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - if(H5DSis_attached(did,dsid,DIM1)<=0) - goto out; - - - /* try to detach all dimensions. for dimensions 0 and 2, it is an error */ - for(i=0; i<rank; i++) - { - if( i==1 ) - { - if(H5DSdetach_scale(did,dsid,(unsigned)i) < 0) - goto out; - } - else - { - if(H5DSdetach_scale(did,dsid,(unsigned)i)!=FAIL) - goto out; - } - } - - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - +herr_t create_DS2_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf) +{ + char name[32]; + + strcpy(name, DS_2_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_21_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_22_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * test 4: set/get label + * create 3 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - - TESTING2("set/get label"); - - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; +herr_t create_DS3_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf, long *s3_wbuf) +{ + char name[32]; + + strcpy(name, DS_3_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_31_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_32_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_33_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * set label + * create 4 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - - if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) - goto out; - if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) - goto out; +herr_t create_DS4_long_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, long *s_wbuf, long *s1_wbuf, long *s2_wbuf, long *s3_wbuf, long *s4_wbuf) +{ + char name[32]; + + strcpy(name, DS_4_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_41_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_42_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_43_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + if(s4_wbuf!=NULL) { + strcpy(name, DS_44_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_long(fid, name, rankds, s_dim, s4_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * get the scale name using a static buffer + * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ +herr_t create_DS1_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf) +{ + char name[32]; - if(H5DSget_label(did,DIM0,dim0_label,sizeof(dim0_label)) < 0) - goto out; - if(H5DSget_label(did,DIM1,dim1_label,sizeof(dim1_label)) < 0) - goto out; - - if(strcmp(DIM0_LABEL,dim0_label)!=0) - goto out; - if(strcmp(DIM1_LABEL,dim1_label)!=0) - goto out; + strcpy(name, DS_1_NAME); + strcat(name, dsidx); -/*------------------------------------------------------------------------- - * get the scale name using a dynamic buffer - *------------------------------------------------------------------------- - */ + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; - if((dim0_label_size=H5DSget_label(did,DIM0,NULL,(size_t)0)) < 0) - goto out; - if((dim1_label_size=H5DSget_label(did,DIM1,NULL,(size_t)0)) < 0) - goto out; - - /* allocate */ - dim0_labeld = (char*)malloc(dim0_label_size * sizeof(char)); - dim1_labeld = (char*)malloc(dim1_label_size * sizeof(char)); - if( dim0_labeld==NULL || dim1_labeld==NULL) - goto out; - - if(H5DSget_label(did,DIM0,dim0_labeld,(size_t)dim0_label_size) < 0) - goto out; - if(H5DSget_label(did,DIM1,dim1_labeld,(size_t)dim1_label_size) < 0) - goto out; - - if(strncmp(DIM0_LABEL,dim0_labeld,(size_t)(dim0_label_size-1))!=0) - goto out; - if(strncmp(DIM1_LABEL,dim1_labeld,(size_t)(dim1_label_size-1))!=0) - goto out; - - if(dim0_labeld) - { - free(dim0_labeld); - dim0_labeld=NULL; - } - if(dim1_labeld) - { - free(dim1_labeld); - dim1_labeld=NULL; - } + if(s1_wbuf!=NULL) { + strcpy(name, DS_11_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the first dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + return SUCCEED; +} /*------------------------------------------------------------------------- - * get the label using a static buffer smaller than the string lenght + * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ - - if(H5DSget_label(did,DIM0,dim0_labels,sizeof(dim0_labels)) < 0) - goto out; - if(H5DSget_label(did,DIM1,dim1_labels,sizeof(dim1_labels)) < 0) - goto out; - - if(strncmp(DIM0_LABEL,dim0_label,sizeof(dim0_labels)-1)!=0) - goto out; - if(strncmp(DIM1_LABEL,dim1_label,sizeof(dim1_labels)-1)!=0) - goto out; - - - - if(H5Dclose(did)) - goto out; - - PASSED(); +herr_t create_DS2_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf, float *s2_wbuf) +{ + char name[32]; + + strcpy(name, DS_2_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_21_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_22_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} /*------------------------------------------------------------------------- - * test 5: set scale/get scale name + * create 3 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ - TESTING2("set scale/get scale name"); - - if((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT)) < 0) - goto out; +herr_t create_DS3_float_datasets(hid_t fid, const char *dsidx, int rankds, hsize_t *s_dim, float *s_wbuf, float *s1_wbuf, float *s2_wbuf, float *s3_wbuf) +{ + char name[32]; + + strcpy(name, DS_3_NAME); + strcat(name, dsidx); + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s_wbuf) < 0) + return FAIL; + + if(s1_wbuf!=NULL) { + strcpy(name, DS_31_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s1_wbuf) < 0) + return FAIL; + } + + if(s2_wbuf!=NULL) { + strcpy(name, DS_32_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s2_wbuf) < 0) + return FAIL; + } + + if(s3_wbuf!=NULL) { + strcpy(name, DS_33_NAME); + strcat(name, dsidx); + /* make a DS dataset with an alternate scale for the second dimension */ + if(H5LTmake_dataset_float(fid, name, rankds, s_dim, s3_wbuf) < 0) + return FAIL; + } + + return SUCCEED; +} - if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) - goto out; +herr_t test_attach_scale(hid_t fid, hid_t did, const char *name, unsigned int idx) +{ + herr_t ret_value = FAIL; + hid_t dsid = -1; + + if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 0) { + if(H5DSattach_scale(did, dsid, idx) >= 0) { + if(H5DSis_attached(did, dsid, idx) > 0) { + /* printf(" scale attached "); */ + ret_value = SUCCEED; + } + else if(H5DSis_attached(did, dsid, idx) == 0) { + printf(" scale not attached "); + } + } + } + if(H5Dclose(dsid) < 0) + ret_value = FAIL; + } + + return ret_value; +} - /* verify that DS_1_NAME is a dimension scale dataset */ - if((H5DSis_scale(dsid))==0) - goto out; +herr_t test_detach_scale(hid_t fid, hid_t did, const char *name, unsigned int idx) +{ + herr_t ret_value = FAIL; + hid_t dsid = -1; + + if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 1) { + if(H5DSdetach_scale(did, dsid, idx) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 0) { + ret_value = SUCCEED; + } + } + } + if(H5Dclose(dsid) < 0) + ret_value = FAIL; + } + + return ret_value; +} -/*------------------------------------------------------------------------- - * get the scale name using a dynamic buffer - *------------------------------------------------------------------------- - */ +herr_t test_set_scalename(hid_t fid, hid_t did, const char *name, const char *scalename, unsigned int idx) +{ + herr_t ret_value = FAIL; + hid_t dsid = -1; + + if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 1) { + if(H5DSset_scale(dsid, scalename) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 1) { + ret_value = SUCCEED; + } + } + } + if(H5Dclose(dsid) < 0) + ret_value = FAIL; + } + + return ret_value; +} - /* get the lenght of the scale name (pass NULL in name) */ - if((name_len=H5DSget_scale_name(dsid,NULL,(size_t)0)) < 0) - goto out; +herr_t test_cmp_scalename(hid_t fid, hid_t did, const char *name, const char *scalename, unsigned int idx) +{ + herr_t ret_value = FAIL; + hid_t dsid = -1; + ssize_t name_len; + char *name_out=NULL; + + if((dsid = H5Dopen2(fid, name, H5P_DEFAULT)) >= 0) { + if(H5DSis_attached(did, dsid, idx) == 1) { + if((name_len=H5DSget_scale_name(dsid,NULL,(size_t)0)) > 0) { + name_out = (char*)malloc(name_len * sizeof (char)); + if(name_out != NULL) { + if(H5DSget_scale_name(dsid, name_out, (size_t)name_len) >= 0) { + if(strcmp(scalename,name_out)==0) { + ret_value = SUCCEED; + } + free(name_out); + name_out=NULL; + } + } + } + } + if(H5Dclose(dsid) < 0) + ret_value = FAIL; + } + + return ret_value; +} - /* allocate a buffer */ - name_out = (char*)malloc(name_len * sizeof(char)); - if(name_out == NULL) - goto out; +static int test_char_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "ac"); + + TESTING2("test_char_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset */ + if(create_char_dataset(fid, "ac", 0) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "ac"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "ac"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "ac"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - /* get the scale name using this buffer */ - if(H5DSget_scale_name(dsid,name_out,(size_t)name_len) < 0) - goto out; +static int test_short_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "as"); + + TESTING2("test_short_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset */ + if(create_short_dataset(fid, "as", 1) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + strcpy(scalename, DS_31_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + strcpy(scalename, DS_32_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + strcpy(scalename, DS_33_NAME); + strcat(scalename, "as"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if(strcmp(SCALE_1_NAME,name_out)!=0) - goto out; +static int test_int_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "a"); + + TESTING2("test_int_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset */ + if(create_int_dataset(fid, "a", 1) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "a"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "a"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "a"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "a"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "a"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if(name_out) - { - free(name_out); - name_out=NULL; - } +static int test_long_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "al"); + + TESTING2("test_long_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset */ + if(create_long_dataset(fid, dsname, "al", 0) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + strcpy(scalename, DS_4_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM3) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} -/*------------------------------------------------------------------------- - * get the scale name using a static buffer - *------------------------------------------------------------------------- - */ +static int test_duplicatelong_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "al2"); + + TESTING2("test_duplicatelong_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset 2 */ + if(create_long_dataset(fid, dsname, "al2", 0) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM2) < 0) + goto out; + + strcpy(scalename, DS_4_NAME); + strcat(scalename, "al"); + if(test_attach_scale(fid, did, scalename, DIM3) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - /* get the scale name using this buffer */ - if(H5DSget_scale_name(dsid,sname,sizeof(sname)) < 0) - goto out; +static int test_float_attachscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "af"); + + TESTING2("test_float_attachscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + /* make a dataset */ + if(create_float_dataset(fid, "af", 1) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "af"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "af"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "af"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "af"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "af"); + if(test_attach_scale(fid, did, scalename, DIM1) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if(strcmp(SCALE_1_NAME,sname)!=0) - goto out; +static int test_numberofscales(const char *fileext) +{ + hid_t fid = -1; + hid_t did = -1; + int nscales; /* number of scales in DIM */ + char dsname[32]; + char scalename[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "a"); + + TESTING2("test_numberofscales"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + if((nscales = H5DSget_num_scales(did, 0)) < 0) + goto out; + + if(nscales != 2) + goto out; + + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; + + if(nscales != 3) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + strcpy(dsname, DATASET_NAME); + strcat(dsname, "b"); + + /* make a dataset */ + if(create_int_dataset(fid, "b", 1) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "b"); + if(test_attach_scale(fid, did, scalename, DIM0) < 0) + goto out; + + if((nscales = H5DSget_num_scales(did, 0)) < 0) + goto out; + + if(nscales != 1) + goto out; + + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; + + if(nscales != 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} -/*------------------------------------------------------------------------- - * get the scale name using a static buffer smaller than the string lenght - *------------------------------------------------------------------------- - */ +static int test_char_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "ac"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set char scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "ac"); + strcpy(name, SCALE_1_NAME); + strcat(name, "ac"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "ac"); + strcpy(name, SCALE_2_NAME); + strcat(name, "ac"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "ac"); + strcpy(name, SCALE_3_NAME); + strcat(name, "ac"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - /* get the scale name using this buffer */ - if(H5DSget_scale_name(dsid,snames,sizeof(snames)) < 0) - goto out; +static int test_short_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "as"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set short scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_1_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_11_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_2_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_21_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_22_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_3_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + strcpy(scalename, DS_31_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_31_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + strcpy(scalename, DS_32_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_32_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + strcpy(scalename, DS_33_NAME); + strcat(scalename, "as"); + strcpy(name, SCALE_33_NAME); + strcat(name, "as"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if(strncmp(SCALE_1_NAME,snames,sizeof(snames)-1)!=0) - goto out; +static int test_int_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "a"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set int scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "a"); + strcpy(name, SCALE_1_NAME); + strcat(name, "a"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "a"); + strcpy(name, SCALE_11_NAME); + strcat(name, "a"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "a"); + strcpy(name, SCALE_2_NAME); + strcat(name, "a"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "a"); + strcpy(name, SCALE_21_NAME); + strcat(name, "a"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "a"); + strcpy(name, SCALE_22_NAME); + strcat(name, "a"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return 0; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if(H5Dclose(dsid)) - goto out; +static int test_long_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "al"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set long scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "al"); + strcpy(name, SCALE_1_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "al"); + strcpy(name, SCALE_2_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "al"); + strcpy(name, SCALE_3_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + strcpy(scalename, DS_4_NAME); + strcat(scalename, "al"); + strcpy(name, SCALE_4_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM3) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM3) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} -/*------------------------------------------------------------------------- - * add scale names - *------------------------------------------------------------------------- - */ +static int test_samelong_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "al2"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set same long scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "al"); + strcpy(name, DS_1_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "al"); + strcpy(name, DS_2_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_3_NAME); + strcat(scalename, "al"); + strcpy(name, DS_3_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM2) < 0) + goto out; + + strcpy(scalename, DS_4_NAME); + strcat(scalename, "al"); + strcpy(name, DS_4_NAME); + strcat(name, "al"); + if(test_set_scalename(fid, did, scalename, name, DIM3) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM3) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return SUCCEED; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - if((dsid = H5Dopen2(fid,DS_11_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,SCALE_11_NAME) < 0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_21_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,SCALE_21_NAME) < 0) - goto out; - if(H5Dclose(dsid)) - goto out; - - if((dsid = H5Dopen2(fid,DS_22_NAME, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,SCALE_22_NAME) < 0) - goto out; - if(H5Dclose(dsid)) - goto out; - - - PASSED(); +static int test_float_scalenames(const char *fileext) { + hid_t fid = -1; + hid_t did = -1; + char dsname[32]; + char scalename[32]; + char name[32]; + strcpy(dsname, DATASET_NAME); + strcat(dsname, "af"); + + if((fid = open_test_file(fileext)) < 0) + goto out; + + TESTING2("set float scale/cmp scale name"); + if((did = H5Dopen2(fid, dsname, H5P_DEFAULT)) >= 0) { + strcpy(scalename, DS_1_NAME); + strcat(scalename, "af"); + strcpy(name, SCALE_1_NAME); + strcat(name, "af"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_11_NAME); + strcat(scalename, "af"); + strcpy(name, SCALE_11_NAME); + strcat(name, "af"); + if(test_set_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM0) < 0) + goto out; + + strcpy(scalename, DS_2_NAME); + strcat(scalename, "af"); + strcpy(name, SCALE_2_NAME); + strcat(name, "af"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_21_NAME); + strcat(scalename, "af"); + strcpy(name, SCALE_21_NAME); + strcat(name, "af"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + strcpy(scalename, DS_22_NAME); + strcat(scalename, "af"); + strcpy(name, SCALE_22_NAME); + strcat(name, "af"); + if(test_set_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(test_cmp_scalename(fid, did, scalename, name, DIM1) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + PASSED(); + + H5Fclose(fid); + return 0; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} -/*------------------------------------------------------------------------- - * test 6: test iterate scales with a function verify_scale - *------------------------------------------------------------------------- - */ - TESTING2("iterate scales (verify scale)"); +static int test_foreign_scaleattached(const char *fileforeign) +{ + herr_t ret_value = FAIL; + hid_t fid = -1; + hid_t did = -1; + hid_t dsid = -1; + char *srcdir = getenv("srcdir"); /* the source directory */ + char filename[512]=""; /* buffer to hold name of existing file */ + + /* compose the name of the file to open, using the srcdir, if appropriate */ + if (srcdir) { + strcpy(filename,srcdir); + strcat(filename,"/"); + } + strcat(filename, fileforeign); + + TESTING2("test_foreign_scaleattached"); + + if((fid = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) + goto out; + + if((did = H5Dopen2(fid, "/dset_al", H5P_DEFAULT)) >= 0) { + if((dsid = H5Dopen2(fid, "/ds_4_al", H5P_DEFAULT)) >= 0) { + if(H5DSis_attached(did, dsid, 3) == 1) { + ret_value = SUCCEED; + } + if(H5Dclose(dsid) < 0) + goto out; + } + if(H5Dclose(did) < 0) + goto out; + } + else + goto out; + + if(ret_value == FAIL) + goto out; + + PASSED(); + + H5Fclose(fid); + return 0; + +out: + H5E_BEGIN_TRY { + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + + H5_FAILED(); + + return FAIL; +} - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; +static int test_simple(void) +{ + hid_t fid = -1; + hid_t did = -1; + hid_t dsid = -1; + hid_t sid = -1; + hid_t gid = -1; + int rank = RANK; + int rankds = 1; + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; + int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; + hsize_t s1_dim[1] = {DIM1_SIZE}; + hsize_t s2_dim[1] = {DIM2_SIZE}; + char sname[30]; + char dname[30]; + int s1_wbuf[DIM1_SIZE] = {10,20,30}; + int s11_wbuf[DIM1_SIZE] = {10,100,300}; + int s2_wbuf[DIM2_SIZE] = {100,200,300,400}; + int s21_wbuf[DIM2_SIZE] = {10,20,30,40}; + int s22_wbuf[DIM2_SIZE] = {5,10,50,300}; + char dim0_label[16]; + char dim1_label[16]; + char *dim0_labeld; + char *dim1_labeld; + char dim0_labels[3]; + char dim1_labels[3]; + ssize_t dim0_label_size; + ssize_t dim1_label_size; + unsigned int dim; + int scale_idx; + int nscales; + ssize_t name_len; + char *name_out=NULL; + char snames[3]; + int i, j; + + printf("Testing API functions\n"); + + /*------------------------------------------------------------------------- + * create a file for the test + *------------------------------------------------------------------------- + */ + + /* create a file using default properties */ + if((fid=H5Fcreate(FILE1,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * create datasets: 1 "data" dataset and 4 dimension scales + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,buf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_int(fid,"ds_a_1",rankds,s1_dim,s1_wbuf) < 0) + goto out; + + /* make a DS dataset with an alternate scale for the 2nd dimension */ + if(H5LTmake_dataset_int(fid,"ds_a_11",rankds,s1_dim,s11_wbuf) < 0) + goto out; + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_int(fid,"ds_a_2",rankds,s2_dim,s2_wbuf) < 0) + goto out; + + /* make a DS dataset with an alternate scale for the 2nd dimension */ + if(H5LTmake_dataset_int(fid,"ds_a_21",rankds,s2_dim,s21_wbuf) < 0) + goto out; + + /* make a DS dataset with an alternate scale for the 2nd dimension */ + if(H5LTmake_dataset_int(fid,"ds_a_22",rankds,s2_dim,s22_wbuf) < 0) + goto out; + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the DS_1_NAME dimension scale to "dset_a" + *------------------------------------------------------------------------- + */ + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_a_1", H5P_DEFAULT)) < 0) + goto out; + + /* attach the DS_1_NAME dimension scale to "dset_a" at dimension 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the DS_11_NAME dimension scale to "dset_a" + *------------------------------------------------------------------------- + */ + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_a_11", H5P_DEFAULT)) < 0) + goto out; + + /* attach the DS_11_NAME dimension scale to "dset_a" at dimension 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the DS_2_NAME dimension scale to "dset_a" + *------------------------------------------------------------------------- + */ + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_a_2", H5P_DEFAULT)) < 0) + goto out; + + /* attach the "ds2" dimension scale to "dset_a" as the 2nd dimension */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the DS_21_NAME dimension scale to "dset_a" + *------------------------------------------------------------------------- + */ + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_a_21", H5P_DEFAULT)) < 0) + goto out; + + /* attach the DS_21_NAME dimension scale to "dset_a" as the 2nd dimension */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the DS_22_NAME dimension scale to "dset_a" + *------------------------------------------------------------------------- + */ + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_a_22", H5P_DEFAULT)) < 0) + goto out; + + /* attach the "ds22" dimension scale to "dset_a" as the 2nd dimension */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_a" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * create datasets: 1 "data" dataset and 1 dimension scale + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_b",rank,dims,buf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_int(fid,"ds_b_1",rankds,s1_dim,s1_wbuf) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach the scale to "dset_b" + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_b", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_b_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_b" */ + if(H5Dclose(did) < 0) + goto out; + + + + /*------------------------------------------------------------------------- + * H5DSdetach_scale + *------------------------------------------------------------------------- + */ + + TESTING2("detach scales "); + + + /*------------------------------------------------------------------------- + * create datasets: one "data" dataset and 4 dimension scales + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid, "dset_c", rank, dims, buf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_int(fid, "ds_c_1", rankds, s1_dim, s1_wbuf) < 0) + goto out; + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_int(fid, "ds_c_2", rankds, s2_dim, s2_wbuf) < 0) + goto out; + + /* make a DS dataset with an alternate scale for the 2nd dimension */ + if(H5LTmake_dataset_int(fid, "ds_c_21", rankds, s2_dim, s2_wbuf) < 0) + goto out; + + /* make a DS dataset with an alternate scale for the 2nd dimension */ + if(H5LTmake_dataset_int(fid, "ds_c_22", rankds, s2_dim, s2_wbuf) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * attach the scales to "dset_c" + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_c_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 0) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_c_2", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 1) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_c_21", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 1) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_c_22", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 1) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * verify if "dset_c" has dimension scales + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + /* verify that "dset_c" has 1 dimension scale at DIM 0 */ + if((nscales = H5DSget_num_scales(did, 0)) < 0) + goto out; + + if(nscales != 1) + goto out; + /* verify that "dset_c" has 3 dimension scales at DIM 1 */ + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; - dim = 0; + if(nscales != 3) + goto out; - /* iterate trough the 1st dimension of "dset_a" and verify that its DS is valid */ - if(H5DSiterate_scales(did,dim,NULL,verify_scale,NULL) < 0) - goto out; + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * detach the "ds_c_21" dimension scale to "dset_c" + *------------------------------------------------------------------------- + */ - /* iterate trough the 2nd dimension of "dset_a" and verify that its DS is valid + /* get the dataset id for "dset_c" */ + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_c_21", H5P_DEFAULT)) < 0) + goto out; + + /* detach the "ds_c_21" dimension scale to "dset_c" in DIM 1 */ + if(H5DSdetach_scale(did, dsid, 1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_c" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * "dset_c" must have now 2 dimension scales at DIM 1 + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + /* verify that "dset_c" has 2 dimension scales at DIM 1 */ + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; + + if(nscales != 2) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * detach the "ds_c_22" dimension scale to "dset_c" + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_c" */ + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_c_22", H5P_DEFAULT)) < 0) + goto out; + + /* detach the "ds_c_22" dimension scale to "dset_c" in DIM 1 */ + if(H5DSdetach_scale(did, dsid, 1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_c" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * "dset_c" must have now 1 dimension scale at DIM 1 + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + /* verify that "dset_c" has 1 dimension scale at DIM 1 */ + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; + + if(nscales != 1) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * detach the "ds_c_2" dimension scale to "dset_c" + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_c" */ + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_c_2", H5P_DEFAULT)) < 0) + goto out; + + /* detach the "ds_c_2" dimension scale to "dset_c" in DIM 1 */ + if(H5DSdetach_scale(did, dsid, 1) < 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_c" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * "dset_c" must have now 0 dimension scales at DIM 1 + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_c", H5P_DEFAULT)) < 0) + goto out; + /* verify that "dset_c" has 1 dimension scale at DIM 1 */ + if((nscales = H5DSget_num_scales(did, 1)) < 0) + goto out; + + if(nscales != 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * create 3 datasets: 1 "data" dataset and 2 dimension scales + *------------------------------------------------------------------------- + */ + if(H5LTmake_dataset_int(fid,"dset_d",rank,dims,NULL) < 0) + goto out; + if(H5LTmake_dataset_int(fid,"ds_d_1",rankds,s1_dim,NULL) < 0) + goto out; + if(H5LTmake_dataset_int(fid,"ds_d_2",rankds,s2_dim,NULL) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach them + *------------------------------------------------------------------------- + */ + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 0) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 1) < 0) + goto out; + + if(H5Dclose(dsid) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * verify + *------------------------------------------------------------------------- + */ + + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSis_attached(did,dsid,DIM0)<=0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) + goto out; + if(H5DSis_attached(did,dsid,DIM1)<=0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * detach + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_d" */ + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) + goto out; + + /* detach the dimension scale to "dset_d" in DIM 0 */ + if(H5DSdetach_scale(did,dsid,DIM0) < 0) + goto out; + + /* verify attach, it must return 0 for no attach */ + if(H5DSis_attached(did,dsid,DIM0)!=0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_d" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach again + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_d" */ + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_d_1", H5P_DEFAULT)) < 0) + goto out; + + /* attach "ds_d_1" again in DIM 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + + /* verify attach, it must return 1 for attach */ + if(H5DSis_attached(did,dsid,DIM0)!=1) + goto out; + + /* verify that "ds_d_1" has only 1 scale at DIM0 */ + if((nscales = H5DSget_num_scales(did,DIM0)) < 0) + goto out; + if(nscales != 1) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_d" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * detach/detach + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_d" */ + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) + goto out; + + /* detach the "ds_d_2" dimension scale to "dset_d" in DIM 1 */ + if(H5DSdetach_scale(did,dsid,DIM1) < 0) + goto out; + + /* detach again, it should fail */ + if(H5DSdetach_scale(did,dsid,DIM1)==SUCCEED) + goto out; + + /* verify attach, it must return 0 for no attach */ + if(H5DSis_attached(did,dsid,DIM1)!=0) + goto out; + + /* verify that "ds_d_1" has no scale at DIM1 */ + if((nscales = H5DSget_num_scales(did,DIM1)) < 0) + goto out; + if(nscales != 0) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_d" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach twice + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_d" */ + if((did = H5Dopen2(fid,"dset_d", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_d_2", H5P_DEFAULT)) < 0) + goto out; + + /* attach "ds_d_2" in DIM 1 */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + + /* verify attach, it must return 1 for attach */ + if(H5DSis_attached(did,dsid,DIM1)!=1) + goto out; + + /* verify that "ds_d_2" has only 1 scale at DIM1 */ + if((nscales = H5DSget_num_scales(did,DIM0)) < 0) + goto out; + if(nscales != 1) + goto out; + + /* attach "ds_d_2" again in DIM 1 */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + + /* verify attach, it must return 1 for attach */ + if(H5DSis_attached(did,dsid,DIM1)!=1) + goto out; + + /* verify that "ds_d_2" has only 1 scale at DIM1 */ + if((nscales = H5DSget_num_scales(did,DIM0)) < 0) + goto out; + if(nscales != 1) + goto out; + + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + + /* close dataset ID of "dset_d" */ + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * create 10 datasets: 5 "data" dataset and 5 dimension scales + *------------------------------------------------------------------------- + */ + + /* create a group */ + if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + + /* create the data space for the dataset */ + if((sid = H5Screate_simple(rank,dims,NULL)) < 0) + goto out; + for(i = 0; i < 5; i++) { + sprintf(dname,"dset_%d",i); + if((did = H5Dcreate2(gid, dname, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + sprintf(sname,"ds_%d",i); + if((dsid = H5Dcreate2(gid, sname, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"scale") < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; + } + + /*------------------------------------------------------------------------- + * attach for DIM 0 + *------------------------------------------------------------------------- + */ + + for(i = 0; i < 5; i++) { + sprintf(dname, "dset_%d", i); + if((did = H5Dopen2(gid, dname, H5P_DEFAULT)) < 0) + goto out; + for(j = 0; j < 5; j++) { + sprintf(sname, "ds_%d", j); + if((dsid = H5Dopen2(gid, sname, H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did, dsid, DIM0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + } + if(H5Dclose(did) < 0) + goto out; + } + + /*------------------------------------------------------------------------- + * dettach for DIM0 + *------------------------------------------------------------------------- + */ + + for(i = 0; i < 5; i++) { + sprintf(dname, "dset_%d", i); + if((did = H5Dopen2(gid, dname, H5P_DEFAULT)) < 0) + goto out; + for(j = 0; j < 5; j++) { + sprintf(sname, "ds_%d", j); + if((dsid = H5Dopen2(gid, sname, H5P_DEFAULT)) < 0) + goto out; + if(H5DSdetach_scale(did, dsid, DIM0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + } + if(H5Dclose(did) < 0) + goto out; + } + + + /*------------------------------------------------------------------------- + * attach again for DIM0 + *------------------------------------------------------------------------- + */ + + for(i=0; i<5; i++) + { + sprintf(dname,"dset_%d",i); + if((did = H5Dopen2(gid,dname, H5P_DEFAULT)) < 0) + goto out; + for(j=0; j<5; j++) + { + sprintf(sname,"ds_%d",j); + if((dsid = H5Dopen2(gid,sname, H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + } + if(H5Dclose(did) < 0) + goto out; + } + + /* close */ + if(H5Sclose(sid) < 0) + goto out; + + if(H5Gclose(gid) < 0) + goto out; + + + + /*------------------------------------------------------------------------- + * create a dataset and attach only to 1 dimension + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_e",rank,dims,NULL) < 0) + goto out; + + /* make a scale */ + if(H5LTmake_dataset_int(fid,"ds_e_1",rankds,s1_dim,NULL) < 0) + goto out; + + /* attach the DS to dimension 1 */ + if((did = H5Dopen2(fid,"dset_e", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_e_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + if(H5DSis_attached(did,dsid,DIM1)<=0) + goto out; + + + /* try to detach all dimensions. for dimensions 0 and 2, it is an error */ + for(i=0; i<rank; i++) + { + if( i==1 ) + { + if(H5DSdetach_scale(did,dsid,(unsigned)i) < 0) + goto out; + } + else + { + if(H5DSdetach_scale(did,dsid,(unsigned)i)!=FAIL) + goto out; + } + } + if(H5Dclose(dsid) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + + + /*------------------------------------------------------------------------- + * H5DSset_label, H5DSget_label + *------------------------------------------------------------------------- + */ + + TESTING2("set/get label"); + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * set label + *------------------------------------------------------------------------- + */ + + if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) + goto out; + if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) + goto out; + + /*------------------------------------------------------------------------- + * get the scale name using a static buffer + *------------------------------------------------------------------------- + */ + + if(H5DSget_label(did,DIM0,dim0_label,sizeof(dim0_label)) < 0) + goto out; + if(H5DSget_label(did,DIM1,dim1_label,sizeof(dim1_label)) < 0) + goto out; + if(strcmp(DIM0_LABEL,dim0_label)!=0) + goto out; + if(strcmp(DIM1_LABEL,dim1_label)!=0) + goto out; + + /*------------------------------------------------------------------------- + * get the scale name using a dynamic buffer + *------------------------------------------------------------------------- + */ + + if((dim0_label_size=H5DSget_label(did,DIM0,NULL,(size_t)0)) < 0) + goto out; + if((dim1_label_size=H5DSget_label(did,DIM1,NULL,(size_t)0)) < 0) + goto out; + + /* allocate */ + dim0_labeld = (char*)malloc(dim0_label_size * sizeof (char)); + dim1_labeld = (char*)malloc(dim1_label_size * sizeof (char)); + if( dim0_labeld==NULL || dim1_labeld==NULL) + goto out; + if(H5DSget_label(did,DIM0,dim0_labeld,(size_t)dim0_label_size) < 0) + goto out; + if(H5DSget_label(did,DIM1,dim1_labeld,(size_t)dim1_label_size) < 0) + goto out; + if(strncmp(DIM0_LABEL,dim0_labeld,(size_t)(dim0_label_size-1))!=0) + goto out; + if(strncmp(DIM1_LABEL,dim1_labeld,(size_t)(dim1_label_size-1))!=0) + goto out; + if(dim0_labeld) + { + free(dim0_labeld); + dim0_labeld=NULL; + } + if(dim1_labeld) + { + free(dim1_labeld); + dim1_labeld=NULL; + } + + + /*------------------------------------------------------------------------- + * get the label using a static buffer smaller than the string lenght + *------------------------------------------------------------------------- + */ + + if(H5DSget_label(did,DIM0,dim0_labels,sizeof(dim0_labels)) < 0) + goto out; + if(H5DSget_label(did,DIM1,dim1_labels,sizeof(dim1_labels)) < 0) + goto out; + if(strncmp(DIM0_LABEL,dim0_label,sizeof(dim0_labels)-1)!=0) + goto out; + if(strncmp(DIM1_LABEL,dim1_label,sizeof(dim1_labels)-1)!=0) + goto out; + if(H5Dclose(did)) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * H5DSget_scale_name, H5DSget_scale_name + *------------------------------------------------------------------------- + */ + + + TESTING2("set scale/get scale name"); + if((dsid = H5Dopen2(fid,"ds_a_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"Latitude set 0") < 0) + goto out; + + /* verify that DS_1_NAME is a dimension scale dataset */ + if((H5DSis_scale(dsid)) == 0) + goto out; + + /*------------------------------------------------------------------------- + * get the scale name using a dynamic buffer + *------------------------------------------------------------------------- + */ + + /* get the lenght of the scale name (pass NULL in name) */ + if((name_len=H5DSget_scale_name(dsid,NULL,(size_t)0)) < 0) + goto out; + + /* allocate a buffer */ + name_out = (char*)malloc(name_len * sizeof (char)); + if(name_out == NULL) + goto out; + + /* get the scale name using this buffer */ + if(H5DSget_scale_name(dsid, name_out, (size_t)name_len) < 0) + goto out; + + if(strcmp("Latitude set 0",name_out)!=0) + goto out; + if(name_out) + { + free(name_out); + name_out=NULL; + } + + /*------------------------------------------------------------------------- + * get the scale name using a static buffer + *------------------------------------------------------------------------- + */ + + /* get the scale name using this buffer */ + if(H5DSget_scale_name(dsid, sname, sizeof (sname)) < 0) + goto out; + + if(strcmp("Latitude set 0",sname)!=0) + goto out; + + /*------------------------------------------------------------------------- + * get the scale name using a static buffer smaller than the string lenght + *------------------------------------------------------------------------- + */ + + /* get the scale name using this buffer */ + if(H5DSget_scale_name(dsid, snames, sizeof (snames)) < 0) + goto out; + + if(strncmp("Latitude set 0",snames,sizeof(snames)-1)!=0) + goto out; + if(H5Dclose(dsid)) + goto out; + + /*------------------------------------------------------------------------- + * add scale names + *------------------------------------------------------------------------- + */ + + if((dsid = H5Dopen2(fid,"ds_a_11", H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"Latitude set 1") < 0) + goto out; + if(H5Dclose(dsid)) + goto out; + + if((dsid = H5Dopen2(fid,"ds_a_2", H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"Longitude set 0") < 0) + goto out; + if(H5Dclose(dsid)) + goto out; + + if((dsid = H5Dopen2(fid,"ds_a_21", H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"Longitude set 1") < 0) + goto out; + if(H5Dclose(dsid)) + goto out; + + if((dsid = H5Dopen2(fid,"ds_a_22", H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,"Longitude set 2") < 0) + goto out; + if(H5Dclose(dsid)) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * H5DSiterate_scales + *------------------------------------------------------------------------- + */ + + + TESTING2("iterate scales"); + + + /*------------------------------------------------------------------------- + * test 6: test iterate scales with a function verify_scale + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + dim = 0; + + /* iterate trough the 1st dimension of "dset_a" and verify that its DS is valid */ + if(H5DSiterate_scales(did,dim,NULL,verify_scale,NULL) < 0) + goto out; + + /* iterate trough the 2nd dimension of "dset_a" and verify that its DS is valid start at DS index 2 */ - dim = 1; - scale_idx = 2; - - if(H5DSiterate_scales(did,dim,&scale_idx,verify_scale,NULL) < 0) - goto out; - - /* close dataset ID of "dset_a" */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); + dim = 1; + scale_idx = 2; + if(H5DSiterate_scales(did,dim,&scale_idx,verify_scale,NULL) < 0) + goto out; + /* close dataset ID of "dset_a" */ + if(H5Dclose(did) < 0) + goto out; -/*------------------------------------------------------------------------- - * test 7: test iterate scales with a function read_scale - *------------------------------------------------------------------------- - */ - TESTING2("iterate scales (read scale values)"); + /*------------------------------------------------------------------------- + * test iterate scales with a function read_scale + *------------------------------------------------------------------------- + */ - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - dim = 0; + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + dim = 0; - /* iterate trough the 1st dimension of "dset_a" and read the DS */ - if(H5DSiterate_scales(did,dim,NULL,read_scale,s1_wbuf) < 0) - goto out; + /* iterate trough the 1st dimension of "dset_a" and read the DS */ + if(H5DSiterate_scales(did,dim,NULL,read_scale,s1_wbuf) < 0) + goto out; - /* iterate trough the 2nd dimension of "dset_a" and read the DS + /* iterate trough the 2nd dimension of "dset_a" and read the DS start at DS index 2 */ - dim = 1; - scale_idx = 2; - - if(H5DSiterate_scales(did,dim,&scale_idx,read_scale,s22_wbuf) < 0) - goto out; - - /* close dataset ID of "dset_a" */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * test 8: test iterate scales with a function match_dim_scale - *------------------------------------------------------------------------- - */ - TESTING2("iterate scales (verify the scale sizes match)"); - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* get dataset space */ - if((sid = H5Dget_space(did)) < 0) - goto out; - - /* get rank */ - if((rank=H5Sget_simple_extent_ndims(sid)) < 0) - goto out; - - /* get dimensions of dataset */ - if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) - goto out; - - { - int match_size; /* does this scale size matches the dataset DIM size */ - int idx=0; /* scale index to start iterating, on return, index where iterator stoped */ - - /* iterate trough all the dimensions */ - for(dim=0; dim<(unsigned)rank; dim++) - { - if((match_size=H5DSiterate_scales(did,dim,&idx,match_dim_scale,NULL)) < 0) - goto out; - - /* "dset_a" was defined with all dimension scales size matching the size of its dimensions */ - if(match_size==0) - goto out; - - /* both DS_1_NAME and DS_2_NAME are the on the first index */ - if(idx!=0) - goto out; - } - } - - - /* close */ - if(H5Dclose(did) < 0) - goto out; - if(H5Sclose(sid) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * test 9: test iterate scales with a function match_dim_scale - *------------------------------------------------------------------------- - */ - TESTING2("iterate scales (verify the scale sizes do not match)"); - -/*------------------------------------------------------------------------- - * create 3 datasets: 1 "data" dataset and dimension scales (some are empty) - *------------------------------------------------------------------------- - */ - if(H5LTmake_dataset_int(fid,"dset_f",rank,dims,buf) < 0) - goto out; - if(H5LTmake_dataset_int(fid,"ds_f_1",rankds,s1_dim,NULL) < 0) - goto out; - if(H5LTmake_dataset_int(fid,"ds_f_11",rankds,s1_dim,s1_wbuf) < 0) - goto out; - if(H5LTmake_dataset_int(fid,"ds_f_2",rankds,s2_dim,NULL) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach them - *------------------------------------------------------------------------- - */ - if((did = H5Dopen2(fid,"dset_f", H5P_DEFAULT)) < 0) - goto out; - - if((dsid = H5Dopen2(fid,"ds_f_1", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if((dsid = H5Dopen2(fid,"ds_f_11", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if((dsid = H5Dopen2(fid,"ds_f_2", H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - if(H5Dclose(did) < 0) - goto out; - -/*------------------------------------------------------------------------- - * verify match - *------------------------------------------------------------------------- - */ - /* get the dataset id for "dset_f" */ - if((did = H5Dopen2(fid,"dset_f", H5P_DEFAULT)) < 0) - goto out; - - /* get dataset space */ - if((sid = H5Dget_space(did)) < 0) - goto out; - - /* get rank */ - if((rank=H5Sget_simple_extent_ndims(sid)) < 0) - goto out; - - /* get dimensions of dataset */ - if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) - goto out; - - { - int match_size; /* does this scale size matches the dataset DIM size */ - int idx; /* scale index to start iterating, on return, index where iterator stoped */ - - /* iterate trough all the dimensions */ - for(dim=0; dim<(unsigned)rank; dim++) - { - /* always start at 1st scale */ - idx=0; - - if((match_size=H5DSiterate_scales(did,dim,&idx,match_dim_scale,NULL)) < 0) - goto out; - - /* "dset_e" was defined with : - dim 0: 2 scales, first is empty - dim 1: 1 scale, empty */ - switch(dim) - { - case 0: /* for DIM 0, we get a valid scale at IDX 1 */ - if(match_size!=1 && idx!=1) - goto out; - break; - case 1: /* for DIM 1, we get no valid scales */ - if(match_size!=0 && idx!=0) - goto out; - }/*switch*/ - }/*for*/ - } - - /* close */ - if(H5Dclose(did) < 0) - goto out; - if(H5Sclose(sid) < 0) - goto out; - - PASSED(); - - -/*------------------------------------------------------------------------- - * end - *------------------------------------------------------------------------- - */ - - /* close */ - H5Fclose(fid); - - return 0; - - /* error zone, gracefully close */ -out: - H5E_BEGIN_TRY { - H5Dclose(did); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + dim = 1; + scale_idx = 2; + if(H5DSiterate_scales(did, dim, &scale_idx, read_scale, s22_wbuf) < 0) + goto out; + + /* close dataset ID of "dset_a" */ + if(H5Dclose(did) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * test iterate scales with a function match_dim_scale + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /* get dataset space */ + if((sid = H5Dget_space(did)) < 0) + goto out; + + /* get rank */ + if((rank = H5Sget_simple_extent_ndims(sid)) < 0) + goto out; + + /* get dimensions of dataset */ + if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) + goto out; + { + int match_size; /* does this scale size matches the dataset DIM size */ + int idx = 0; /* scale index to start iterating, on return, index where iterator stoped */ + + /* iterate trough all the dimensions */ + for(dim=0; dim<(unsigned)rank; dim++) + { + if((match_size=H5DSiterate_scales(did,dim,&idx,match_dim_scale,NULL)) < 0) + goto out; + + /* "dset_a" was defined with all dimension scales size matching the size of its dimensions */ + if(match_size==0) + goto out; + + /* both DS_1_NAME and DS_2_NAME are the on the first index */ + if(idx!=0) + goto out; + } + } + + + /* close */ + if(H5Dclose(did) < 0) + goto out; + if(H5Sclose(sid) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * test iterate scales with a function match_dim_scale + *------------------------------------------------------------------------- + */ + + /*------------------------------------------------------------------------- + * create 3 datasets: 1 "data" dataset and dimension scales (some are empty) + *------------------------------------------------------------------------- + */ + if(H5LTmake_dataset_int(fid, "dset_f", rank, dims, buf) < 0) + goto out; + + if(H5LTmake_dataset_int(fid,"ds_f_1",rankds,s1_dim,NULL) < 0) + goto out; + if(H5LTmake_dataset_int(fid, "ds_f_11", rankds, s1_dim, s1_wbuf) < 0) + goto out; + + if(H5LTmake_dataset_int(fid,"ds_f_2",rankds,s2_dim,NULL) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach them + *------------------------------------------------------------------------- + */ + if((did = H5Dopen2(fid,"dset_f", H5P_DEFAULT)) < 0) + goto out; + if((dsid = H5Dopen2(fid,"ds_f_1", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_f_11", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + if((dsid = H5Dopen2(fid,"ds_f_2", H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + if(H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * verify match + *------------------------------------------------------------------------- + */ + /* get the dataset id for "dset_f" */ + if((did = H5Dopen2(fid,"dset_f", H5P_DEFAULT)) < 0) + goto out; + + /* get dataset space */ + if((sid = H5Dget_space(did)) < 0) + goto out; + + /* get rank */ + if((rank = H5Sget_simple_extent_ndims(sid)) < 0) + goto out; + + /* get dimensions of dataset */ + if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) + goto out; + { + int match_size; /* does this scale size matches the dataset DIM size */ + int idx; /* scale index to start iterating, on return, index where iterator stoped */ + + /* iterate trough all the dimensions */ + for(dim=0; dim<(unsigned)rank; dim++) + { + /* always start at 1st scale */ + idx=0; + + if((match_size=H5DSiterate_scales(did,dim,&idx,match_dim_scale,NULL)) < 0) + goto out; + + /* "dset_e" was defined with : + dim 0: 2 scales, first is empty + dim 1: 1 scale, empty */ + switch(dim) + { + case 0: /* for DIM 0, we get a valid scale at IDX 1 */ + if(match_size!=1 && idx!=1) + goto out; + break; + case 1: /* for DIM 1, we get no valid scales */ + if(match_size!=0 && idx!=0) + goto out; + break; + default: + assert(0); + break; + }/*switch*/ + }/*for*/ + } + + /* close */ + if(H5Dclose(did) < 0) + goto out; + if(H5Sclose(sid) < 0) + goto out; + + PASSED(); + + + /*------------------------------------------------------------------------- + * end + *------------------------------------------------------------------------- + */ + + /* close */ + H5Fclose(fid); + return 0; + + /* error zone */ + out: + H5E_BEGIN_TRY + { + H5Dclose(did); + H5Dclose(dsid); + H5Fclose(fid); + H5Sclose(sid); + H5Gclose(gid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; } @@ -1465,25 +3439,25 @@ out: static herr_t verify_scale(hid_t dset, unsigned dim, hid_t scale_id, void *visitor_data) { - /* define a default zero value for return. This will cause the iterator to continue */ - int ret = 0; + /* define a default zero value for return. This will cause the iterator to continue */ + int ret = 0; - /* unused */ - dset=dset; - dim=dim; - visitor_data=visitor_data; + /* unused */ + dset=dset; + dim=dim; + visitor_data=visitor_data; - /* define a positive value for return value. This will cause the iterator to + /* define a positive value for return value. This will cause the iterator to immediately return that positive value, indicating short-circuit success - */ + */ - /* the parameter DS dataset must be a valid DS dataset */ - if((H5DSis_scale(scale_id))==1) - { - ret = 1; - } + /* the parameter DS dataset must be a valid DS dataset */ + if((H5DSis_scale(scale_id))==1) + { + ret = 1; + } - return ret; + return ret; } @@ -1507,78 +3481,81 @@ static herr_t verify_scale(hid_t dset, unsigned dim, hid_t scale_id, void *visit static herr_t read_scale(hid_t dset, unsigned dim, hid_t scale_id, void *visitor_data) { - int ret = 0; /* define a default zero value for return. This will cause the iterator to continue */ - hid_t sid; /* space ID */ - hid_t tid = -1; /* file type ID */ - hid_t mtid = -1; /* memory type ID */ - hssize_t nelmts; /* number of data elements */ - char *buf=NULL; /* data buffer */ - size_t size; - int i; - char *data=visitor_data; - - /* unused */ - dset=dset; - dim=dim; - - /* get space */ - if((sid = H5Dget_space(scale_id)) < 0) - goto out; - /* get type */ - if((tid = H5Dget_type(scale_id)) < 0) - goto out; - /* get size of the DS array */ - if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) - goto out; - /* get type */ - if((mtid=H5Tget_native_type(tid,H5T_DIR_DEFAULT)) < 0) - goto out; - /* get type size */ - if((size=H5Tget_size(mtid))==0) - goto out; - - if(nelmts) - { - buf=(char *) malloc((size_t)(nelmts*size)); - if( buf==NULL) - goto out; - if(H5Dread(scale_id,mtid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf) < 0) - goto out; - - for(i=0; i<nelmts; i++) - { - if(buf[i] != data[i]) - { - printf("read and write buffers differ\n"); - goto out; - } - } - - } /* if */ - - if(H5Sclose(sid) < 0) - goto out; - if(H5Tclose(tid) < 0) - goto out; - if(H5Tclose(mtid) < 0) - goto out; - if(buf) - free(buf); - - - return ret; - - /* error zone, gracefully close */ - out: - H5E_BEGIN_TRY { - H5Sclose(sid); - H5Tclose(tid); - H5Tclose(mtid); - if(buf) - free(buf); - } H5E_END_TRY; - - return FAIL; + int ret = 0; /* define a default zero value for return. This will cause the iterator to continue */ + hid_t sid = -1; /* space ID */ + hid_t tid = -1; /* file type ID */ + hid_t mtid = -1; /* memory type ID */ + hssize_t nelmts; /* number of data elements */ + char *buf=NULL; /* data buffer */ + size_t size; + int i; + char *data = (char*) visitor_data; + + /* unused */ + dset=dset; + dim=dim; + + /* get space */ + if((sid = H5Dget_space(scale_id)) < 0) + goto out; + /* get type */ + if((tid = H5Dget_type(scale_id)) < 0) + goto out; + /* get size of the DS array */ + if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) + goto out; + /* get type */ + if((mtid=H5Tget_native_type(tid,H5T_DIR_DEFAULT)) < 0) + goto out; + /* get type size */ + if((size=H5Tget_size(mtid))==0) + goto out; + + if(nelmts) + { + buf=(char *) malloc((size_t)(nelmts*size)); + if( buf==NULL) + goto out; + if(H5Dread(scale_id,mtid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf) < 0) + goto out; + + for(i=0; i<nelmts; i++) + { + if(buf[i] != data[i]) + { + printf("read and write buffers differ\n"); + goto out; + } + } + + } /* if */ + + if(H5Sclose(sid) < 0) + goto out; + if(H5Tclose(tid) < 0) + goto out; + if(H5Tclose(mtid) < 0) + goto out; + if(buf) + free(buf); + + + return ret; + + /* error zone */ +out: + H5E_BEGIN_TRY + { + H5Sclose(sid); + H5Tclose(tid); + H5Tclose(mtid); + if(buf) + { + free(buf); + } + } H5E_END_TRY; + + return FAIL; } @@ -1601,73 +3578,75 @@ static herr_t read_scale(hid_t dset, unsigned dim, hid_t scale_id, void *visitor static herr_t match_dim_scale(hid_t did, unsigned dim, hid_t dsid, void *visitor_data) { - int ret = 0; /* define a default zero value for return. This will cause the iterator to continue */ - hid_t sid; /* space ID */ - hssize_t nelmts; /* size of a dimension scale array */ - hsize_t dims[H5S_MAX_RANK]; /* dimensions of dataset */ - hsize_t storage_size; + int ret = 0; /* define a default zero value for return. This will cause the iterator to continue */ + hid_t sid; /* space ID */ + hssize_t nelmts; /* size of a dimension scale array */ + hsize_t dims[H5S_MAX_RANK]; /* dimensions of dataset */ + hsize_t storage_size; /* Stop compiler from whining about "unused parameters" */ visitor_data = visitor_data; -/*------------------------------------------------------------------------- - * get DID (dataset) space info - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * get DID (dataset) space info + *------------------------------------------------------------------------- + */ - /* get dataset space */ - if((sid = H5Dget_space(did)) < 0) - goto out; + /* get dataset space */ + if((sid = H5Dget_space(did)) < 0) + goto out; - /* get dimensions of dataset */ - if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) - goto out; + /* get dimensions of dataset */ + if(H5Sget_simple_extent_dims(sid,dims,NULL) < 0) + goto out; - /* close the dataspace id */ - if(H5Sclose(sid) < 0) - goto out; + /* close the dataspace id */ + if(H5Sclose(sid) < 0) + goto out; -/*------------------------------------------------------------------------- - * get DSID (scale) space info - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * get DSID (scale) space info + *------------------------------------------------------------------------- + */ - /* get the space for the scale */ - if((sid = H5Dget_space(dsid)) < 0) - goto out; + /* get the space for the scale */ + if((sid = H5Dget_space(dsid)) < 0) + goto out; - /* get size of the DS array */ - if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) - goto out; + /* get size of the DS array */ + if((nelmts = H5Sget_simple_extent_npoints(sid)) < 0) + goto out; - /* close */ - if(H5Sclose(sid) < 0) - goto out; + /* close */ + if(H5Sclose(sid) < 0) + goto out; - /* the size of the DS array must match the dimension of the dataset */ - if(nelmts == (hssize_t)dims[dim]) - ret = 1; + /* the size of the DS array must match the dimension of the dataset */ + if(nelmts == (hssize_t)dims[dim]) + ret = 1; - /* if the scale is empty assume it cannot be used */ - storage_size=H5Dget_storage_size(dsid); + /* if the scale is empty assume it cannot be used */ + storage_size=H5Dget_storage_size(dsid); - if(storage_size==0) - ret = 0; + if(storage_size==0) + ret = 0; - return ret; + return ret; out: - H5E_BEGIN_TRY { - H5Sclose(sid); - } H5E_END_TRY; - return FAIL; + H5E_BEGIN_TRY + { + H5Sclose(sid); + } H5E_END_TRY; + return FAIL; } /*------------------------------------------------------------------------- - * Function: op_bogus + * Function: op_continue * - * Purpose: example operator function used by H5DSiterate_scales, that does nothing + * Purpose: example operator function used by H5DSiterate_scales that continues + * iteration and increments visitor_data (Note: int*) * * Return: * The return values from an operator are: @@ -1680,399 +3659,431 @@ out: *------------------------------------------------------------------------- */ -static herr_t op_bogus(hid_t dset, unsigned dim, hid_t scale_id, void *visitor_data) +static herr_t op_continue(hid_t dset, unsigned dim, hid_t scale_id, void *visitor_data) { /* Stop compiler from whining about "unused parameters" */ dset = dset; dim = dim; scale_id = scale_id; - visitor_data = visitor_data; - - /* define a default zero value for return. This will cause the iterator to continue */ - return 0; -} - - - - + if ( visitor_data != NULL ) + { + (*(int *)visitor_data)++; + } + /* define a default zero value for return. This will cause the iterator to continue */ + return 0; +} /*------------------------------------------------------------------------- - * test error conditions + * Function: op_stop + * + * Purpose: example operator function used by H5DSiterate_scales that stops + * iteration and increments visitor_data (Note: int*) + * + * Return: + * The return values from an operator are: + * Zero causes the iterator to continue, returning zero when all group members have been processed. + * Positive causes the iterator to immediately return that positive value, indicating + * short-circuit success. The iterator can be restarted at the next group member. + * Negative causes the iterator to immediately return that value, indicating failure. + * The iterator can be restarted at the next group member. + * *------------------------------------------------------------------------- */ -static int test_errors(void) +static herr_t op_stop(hid_t dset, unsigned dim, hid_t scale_id, void *visitor_data) { - hid_t fid; /* file ID */ - int rank = RANK; /* rank of data dataset */ - int rankds = 1; /* rank of DS dataset */ - hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ - hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ - hid_t did = -1; /* dataset ID */ - hid_t dsid = -1; /* scale ID */ - hid_t gid = -1; /* group ID */ - hid_t sid = -1; /* space ID */ - hid_t sidds = -1; /* space ID */ - hsize_t pal_dims[] = {9,3}; - - printf("Testing error conditions\n"); - -/*------------------------------------------------------------------------- - * create a file, spaces, dataset and group ids - *------------------------------------------------------------------------- - */ - - /* create a file using default properties */ - if((fid = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* create a group */ - if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* create the data space for the dataset */ - if((sid = H5Screate_simple(rank, dims, NULL)) < 0) - goto out; - /* create the data space for the scale */ - if((sidds = H5Screate_simple(rankds, s1_dim, NULL)) < 0) - goto out; - /* create a dataset */ - if((did = H5Dcreate2(fid, "dset_a", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* create a dataset for the scale */ - if((dsid = H5Dcreate2(fid, "ds_a", H5T_NATIVE_INT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attempt to attach a dataset to itself, it should fail - *------------------------------------------------------------------------- - */ - - TESTING2("attach a dataset to itself"); - - if(H5DSattach_scale(did, did, 0) == SUCCEED) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * attempt to attach a group with a dataset, it should fail - *------------------------------------------------------------------------- - */ - TESTING2("attach a group with a dataset"); - - if(H5DSattach_scale(gid,dsid,0)==SUCCEED) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * attempt to attach a dataset with a group, it should fail - *------------------------------------------------------------------------- - */ - TESTING2("attach a dataset with a group"); - - if(H5DSattach_scale(did,gid,0)==SUCCEED) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * attempt to set scale for a group, it should fail - *------------------------------------------------------------------------- - */ - TESTING2("set scale for a group"); - - if(H5DSset_scale(gid,"scale 1")==SUCCEED) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * close IDs for this set - *------------------------------------------------------------------------- - */ - - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - if(H5Sclose(sid) < 0) - goto out; - if(H5Sclose(sidds) < 0) - goto out; - if(H5Gclose(gid) < 0) - goto out; - + /* Stop compiler from whining about "unused parameters" */ + dset = dset; + dim = dim; + scale_id = scale_id; + + if ( visitor_data != NULL ) + { + (*(int *)visitor_data)++; + } + + /* define a default 1 value for return. This will cause the iterator to stop */ + return 1; +} /*------------------------------------------------------------------------- - * try to attach a scale that has scales + * test error conditions *------------------------------------------------------------------------- */ - TESTING2("attach a scale that has scales"); - - /* create the data space for the scale */ - if((sidds = H5Screate_simple(rankds, s1_dim, NULL)) < 0) - goto out; - - /* create a dataset "ds_b" for the scale */ - if((dsid = H5Dcreate2(fid, "ds_b", H5T_NATIVE_INT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - - /* open the previous written "ds_a" */ - if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) - goto out; - - /* attach "ds_b" to "ds_a", valid */ - if(H5DSattach_scale(did, dsid, 0) < 0) - goto out; - - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - if(H5Sclose(sidds) < 0) - goto out; +static int test_errors(void) +{ + hid_t fid; /* file ID */ + int rank = RANK; /* rank of data dataset */ + int rankds = 1; /* rank of DS dataset */ + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ + hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* scale ID */ + hid_t gid = -1; /* group ID */ + hid_t sid = -1; /* space ID */ + hid_t sidds = -1; /* space ID */ + hsize_t pal_dims[] = {9,3}; + + printf("Testing error conditions\n"); + + /*------------------------------------------------------------------------- + * create a file, spaces, dataset and group ids + *------------------------------------------------------------------------- + */ + + /* create a file using default properties */ + if((fid = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* create a group */ + if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* create the data space for the dataset */ + if((sid = H5Screate_simple(rank, dims, NULL)) < 0) + goto out; + /* create the data space for the scale */ + if((sidds = H5Screate_simple(rankds, s1_dim, NULL)) < 0) + goto out; + /* create a dataset */ + if((did = H5Dcreate2(fid, "dset_a", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* create a dataset for the scale */ + if((dsid = H5Dcreate2(fid, "ds_a", H5T_NATIVE_INT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attempt to attach a dataset to itself, it should fail + *------------------------------------------------------------------------- + */ + + TESTING2("attach a dataset to itself"); + + if(H5DSattach_scale(did, did, 0) == SUCCEED) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * attempt to attach a group with a dataset, it should fail + *------------------------------------------------------------------------- + */ + TESTING2("attach a group with a dataset"); + + if(H5DSattach_scale(gid,dsid,0)==SUCCEED) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * attempt to attach a dataset with a group, it should fail + *------------------------------------------------------------------------- + */ + TESTING2("attach a dataset with a group"); + + if(H5DSattach_scale(did,gid,0)==SUCCEED) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * attempt to set scale for a group, it should fail + *------------------------------------------------------------------------- + */ + TESTING2("set scale for a group"); + + if(H5DSset_scale(gid,"scale 1")==SUCCEED) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * close IDs for this set + *------------------------------------------------------------------------- + */ + + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; + if(H5Sclose(sid) < 0) + goto out; + if(H5Sclose(sidds) < 0) + goto out; + if(H5Gclose(gid) < 0) + goto out; + + + /*------------------------------------------------------------------------- + * try to attach a scale that has scales + *------------------------------------------------------------------------- + */ + + TESTING2("attach a scale that has scales"); + + /* create the data space for the scale */ + if((sidds = H5Screate_simple(rankds, s1_dim, NULL)) < 0) + goto out; + + /* create a dataset "ds_b" for the scale */ + if((dsid = H5Dcreate2(fid, "ds_b", H5T_NATIVE_INT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + + /* open the previous written "ds_a" */ + if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) + goto out; + + /* attach "ds_b" to "ds_a", valid */ + if(H5DSattach_scale(did, dsid, 0) < 0) + goto out; + + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; + if(H5Sclose(sidds) < 0) + goto out; + + /* open the previous written "dset_a" */ + if((did = H5Dopen2(fid, "dset_a", H5P_DEFAULT)) < 0) + goto out; + + /* open the previous written "ds_a" */ + if((dsid = H5Dopen2(fid, "ds_a", H5P_DEFAULT)) < 0) + goto out; - /* open the previous written "dset_a" */ - if((did = H5Dopen2(fid, "dset_a", H5P_DEFAULT)) < 0) - goto out; + /* try to attach "ds_a" to "dset_a", not valid */ + if(H5DSattach_scale(did,dsid,0)==SUCCEED) + goto out; - /* open the previous written "ds_a" */ - if((dsid = H5Dopen2(fid, "ds_a", H5P_DEFAULT)) < 0) - goto out; + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; + + /* open the previous written "ds_a" */ + if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) + goto out; + + /* open the previous written "ds_b" */ + if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) + goto out; + + /* detach "ds_b" to "ds_a" */ + if(H5DSdetach_scale(did,dsid,0) < 0) + goto out; + + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; - /* try to attach "ds_a" to "dset_a", not valid */ - if(H5DSattach_scale(did,dsid,0)==SUCCEED) - goto out; + PASSED(); - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; + /*------------------------------------------------------------------------- + * try to attach a dataset that is a scale + *------------------------------------------------------------------------- + */ - /* open the previous written "ds_a" */ - if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) - goto out; + TESTING2("attach to a dataset that is a scale"); - /* open the previous written "ds_b" */ - if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) - goto out; + /* open the previous written "ds_b", that is a scale */ + if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) + goto out; - /* detach "ds_b" to "ds_a" */ - if(H5DSdetach_scale(did,dsid,0) < 0) - goto out; + /* open the previous written "ds_a" */ + if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) + goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; + /* try to attach "ds_a" to "ds_b", not valid */ + if(H5DSattach_scale(dsid,did,0)==SUCCEED) + goto out; + + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; - PASSED(); + PASSED(); -/*------------------------------------------------------------------------- - * try to attach a dataset that is a scale - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * try to attach a scale to an image, pallete or table + *------------------------------------------------------------------------- + */ - TESTING2("attach to a dataset that is a scale"); + TESTING2("attach to a dataset that is a reserved class dataset"); - /* open the previous written "ds_b", that is a scale */ - if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) - goto out; + /* make an image */ + if(H5IMmake_image_8bit(fid,"image",(hsize_t)100,(hsize_t)50,NULL) < 0) + goto out; - /* open the previous written "ds_a" */ - if((did = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) - goto out; + /* make a palette */ + if(H5IMmake_palette(fid,"pallete",pal_dims,NULL) < 0) + goto out; - /* try to attach "ds_a" to "ds_b", not valid */ - if(H5DSattach_scale(dsid,did,0)==SUCCEED) - goto out; + /* open the previous written "ds_b" */ + if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) + goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; + /* open the image dataset */ + if((did = H5Dopen2(fid,"image", H5P_DEFAULT)) < 0) + goto out; - PASSED(); + /* try to attach "ds_a" to the image, not valid */ + if(H5DSattach_scale(did,dsid,0)==SUCCEED) + goto out; -/*------------------------------------------------------------------------- - * try to attach a scale to an image, pallete or table - *------------------------------------------------------------------------- - */ + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; - TESTING2("attach to a dataset that is a reserved class dataset"); + PASSED(); - /* make an image */ - if(H5IMmake_image_8bit(fid,"image",(hsize_t)100,(hsize_t)50,NULL) < 0) - goto out; + /*------------------------------------------------------------------------- + * is scale + *------------------------------------------------------------------------- + */ - /* make a palette */ - if(H5IMmake_palette(fid,"pallete",pal_dims,NULL) < 0) - goto out; + TESTING2("is scale"); - /* open the previous written "ds_b" */ - if((dsid = H5Dopen2(fid,"ds_b", H5P_DEFAULT)) < 0) - goto out; + /* open a non scale dataset */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; - /* open the image dataset */ - if((did = H5Dopen2(fid,"image", H5P_DEFAULT)) < 0) - goto out; + /* verify that it is not a dimension scale dataset */ + if((H5DSis_scale(did))==1) + goto out; - /* try to attach "ds_a" to the image, not valid */ - if(H5DSattach_scale(did,dsid,0)==SUCCEED) - goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; + /* open the group. */ + if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) + goto out; - PASSED(); + /* verify that it is not a dimension scale dataset */ + if((H5DSis_scale(gid))==1) + goto out; -/*------------------------------------------------------------------------- - * is scale - *------------------------------------------------------------------------- - */ - - TESTING2("is scale"); - - /* open a non scale dataset */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* verify that it is not a dimension scale dataset */ - if((H5DSis_scale(did))==1) - goto out; - - /* close */ - if(H5Dclose(did) < 0) - goto out; + /* close */ + if(H5Gclose(gid) < 0) + goto out; - /* open the group. */ - if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) - goto out; + PASSED(); - /* verify that it is not a dimension scale dataset */ - if((H5DSis_scale(gid))==1) - goto out; - /* close */ - if(H5Gclose(gid) < 0) - goto out; - - PASSED(); - - -/*------------------------------------------------------------------------- - * detach - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * detach + *------------------------------------------------------------------------- + */ - TESTING2("detach scale from dataset it is not attached to"); + TESTING2("detach scale from dataset it is not attached to"); - /* open the previous written "ds_a" */ - if((dsid = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) - goto out; + /* open the previous written "ds_a" */ + if((dsid = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) + goto out; - /* open the previous written "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; + /* open the previous written "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; - /* try to detach "ds_a" from "dset_a" */ - if(H5DSdetach_scale(did,dsid,0)==SUCCEED) - goto out; + /* try to detach "ds_a" from "dset_a" */ + if(H5DSdetach_scale(did,dsid,0)==SUCCEED) + goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; - PASSED(); + PASSED(); -/*------------------------------------------------------------------------- - * detach - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * detach + *------------------------------------------------------------------------- + */ - TESTING2("detach scale from group"); + TESTING2("detach scale from group"); - /* open the previous written "ds_a" */ - if((dsid = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) - goto out; + /* open the previous written "ds_a" */ + if((dsid = H5Dopen2(fid,"ds_a", H5P_DEFAULT)) < 0) + goto out; - /* open the group. */ - if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) - goto out; + /* open the group. */ + if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) + goto out; - /* try to detach "ds_a" from "grp" */ - if(H5DSdetach_scale(gid,dsid,0)==SUCCEED) - goto out; + /* try to detach "ds_a" from "grp" */ + if(H5DSdetach_scale(gid,dsid,0)==SUCCEED) + goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - if(H5Gclose(gid) < 0) - goto out; + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + if(H5Gclose(gid) < 0) + goto out; - PASSED(); + PASSED(); -/*------------------------------------------------------------------------- - * detach - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * detach + *------------------------------------------------------------------------- + */ - TESTING2("detach scale when scale is group"); + TESTING2("detach scale when scale is group"); - /* open the previous written "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; + /* open the previous written "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; - /* open the group. */ - if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) - goto out; + /* open the group. */ + if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) + goto out; - /* try to detach "grp" from "dset_a" */ - if(H5DSdetach_scale(did,gid,0)==SUCCEED) - goto out; + /* try to detach "grp" from "dset_a" */ + if(H5DSdetach_scale(did,gid,0)==SUCCEED) + goto out; - /* close */ - if(H5Dclose(did) < 0) - goto out; - if(H5Gclose(gid) < 0) - goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; + if(H5Gclose(gid) < 0) + goto out; - PASSED(); + PASSED(); - /* close */ - if(H5Fclose(fid) < 0) - goto out; + /* close */ + if(H5Fclose(fid) < 0) + goto out; - return 0; + return 0; - /* error zone, gracefully close */ + /* error zone */ out: - H5E_BEGIN_TRY { - H5Sclose(sid); - H5Sclose(sidds); - H5Dclose(did); - H5Dclose(dsid); - H5Gclose(gid); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + H5E_BEGIN_TRY + { + H5Sclose(sid); + H5Sclose(sidds); + H5Dclose(did); + H5Dclose(dsid); + H5Gclose(gid); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; } @@ -2084,182 +4095,184 @@ out: static int test_iterators(void) { - hid_t fid; /* file ID */ - int rank = RANK; /* rank of data dataset */ - int rankds = 1; /* rank of DS dataset */ - hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ - hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ - hid_t gid = -1; /* group ID */ - hid_t did; /* dataset ID */ - hid_t dsid; /* scale ID */ - char dname[30]; /* dataset name */ - int i; - - printf("Testing iterators\n"); - -/*------------------------------------------------------------------------- - * create a file, spaces, dataset and group ids - *------------------------------------------------------------------------- - */ - - /* create a file using default properties */ - if((fid=H5Fcreate(FILE3,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) - goto out; - /* create a group */ - if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* close */ - if(H5Gclose(gid) < 0) - goto out; - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,NULL) < 0) - goto out; - /* make a DS dataset */ - if(H5LTmake_dataset_int(fid,"ds_a",rankds,s1_dim,NULL) < 0) - goto out; - -/*------------------------------------------------------------------------- - * iterate when the dataset has no scales - *------------------------------------------------------------------------- - */ - - TESTING2("iterate when the dataset has no scales "); - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* try to iterate trough the 1st dimension of "dset_a", return error */ - if(H5DSiterate_scales(did,0,NULL,verify_scale,NULL) < 0) - goto out; + hid_t fid; /* file ID */ + int rank = RANK; /* rank of data dataset */ + int rankds = 1; /* rank of DS dataset */ + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ + hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ + hid_t gid = -1; /* group ID */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* scale ID */ + char dname[30]; /* dataset name */ + int i; + + printf("Testing iterators\n"); + + /*------------------------------------------------------------------------- + * create a file, spaces, dataset and group ids + *------------------------------------------------------------------------- + */ + + /* create a file using default properties */ + if((fid=H5Fcreate(FILE3,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + /* create a group */ + if((gid = H5Gcreate2(fid, "grp", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* close */ + if(H5Gclose(gid) < 0) + goto out; + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,NULL) < 0) + goto out; + /* make a DS dataset */ + if(H5LTmake_dataset_int(fid,"ds_a",rankds,s1_dim,NULL) < 0) + goto out; + + /*------------------------------------------------------------------------- + * iterate when the dataset has no scales + *------------------------------------------------------------------------- + */ + + TESTING2("iterate when the dataset has no scales "); + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /* try to iterate trough the 1st dimension of "dset_a", return error */ + if(H5DSiterate_scales(did,0,NULL,verify_scale,NULL) < 0) + goto out; + + /* close */ + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + + /*------------------------------------------------------------------------- + * iterate on dimension that is outside the rank + *------------------------------------------------------------------------- + */ + + TESTING2("iterate on dimension that is outside the rank "); + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /* try to iterate trough the 3rd dimension of "dset_a", return error */ + if(H5DSiterate_scales(did,3,NULL,verify_scale,NULL)==SUCCEED) + goto out; + + /* close */ + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * iterate for dimension with many scales + *------------------------------------------------------------------------- + */ + + TESTING2("iterate for dimension with many scales "); + + /* open the previously written "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + for(i=0; i<100; i++) + { + /* make a DS */ + sprintf(dname,"ds_%d",i); + if(H5LTmake_dataset_int(fid,dname,rankds,s1_dim,NULL) < 0) + goto out; + /* open */ + if((dsid = H5Dopen2(fid,dname, H5P_DEFAULT)) < 0) + goto out; + /* attach */ + if(H5DSattach_scale(did,dsid,0) < 0) + goto out; + /* close */ + if(H5Dclose(dsid) < 0) + goto out; + } - /* close */ - if(H5Dclose(did) < 0) - goto out; + /* iterate trough the 1st dimension of "dset_a" */ + if(H5DSiterate_scales(did,0,NULL,op_continue,NULL) < 0) + goto out; - PASSED(); + /* close */ + if(H5Dclose(did) < 0) + goto out; + PASSED(); -/*------------------------------------------------------------------------- - * iterate on dimension that is outside the rank - *------------------------------------------------------------------------- - */ - - TESTING2("iterate on dimension that is outside the rank "); - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* try to iterate trough the 3rd dimension of "dset_a", return error */ - if(H5DSiterate_scales(did,3,NULL,verify_scale,NULL)==SUCCEED) - goto out; - - /* close */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * iterate for dimension with many scales - *------------------------------------------------------------------------- - */ - - TESTING2("iterate for dimension with many scales "); - - /* open the previously written "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - for(i=0; i<100; i++) - { - /* make a DS */ - sprintf(dname,"ds_%d",i); - if(H5LTmake_dataset_int(fid,dname,rankds,s1_dim,NULL) < 0) - goto out; - /* open */ - if((dsid = H5Dopen2(fid,dname, H5P_DEFAULT)) < 0) - goto out; - /* attach */ - if(H5DSattach_scale(did,dsid,0) < 0) - goto out; - /* close */ - if(H5Dclose(dsid) < 0) - goto out; - } - - /* iterate trough the 1st dimension of "dset_a" */ - if(H5DSiterate_scales(did,0,NULL,op_bogus,NULL) < 0) - goto out; - - /* close */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * iterate on group - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * iterate on group + *------------------------------------------------------------------------- + */ - TESTING2("iterate on group "); + TESTING2("iterate on group "); - /* open */ - if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) - goto out; + /* open */ + if((gid = H5Gopen2(fid, "grp", H5P_DEFAULT)) < 0) + goto out; - /* try to iterate, return error */ - if(H5DSiterate_scales(gid,0,NULL,verify_scale,NULL)==SUCCEED) - goto out; + /* try to iterate, return error */ + if(H5DSiterate_scales(gid,0,NULL,verify_scale,NULL)==SUCCEED) + goto out; - /* close */ - if(H5Gclose(gid) < 0) - goto out; + /* close */ + if(H5Gclose(gid) < 0) + goto out; - PASSED(); + PASSED(); -/*------------------------------------------------------------------------- - * iterate in deleted scales - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * iterate in deleted scales + *------------------------------------------------------------------------- + */ - TESTING2("iterate in deleted scales "); + TESTING2("iterate in deleted scales "); - if(H5Ldelete(fid, "ds_0", H5P_DEFAULT) < 0) - goto out; + if(H5Ldelete(fid, "ds_0", H5P_DEFAULT) < 0) + goto out; - /* open the previously written "dset_a" */ - if((did = H5Dopen2(fid, "dset_a", H5P_DEFAULT)) < 0) - goto out; + /* open the previously written "dset_a" */ + if((did = H5Dopen2(fid, "dset_a", H5P_DEFAULT)) < 0) + goto out; - /* iterate */ - if(H5DSiterate_scales(did, 0, NULL, op_bogus, NULL) == SUCCEED) - goto out; + /* iterate */ + if(H5DSiterate_scales(did, 0, NULL, op_continue, NULL) == SUCCEED) + goto out; - /* close */ - if(H5Dclose(did) < 0) - goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; - PASSED(); + PASSED(); - /* close */ - if(H5Fclose(fid) < 0) - goto out; + /* close */ + if(H5Fclose(fid) < 0) + goto out; - return 0; + return 0; - /* error zone, gracefully close */ + /* error zone */ out: - H5E_BEGIN_TRY { - H5Gclose(gid); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + H5E_BEGIN_TRY + { + H5Gclose(gid); + H5Dclose(did); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; } @@ -2270,204 +4283,207 @@ out: static int test_rank(void) { - hid_t fid; /* file ID */ - hid_t did = -1; /* dataset ID */ - hid_t dsid = -1; /* scale ID */ - hid_t sid; /* space ID */ - hid_t sidds; /* space ID */ - hsize_t dims1[1] = {DIM1_SIZE}; /* size of data dataset */ - hsize_t dims2[2] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ - hsize_t dims3[3] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE}; /* size of data dataset */ - hsize_t dimss[2] = {1,1}; /* size of data dataset */ - char name[30]; /* dataset name buffer */ - char names[30]; /* dataset scale name buffer */ - char namel[30]; /* dataset label name buffer */ - int bufi[1]={2}; - float buff[1]={1}; - int i; - - printf("Testing ranks\n"); - -/*------------------------------------------------------------------------- - * create a file, a dataset, scales - *------------------------------------------------------------------------- - */ - - /* create a file using default properties */ - if((fid=H5Fcreate(FILE4,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) - goto out; - - /* make a dataset a 3D data dataset */ - if(H5LTmake_dataset_int(fid,"dset_a",3,dims3,NULL) < 0) - goto out; - - /* make a 1D scale dataset */ - if(H5LTmake_dataset_int(fid,"ds_a_0",1,dims1,NULL) < 0) - goto out; - - /* make a 2D scale dataset */ - if(H5LTmake_dataset_int(fid,"ds_a_1",2,dims2,NULL) < 0) - goto out; - - /* make a 3D scale dataset */ - if(H5LTmake_dataset_int(fid,"ds_a_2",3,dims3,NULL) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach - *------------------------------------------------------------------------- - */ - - TESTING2("attach"); - - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - for(i=0; i<3; i++) - { - sprintf(name,"ds_a_%d",i); - if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) - goto out; - if(H5DSattach_scale(did,dsid,(unsigned)i) < 0) - goto out; - if(H5DSis_attached(did,dsid,(unsigned)i)<=0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - } - - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - - -/*------------------------------------------------------------------------- - * detach - *------------------------------------------------------------------------- - */ - - TESTING2("detach"); - - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - for(i=0; i<3; i++) - { - sprintf(name,"ds_a_%d",i); - if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) - goto out; - if(H5DSdetach_scale(did,dsid,(unsigned)i) < 0) - goto out; - if(H5DSis_attached(did,dsid,(unsigned)i)!=0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - } - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * attach, set, get names, labels - *------------------------------------------------------------------------- - */ - - TESTING2("attach, set, get names, labels"); - - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - for(i=0; i<3; i++) - { - sprintf(name,"ds_a_%d",i); - if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) - goto out; - if(H5DSset_scale(dsid,name) < 0) - goto out; - if(H5DSattach_scale(did,dsid,(unsigned)i) < 0) - goto out; - if(H5DSis_attached(did,dsid,(unsigned)i)<=0) - goto out; - if(H5DSget_scale_name(dsid,names,sizeof(names)) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - if(H5DSset_label(did,(unsigned)i,name) < 0) - goto out; - if(H5DSget_label(did,(unsigned)i,namel,sizeof(namel)) < 0) - goto out; - if(strcmp(name,names)!=0) - goto out; - if(strcmp(name,namel)!=0) - goto out; - } - - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * attach a scalar scale - *------------------------------------------------------------------------- - */ - - TESTING2("attach a scalar scale"); - - /* create the data space for the dataset */ - if((sid = H5Screate_simple(2, dimss, NULL)) < 0) - goto out; - /* create a dataset of rank 2 */ - if((did = H5Dcreate2(fid, "dset_b", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* create a scalar space */ - if((sidds = H5Screate(H5S_SCALAR)) < 0) - goto out; - /* create a dataset of scalar rank for the scale */ - if((dsid = H5Dcreate2(fid, "ds_b_1", H5T_NATIVE_FLOAT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) - goto out; - /* write */ - if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bufi) < 0) - goto out; - if(H5Dwrite(dsid, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buff) < 0) - goto out; - /* attach */ - if(H5DSattach_scale(did, dsid, 0) < 0) - goto out; - if(H5DSattach_scale(did, dsid, 1) < 0) - goto out; - /* close */ - if(H5Sclose(sid) < 0) - goto out; - if(H5Sclose(sidds) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - if(H5Dclose(dsid) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - if(H5Fclose(fid) < 0) - goto out; - - return 0; - - /* error zone, gracefully close */ + hid_t fid; /* file ID */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* scale ID */ + hid_t sid = -1; /* space ID */ + hid_t sidds = -1; /* space ID */ + hsize_t dims1[1] = {DIM1_SIZE}; /* size of data dataset */ + hsize_t dims2[2] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ + hsize_t dims3[3] = {DIM1_SIZE,DIM2_SIZE,DIM3_SIZE}; /* size of data dataset */ + hsize_t dimss[2] = {1,1}; /* size of data dataset */ + char name[30]; /* dataset name buffer */ + char names[30]; /* dataset scale name buffer */ + char namel[30]; /* dataset label name buffer */ + int bufi[1]={2}; + float buff[1]={1}; + int i; + + printf("Testing ranks\n"); + + /*------------------------------------------------------------------------- + * create a file, a dataset, scales + *------------------------------------------------------------------------- + */ + + /* create a file using default properties */ + if((fid=H5Fcreate(FILE4,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + + /* make a dataset a 3D data dataset */ + if(H5LTmake_dataset_int(fid,"dset_a",3,dims3,NULL) < 0) + goto out; + + /* make a 1D scale dataset */ + if(H5LTmake_dataset_int(fid,"ds_a_0",1,dims1,NULL) < 0) + goto out; + + /* make a 2D scale dataset */ + if(H5LTmake_dataset_int(fid,"ds_a_1",2,dims2,NULL) < 0) + goto out; + + /* make a 3D scale dataset */ + if(H5LTmake_dataset_int(fid,"ds_a_2",3,dims3,NULL) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach + *------------------------------------------------------------------------- + */ + + TESTING2("attach"); + + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + for(i=0; i<3; i++) + { + sprintf(name,"ds_a_%d",i); + if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) + goto out; + if(H5DSattach_scale(did,dsid,(unsigned)i) < 0) + goto out; + if(H5DSis_attached(did,dsid,(unsigned)i)<=0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + } + + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + + /*------------------------------------------------------------------------- + * detach + *------------------------------------------------------------------------- + */ + + TESTING2("detach"); + + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + for(i=0; i<3; i++) + { + sprintf(name,"ds_a_%d",i); + if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) + goto out; + if(H5DSdetach_scale(did,dsid,(unsigned)i) < 0) + goto out; + if(H5DSis_attached(did,dsid,(unsigned)i)!=0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + } + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * attach, set, get names, labels + *------------------------------------------------------------------------- + */ + + TESTING2("attach, set, get names, labels"); + + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + for(i=0; i<3; i++) + { + sprintf(name,"ds_a_%d",i); + if((dsid = H5Dopen2(fid,name, H5P_DEFAULT)) < 0) + goto out; + if(H5DSset_scale(dsid,name) < 0) + goto out; + if(H5DSattach_scale(did,dsid,(unsigned)i) < 0) + goto out; + if(H5DSis_attached(did,dsid,(unsigned)i)<=0) + goto out; + if(H5DSget_scale_name(dsid,names,sizeof(names)) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + if(H5DSset_label(did,(unsigned)i,name) < 0) + goto out; + if(H5DSget_label(did,(unsigned)i,namel,sizeof(namel)) < 0) + goto out; + if(strcmp(name,names)!=0) + goto out; + if(strcmp(name,namel)!=0) + goto out; + } + + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * attach a scalar scale + *------------------------------------------------------------------------- + */ + + TESTING2("attach a scalar scale"); + + /* create the data space for the dataset */ + if((sid = H5Screate_simple(2, dimss, NULL)) < 0) + goto out; + /* create a dataset of rank 2 */ + if((did = H5Dcreate2(fid, "dset_b", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* create a scalar space */ + if((sidds = H5Screate(H5S_SCALAR)) < 0) + goto out; + /* create a dataset of scalar rank for the scale */ + if((dsid = H5Dcreate2(fid, "ds_b_1", H5T_NATIVE_FLOAT, sidds, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + goto out; + /* write */ + if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bufi) < 0) + goto out; + if(H5Dwrite(dsid, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buff) < 0) + goto out; + /* attach */ + if(H5DSattach_scale(did, dsid, 0) < 0) + goto out; + if(H5DSattach_scale(did, dsid, 1) < 0) + goto out; + /* close */ + if(H5Sclose(sid) < 0) + goto out; + if(H5Sclose(sidds) < 0) + goto out; + if(H5Dclose(did) < 0) + goto out; + if(H5Dclose(dsid) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + if(H5Fclose(fid) < 0) + goto out; + + return 0; + + /* error zone */ out: - H5E_BEGIN_TRY { - H5Dclose(did); - H5Dclose(dsid); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + H5E_BEGIN_TRY + { + H5Dclose(did); + H5Dclose(dsid); + H5Sclose(sidds); + H5Sclose(sid); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; } @@ -2478,173 +4494,174 @@ out: static int test_types(void) { - hid_t fid; /* file ID */ - hid_t did = -1; /* dataset ID */ - hid_t dsid = -1; /* DS dataset ID */ - int rank = RANK; /* rank of data dataset */ - int rankds = 1; /* rank of DS dataset */ - hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ - int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; /* data of data dataset */ - hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ - hsize_t s2_dim[1] = {DIM2_SIZE}; /* size of DS 2 dataset */ - float s1_float[DIM1_SIZE] = {10,20,30}; /* data of DS 1 dataset */ - unsigned short s2_ushort[DIM2_SIZE] = {10,20,30,40}; /* data of DS 2 dataset */ - const char *s1_str = "ABC"; - const char *s2_str = "ABCD"; - - printf("Testing scales with several datatypes\n"); - -/*------------------------------------------------------------------------- - * create a file for the test - *------------------------------------------------------------------------- - */ - /* create a file using default properties */ - if((fid=H5Fcreate(FILE5,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) - goto out; - -/*------------------------------------------------------------------------- - * create datasets: 1 "data" dataset and 2 dimension scales - *------------------------------------------------------------------------- - */ - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,buf) < 0) - goto out; - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_float(fid,DS_1_NAME,rankds,s1_dim,s1_float) < 0) - goto out; - - /* make a DS dataset for the second dimension */ - if(H5LTmake_dataset(fid,DS_2_NAME,rankds,s2_dim,H5T_NATIVE_USHORT,s2_ushort) < 0) - goto out; - -/*------------------------------------------------------------------------- - * floating point and short scales - *------------------------------------------------------------------------- - */ - - TESTING2("floating point and short scales"); - - /* get the dataset id for "dset_a" */ - if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_1_NAME dimension scale to "dset_a" at dimension 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_2_NAME dimension scale to "dset_a" at dimension 1 */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* set a label */ - if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) - goto out; - if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) - goto out; - /* close */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * create datasets: 1 "data" dataset and 2 dimension scales - *------------------------------------------------------------------------- - */ - - /* make a dataset */ - if(H5LTmake_dataset_int(fid,"dset_b",rank,dims,buf) < 0) - goto out; - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_string(fid,"ds_b_1",s1_str) < 0) - goto out; - - /* make a DS dataset for the second dimension */ - if(H5LTmake_dataset_string(fid,"ds_b_2",s2_str) < 0) - goto out; - -/*------------------------------------------------------------------------- - * floating point and short scales - *------------------------------------------------------------------------- - */ - - TESTING2("string scales"); - - /* get the dataset id for "dset_b" */ - if((did = H5Dopen2(fid,"dset_b", H5P_DEFAULT)) < 0) - goto out; - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_b_1", H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_1_NAME dimension scale to "dset_b" at dimension 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"ds_b_2", H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_2_NAME dimension scale to "dset_b" at dimension 1 */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* set a label */ - if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) - goto out; - if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) - goto out; - /* close */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - if(H5Fclose(fid) < 0) - goto out; - - return 0; - - /* error zone, gracefully close */ + hid_t fid; /* file ID */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* DS dataset ID */ + int rank = RANK; /* rank of data dataset */ + int rankds = 1; /* rank of DS dataset */ + hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */ + int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; /* data of data dataset */ + hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */ + hsize_t s2_dim[1] = {DIM2_SIZE}; /* size of DS 2 dataset */ + float s1_float[DIM1_SIZE] = {10,20,30}; /* data of DS 1 dataset */ + unsigned short s2_ushort[DIM2_SIZE] = {10,20,30,40}; /* data of DS 2 dataset */ + const char *s1_str = "ABC"; + const char *s2_str = "ABCD"; + + printf("Testing scales with several datatypes\n"); + + /*------------------------------------------------------------------------- + * create a file for the test + *------------------------------------------------------------------------- + */ + /* create a file using default properties */ + if((fid=H5Fcreate(FILE5,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * create datasets: 1 "data" dataset and 2 dimension scales + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_a",rank,dims,buf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_float(fid,DS_1_NAME,rankds,s1_dim,s1_float) < 0) + goto out; + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset(fid,DS_2_NAME,rankds,s2_dim,H5T_NATIVE_USHORT,s2_ushort) < 0) + goto out; + + /*------------------------------------------------------------------------- + * floating point and short scales + *------------------------------------------------------------------------- + */ + + TESTING2("floating point and short scales"); + + /* get the dataset id for "dset_a" */ + if((did = H5Dopen2(fid,"dset_a", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,DS_1_NAME, H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_1_NAME dimension scale to "dset_a" at dimension 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,DS_2_NAME, H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_2_NAME dimension scale to "dset_a" at dimension 1 */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* set a label */ + if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) + goto out; + if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) + goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * create datasets: 1 "data" dataset and 2 dimension scales + *------------------------------------------------------------------------- + */ + + /* make a dataset */ + if(H5LTmake_dataset_int(fid,"dset_b",rank,dims,buf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_string(fid,"ds_b_1",s1_str) < 0) + goto out; + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_string(fid,"ds_b_2",s2_str) < 0) + goto out; + + /*------------------------------------------------------------------------- + * floating point and short scales + *------------------------------------------------------------------------- + */ + + TESTING2("string scales"); + + /* get the dataset id for "dset_b" */ + if((did = H5Dopen2(fid,"dset_b", H5P_DEFAULT)) < 0) + goto out; + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_b_1", H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_1_NAME dimension scale to "dset_b" at dimension 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"ds_b_2", H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_2_NAME dimension scale to "dset_b" at dimension 1 */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* set a label */ + if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) + goto out; + if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) + goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + if(H5Fclose(fid) < 0) + goto out; + + return 0; + + /* error zone */ out: - H5E_BEGIN_TRY { - H5Dclose(did); - H5Dclose(dsid); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + H5E_BEGIN_TRY + { + H5Dclose(did); + H5Dclose(dsid); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; } /*------------------------------------------------------------------------- @@ -2654,149 +4671,163 @@ out: static int test_data(void) { - hid_t fid; /* file ID */ - hid_t did = -1; /* dataset ID */ - hid_t dsid = -1; /* DS dataset ID */ - hid_t dcpl; /* dataset creation property list */ - hid_t sid; /* dataspace ID */ - float *vals=NULL; /* array to hold data values */ - float *latbuf=NULL; /* array to hold the latitude values */ - float *lonbuf=NULL; /* array to hold the longitude values */ - hsize_t dims[2]; /* array to hold dimensions */ - hsize_t latdims[1]; /* array to hold dimensions */ - hsize_t londims[1]; /* array to hold dimensions */ - float fill=-99; /* fill value */ - - - printf("Testing reading ASCII data and generate HDF5 data with scales\n"); - -/*------------------------------------------------------------------------- - * create a file for the test - *------------------------------------------------------------------------- - */ - /* create a file using default properties */ - if((fid=H5Fcreate(FILE6,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) - goto out; - -/*------------------------------------------------------------------------- - * read data - *------------------------------------------------------------------------- - */ - - /* read ASCII bathymetry data */ - if(read_data("dsdata.txt",2,dims,&vals) < 0) - goto out; - - /* read the latitude */ - if(read_data("dslat.txt",1,latdims,&latbuf) < 0) - goto out; - - /* read the longitude */ - if(read_data("dslon.txt",1,londims,&lonbuf) < 0) - goto out; - -/*------------------------------------------------------------------------- - * generating scales - *------------------------------------------------------------------------- - */ - - TESTING2("generating scales"); - -/*------------------------------------------------------------------------- - * create datasets: 1 "data" dataset and 2 dimension scales - *------------------------------------------------------------------------- - */ - - /* make a DS dataset for the first dimension */ - if(H5LTmake_dataset_float(fid, "lat", 1, latdims, latbuf) < 0) - goto out; - - /* make a DS dataset for the second dimension */ - if(H5LTmake_dataset_float(fid, "lon", 1, londims, lonbuf) < 0) - goto out; - - /* make a dataset for the data. a fill value is set */ - if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) - goto out; - if(H5Pset_fill_value(dcpl, H5T_NATIVE_FLOAT, &fill) < 0) - goto out; - if((sid = H5Screate_simple(2, dims, NULL)) < 0) - goto out; - if((did = H5Dcreate2(fid, "data", H5T_NATIVE_FLOAT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) - goto out; - if(H5Dwrite(did, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, vals) < 0) - goto out; - if(H5Dclose(did) < 0) - goto out; - if(H5Pclose(dcpl) < 0) - goto out; - if(H5Sclose(sid) < 0) - goto out; - -/*------------------------------------------------------------------------- - * attach - *------------------------------------------------------------------------- - */ - - /* get the dataset id for "data" */ - if((did = H5Dopen2(fid,"data", H5P_DEFAULT)) < 0) - goto out; - - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"lat", H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_1_NAME dimension scale to "data" at dimension 0 */ - if(H5DSattach_scale(did,dsid,DIM0) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* get the DS dataset id */ - if((dsid = H5Dopen2(fid,"lon", H5P_DEFAULT)) < 0) - goto out; - /* attach the DS_2_NAME dimension scale to "data" at dimension 1 */ - if(H5DSattach_scale(did,dsid,DIM1) < 0) - goto out; - /* set name */ - if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) - goto out; - /* close DS id */ - if(H5Dclose(dsid) < 0) - goto out; - /* set a label */ - if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) - goto out; - if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) - goto out; - /* close */ - if(H5Dclose(did) < 0) - goto out; - - PASSED(); - - - -/*------------------------------------------------------------------------- - * close - *------------------------------------------------------------------------- - */ - if(H5Fclose(fid) < 0) - goto out; - - return 0; - - /* error zone, gracefully close */ + hid_t fid; /* file ID */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* DS dataset ID */ + hid_t dcpl; /* dataset creation property list */ + hid_t sid; /* dataspace ID */ + float *vals=NULL; /* array to hold data values */ + float *latbuf=NULL; /* array to hold the latitude values */ + float *lonbuf=NULL; /* array to hold the longitude values */ + hsize_t dims[2]; /* array to hold dimensions */ + hsize_t latdims[1]; /* array to hold dimensions */ + hsize_t londims[1]; /* array to hold dimensions */ + float fill=-99; /* fill value */ + + + printf("Testing reading ASCII data and generate HDF5 data with scales\n"); + + /*------------------------------------------------------------------------- + * create a file for the test + *------------------------------------------------------------------------- + */ + /* create a file using default properties */ + if((fid=H5Fcreate(FILE6,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + + /*------------------------------------------------------------------------- + * generating scales + *------------------------------------------------------------------------- + */ + + TESTING2("generating scales"); + + /*------------------------------------------------------------------------- + * create datasets: 1 "data" dataset and 2 dimension scales + *------------------------------------------------------------------------- + */ + + /* read the latitude */ + if(read_data("dslat.txt",1,latdims,&latbuf) < 0) + goto out; + + /* make a DS dataset for the first dimension */ + if(H5LTmake_dataset_float(fid, "lat", 1, latdims, latbuf) < 0) + goto out; + + free( latbuf ); + latbuf = NULL; + + /* read the longitude */ + if(read_data("dslon.txt",1,londims,&lonbuf) < 0) + goto out; + + /* make a DS dataset for the second dimension */ + if(H5LTmake_dataset_float(fid, "lon", 1, londims, lonbuf) < 0) + goto out; + + free( lonbuf ); + lonbuf = NULL; + + /* make a dataset for the data. a fill value is set */ + if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) + goto out; + if(H5Pset_fill_value(dcpl, H5T_NATIVE_FLOAT, &fill) < 0) + goto out; + + /* read ASCII bathymetry data and dimensions to create dataset */ + if(read_data("dsdata.txt",2,dims,&vals) < 0) + goto out; + + if((sid = H5Screate_simple(2, dims, NULL)) < 0) + goto out; + if((did = H5Dcreate2(fid, "data", H5T_NATIVE_FLOAT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + goto out; + if(H5Dwrite(did, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, vals) < 0) + goto out; + + free ( vals ); + vals = NULL; + + if(H5Dclose(did) < 0) + goto out; + if(H5Pclose(dcpl) < 0) + goto out; + if(H5Sclose(sid) < 0) + goto out; + + /*------------------------------------------------------------------------- + * attach + *------------------------------------------------------------------------- + */ + + /* get the dataset id for "data" */ + if((did = H5Dopen2(fid,"data", H5P_DEFAULT)) < 0) + goto out; + + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"lat", H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_1_NAME dimension scale to "data" at dimension 0 */ + if(H5DSattach_scale(did,dsid,DIM0) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_1_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* get the DS dataset id */ + if((dsid = H5Dopen2(fid,"lon", H5P_DEFAULT)) < 0) + goto out; + /* attach the DS_2_NAME dimension scale to "data" at dimension 1 */ + if(H5DSattach_scale(did,dsid,DIM1) < 0) + goto out; + /* set name */ + if(H5DSset_scale(dsid,SCALE_2_NAME) < 0) + goto out; + /* close DS id */ + if(H5Dclose(dsid) < 0) + goto out; + /* set a label */ + if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0) + goto out; + if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0) + goto out; + /* close */ + if(H5Dclose(did) < 0) + goto out; + + PASSED(); + + + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + if(H5Fclose(fid) < 0) + goto out; + + return 0; + + /* error zone */ out: - H5E_BEGIN_TRY { - H5Dclose(did); - H5Dclose(dsid); - H5Fclose(fid); - } H5E_END_TRY; - H5_FAILED(); - return FAIL; + H5E_BEGIN_TRY + { + H5Dclose(did); + H5Dclose(dsid); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + + if (latbuf) + free( latbuf ); + if (lonbuf) + free( lonbuf ); + if (vals) + free( vals ); + return FAIL; } @@ -2814,53 +4845,260 @@ out: *------------------------------------------------------------------------- */ -static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf ) +static int read_data( const char* fname, + int ndims, + hsize_t *dims, + float **buf ) { - int i, n; - unsigned j; - char str[20]; - size_t nelms; - FILE *f; - float val; - char *srcdir = getenv("srcdir"); /* the source directory */ - char data_file[512]; /* buffer to hold name of existing data file */ - - strcpy(data_file, ""); - /* compose the name of the file to open, using the srcdir, if appropriate */ - if(srcdir) - { - strcpy(data_file, srcdir); - strcat(data_file, "/"); - } - /* read first data file */ - strcat(data_file,fname); - - f = fopen(data_file, "r"); - if( f == NULL ) - { - printf( "Could not open file %s\n", data_file ); - return -1; - } - - for(i=0, nelms=1; i < ndims; i++) - { - fscanf( f, "%s %u", str, &j); - fscanf( f, "%d",&n ); - dims[i] = n; - nelms *= n; - } - - *buf = (float*) malloc (nelms * sizeof( float )); - - for(j = 0; j < nelms; j++) - { - fscanf( f, "%f",&val ); - (*buf)[j] = val; - } - fclose(f); - - return 1; + int i, n; + unsigned j; + char str[20]; + size_t nelms; + FILE *f; + float val; + char *srcdir = getenv("srcdir"); /* the source directory */ + char data_file[512]; /* buffer to hold name of existing data file */ + + strcpy(data_file, ""); + /* compose the name of the file to open, using the srcdir, if appropriate */ + if(srcdir) + { + strcpy(data_file, srcdir); + strcat(data_file, "/"); + } + /* read first data file */ + strcat(data_file,fname); + + f = fopen(data_file, "r"); + if( f == NULL ) + { + printf( "Could not open file %s\n", data_file ); + return -1; + } + + for(i=0, nelms=1; i < ndims; i++) + { + fscanf( f, "%s %u", str, &j); + fscanf( f, "%d",&n ); + dims[i] = n; + nelms *= n; + } + + *buf = (float*) malloc (nelms * sizeof( float )); + + if ( *buf == NULL ) + { + printf( "memory allocation failed\n" ); + fclose(f); + return -1; + } + + for(j = 0; j < nelms; j++) + { + fscanf( f, "%f",&val ); + (*buf)[j] = val; + } + fclose(f); + + return 1; } +/*------------------------------------------------------------------------- + * test parameter errors + *------------------------------------------------------------------------- + */ + +static int test_errors2(void) +{ + hid_t fid; /* file ID */ + hid_t did = -1; /* dataset ID */ + hid_t dsid = -1; /* scale ID */ + hsize_t dimd[2] = {3,3}; /* size of data dataset */ + hsize_t dims[1] = {3}; /* size of scale dataset */ + char lbuf[255]; /* label buffer */ + ssize_t label_len; /* label lenght */ + int scale_idx; /* scale index */ + int nscales; /* number of scales in DIM */ + int count; /* visitor data */ + + printf("Testing parameter errors\n"); + + /*------------------------------------------------------------------------- + * create a file, a dataset, scales + *------------------------------------------------------------------------- + */ + + /* create a file using default properties */ + if ((fid=H5Fcreate(FILE7,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT)) < 0) + goto out; + + /* make a dataset */ + if (H5LTmake_dataset_int(fid,"dset",2,dimd,NULL) < 0) + goto out; + + /* make a scale dataset */ + if(H5LTmake_dataset_int(fid,"ds1",1,dims,NULL) < 0) + goto out; + + /* make a scale dataset */ + if(H5LTmake_dataset_int(fid,"ds2",1,dims,NULL) < 0) + goto out; + + + TESTING2("attach scales"); + + + /*------------------------------------------------------------------------- + * attach with invalid indices + *------------------------------------------------------------------------- + */ + + if ((did = H5Dopen2(fid,"dset", H5P_DEFAULT)) < 0) + goto out; + if ((dsid = H5Dopen2(fid,"ds1", H5P_DEFAULT)) < 0) + goto out; + if (H5DSattach_scale(did,dsid,2) == SUCCEED) + goto out; + if (H5DSattach_scale(did,dsid,0) < 0) + goto out; + if (H5Dclose(dsid) < 0) + goto out; + if (H5Dclose(did) < 0) + goto out; + + PASSED(); + + TESTING2("detach scales"); + + /*------------------------------------------------------------------------- + * detach with invalid indices + *------------------------------------------------------------------------- + */ + if ((did = H5Dopen2(fid,"dset", H5P_DEFAULT)) < 0) + goto out; + if ((dsid = H5Dopen2(fid,"ds1", H5P_DEFAULT)) < 0) + goto out; + if (H5DSdetach_scale(did,dsid,2) == SUCCEED) + goto out; + if (H5DSdetach_scale(did,dsid,0) < 0) + goto out; + if (H5Dclose(dsid) < 0) + goto out; + if (H5Dclose(did) < 0) + goto out; + + PASSED(); + + TESTING2("set/get label"); + + /*------------------------------------------------------------------------- + * set/get label invalid indices + *------------------------------------------------------------------------- + */ + if ((did = H5Dopen2(fid,"dset", H5P_DEFAULT)) < 0) + goto out; + if (H5DSset_label(did,2,"label")== SUCCEED) + goto out; + if (H5DSset_label(did,0,"label") < 0) + goto out; + if (H5DSget_label(did,2,lbuf,sizeof(lbuf)) == SUCCEED) + goto out; + if ((label_len=H5DSget_label(did,0,NULL,0)) < 0) + goto out; + if ( label_len != strlen("label") ) + goto out; + if (H5DSget_label(did,0,lbuf,sizeof(lbuf)) < 0) + goto out; + if (H5Dclose(did) < 0) + goto out; + + PASSED(); + + TESTING2("iterate scales"); + + + /*------------------------------------------------------------------------- + * iterate_scales invalid indices and return DS_IDX and visitor data + *------------------------------------------------------------------------- + */ + if ((did = H5Dopen2(fid,"dset", H5P_DEFAULT)) < 0) + goto out; + + if ((dsid = H5Dopen2(fid,"ds1", H5P_DEFAULT)) < 0) + goto out; + if (H5DSattach_scale(did,dsid,0) < 0) + goto out; + if (H5Dclose(dsid) < 0) + goto out; + + if ((dsid = H5Dopen2(fid,"ds2", H5P_DEFAULT)) < 0) + goto out; + if (H5DSattach_scale(did,dsid,0) < 0) + goto out; + if (H5Dclose(dsid) < 0) + goto out; + + if((nscales = H5DSget_num_scales(did,0)) < 0) + goto out; + if(nscales!=2) + goto out; + + /* invalid DIM */ + if (H5DSiterate_scales(did,2,NULL,op_continue,NULL)== SUCCEED) + goto out; + /* invalid DS_IDX */ + scale_idx = 2; + if (H5DSiterate_scales(did,0,&scale_idx,op_continue,NULL)== SUCCEED) + goto out; + + /* continue iteration */ + scale_idx = 0; + count = 0; + if (H5DSiterate_scales(did,0,&scale_idx,op_continue,(void *)&count) < 0) + goto out; + + if ( scale_idx != 1 && count != nscales ) + { + goto out; + } + + /* stop iteration */ + scale_idx = 0; + count = 0; + if (H5DSiterate_scales(did,0,&scale_idx,op_stop,(void *)&count) < 0) + goto out; + + if ( scale_idx != 0 && count != 1 ) + { + goto out; + } + + + if (H5Dclose(did) < 0) + goto out; + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + if(H5Fclose(fid) < 0) + goto out; + + PASSED(); + + return 0; + + /* error zone */ +out: + H5E_BEGIN_TRY + { + H5Dclose(did); + H5Dclose(dsid); + H5Fclose(fid); + } H5E_END_TRY; + H5_FAILED(); + return FAIL; +} + |