diff options
Diffstat (limited to 'c++/test')
-rw-r--r-- | c++/test/dsets.cpp | 115 |
1 files changed, 113 insertions, 2 deletions
diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp index a3a055d..14f1bd4 100644 --- a/c++/test/dsets.cpp +++ b/c++/test/dsets.cpp @@ -1121,7 +1121,6 @@ static herr_t test_types(H5File& file) * Purpose Tests getObjinfo() * * Return Success: 0 - * * Failure: -1 * * July, 2018 @@ -1177,13 +1176,124 @@ static herr_t test_getinfo(H5File& file) /*------------------------------------------------------------------------- + * Function: test_chunk_cache + * + * Purpose Tests setting rdcc info on a DAPL, and interaction + * with the corresponding properties in the file structure. + * + * Return Success: 0 + * Failure: number of errors + * + * July 2018 + *------------------------------------------------------------------------- + */ +const int RANK1 = 1; +const H5std_string FILE_ACCPLIST("test_accplist.h5"); + +static herr_t test_chunk_cache(FileAccPropList fapl) +{ + SUBTEST("DSetAccPropList::set/getChunkCache"); + + try { + // Create a default dataset access and file access property lists + FileAccPropList fapl_def; + DSetAccPropList dapl; + + // Verify that chunk cache parameters are the same + int mdc_nelmts = 0; + size_t nslots_1 = 0, nslots_4 = 0, nbytes_1 = 0, nbytes_4 = 0; + double w0_1 = 0.0F, w0_4 = 0.0F; + fapl_def.getCache(mdc_nelmts, nslots_1, nbytes_1, w0_1); + dapl.getChunkCache(nslots_4, nbytes_4, w0_4); + verify_val(nslots_1, nslots_4, "DSetAccPropList::getChunkCache", __LINE__, __FILE__); + verify_val(nbytes_1, nbytes_4, "DSetAccPropList::getChunkCache", __LINE__, __FILE__); + verify_val(w0_1, w0_4, "DSetAccPropList::getChunkCache", __LINE__, __FILE__); + + // Set a link access property on dapl to verify property list inheritance + dapl.setNumLinks((size_t)134); + size_t nlinks = dapl.getNumLinks(); + verify_val(nlinks, (size_t)134, "DSetAccPropList::getNumLinks", __LINE__, __FILE__); + + // Make a copy of the external fapl + FileAccPropList fapl_local(fapl); + + // Set new rdcc settings on fapl local + size_t nslots_2 = nslots_1 * 2; + size_t nbytes_2 = nbytes_1 * 2; + double w0_2 = w0_1 / (double)2.0F; + fapl_local.getCache(mdc_nelmts, nslots_2, nbytes_2, w0_2); + + // Create a new file using default fcpl and the passed-in fapl + H5File file(FILE_ACCPLIST, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl_local); + + // Create dataset creation property list + DSetCreatPropList dcpl; + + // Set chunk dimensions + hsize_t cdims[RANK1]; + cdims[0] = 10; + dcpl.setChunk(RANK1, cdims); + + // Create memory space + hsize_t mdims[RANK1]; + mdims[0] = 10; + DataSpace mspace(RANK1, mdims); + + // Create a dataset using that dataset creation properties + DataSet dataset(file.createDataSet(DSET_CHUNKED_NAME, PredType::NATIVE_INT, mspace, dcpl, dapl)); + + // Get the dataset access property list + DSetAccPropList dapl2 = dataset.getAccessPlist(); + + // Retrieve and verify the raw data chunk cache parameters + nslots_4 = nbytes_4 = 0; + w0_4 = 0.0F; + dapl2.getChunkCache(nslots_4, nbytes_4, w0_4); + verify_val(nslots_2, nslots_4, "DSetCreatPropList::getChunkCache", __LINE__, __FILE__); + verify_val(nbytes_2, nbytes_4, "DSetCreatPropList::getChunkCache", __LINE__, __FILE__); + verify_val(H5_DBL_ABS_EQUAL(w0_2, w0_4), 1, "DSetCreatPropList::getChunkCache", __LINE__, __FILE__); + + + // Set new values on original dapl + size_t nslots_3 = nslots_1 * 2; + size_t nbytes_3 = H5D_CHUNK_CACHE_NBYTES_DEFAULT; + double w0_3 = w0_2 / 2; + dapl.getChunkCache(nslots_3, nbytes_3, w0_3); + + // Close dataset + dataset.close(); + + // Reopen dataset + DataSet dataset2(file.openDataSet(DSET_CHUNKED_NAME, dapl)); + + // Get the dataset access property list + DSetAccPropList dapl3 = dataset2.getAccessPlist(); + + // Retrieve and verify the raw data chunk cache parameters + dapl3.getChunkCache(nslots_4, nbytes_4, w0_4); + verify_val(nslots_3, nslots_4, "DSetCreatPropList::getLayout", __LINE__, __FILE__); + verify_val(nbytes_3, nbytes_4, "DSetCreatPropList::getLayout", __LINE__, __FILE__); + verify_val(H5_DBL_ABS_EQUAL(w0_3, w0_4), 1, "DSetCreatPropList::getLayout", __LINE__, __FILE__); + + + PASSED(); + return 0; + } // end top try block + + catch (Exception& E) + { + return -1; + } +} // test_chunk_cache + + +/*------------------------------------------------------------------------- * Function: test_virtual * * Purpose Tests fixed, unlimited, and printf selections in the same * VDS * * Return Success: 0 - * * Failure: number of errors * * Programmer Binh-Minh Ribler @@ -1305,6 +1415,7 @@ void test_dset() nerrors += test_multiopen (file) < 0 ? 1:0; nerrors += test_types(file) < 0 ? 1:0; nerrors += test_virtual() < 0 ? 1:0; + nerrors += test_chunk_cache(fapl) < 0 ? 1:0; // Close group "emit diagnostics". grp.close(); |