summaryrefslogtreecommitdiffstats
path: root/hl/test/test_ds.c
diff options
context:
space:
mode:
Diffstat (limited to 'hl/test/test_ds.c')
-rw-r--r--hl/test/test_ds.c7040
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;
+}
+