diff options
Diffstat (limited to 'tools/test/h5repack/h5repackgentest.c')
-rw-r--r-- | tools/test/h5repack/h5repackgentest.c | 160 |
1 files changed, 141 insertions, 19 deletions
diff --git a/tools/test/h5repack/h5repackgentest.c b/tools/test/h5repack/h5repackgentest.c index 0eec88c..27f6009 100644 --- a/tools/test/h5repack/h5repackgentest.c +++ b/tools/test/h5repack/h5repackgentest.c @@ -1,26 +1,50 @@ #include "hdf5.h" #include "H5private.h" +/* For generating files for verifying h5repack with external storage. . . + * + * Each case file should follow the format of: + * + h5repack_<NAME>.h5 + * + h5repack_<NAME>_ex.h5 + * + h5repack_<NAME>_ex-<N>.dat + * ...where NAME idenfities the type, and N is a positive decimal number; + * multiple external files (*.dat) are allowed per file, but they must + * follow the pattern and be in contiguous numerical sequence starting at 0. + * + * Each file typename must be added to the listing for + * `VERIFY_EXTERNAL_CONSOLIDATION` in h5repack.sh + * + * There is no restriction on the name, number, or structure of datasets and + * groups in HDF5 file. + * + * The generated files will need to be moved "by hand" into the testfiles + * directory. (TODO) + */ + #define MAX_NAME_SIZE 256 #define FILE_INT32LE "h5repack_int32le" +#define FILE_UINT8BE "h5repack_uint8be" /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + * TODO: error handling is a joke, but this seems normal for the tools' + * gentest operations. */ static void generate_int32le(hbool_t external) { char filename[MAX_NAME_SIZE]; hid_t file; - hid_t dspace; hid_t dset; hid_t dcpl = H5P_DEFAULT; + hid_t dspace; hsize_t dims[] = {8, 8, 8}; int32_t wdata[512]; /* 8^3 */ int32_t n; int i; int j; int k; + herr_t ret; /* error-checking */ /* generate values, alternating positive and negative */ @@ -35,20 +59,21 @@ generate_int32le(hbool_t external) FILE_INT32LE, (external) ? "_ex" : ""); - file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - HDassert(file >= 0); - - dspace = H5Screate_simple(3, dims, NULL); - HDassert(dspace >= 0); - if (external) { char name[MAX_NAME_SIZE]; dcpl = H5Pcreate(H5P_DATASET_CREATE); - HDassert(dcpl >= 0); + HDassert(dcpl != H5I_INVALID_HID); snprintf(name, MAX_NAME_SIZE, "%s_ex-0.dat", FILE_INT32LE); - HDassert(H5Pset_external(dcpl, name, 0, H5F_UNLIMITED) >= 0); + ret = H5Pset_external(dcpl, name, 0, H5F_UNLIMITED); + HDassert(ret >= 0); } + dspace = H5Screate_simple(3, dims, NULL); + HDassert(dspace != H5I_INVALID_HID); + + file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + HDassert(file != H5I_INVALID_HID); + dset = H5Dcreate2( file, "dset", @@ -57,26 +82,123 @@ generate_int32le(hbool_t external) H5P_DEFAULT, dcpl, H5P_DEFAULT); - HDassert(dset >= 0); + HDassert(dset != H5I_INVALID_HID); - HDassert(H5Dwrite(dset, H5T_STD_I32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata) - >= 0); + ret = H5Dwrite( + dset, + H5T_STD_I32LE, + H5S_ALL, + H5S_ALL, + H5P_DEFAULT, + wdata); + HDassert(ret >= 0); + + if (dcpl != H5P_DEFAULT) { + ret = H5Pclose(dcpl); + HDassert(ret >= 0); + } + ret = H5Dclose(dset); + HDassert(ret >= 0); + ret = H5Fclose(file); + HDassert(ret >= 0); + ret = H5Sclose(dspace); + HDassert(ret >= 0); - if (external) - HDassert(H5Pclose(dcpl) >= 0); - HDassert(H5Dclose(dset) >= 0); - HDassert(H5Sclose(dspace) >= 0); - HDassert(H5Fclose(file) >= 0); } /* end generate_int32le() */ +static void +generate_uint8be(hbool_t external) +{ + char filename[MAX_NAME_SIZE]; + hid_t file; + hid_t dset; + hid_t dcpl = H5P_DEFAULT; + hid_t dspace; + hsize_t dims[] = {8, 8, 8}; + uint8_t wdata[512]; /* 8^3 */ + uint8_t n; + int i; + int j; + int k; + herr_t ret; /* error-checking */ + + /* Generate values, alternating positive and negative + * The latter half of the dataset is "overflow garbage" (TODO?) + */ + for (i=0, n=0; i < 8; i++) + for (j=0; j < 8; j++) + for (k=0; k < 8; k++, n++) + wdata[n] = n * ((n&1) ? (-1) : (1)); + + snprintf(filename, + MAX_NAME_SIZE, + "%s%s.h5", + FILE_UINT8BE, + (external) ? "_ex" : ""); + + if (external) { + char name[MAX_NAME_SIZE]; + dcpl = H5Pcreate(H5P_DATASET_CREATE); + HDassert(dcpl != H5I_INVALID_HID); + for (i = 0; i < 8; i++) { + snprintf(name, MAX_NAME_SIZE, "%s_ex-%d.dat", FILE_UINT8BE, i); + ret = H5Pset_external(dcpl, name, 0, 64 * sizeof(char)); + HDassert(ret >= 0); + } + } + + dspace = H5Screate_simple(3, dims, NULL); + HDassert(dspace != H5I_INVALID_HID); + + file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + HDassert(file != H5I_INVALID_HID); + + dset = H5Dcreate2( + file, + "dset", + H5T_STD_U8BE, + dspace, + H5P_DEFAULT, + dcpl, + H5P_DEFAULT); + HDassert(dset != H5I_INVALID_HID); + + ret = H5Dwrite( + dset, + H5T_STD_U8BE, + H5S_ALL, + H5S_ALL, + H5P_DEFAULT, + wdata); + HDassert(ret >= 0); + + if (dcpl != H5P_DEFAULT) { + ret = H5Pclose(dcpl); + HDassert(ret >= 0); + } + ret = H5Dclose(dset); + HDassert(ret >= 0); + ret = H5Fclose(file); + HDassert(ret >= 0); + ret = H5Sclose(dspace); + HDassert(ret >= 0); + +} /* end generate_uint8be() */ + + /* ---------------------------------------------------------------------------- */ int main(void) { - generate_int32le(FALSE); - generate_int32le(TRUE); + int i; + + for (i=0; i < 2; i++) { + hbool_t external = (i&1) ? TRUE : FALSE; + generate_int32le(external); + generate_uint8be(external); + } return 0; } /* end main() */ |