/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the files COPYING and Copyright.html. COPYING can be found at the root * * of the source code distribution tree; Copyright.html can be found at the * * root level of an installed copy of the electronic HDF5 document set and * * is linked from the top-level documents page. It can also be found at * * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "h5hltest.h" #include "H5DSpublic.h" #include "H5LTpublic.h" #include "H5IMpublic.h" /* operator functions */ 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_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 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); static int test_data(void); static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf ); #define RANK 2 #define DIM_DATA 12 #define DIM1_SIZE 3 #define DIM2_SIZE 4 #define DIM3_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 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 FILE7 "test_ds7.h5" /*------------------------------------------------------------------------- * the main program *------------------------------------------------------------------------- */ int main(void) { int nerrors=0; 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; } /*------------------------------------------------------------------------- * DS API test * * Functions tested: * * H5DSattach_scale * H5DSget_num_scales * H5DSdetach_scale * H5DSset_label * H5DSget_label * H5DSset_scale * H5DSget_scale_name * H5DSis_scale * H5DSiterate_scales * *------------------------------------------------------------------------- */ static int test_simple(void) { hid_t fid = -1; /* file ID */ hid_t did = -1; /* dataset ID */ hid_t dsid = -1; /* DS dataset ID */ hid_t sid = -1; /* space ID */ hid_t gid = -1; /* 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; /*------------------------------------------------------------------------- * H5DSattach_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(); /*------------------------------------------------------------------------- * H5DSget_num_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(); /*------------------------------------------------------------------------- * 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; 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; /* 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