/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "hdf5.h" #include "h5test.h" #include "h5repack.h" #include "testh5repack.h" #define DIM1 40 #define DIM2 20 #define CDIM1 DIM1/2 #define CDIM2 DIM2/2 #define RANK 2 #define GBLL ((unsigned long_long) 1024*1024*1024) int make_all_objects(hid_t loc_id); int make_attributes(hid_t loc_id); int make_hlinks(hid_t loc_id); int make_early(void); int make_layout(hid_t loc_id); #ifdef H5_HAVE_FILTER_SZIP int make_szip(hid_t loc_id); #endif /* H5_HAVE_FILTER_SZIP */ int make_deflate(hid_t loc_id); int make_shuffle(hid_t loc_id); int make_fletcher32(hid_t loc_id); int make_nbit(hid_t loc_id); int make_scaleoffset(hid_t loc_id); int make_all(hid_t loc_id); int make_fill(hid_t loc_id); int make_big(hid_t loc_id); /*------------------------------------------------------------------------- * Function: make_testfiles * * Purpose: make a test file with all types of HDF5 objects, * datatypes and filters * *------------------------------------------------------------------------- */ int make_testfiles(void) { hid_t loc_id; /* file ID */ TESTING(" generating datasets"); /*------------------------------------------------------------------------- * create a file for general copy test *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME0,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_fill(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create another file for general copy test (all datatypes) *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME1,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_all_objects(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file for attributes copy test *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME2,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_attributes(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file for hard links test *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME3,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_hlinks(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file for layouts test *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME4,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_layout(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file for the H5D_ALLOC_TIME_EARLY test *------------------------------------------------------------------------- */ if (make_early()<0) goto out; /*------------------------------------------------------------------------- * create a file with the SZIP filter *------------------------------------------------------------------------- */ #ifdef H5_HAVE_FILTER_SZIP if((loc_id = H5Fcreate(FNAME7,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_szip(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; #endif /* H5_HAVE_FILTER_SZIP */ /*------------------------------------------------------------------------- * create a file with the deflate filter *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME8,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_deflate(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file with the shuffle filter *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME9,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_shuffle(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file with the fletcher32 filter *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME10,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_fletcher32(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file with all the filters *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME11,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_all(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file with the nbit filter *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME12,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_nbit(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a file with the scaleoffset filter *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME13,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_scaleoffset(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; /*------------------------------------------------------------------------- * create a big file *------------------------------------------------------------------------- */ if((loc_id = H5Fcreate(FNAME14,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) return -1; if (make_big(loc_id)<0) goto out; if(H5Fclose(loc_id)<0) return -1; PASSED(); return 0; out: H5Fclose(loc_id); return -1; } /*------------------------------------------------------------------------- * Function: make_all_objects * * Purpose: make a test file with all types of HDF5 objects, datatypes * *------------------------------------------------------------------------- */ int make_all_objects(hid_t loc_id) { hid_t dset_id; hid_t group_id; hid_t type_id; hid_t root_id; hid_t space_id; hsize_t dims[1]={2}; /* Compound datatype */ typedef struct s_t { int a; float b; } s_t; /*------------------------------------------------------------------------- * H5G_DATASET *------------------------------------------------------------------------- */ space_id = H5Screate_simple(1,dims,NULL); dset_id = H5Dcreate(loc_id,"dset_referenced",H5T_NATIVE_INT,space_id,H5P_DEFAULT); H5Sclose(space_id); /*------------------------------------------------------------------------- * H5G_GROUP *------------------------------------------------------------------------- */ group_id = H5Gcreate(loc_id,"g1",0); root_id = H5Gopen(loc_id, "/"); /*------------------------------------------------------------------------- * H5G_TYPE *------------------------------------------------------------------------- */ /* Create a memory compound datatype */ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t)); H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_INT); H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_FLOAT); /* Commit compound datatype and close it */ H5Tcommit(loc_id, "type", type_id); H5Tclose(type_id); /*------------------------------------------------------------------------- * H5G_LINK *------------------------------------------------------------------------- */ H5Glink(loc_id, H5L_TYPE_SOFT, "dset", "link"); /*------------------------------------------------------------------------- * H5G_UDLINK *------------------------------------------------------------------------- */ /* Create an external link. Other UD links are not supported by h5repack */ H5Lcreate_external("file", "path", loc_id, "ext_link", H5P_DEFAULT, H5P_DEFAULT); /*------------------------------------------------------------------------- * write a series of datasetes *------------------------------------------------------------------------- */ write_dset_in(root_id,"dset_referenced",loc_id,0); /* Close */ H5Dclose(dset_id); H5Gclose(group_id); H5Gclose(root_id); return 0; } /*------------------------------------------------------------------------- * Function: make_attributes * * Purpose: make a test file with all types of attributes * *------------------------------------------------------------------------- */ int make_attributes(hid_t loc_id) { hid_t dset_id; hid_t group_id; hid_t root_id; hid_t space_id; hsize_t dims[1]={2}; /*------------------------------------------------------------------------- * H5G_DATASET *------------------------------------------------------------------------- */ space_id = H5Screate_simple(1,dims,NULL); dset_id = H5Dcreate(loc_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT); H5Sclose(space_id); /*------------------------------------------------------------------------- * H5G_GROUP *------------------------------------------------------------------------- */ group_id = H5Gcreate(loc_id,"g1",0); root_id = H5Gopen(loc_id, "/"); /*------------------------------------------------------------------------- * write a series of attributes on the dataset, group, and root group *------------------------------------------------------------------------- */ write_attr_in(dset_id,"dset",loc_id,0); write_attr_in(group_id,"dset",loc_id,0); write_attr_in(root_id,"dset",loc_id,0); /* Close */ H5Dclose(dset_id); H5Gclose(group_id); H5Gclose(root_id); return 0; } /*------------------------------------------------------------------------- * Function: make_hlinks * * Purpose: make a test file with hard links * *------------------------------------------------------------------------- */ int make_hlinks(hid_t loc_id) { hid_t group1_id; hid_t group2_id; hid_t group3_id; hsize_t dims[2]={3,2}; int buf[3][2]= {{1,1},{1,2},{2,2}}; /*------------------------------------------------------------------------- * create a dataset and some hard links to it *------------------------------------------------------------------------- */ if (write_dset(loc_id,2,dims,"dset",H5T_NATIVE_INT,buf)<0) return -1; if (H5Glink(loc_id, H5L_TYPE_HARD, "dset", "link1 to dset")<0) return -1; if (H5Glink(loc_id, H5L_TYPE_HARD, "dset", "link2 to dset")<0) return -1; if (H5Glink(loc_id, H5L_TYPE_HARD, "dset", "link3 to dset")<0) return -1; /*------------------------------------------------------------------------- * create a group and some hard links to it *------------------------------------------------------------------------- */ if ((group1_id = H5Gcreate(loc_id,"g1",0))<0) return -1; if ((group2_id = H5Gcreate(group1_id,"g2",0))<0) return -1; if ((group3_id = H5Gcreate(group2_id,"g3",0))<0) return -1; if (H5Glink2(loc_id, "g1", H5L_TYPE_HARD, group2_id, "link1 to g1")<0) return -1; if (H5Glink2(group1_id, "g2", H5L_TYPE_HARD, group3_id, "link1 to g2")<0) return -1; H5Gclose(group1_id); H5Gclose(group2_id); H5Gclose(group3_id); return 0; } /*------------------------------------------------------------------------- * Function: make_szip * * Purpose: make a dataset with the SZIP filter * *------------------------------------------------------------------------- */ #ifdef H5_HAVE_FILTER_SZIP int make_szip(hid_t loc_id) { hid_t dcpl; /* dataset creation property list */ hid_t sid; /* dataspace ID */ unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK; unsigned szip_pixels_per_block=8; hsize_t dims[RANK]={DIM1,DIM2}; hsize_t chunk_dims[RANK]={CDIM1,CDIM2}; int buf[DIM1][DIM2]; int i, j, n; int szip_can_encode = 0; for (i=n=0; i