/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 COPYING file, which can be found at the root of the source code * * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include #include #include "h5hltest.h" #include "H5srcdir.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 hid_t create_test_file(const char *fileext); static hid_t 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_detachscales(void); 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 ); static int test_attach_detach(void); #define RANK1 1 #define RANK 2 #define DIM_DATA 12 #define DIM1_SIZE 3 #define DIM2_SIZE 4 #define DIM3_SIZE 12 #define DIM4_SIZE 2 #define DIM0 0 #define DIM1 1 #define DIM2 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 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" #define FILE8 "test_ds10.h5" #define DIMENSION_LIST "DIMENSION_LIST" #define REFERENCE_LIST "REFERENCE_LIST" /*------------------------------------------------------------------------- * the main program *------------------------------------------------------------------------- */ int main(void) { 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; nerrors += test_detachscales() < 0 ? 1 : 0; nerrors += test_attach_detach() < 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; } /*------------------------------------------------------------------------- * 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 hid_t create_test_file(const char *fileext) { char filename[65]; HDsnprintf(filename, sizeof(filename), "%s%s%s", FILENAME, fileext, FILEEXT); return H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); } static hid_t open_test_file(const char *fileext) { char filename[65]; HDsnprintf(filename, sizeof(filename), "%s%s%s", FILENAME, fileext, FILEEXT); return H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT); } /*------------------------------------------------------------------------- * 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[DIM1_SIZE*DIM2_SIZE*DIM3_SIZE]; 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DATASET_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; } 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[DIM1_SIZE*DIM2_SIZE*DIM3_SIZE]; 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DATASET_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; } 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[DIM1_SIZE*DIM2_SIZE]; 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DATASET_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; } 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; 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}; /* Allocate buffer */ if(NULL == (buf = (long *)HDmalloc(sizeof(long) * DIM1_SIZE * DIM2_SIZE * DIM3_SIZE * DIM4_SIZE))) return FAIL; /* make a dataset */ if(H5LTmake_dataset_long(fid, dsname, 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; HDfree(buf); 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[DIM1_SIZE*DIM2_SIZE]; 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DATASET_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 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_1_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_11_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; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_2_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_21_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_22_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; } /*------------------------------------------------------------------------- * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_3_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_31_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_32_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_33_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; } /*------------------------------------------------------------------------- * create 2 dimension scales datasets for first dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_1_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_11_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; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_2_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_21_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_22_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; } /*------------------------------------------------------------------------- * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_3_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_31_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_32_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_33_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; } /*------------------------------------------------------------------------- * 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_1_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_11_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; } return SUCCEED; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_2_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_21_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_22_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; } /*------------------------------------------------------------------------- * create 1 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_3_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_31_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_32_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_33_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; } /*------------------------------------------------------------------------- * 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_1_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_11_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 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_2_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_21_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_22_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; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_3_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_31_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_32_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_33_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; } /*------------------------------------------------------------------------- * create 4 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_4_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_41_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_42_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_43_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_44_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; } /*------------------------------------------------------------------------- * 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_1_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_11_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; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for second dimension *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_2_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_21_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_22_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; } /*------------------------------------------------------------------------- * create 3 dimension scales datasets for third dimension of dataset *------------------------------------------------------------------------- */ 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[64]; HDsnprintf(name, sizeof(name), "%s%s", DS_3_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_31_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_32_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) { HDsnprintf(name, sizeof(name), "%s%s", DS_33_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; } 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) { 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; } 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; } 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; } 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*)HDmalloc(((size_t)name_len+1) * sizeof (char)); if(name_out != NULL) { if(H5DSget_scale_name(dsid, name_out, (size_t)name_len+1) >= 0) { if(HDstrncmp(scalename, name_out, (size_t)name_len)==0) { ret_value = SUCCEED; } HDfree(name_out); name_out=NULL; } } } } if(H5Dclose(dsid) < 0) ret_value = FAIL; } return ret_value; } static int test_detachscales(void) { hid_t fid = -1; hid_t did = -1; hid_t dsid = -1; int rank1 = 1; int rank3 = 3; hsize_t dims[] = {1,2,3}; /*some bogus numbers, not important for the test*/ int *buf = NULL; char dname[10]; int i; /* This tests creates two three dimensional datasets; then it creates four integer datasets that are used as dim. scales; we will attach and detach them to check that at the end there is no attributes REFERENCE_LIST on a dimension scale and DIMENSION_LIST on a dataset */ TESTING2("test_detachscales"); if((fid = H5Fcreate("test_detach.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; /* make datasets; they are three dimensional*/ for (i=0; i < 2; i++) { sprintf(dname,"D%d", i); if(H5LTmake_dataset_int(fid, dname, rank3, dims, buf) < 0) goto out; } /* create datasets and make them dim. scales */ for (i=0; i < 4; i++) { sprintf(dname, "DS%d", i); if(H5LTmake_dataset_int(fid, dname, rank1, dims, buf) < 0) goto out; } /* attach scales to the first dataset; first dimension will have two scales attached */ if((did = H5Dopen2(fid, "D0", H5P_DEFAULT)) >= 0) { for (i=0; i<4; i++) { sprintf(dname, "DS%d", i); if((dsid = H5Dopen2(fid, dname, H5P_DEFAULT)) < 0) goto out; if(H5DSattach_scale(did, dsid, (unsigned int) i%3) < 0) goto out; if(H5Dclose(dsid) < 0) goto out; } if(H5Dclose(did) < 0) goto out; } else goto out; /* attach scales to the second dataset */ if((did = H5Dopen2(fid, "D1", H5P_DEFAULT)) >= 0) { for (i=0; i<3; i++) { sprintf(dname, "DS%d", i); if((dsid = H5Dopen2(fid, dname, H5P_DEFAULT)) < 0) goto out; if(H5DSattach_scale(did, dsid, (unsigned int) i) < 0) goto out; if(H5Dclose(dsid) < 0) goto out; } if(H5Dclose(did) < 0) goto out; } else goto out; /* detach DS0 from first dimension of D0 and D1; then check that DS0 doesn't have attribute REFERENCE _LIST */ if((dsid = H5Dopen2(fid, "DS0", H5P_DEFAULT)) < 0) goto out; for (i=0; i<2; i++) { sprintf(dname, "D%d", i); if((did = H5Dopen2(fid, dname, H5P_DEFAULT)) < 0) goto out; if(H5DSdetach_scale(did, dsid, (unsigned int)0) < 0) goto out; if(H5Dclose(did) < 0) goto out; } /* Check that attribute "REFERENCE_LIST" doesn't exist anymore */ if(H5Aexists(dsid, REFERENCE_LIST)!= 0) goto out; if(H5Dclose(dsid) < 0) goto out; /* Check that DS3 is the only dim. scale attached to the first dimension of D0 */ if((did = H5Dopen2(fid, "D0", H5P_DEFAULT)) < 0) goto out; if((dsid = H5Dopen2(fid, "DS3", H5P_DEFAULT)) < 0) goto out; if(H5DSis_attached(did, dsid, (unsigned int) 0) <= 0) goto out; if(H5Dclose(did) < 0) goto out; if(H5Dclose(dsid) < 0) goto out; /* Detach the rest of the scales DS3, DS1, DS2 from D0 and make sure that attribute "DIMENSION_LIST" doesn't exist anymore */ if((did = H5Dopen2(fid, "D0", H5P_DEFAULT)) >= 0) { for (i=1; i<4; i++) { sprintf(dname, "DS%d", i); if((dsid = H5Dopen2(fid, dname, H5P_DEFAULT)) < 0) goto out; if(H5DSdetach_scale(did, dsid, (unsigned int) i%3) < 0) goto out; if(H5Dclose(dsid) < 0) goto out; } /* Check that attribute "DIMENSION_LIST" doesn't exist anymore */ if(H5Aexists(did, DIMENSION_LIST)!= 0) goto out; if(H5Dclose(did) < 0) goto out; } else goto out; PASSED(); H5Fclose(fid); return SUCCEED; out: H5E_BEGIN_TRY { H5Dclose(did); H5Dclose(dsid); H5Fclose(fid); } H5E_END_TRY; H5_FAILED(); return FAIL; } static int test_char_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "ac"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "ac"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "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; } static int test_short_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM2) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_31_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM2) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_32_NAME, "as"); if(test_attach_scale(fid, did, scalename, DIM2) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_33_NAME, "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; } static int test_int_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "a"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "a"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "a"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "a"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "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; } static int test_long_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM2) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_4_NAME, "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; } static int test_duplicatelong_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "al"); if(test_attach_scale(fid, did, scalename, DIM2) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_4_NAME, "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; } static int test_float_attachscales(const char *fileext) { hid_t fid = -1; hid_t did = -1; char dsname[32]; char scalename[32]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "af"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "af"); if(test_attach_scale(fid, did, scalename, DIM0) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "af"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "af"); if(test_attach_scale(fid, did, scalename, DIM1) < 0) goto out; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "ac"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "ac"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "ac"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_3_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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_11_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_21_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_22_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_3_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_31_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_31_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_32_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_32_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_33_NAME, "as"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_33_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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "a"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "a"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_11_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "a"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "a"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_21_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "a"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_22_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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_3_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_4_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_4_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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", DS_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", DS_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_3_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", DS_3_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_4_NAME, "al"); HDsnprintf(name, sizeof(name), "%s%s", DS_4_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; } 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]; HDsnprintf(dsname, sizeof(dsname), "%s%s", DATASET_NAME, "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) { HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_1_NAME, "af"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_1_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_11_NAME, "af"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_11_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_2_NAME, "af"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_2_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_21_NAME, "af"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_21_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; HDsnprintf(scalename, sizeof(scalename), "%s%s", DS_22_NAME, "af"); HDsnprintf(name, sizeof(name), "%s%s", SCALE_22_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; } 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; const char *filename = H5_get_srcdir_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; } 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; 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