diff options
Diffstat (limited to 'test/gen_filters.c')
-rw-r--r-- | test/gen_filters.c | 157 |
1 files changed, 145 insertions, 12 deletions
diff --git a/test/gen_filters.c b/test/gen_filters.c index 6d24fb3..58400d5 100644 --- a/test/gen_filters.c +++ b/test/gen_filters.c @@ -13,20 +13,38 @@ * access to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* +#include "h5test.h" + +#define TESTFILE1 "test_filters.h5" +#define TESTFILE2 "filter_error.h5" +#define DSETNAME "dataset_with_filter" + +/* Temporary filter IDs used for testing */ +#define H5Z_FILTER_BOGUS 305 + +/* Local prototypes for filter functions */ +static size_t filter_bogus(unsigned int flags, size_t cd_nelmts, + const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); + + +/*------------------------------------------------------------------------- + * Function: create_file_with_bogus_filter + * + * Purpose: Create a dataset with the fletcher filter. + * This function is used to create the test file `test_filters.h5' + * which has a dataset with the "fletcher" I/O filter. This dataset + * will be used to verify the correct behavior of the library in + * the test "dsets" + * + * Return: Success: 0 + * + * Failure: -1 + * * Programmer: Pedro Vicente <pvn@ncsa.uiuc.edu> * Thursday, March 25, 2004 * - * Purpose: Create a dataset with the fletcher filter. - * This program is used to create the test file `test_filters.h5' which has - * a dataset with the "fletcher" I/O filter. This dataset will - * be used to verify the correct behavior of the library in the test "dsets" + *------------------------------------------------------------------------- */ -#include "hdf5.h" - -#define TESTFILE "test_filters.h5" - - static herr_t test_filters_endianess(void) { @@ -45,7 +63,7 @@ test_filters_endianess(void) buf[i] = 1; /* create a file using default properties */ - if((fid = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error; + if((fid = H5Fcreate(TESTFILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error; /* create a data space */ if((sid = H5Screate_simple(rank, dims, NULL)) < 0) goto error; @@ -82,7 +100,109 @@ error: #endif /* H5_HAVE_FILTER_FLETCHER32 */ } /* end test_filters_endianess() */ +/* This message derives from H5Z */ +const H5Z_class2_t H5Z_BOGUS[1] = {{ + H5Z_CLASS_T_VERS, /* H5Z_class_t version */ + H5Z_FILTER_BOGUS, /* Filter id number */ + 1, 1, /* Encoding and decoding enabled */ + "bogus", /* Filter name for debugging */ + NULL, /* The "can apply" callback */ + NULL, /* The "set local" callback */ + filter_bogus, /* The actual filter function */ +}}; + +/*------------------------------------------------------------------------- + * Function: filter_bogus + * + * Purpose: A bogus compression method that doesn't do anything. + * + * Return: Success: Data chunk size + * + * Failure: 0 + * + * Programmer: Raymond Lu + * 2 June 2011 + * + *------------------------------------------------------------------------- + */ +static size_t +filter_bogus(unsigned int UNUSED flags, size_t UNUSED cd_nelmts, + const unsigned int UNUSED *cd_values, size_t nbytes, + size_t UNUSED *buf_size, void UNUSED **buf) +{ + return nbytes; +} + + +/*------------------------------------------------------------------------- + * Function: create_file_with_bogus_filter + * + * Purpose: Create a file and a dataset with a bogus filter enabled + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Raymond Lu + * 2 June 2011 + * + *------------------------------------------------------------------------- + */ +static herr_t +create_file_with_bogus_filter(void) +{ + hid_t fid = -1; /* file ID */ + hid_t dsid = -1; /* dataset ID */ + hid_t sid = -1; /* dataspace ID */ + hid_t dcpl = -1; /* dataset creation property list ID */ + hsize_t dims[1] = {20}; /* dataspace dimensions */ + hsize_t chunk_dims[1] = {10}; /* chunk dimensions */ + int buf[20]; + int rank = 1; + int i; + + for(i = 0; i < 20; i++) + buf[i] = 1; + + /* create a file using default properties */ + if((fid = H5Fcreate(TESTFILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error; + + /* create a data space */ + if((sid = H5Screate_simple(rank, dims, NULL)) < 0) goto error; + + /* create dcpl */ + if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error; + + /* create chunking */ + if(H5Pset_chunk(dcpl, rank, chunk_dims) < 0) goto error; + + /* register bogus filter */ + if(H5Zregister (H5Z_BOGUS) < 0) goto error; + if(H5Pset_filter(dcpl, H5Z_FILTER_BOGUS, 0, (size_t)0, NULL) < 0) goto error; + + /* create a dataset */ + if((dsid = H5Dcreate2(fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error; + + if(H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) goto error; + + /* close */ + if(H5Pclose(dcpl) < 0) goto error; + if(H5Dclose(dsid) < 0) goto error; + if(H5Sclose(sid) < 0) goto error; + if(H5Fclose(fid) < 0) goto error; + + return 0; + +error: + H5E_BEGIN_TRY { + H5Pclose(dcpl); + H5Dclose(dsid); + H5Sclose(sid); + H5Fclose(fid); + } H5E_END_TRY; + return -1; +} /*------------------------------------------------------------------------- @@ -99,7 +219,20 @@ error: int main(void) { - test_filters_endianess(); + int nerrors = 0; + + nerrors += test_filters_endianess() < 0 ? 1 : 0; + nerrors += create_file_with_bogus_filter() < 0 ? 1 : 0; + + if(nerrors) + goto error; + printf("All tests passed.\n"); + return 0; + +error: + nerrors = MAX(1, nerrors); + printf("***** %d GEN_FILTERS FAILURES *****\n", nerrors); + return 1; } |