summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2016-02-11 04:40:10 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2016-02-11 04:40:10 (GMT)
commit5655e5a91a538bd2cc885e5927f8ed61ab8e166b (patch)
treef98ac54c24471ec1adc4b47a338b7b7ec67d030e /test
parent63c90e5c67445de5deaaf45b70273fef1286ae60 (diff)
downloadhdf5-5655e5a91a538bd2cc885e5927f8ed61ab8e166b.zip
hdf5-5655e5a91a538bd2cc885e5927f8ed61ab8e166b.tar.gz
hdf5-5655e5a91a538bd2cc885e5927f8ed61ab8e166b.tar.bz2
[svn-r29084] Revert of:
r29069 and 72 (gheap cleanup) r29041 and 43 (HDFFV-8740 external storage) These cause problems in the daily tests. They will be re-introduced when their respective problems have been addressed. Tested on: 64-bit Ubuntu 15.10 (Linux 4.2.0 x86_64) gcc 5.2.1 autotools serial (check-vfd) w/ Fortran and C++ autotools parallel w/ Fortran CMake serial
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am2
-rw-r--r--test/external.c739
-rw-r--r--test/gheap.c684
3 files changed, 399 insertions, 1026 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 667c0e7..8389cc4 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -129,7 +129,7 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offse
huge_chunks.h5 chunk_cache.h5 big_chunk.h5 chunk_expand.h5 \
copy_dcpl_newfile.h5 extend.h5 istore.h5 extlinks*.h5 frspace.h5 links*.h5 \
sys_file1 tfile[1-7].h5 th5s[1-4].h5 lheap.h5 fheap.h5 ohdr.h5 \
- stab.h5 extern_[1-4].h5 extern_[1-4][rw].raw gheap[0-5].h5 \
+ stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \
dt_arith[1-2] links.h5 links[0-6]*.h5 extlinks[0-15].h5 tmp \
big.data big[0-9][0-9][0-9][0-9][0-9].h5 \
stdio.h5 sec2.h5 dtypes[0-9].h5 dtypes1[0].h5 dt_arith[1-2].h5 tattr.h5 \
diff --git a/test/external.c b/test/external.c
index 67fa2ec..a37dc94 100644
--- a/test/external.c
+++ b/test/external.c
@@ -25,19 +25,9 @@ const char *FILENAME[] = {
"extern_1",
"extern_2",
"extern_3",
- "extern_4",
- "extern_dir/file_1",
NULL
};
-/* A similar collection of files is used for the tests that
- * perform file I/O.
- */
-#define N_EXT_FILES 4
-#define PART_SIZE 25
-#define TOTAL_SIZE 100
-#define GARBAGE_PER_FILE 10
-
/*-------------------------------------------------------------------------
* Function: files_have_same_contents
@@ -100,106 +90,6 @@ out:
/*-------------------------------------------------------------------------
- * Function: reset_raw_data_files
- *
- * Purpose: Resets the data in the raw data files for tests that
- * perform dataset I/O on a set of files.
- *
- * Return: SUCCEED/FAIL
- *
- * Programmer: Dana Robinson
- * February 2016
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-reset_raw_data_files(void)
-{
- int fd = 0; /* external file descriptor */
- size_t i, j; /* iterators */
- hssize_t n; /* bytes of I/O */
- char filename[1024]; /* file name */
- int data[PART_SIZE]; /* raw data buffer */
- uint8_t *garbage = NULL; /* buffer of garbage data */
- size_t garbage_count; /* size of garbage buffer */
- size_t garbage_bytes; /* # of garbage bytes written to file */
-
- /* Set up garbage buffer */
- garbage_count = N_EXT_FILES * GARBAGE_PER_FILE;
- if(NULL == (garbage = (uint8_t *)HDcalloc(garbage_count, sizeof(uint8_t))))
- goto error;
- for(i = 0; i < garbage_count; i++)
- garbage[i] = 0xFF;
-
- /* The *r files are pre-filled with data and are used to
- * verify that read operations work correctly.
- */
- for(i = 0; i < N_EXT_FILES; i++) {
-
- /* Open file */
- HDsprintf(filename, "extern_%lur.raw", (unsigned long)i + 1);
- if((fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
- goto error;
-
- /* Write garbage data to the file. This allows us to test the
- * the ability to set an offset in the raw data file.
- */
- garbage_bytes = i * 10;
- n = HDwrite(fd, garbage, garbage_bytes);
- if(n < 0 || (size_t)n != garbage_bytes)
- goto error;
-
- /* Fill array with data */
- for(j = 0; j < PART_SIZE; j++) {
- data[j] = (int)(i * 25 + j);
- } /* end for */
-
- /* Write raw data to the file. */
- n = HDwrite(fd, data, sizeof(data));
- if(n != sizeof(data))
- goto error;
-
- /* Close this file */
- HDclose(fd);
-
- } /* end for */
-
- /* The *w files are only pre-filled with the garbage data and are
- * used to verify that write operations work correctly. The individual
- * tests fill in the actual data.
- */
- for(i = 0; i < N_EXT_FILES; i++) {
-
- /* Open file */
- HDsprintf(filename, "extern_%luw.raw", (unsigned long)i + 1);
- if((fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
- goto error;
-
- /* Write garbage data to the file. This allows us to test the
- * the ability to set an offset in the raw data file.
- */
- garbage_bytes = i * 10;
- n = HDwrite(fd, garbage, garbage_bytes);
- if(n < 0 || (size_t)n != garbage_bytes)
- goto error;
-
- /* Close this file */
- HDclose(fd);
-
- } /* end for */
- HDfree(garbage);
- return SUCCEED;
-
-error:
- if(fd)
- HDclose(fd);
- if(garbage)
- HDfree(garbage);
- return FAIL;
-} /* end reset_raw_data_files() */
-
-
-/*-------------------------------------------------------------------------
* Function: test_non_extendible
*
* Purpose: Tests a non-extendible dataset with a single external file.
@@ -222,7 +112,7 @@ test_non_extendible(hid_t file)
hsize_t max_size[1]; /* data space maximum size */
int n; /* number of external files */
char name[256]; /* external file name */
- off_t file_offset; /* external file offset */
+ HDoff_t file_offset; /* external file offset */
hsize_t file_size; /* sizeof external file segment */
haddr_t dset_addr; /* address of dataset */
@@ -471,7 +361,7 @@ test_large_enough_current_not_eventual(hid_t file)
/*-------------------------------------------------------------------------
- * Function: test_unlimited
+ * Function: test_1e
*
* Purpose: Test a single external file of unlimited size and an
* unlimited data space.
@@ -494,7 +384,7 @@ test_unlimited(hid_t file)
hsize_t max_size[1]; /* data space maximum size */
int n; /* number of external files */
char name[256]; /* external file name */
- off_t file_offset; /* external file offset */
+ HDoff_t file_offset; /* external file offset */
hsize_t file_size; /* sizeof external file segment */
TESTING("unlimited dataspace, unlimited external storage");
@@ -739,25 +629,38 @@ test_read_file_set(hid_t fapl)
hid_t space = -1; /* data space */
hid_t dset = -1; /* dataset */
hid_t grp = -1; /* group to emit diagnostics */
- size_t i; /* miscellaneous counter */
+ int fd = -1; /* external file descriptors */
+ size_t i, j; /* miscellaneous counters */
+ hssize_t n; /* bytes of I/O */
char filename[1024]; /* file names */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
+ int part[25], whole[100]; /* raw data buffers */
hsize_t cur_size; /* current data space size */
- hid_t hs_space = -1; /* hyperslab data space */
+ hid_t hs_space; /* hyperslab data space */
hsize_t hs_start = 30; /* hyperslab starting offset */
hsize_t hs_count = 25; /* hyperslab size */
+ int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
TESTING("read external dataset");
- if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
- TEST_ERROR
-
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
+ /* Write the data to external files directly */
+ for(i=0; i<4; i++) {
+ for(j=0; j<25; j++) {
+ part[j] = (int)(i*25+j);
+ } /* end for */
+ HDsprintf(filename, "extern_%lua.raw", (unsigned long)i+1);
+ if((fd = HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0)
+ TEST_ERROR
+ n = HDwrite(fd, temparray, (size_t)i*10);
+ if(n < 0 || (size_t)n != i*10)
+ TEST_ERROR
+ n = HDwrite(fd, part, sizeof(part));
+ if(n != sizeof(part))
TEST_ERROR
+ HDclose(fd);
+ } /* end for */
- /* Create the file and an initial group. This causes messages about
+ /*
+ * Create the file and an initial group. This causes messages about
* debugging to be emitted before we start playing games with what the
* output looks like.
*/
@@ -768,57 +671,50 @@ test_read_file_set(hid_t fapl)
FAIL_STACK_ERROR
if(H5Gclose(grp) < 0) FAIL_STACK_ERROR
- /* Create the dcpl */
+ /* Create the dataset */
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
FAIL_STACK_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
- HDsnprintf(filename, sizeof(filename), "extern_%dr.raw", (int) i + 1);
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
- FAIL_STACK_ERROR
- } /* end for */
-
- /* Create the dataspace */
- cur_size = TOTAL_SIZE;
+ if(H5Pset_external(dcpl, "extern_1a.raw", (HDoff_t)0, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_2a.raw", (HDoff_t)10, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_3a.raw", (HDoff_t)20, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_4a.raw", (HDoff_t)30, (hsize_t)sizeof part) < 0)
+ FAIL_STACK_ERROR
+ cur_size = 100;
if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
FAIL_STACK_ERROR
-
- /* Create the dataset */
if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
FAIL_STACK_ERROR
- /* Read the entire dataset */
+ /*
+ * Read the entire dataset and compare with the original
+ */
HDmemset(whole, 0, sizeof(whole));
if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
FAIL_STACK_ERROR
-
- /* Compare data */
- for(i = 0; i < TOTAL_SIZE; i++)
+ for(i = 0; i < 100; i++)
if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
+ FAIL_PUTS_ERROR(" Incorrect value(s) read.");
- /* Read via a hypserslab in the middle of the dataset */
+ /* Read the middle of the dataset */
+ if((hs_space = H5Scopy(space)) < 0)
+ FAIL_STACK_ERROR
+ if(H5Sselect_hyperslab(hs_space, H5S_SELECT_SET, &hs_start, NULL, &hs_count, NULL) < 0)
+ FAIL_STACK_ERROR
- /* Set up dataspace */
- if((hs_space = H5Scopy(space)) < 0)
- FAIL_STACK_ERROR
- if(H5Sselect_hyperslab(hs_space, H5S_SELECT_SET, &hs_start, NULL, &hs_count, NULL) < 0)
- FAIL_STACK_ERROR
+ HDmemset(whole, 0, sizeof(whole));
+ if(H5Dread(dset, H5T_NATIVE_INT, hs_space, hs_space, H5P_DEFAULT, whole) < 0)
+ FAIL_STACK_ERROR
- /* Read */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, hs_space, hs_space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
+ if(H5Sclose(hs_space) < 0) FAIL_STACK_ERROR
- /* Verify data */
- for(i = (size_t)hs_start; i < (size_t)(hs_start + hs_count); i++) {
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read (hyperslab).");
- } /* end for */
+ for(i = hs_start; i<hs_start+hs_count; i++) {
+ if(whole[i] != (signed)i)
+ FAIL_PUTS_ERROR(" Incorrect value(s) read.");
+ } /* end for */
if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
if(H5Sclose(space) < 0) FAIL_STACK_ERROR
- if(H5Sclose(hs_space) < 0) FAIL_STACK_ERROR
if(H5Fclose(file) < 0) FAIL_STACK_ERROR
PASSED();
return 0;
@@ -828,7 +724,6 @@ test_read_file_set(hid_t fapl)
H5Dclose(dset);
H5Pclose(dcpl);
H5Sclose(space);
- H5Sclose(hs_space);
H5Fclose(file);
} H5E_END_TRY;
return 1;
@@ -856,46 +751,49 @@ test_write_file_set(hid_t fapl)
hid_t mem_space = -1; /* memory data space */
hid_t file_space = -1; /* file data space */
hid_t dset = -1; /* dataset */
- unsigned i; /* miscellaneous counter */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
+ unsigned i; /* miscellaneous counters */
+ int fd = -1; /* external file descriptor */
+ int part[25], whole[100]; /* raw data buffers */
hsize_t cur_size = 100; /* current data space size */
hsize_t max_size = 200; /* maximum data space size */
hsize_t hs_start = 100; /* hyperslab starting offset */
hsize_t hs_count = 100; /* hyperslab size */
char filename[1024]; /* file name */
+ int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
TESTING("write external dataset");
- if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
- TEST_ERROR
-
/* Create another file */
- h5_fixname(FILENAME[2], fapl, filename, sizeof(filename));
+ h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
FAIL_STACK_ERROR
- /* Create the dcpl and external file list */
- if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ /* Create the external file list */
+ if((dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0)
+ FAIL_STACK_ERROR
+ if(H5Pset_external(dcpl, "extern_1b.raw", (HDoff_t)0, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_2b.raw", (HDoff_t)10, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_3b.raw", (HDoff_t)20, (hsize_t)sizeof part) < 0 ||
+ H5Pset_external(dcpl, "extern_4b.raw", (HDoff_t)30, H5F_UNLIMITED) < 0)
FAIL_STACK_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
- hsize_t size;
-
- HDsnprintf(filename, sizeof(filename), "extern_%dw.raw", (int) i + 1);
- if(i != N_EXT_FILES -1)
- size = (hsize_t)sizeof(part);
- else
- size = H5F_UNLIMITED;
+ /* Make sure the output files are fresh*/
+ for(i=1; i<=4; i++) {
+ HDsprintf(filename, "extern_%db.raw", i);
+ if((fd= HDopen(filename, O_RDWR|O_CREAT|O_TRUNC, 0666)) < 0) {
+ H5_FAILED();
+ printf(" cannot open %s: %s\n", filename, HDstrerror(errno));
+ goto error;
+ } /* end if */
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), size) < 0)
- FAIL_STACK_ERROR
+ if(HDwrite(fd, temparray, (i-1)*10) < 0) {
+ H5_FAILED();
+ printf(" write error to file %s: %s\n", filename, HDstrerror(errno));
+ goto error;
+ }
+ HDclose(fd);
} /* end for */
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
- TEST_ERROR
-
/* Create the dataset */
if((mem_space = H5Screate_simple(1, &cur_size, &max_size)) < 0)
FAIL_STACK_ERROR
@@ -909,11 +807,11 @@ test_write_file_set(hid_t fapl)
whole[i] = (int)i;
if(H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole) < 0)
FAIL_STACK_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
+ for(i = 0; i < 4; i++) {
char name1[64], name2[64];
- HDsprintf(name1, "extern_%dr.raw", i + 1);
- HDsprintf(name2, "extern_%dw.raw", i + 1);
+ HDsprintf(name1, "extern_%da.raw", i + 1);
+ HDsprintf(name2, "extern_%db.raw", i + 1);
if(!files_have_same_contents(name1, name2))
FAIL_PUTS_ERROR(" Output differs from expected value.")
} /* end for */
@@ -955,456 +853,6 @@ test_write_file_set(hid_t fapl)
return 1;
} /* end test_write_file_set() */
-
- /*-------------------------------------------------------------------------
- * Function: test_path_absolute
- *
- * Purpose: Test absolute filenames for external files.
- * This will create an HDF5 file in a subdirectory which will
- * refer to /full/path/extern_*a.raw on unix and to
- * c:\full\path\extern_*a.raw and \full\path\extern_*a.raw on
- * windows.
- *
- * Return: Success: 0
- * Failure: 1
- *
- * Programmer: Steffen Kiess
- * March 10, 2015
- *
- *-------------------------------------------------------------------------
- */
-static int
-test_path_absolute(hid_t fapl)
-{
- hid_t file = -1; /* file to write to */
- hid_t dcpl = -1; /* dataset creation properties */
- hid_t space = -1; /* data space */
- hid_t dset = -1; /* dataset */
- size_t i; /* miscellaneous counter */
- char cwdpath[1024]; /* working directory */
- char filename[1024]; /* file name */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
- hsize_t cur_size; /* current data space size */
-
- TESTING("absolute filenames for external file");
-
- h5_fixname(FILENAME[3], fapl, filename, sizeof(filename));
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- FAIL_STACK_ERROR
-
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
- TEST_ERROR
-
- /* Create the dcpl */
- if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR
- if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
- TEST_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
- HDsnprintf(filename, sizeof(filename), "%s%sextern_%dr.raw", cwdpath, H5_DIR_SEPS, (int) i + 1);
-#if defined(H5_HAVE_WINDOW_PATH)
- /* For windows, test path-absolute case (\dir\file.raw) for the second file */
- if(i == 1)
- HDsnprintf(filename, sizeof(filename), "%s%sextern_%dr.raw", cwdpath + 2, H5_DIR_SEPS, i + 1);
-#endif
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
- FAIL_STACK_ERROR
- } /* end for */
-
- /* create the dataspace */
- cur_size = TOTAL_SIZE;
- if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
- FAIL_STACK_ERROR
-
- /* create the dataset */
- if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR
-
- /* Read the entire dataset and compare with the original */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
- for(i = 0; i < TOTAL_SIZE; i++)
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
-
- if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
- if(H5Sclose(space) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
- if(H5Fclose(file) < 0) FAIL_STACK_ERROR
- PASSED();
- return 0;
-
-error:
- H5E_BEGIN_TRY {
- H5Dclose(dset);
- H5Sclose(space);
- H5Pclose(dcpl);
- H5Fclose(file);
- } H5E_END_TRY;
- return 1;
-} /* end test_path_absolute() */
-
-
-/*-------------------------------------------------------------------------
- * Function: test_path_relative
- *
- * Purpose: Test external files with filename relative to current directory.
- * This will create an HDF5 file in a subdirectory which will
- * refer to extern_*a.raw
- *
- * Return: Success: 0
- * Failure: 1
- *
- * Programmer: Steffen Kiess
- * March 10, 2015
- *
- *-------------------------------------------------------------------------
- */
-static int
-test_path_relative(hid_t fapl)
-{
- hid_t file = -1; /* file to write to */
- hid_t dcpl = -1; /* dataset creation properties */
- hid_t space = -1; /* data space */
- hid_t dset = -1; /* dataset */
- size_t i; /* miscellaneous counters */
- char cwdpath[1024]; /* working directory */
- char filename[1024]; /* file name */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
- hsize_t cur_size; /* current data space size */
-
- TESTING("filenames relative to current directory for external file");
-
- if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
- TEST_ERROR
-
- if (HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
- TEST_ERROR;
-
- h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- FAIL_STACK_ERROR;
-
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
- TEST_ERROR
-
- /* Create the dataset */
- if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR
- if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
- TEST_ERROR
- for (i = 0; i < N_EXT_FILES; i++) {
- HDsnprintf(filename, sizeof(filename), "extern_%dr.raw", (int)i + 1);
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
- FAIL_STACK_ERROR
- } /* end for */
-
- cur_size = TOTAL_SIZE;
- if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
- FAIL_STACK_ERROR
- if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
- FAIL_STACK_ERROR
-
- /* Read the entire dataset and compare with the original */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
- for(i = 0; i < TOTAL_SIZE; i++)
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
-
- if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
- if(H5Sclose(space) < 0) FAIL_STACK_ERROR
- if(H5Fclose(file) < 0) FAIL_STACK_ERROR
- PASSED();
- return 0;
-
-error:
- H5E_BEGIN_TRY {
- H5Dclose(dset);
- H5Pclose(dcpl);
- H5Sclose(space);
- H5Fclose(file);
- } H5E_END_TRY;
- return 1;
-} /* end test_path_relative() */
-
-
-/*-------------------------------------------------------------------------
- * Function: test_path_relative_cwd
- *
- * Purpose: Test external files with filename relative to current directory.
- * This will create an HDF5 file in a subdirectory which will
- * refer to ../extern_*a.raw
- * The files are then accessed by setting the efile_prefix dataset
- * access property to "${ORIGIN}".
- *
- * Return: Success: 0
- * Failure: 1
- *
- * Programmer: Steffen Kiess
- * March 10, 2015
- *
- *-------------------------------------------------------------------------
- */
-static int
-test_path_relative_cwd(hid_t fapl)
-{
- hid_t file = -1; /* file to write to */
- hid_t dcpl = -1; /* dataset creation properties */
- hid_t space = -1; /* data space */
- hid_t dapl = -1; /* dataset access property list */
- hid_t dapl2 = -1; /* copy of dapl */
- hid_t dset = -1; /* dataset */
- hid_t dset2 = -1; /* dataset, opened a second time */
- hid_t dset3 = -1; /* dataset, opened with different prefix */
- size_t i; /* miscellaneous counters */
- char cwdpath[1024]; /* working directory */
- char filename[1024]; /* file name */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
- hsize_t cur_size; /* current data space size */
- char buffer[1024]; /* buffer to read efile_prefix */
-
- TESTING("filenames relative to HDF5 file for external file");
-
- if(HDsetenv("HDF5_EXTFILE_PREFIX", "", 1) < 0)
- TEST_ERROR
-
- if(HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
- TEST_ERROR;
-
- h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- FAIL_STACK_ERROR;
-
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
- TEST_ERROR
-
- /* Create the dataset */
- if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR
- if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
- TEST_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
- HDsnprintf(filename, sizeof(filename), "..%sextern_%dr.raw", H5_DIR_SEPS, (int)i + 1);
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
- FAIL_STACK_ERROR
- } /* end for */
-
- cur_size = TOTAL_SIZE;
- if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
- FAIL_STACK_ERROR
- if((dapl = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
- FAIL_STACK_ERROR
- if(H5Pset_efile_prefix(dapl, "${ORIGIN}") < 0)
- FAIL_STACK_ERROR
- if(H5Pget_efile_prefix(dapl, buffer, sizeof(buffer)) < 0)
- FAIL_STACK_ERROR
- if(HDstrcmp(buffer, "${ORIGIN}") != 0)
- FAIL_PUTS_ERROR("efile prefix not set correctly");
- if((dapl2 = H5Pcopy(dapl)) < 0)
- FAIL_STACK_ERROR
-
- /* Create dataset */
- if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, dapl2)) < 0)
- FAIL_STACK_ERROR
-
- /* Reopen dataset with same efile_prefix property */
- if((dset2 = H5Dopen2(file, "dset1", dapl2)) < 0)
- FAIL_STACK_ERROR
-
- /* Reopen dataset with different efile_prefix property */
- if(H5Pset_efile_prefix(dapl, "//") < 0)
- FAIL_STACK_ERROR
- H5E_BEGIN_TRY {
- dset3 = H5Dopen2(file, "dset1", dapl);
- } H5E_END_TRY;
- if(dset3 >= 0)
- FAIL_PUTS_ERROR("reopening the dataset with a different efile_prefix succeded");
-
- /* Read the entire dataset and compare with the original */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
- for(i = 0; i < TOTAL_SIZE; i++)
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
-
- /* Close dataset */
- if(H5Dclose(dset2) < 0) FAIL_STACK_ERROR
- if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
-
- /* Open dataset (use a differend prefix than for create.
- * This works because the dataset was closed.
- */
- if(H5Pset_efile_prefix(dapl2, "${ORIGIN}/.") < 0)
- FAIL_STACK_ERROR
- if((dset = H5Dopen2(file, "dset1", dapl2)) < 0)
- FAIL_STACK_ERROR
-
- /* Reopen dataset with same efile_prefix property */
- if((dset2 = H5Dopen2(file, "dset1", dapl2)) < 0)
- FAIL_STACK_ERROR
-
- /* Reopen dataset with different efile_prefix property */
- if(H5Pset_efile_prefix(dapl, NULL) < 0)
- FAIL_STACK_ERROR
- H5E_BEGIN_TRY {
- dset3 = H5Dopen2(file, "dset1", dapl);
- } H5E_END_TRY;
- if(dset3 >= 0)
- FAIL_PUTS_ERROR("reopening the dataset with a different efile_prefix succeded");
-
- /* Read the entire dataset and compare with the original */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
- for(i = 0; i < TOTAL_SIZE; i++)
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
-
- if(H5Dclose(dset2) < 0) FAIL_STACK_ERROR
- if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dapl2) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dapl) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
- if(H5Sclose(space) < 0) FAIL_STACK_ERROR
- if(H5Fclose(file) < 0) FAIL_STACK_ERROR
- PASSED();
- return 0;
-
-error:
- H5E_BEGIN_TRY {
- H5Pclose(dapl2);
- H5Pclose(dapl);
- H5Dclose(dset3);
- H5Dclose(dset2);
- H5Dclose(dset);
- H5Pclose(dcpl);
- H5Sclose(space);
- H5Fclose(file);
- } H5E_END_TRY;
- return 1;
-} /* end test_path_relative_cwd() */
-
-
-/*-------------------------------------------------------------------------
- * Function: test_path_env
- *
- * Purpose: Test whether the value of HDF5_EXTFILE_PREFIX will overwrite
- * the efile_prefix dataset access property.
- * This will create an HDF5 file in a subdirectory which will
- * refer to ../extern_*a.raw
- * The files are then accessed by setting the HDF5_EXTFILE_PREFIX
- * environment variable to "${ORIGIN}".
- * The efile_prefix dataset access property is set to "someprefix",
- * which will cause an error if the value is not overwritten by
- * the environment variable.
- *
- * Return: Success: 0
- * Failure: 1
- *
- * Programmer: Steffen Kiess
- * March 10, 2015
- *
- *-------------------------------------------------------------------------
- */
-static int
-test_path_env(hid_t fapl)
-{
- hid_t file = -1; /* file to write to */
- hid_t dcpl = -1; /* dataset creation properties */
- hid_t space = -1; /* data space */
- hid_t dapl = -1; /* dataset access property list */
- hid_t dset = -1; /* dataset */
- size_t i; /* miscellaneous counters */
- char cwdpath[1024]; /* working directory */
- char filename[1024]; /* file name */
- int part[PART_SIZE]; /* raw data buffer (partial) */
- int whole[TOTAL_SIZE]; /* raw data buffer (total) */
- hsize_t cur_size; /* current data space size */
- char buffer[1024]; /* buffer to read efile_prefix */
-
- TESTING("prefix in HDF5_EXTFILE_PREFIX");
-
- if(HDsetenv("HDF5_EXTFILE_PREFIX", "${ORIGIN}", 1))
- TEST_ERROR
-
- if(HDmkdir("extern_dir", (mode_t)0755) < 0 && errno != EEXIST)
- TEST_ERROR;
-
- h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- FAIL_STACK_ERROR
-
- /* Reset the raw data files */
- if(reset_raw_data_files() < 0)
- TEST_ERROR
-
- /* Create the dataset */
- if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
- FAIL_STACK_ERROR
- if(NULL == HDgetcwd(cwdpath, sizeof(cwdpath)))
- TEST_ERROR
- for(i = 0; i < N_EXT_FILES; i++) {
- HDsnprintf(filename, sizeof(filename), "..%sextern_%dr.raw", H5_DIR_SEPS, (int) i + 1);
- if(H5Pset_external(dcpl, filename, (HDoff_t)(i * GARBAGE_PER_FILE), (hsize_t)sizeof(part)) < 0)
- FAIL_STACK_ERROR
- } /* end for */
-
- cur_size = TOTAL_SIZE;
- if((space = H5Screate_simple(1, &cur_size, NULL)) < 0)
- FAIL_STACK_ERROR
- if((dapl = H5Pcreate(H5P_DATASET_ACCESS)) < 0)
- FAIL_STACK_ERROR
-
- /* Set prefix to a nonexistent directory, will be overwritten by environment variable */
- if(H5Pset_efile_prefix(dapl, "someprefix") < 0)
- FAIL_STACK_ERROR
- if(H5Pget_efile_prefix(dapl, buffer, sizeof(buffer)) < 0)
- FAIL_STACK_ERROR
- if(HDstrcmp(buffer, "someprefix") != 0)
- FAIL_PUTS_ERROR("efile prefix not set correctly");
-
- /* Create dataset */
- if((dset = H5Dcreate2(file, "dset1", H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, dapl)) < 0)
- FAIL_STACK_ERROR
-
- /* Read the entire dataset and compare with the original */
- HDmemset(whole, 0, sizeof(whole));
- if(H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole) < 0)
- FAIL_STACK_ERROR
- for(i = 0; i < TOTAL_SIZE; i++)
- if(whole[i] != (signed)i)
- FAIL_PUTS_ERROR("Incorrect value(s) read.");
-
- if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dapl) < 0) FAIL_STACK_ERROR
- if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
- if(H5Sclose(space) < 0) FAIL_STACK_ERROR
- if(H5Fclose(file) < 0) FAIL_STACK_ERROR
- PASSED();
- return 0;
-
-error:
- H5E_BEGIN_TRY {
- H5Pclose(dapl);
- H5Dclose(dset);
- H5Pclose(dcpl);
- H5Sclose(space);
- H5Fclose(file);
- } H5E_END_TRY;
- return 1;
-} /* end test_path_env() */
-
/*-------------------------------------------------------------------------
* Function: main
@@ -1478,14 +926,10 @@ main(void)
nerrors += test_add_to_unlimited();
nerrors += test_overflow();
- /* These file set tests use the VFD-aware fapl */
+ /* These tests use the VFD-aware fapl */
nerrors += test_read_file_set(current_fapl_id);
nerrors += test_write_file_set(current_fapl_id);
- nerrors += test_path_absolute(current_fapl_id);
- nerrors += test_path_relative(current_fapl_id);
- nerrors += test_path_relative_cwd(current_fapl_id);
- nerrors += test_path_env(current_fapl_id);
-
+
/* Verify symbol table messages are cached */
nerrors += (h5_verify_cached_stabs(FILENAME, current_fapl_id) < 0 ? 1 : 0);
@@ -1503,17 +947,14 @@ main(void)
/* Clean up files used by file set tests */
if(h5_cleanup(FILENAME, fapl_id_old)) {
- HDremove("extern_1r.raw");
- HDremove("extern_2r.raw");
- HDremove("extern_3r.raw");
- HDremove("extern_4r.raw");
-
- HDremove("extern_1w.raw");
- HDremove("extern_2w.raw");
- HDremove("extern_3w.raw");
- HDremove("extern_4w.raw");
-
- HDrmdir("extern_dir");
+ HDremove("extern_1a.raw");
+ HDremove("extern_1b.raw");
+ HDremove("extern_2a.raw");
+ HDremove("extern_2b.raw");
+ HDremove("extern_3a.raw");
+ HDremove("extern_3b.raw");
+ HDremove("extern_4a.raw");
+ HDremove("extern_4b.raw");
} /* end if */
return EXIT_SUCCESS;
diff --git a/test/gheap.c b/test/gheap.c
index c03d099..3f66d35 100644
--- a/test/gheap.c
+++ b/test/gheap.c
@@ -51,480 +51,412 @@ const char *FILENAME[] = {
"gheap2",
"gheap3",
"gheap4",
- "gheap5",
+ "gheapooo",
NULL
};
-/* Number of heap objects in tests */
-#define N_GHEAP_OBJS 1024
-
-/* Size of heap object buffers */
-#define OBJ_BUF_SIZE N_GHEAP_OBJS
-
-/* Size of filename */
-#define FILENAME_SIZE 1024
-
/*-------------------------------------------------------------------------
- * Function: test_monotonic_increasing
+ * Function: test_1
+ *
+ * Purpose: Writes a sequence of objects to the global heap where each
+ * object is larger than the one before.
*
- * Purpose: Writes a sequence of objects to the global heap where each
- * object is larger than the one before.
+ * Return: Success: 0
*
- * Return: Success: 0
- * Failure: number of errors
+ * Failure: number of errors
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Tuesday, March 31, 1998
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
static int
-test_monotonic_increasing(hid_t fapl)
+test_1 (hid_t fapl)
{
- char *filename = NULL; /* VFD-dependent filename */
- hid_t fid = -1; /* HDF5 file ID */
- H5F_t *f = NULL; /* file object pointer */
- H5HG_t *obj = NULL; /* global heap objects */
- uint8_t *in = NULL; /* global heap data sent */
- uint8_t *out = NULL; /* global heap data received */
- unsigned i; /* iterator */
- size_t size; /* heap object size */
- int nerrors = 0; /* # of errors encountered */
+ hid_t file = -1;
+ H5F_t *f = NULL;
+ H5HG_t obj[1024];
+ uint8_t out[1024];
+ uint8_t in[1024];
+ int i;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("monotonically increasing lengths");
- /* allocate memory */
- if(NULL == (filename = (char *)HDcalloc(FILENAME_SIZE, sizeof(char))))
- goto error;
- if(NULL == (obj = (H5HG_t *)HDcalloc(N_GHEAP_OBJS, sizeof(H5HG_t))))
- goto error;
- if(NULL == (in = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
- if(NULL == (out = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
-
/* Open a clean file */
- h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
- if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
- H5_FAILED();
- HDputs(" Unable to create file");
- goto error;
- } /* end if */
-
- /* Write the objects, monotonically increasing in length. Since this is
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ goto error;
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
+ H5_FAILED();
+ puts(" Unable to create file");
+ goto error;
+ }
+
+ /*
+ * Write the objects, monotonically increasing in length. Since this is
* a clean file, the addresses allocated for the collections should also
* be monotonically increasing.
*/
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- size = i + 1;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj + i) < 0) {
- H5_FAILED();
- HDputs(" Unable to insert object into global heap");
- nerrors++;
- } else if(i && H5F_addr_gt(obj[i - 1].addr, obj[i].addr)) {
- H5_FAILED();
- HDputs(" Collection addresses are not monotonically increasing");
- nerrors++;
- } /* end if */
- } /* end for */
-
- /* Now try to read each object back. */
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- size = i + 1;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, obj + i, in, NULL)) {
- H5_FAILED();
- HDputs(" Unable to read object");
- nerrors++;
- } else if(HDmemcmp(in, out, size)) {
- H5_FAILED();
- HDputs(" Value read doesn't match value written");
- nerrors++;
- } /* end if */
- } /* end for */
-
- if(H5Fclose(fid) < 0) goto error;
+ for(i = 0; i < 1024; i++) {
+ size = i + 1;
+ HDmemset(out, 'A' + i % 26, size);
+ H5Eclear2(H5E_DEFAULT);
+ status = H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj + i);
+ if(status < 0) {
+ H5_FAILED();
+ puts(" Unable to insert object into global heap");
+ nerrors++;
+ } else if(i && H5F_addr_gt(obj[i - 1].addr, obj[i].addr)) {
+ H5_FAILED();
+ puts(" Collection addresses are not monotonically increasing");
+ nerrors++;
+ }
+ }
+
+ /*
+ * Now try to read each object back.
+ */
+ for(i = 0; i < 1024; i++) {
+ size = i + 1;
+ HDmemset(out, 'A' + i % 26, size);
+ H5Eclear2(H5E_DEFAULT);
+ if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, obj + i, in, NULL)) {
+ H5_FAILED();
+ puts(" Unable to read object");
+ nerrors++;
+ } else if(HDmemcmp(in, out, size)) {
+ H5_FAILED();
+ puts(" Value read doesn't match value written");
+ nerrors++;
+ }
+ }
+
+ if(H5Fclose(file) < 0) goto error;
if(nerrors) goto error;
- HDfree(filename);
- HDfree(obj);
- HDfree(in);
- HDfree(out);
-
PASSED();
return 0;
error:
H5E_BEGIN_TRY {
- H5Fclose(fid);
+ H5Fclose(file);
} H5E_END_TRY;
- if(filename)
- HDfree(filename);
- if(obj)
- HDfree(obj);
- if(in)
- HDfree(in);
- if(out)
- HDfree(out);
return MAX(1, nerrors);
-} /* end test_monotonic_increasing() */
+}
/*-------------------------------------------------------------------------
- * Function: test_monotonic_decreasing
+ * Function: test_2
+ *
+ * Purpose: Writes a sequence of objects to the global heap where each
+ * object is smaller than the one before.
*
- * Purpose: Writes a sequence of objects to the global heap where each
- * object is smaller than the one before.
+ * Return: Success: 0
*
- * Return: Success: 0
- * Failure: number of errors
+ * Failure: number of errors
*
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Tuesday, March 31, 1998
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
static int
-test_monotonic_decreasing(hid_t fapl)
+test_2 (hid_t fapl)
{
- char *filename = NULL; /* VFD-dependent filename */
- hid_t fid = -1; /* HDF5 file ID */
- H5F_t *f = NULL; /* file object pointer */
- H5HG_t *obj = NULL; /* global heap objects */
- uint8_t *in = NULL; /* global heap data sent */
- uint8_t *out = NULL; /* global heap data received */
- unsigned i; /* iterator */
- size_t size; /* heap object size */
- int nerrors = 0; /* # of errors encountered */
+ hid_t file = -1;
+ H5F_t *f = NULL;
+ H5HG_t obj[1024];
+ uint8_t out[1024];
+ uint8_t in[1024];
+ int i;
+ size_t size;
+ int nerrors = 0;
+ char filename[1024];
TESTING("monotonically decreasing lengths");
- /* allocate memory */
- if(NULL == (filename = (char *)HDcalloc(FILENAME_SIZE, sizeof(char))))
- goto error;
- if(NULL == (obj = (H5HG_t *)HDcalloc(N_GHEAP_OBJS, sizeof(H5HG_t))))
- goto error;
- if(NULL == (in = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
- if(NULL == (out = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
-
/* Open a clean file */
- h5_fixname(FILENAME[1], fapl, filename, sizeof(filename));
- if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
- H5_FAILED();
- HDputs(" Unable to create file");
- goto error;
- } /* end if */
-
- /* Write the objects, monotonically decreasing in length. */
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- size = N_GHEAP_OBJS - i;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj+i) < 0) {
- H5_FAILED();
- HDputs(" Unable to insert object into global heap");
- nerrors++;
- } /* end if */
- } /* end for */
-
- /* Now try to read each object back. */
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- size = N_GHEAP_OBJS - i;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, obj+i, in, NULL)) {
- H5_FAILED();
- HDputs(" Unable to read object");
- nerrors++;
- } else if (HDmemcmp(in, out, size)) {
- H5_FAILED();
- HDputs(" Value read doesn't match value written");
- nerrors++;
- } /* end if */
- } /* end for */
-
- if(H5Fclose(fid) < 0) goto error;
- if(nerrors) goto error;
-
- HDfree(filename);
- HDfree(obj);
- HDfree(in);
- HDfree(out);
-
+ h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ goto error;
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
+ H5_FAILED();
+ puts(" Unable to create file");
+ goto error;
+ }
+
+ /*
+ * Write the objects, monotonically decreasing in length.
+ */
+ for (i=0; i<1024; i++) {
+ size = 1024-i;
+ memset (out, 'A'+i%26, size);
+ H5Eclear2(H5E_DEFAULT);
+ if (H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i)<0) {
+ H5_FAILED();
+ puts(" Unable to insert object into global heap");
+ nerrors++;
+ }
+ }
+
+ /*
+ * Now try to read each object back.
+ */
+ for (i=0; i<1024; i++) {
+ size = 1024-i;
+ memset (out, 'A'+i%26, size);
+ H5Eclear2(H5E_DEFAULT);
+ if (NULL==H5HG_read (f, H5AC_ind_read_dxpl_id, obj+i, in, NULL)) {
+ H5_FAILED();
+ puts(" Unable to read object");
+ nerrors++;
+ } else if (memcmp (in, out, size)) {
+ H5_FAILED();
+ puts(" Value read doesn't match value written");
+ nerrors++;
+ }
+ }
+
+ if (H5Fclose(file)<0) goto error;
+ if (nerrors) goto error;
PASSED();
return 0;
error:
H5E_BEGIN_TRY {
- H5Fclose(fid);
+ H5Fclose(file);
} H5E_END_TRY;
- if(filename)
- HDfree(filename);
- if(obj)
- HDfree(obj);
- if(in)
- HDfree(in);
- if(out)
- HDfree(out);
return MAX(1, nerrors);
-} /* end test_monotonic_decreasing() */
+}
/*-------------------------------------------------------------------------
- * Function: test_complete_removal
+ * Function: test_3
*
- * Purpose: Creates a few global heap objects and then removes them all.
- * The collection should also be removed.
+ * Purpose: Creates a few global heap objects and then removes them all.
+ * The collection should also be removed.
*
- * Return: Success: 0
- * Failure: number of errors
+ * Return: Success: 0
*
- * Programmer: Robb Matzke
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
* Tuesday, March 31, 1998
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
static int
-test_complete_removal(hid_t fapl)
+test_3 (hid_t fapl)
{
- char *filename = NULL; /* VFD-dependent filename */
- hid_t fid = -1; /* HDF5 file ID */
- H5F_t *f = NULL; /* file object pointer */
- H5HG_t *obj = NULL; /* global heap objects */
- uint8_t *out = NULL; /* global heap data received */
- unsigned i; /* iterator */
- size_t size; /* heap object size */
- int nerrors = 0; /* # of errors encountered */
+ hid_t file = -1;
+ H5F_t *f = NULL;
+ H5HG_t obj[1024];
+ uint8_t out[1024];
+ int i;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("complete object removal");
- /* allocate memory */
- if(NULL == (filename = (char *)HDcalloc(FILENAME_SIZE, sizeof(char))))
- goto error;
- if(NULL == (obj = (H5HG_t *)HDcalloc(N_GHEAP_OBJS, sizeof(H5HG_t))))
- goto error;
- if(NULL == (out = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
-
/* Open a clean file */
- h5_fixname(FILENAME[2], fapl, filename, sizeof(filename));
- if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
- H5_FAILED();
- HDputs(" Unable to create file");
- goto error;
- } /* end if */
+ h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ goto error;
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
+ H5_FAILED();
+ puts(" Unable to create file");
+ goto error;
+ }
/* Create some stuff */
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- size = i % 30 + 100;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj+i) < 0) {
- H5_FAILED();
- HDputs(" Unable to insert object into global heap");
- nerrors++;
- } /* end if */
- } /* end for */
+ for (i=0; i<1024; i++) {
+ size = i%30+100;
+ memset (out, 'A'+i%26, size);
+ H5Eclear2(H5E_DEFAULT);
+ status = H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i);
+ if (status<0) {
+ H5_FAILED();
+ puts(" Unable to insert object into global heap");
+ nerrors++;
+ }
+ }
/* Remove everything */
- for(i = 0; i < N_GHEAP_OBJS; i++) {
- if(H5HG_remove(f, H5AC_ind_read_dxpl_id, obj+i) < 0) {
- H5_FAILED();
- HDputs(" Unable to remove object");
- nerrors++;
- } /* end if */
- } /* end for */
-
- if(H5Fclose(fid) < 0) goto error;
- if(nerrors) goto error;
-
- HDfree(filename);
- HDfree(obj);
- HDfree(out);
-
+ for (i=0; i<1024; i++) {
+ status = H5HG_remove (f, H5AC_ind_read_dxpl_id, obj+i);
+ if (status<0) {
+ H5_FAILED();
+ puts(" Unable to remove object");
+ nerrors++;
+ }
+ }
+
+ if (H5Fclose(file)<0) goto error;
+ if (nerrors) goto error;
PASSED();
return 0;
error:
H5E_BEGIN_TRY {
- H5Fclose(fid);
+ H5Fclose(file);
} H5E_END_TRY;
- if(filename)
- HDfree(filename);
- if(obj)
- HDfree(obj);
- if(out)
- HDfree(out);
return MAX(1, nerrors);
-} /* end test_complete_removal() */
+}
/*-------------------------------------------------------------------------
- * Function: test_partial_removal
+ * Function: test_4
*
- * Purpose: Tests the H5HG_remove() feature by writing lots of objects
- * and occassionally removing some. When we're done they're all
- * removed.
+ * Purpose: Tests the H5HG_remove() feature by writing lots of objects
+ * and occassionally removing some. When we're done they're all
+ * removed.
*
- * Return: Success: 0
- * Failure: number of errors
+ * Return: Success: 0
*
- * Programmer: Robb Matzke
+ * Failure: number of errors
+ *
+ * Programmer: Robb Matzke
* Tuesday, March 31, 1998
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
static int
-test_partial_removal(hid_t fapl)
+test_4 (hid_t fapl)
{
- char *filename = NULL; /* VFD-dependent filename */
- hid_t fid = -1; /* HDF5 file ID */
- H5F_t *f = NULL; /* file object pointer */
- H5HG_t *obj = NULL; /* global heap objects */
- uint8_t *out = NULL; /* global heap data received */
- unsigned i; /* iterator */
- size_t size; /* heap object size */
- int nerrors = 0; /* # of errors encountered */
+ hid_t file = -1;
+ H5F_t *f = NULL;
+ H5HG_t obj[1024];
+ uint8_t out[1024];
+ int i;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("partial object removal");
- /* allocate memory */
- if(NULL == (filename = (char *)HDcalloc(FILENAME_SIZE, sizeof(char))))
- goto error;
- if(NULL == (obj = (H5HG_t *)HDcalloc(N_GHEAP_OBJS, sizeof(H5HG_t))))
- goto error;
- if(NULL == (out = (uint8_t *)HDcalloc(OBJ_BUF_SIZE, sizeof(uint8_t))))
- goto error;
-
/* Open a clean file */
- h5_fixname(FILENAME[3], fapl, filename, sizeof(filename));
- if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
- goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
- H5_FAILED();
- HDputs(" Unable to create file");
- goto error;
- } /* end if */
-
- for(i = 0; i < N_GHEAP_OBJS; i++) {
-
- /* Insert */
- size = i % 30 + 100;
- HDmemset(out, 'A' + (int)i % 26, size);
- H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, H5AC_ind_read_dxpl_id, size, out, obj+i) < 0) {
- H5_FAILED();
- HDputs(" Unable to insert object into global heap");
- nerrors++;
- } /* end if */
-
- /* Remove every third one beginning with the second, but after the
- * next one has already been inserted. That is, insert A, B, C;
- * remove B, insert D, E, F; remove E; etc.
- */
- if(1 == i % 3) {
- H5Eclear2(H5E_DEFAULT);
- if(H5HG_remove(f, H5AC_ind_read_dxpl_id, obj+i-1) < 0) {
- H5_FAILED();
- HDputs(" Unable to remove object");
- nerrors++;
- } /* end if */
- HDmemset(obj+i-1, 0, sizeof(*obj));
- } /* end if */
- } /* end for */
-
- if(H5Fclose(fid) < 0) goto error;
- if(nerrors) goto error;
-
- HDfree(filename);
- HDfree(obj);
- HDfree(out);
-
+ h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ goto error;
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
+ H5_FAILED();
+ puts(" Unable to create file");
+ goto error;
+ }
+
+ for (i=0; i<1024; i++) {
+ /* Insert */
+ size = i%30+100;
+ memset (out, 'A'+i%26, size);
+ H5Eclear2(H5E_DEFAULT);
+ status = H5HG_insert (f, H5AC_ind_read_dxpl_id, size, out, obj+i);
+ if (status<0) {
+ H5_FAILED();
+ puts(" Unable to insert object into global heap");
+ nerrors++;
+ }
+
+ /*
+ * Remove every third one beginning with the second, but after the
+ * next one has already been inserted. That is, insert A, B, C;
+ * remove B, insert D, E, F; remove E; etc.
+ */
+ if (1==i%3) {
+ H5Eclear2(H5E_DEFAULT);
+ status = H5HG_remove (f, H5AC_ind_read_dxpl_id, obj+i-1);
+ if (status<0) {
+ H5_FAILED();
+ puts(" Unable to remove object");
+ nerrors++;
+ }
+ memset (obj+i-1, 0, sizeof *obj);
+ }
+ }
+
+ if (H5Fclose(file)<0) goto error;
+ if (nerrors) goto error;
PASSED();
return 0;
error:
H5E_BEGIN_TRY {
- H5Fclose(fid);
+ H5Fclose(file);
} H5E_END_TRY;
- if(filename)
- HDfree(filename);
- if(obj)
- HDfree(obj);
- if(out)
- HDfree(out);
return MAX(1, nerrors);
-} /* end test_partial_removal() */
+}
/*-------------------------------------------------------------------------
- * Function: test_ooo_indices
+ * Function: test_ooo_indices
*
- * Purpose: Tests that indices can be stored out of order. This can
+ * Purpose: Tests that indices can be stored out of order. This can
* happen when the indices "wrap around" due to many
* insertions and deletions (for example, from rewriting a
* VL dataset).
*
- * Return: Success: 0
- * Failure: number of errors
+ * Return: Success: 0
*
- * Programmer: Neil Fortner
+ * Failure: number of errors
+ *
+ * Programmer: Neil Fortner
* Monday, October 26, 2009
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
static int
test_ooo_indices(hid_t fapl)
{
- char *filename = NULL; /* VFD-dependent filename */
- hid_t fid = -1; /* HDF5 file ID */
- H5F_t *f = NULL; /* file object pointer */
- H5HG_t *obj = NULL; /* global heap objects */
- unsigned i, j; /* iterators */
- int nerrors = 0; /* # of errors encountered */
+ hid_t file = -1;
+ H5F_t *f = NULL;
+ unsigned i, j;
+ H5HG_t *obj = NULL;
+ herr_t status;
+ int nerrors=0;
+ char filename[1024];
TESTING("out of order indices");
- /* allocate memory */
- if(NULL == (filename = (char *)HDcalloc(FILENAME_SIZE, sizeof(char))))
- goto error;
if(NULL == (obj = (H5HG_t *)HDmalloc(2000 * sizeof(*obj))))
goto error;
/* Open a clean file */
- h5_fixname(FILENAME[4], fapl, filename, sizeof(filename));
- if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ h5_fixname(FILENAME[4], fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
H5_FAILED();
- HDputs(" Unable to create file");
+ puts(" Unable to create file");
goto error;
} /* end if */
/* Alternately insert 1000 entries and remove the previous group of 1000
- * entries, until the indices wrap around.
- */
- for(i = 0; i < 66; i++) {
-
+ * entries, until the indices wrap around */
+ for(i=0; i<66; i++) {
/* Insert 1000 entries. The index into the obj array will alternate up
* and down by 1000 so the previous set of insertions is preserved and
- * can be deleted.
- */
- for(j = 1000 * ((~i & 1)); j < 1000 * ((~i & 1) + 1); j++) {
+ * can be deleted. */
+ for(j=1000*((~i&1)); j<1000*((~i&1)+1); j++) {
H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, H5AC_ind_read_dxpl_id, sizeof(j), &j, &obj[j]) < 0)
+ status = H5HG_insert(f, H5AC_ind_read_dxpl_id, sizeof(j), &j, &obj[j]);
+ if (status<0)
GHEAP_REPEATED_ERR(" Unable to insert object into global heap")
/* Check that the index is as expected */
@@ -533,10 +465,11 @@ test_ooo_indices(hid_t fapl)
} /* end for */
/* Remove the previous 1000 entries */
- if(i > 0)
- for(j = 1000 * (i & 1); j < 1000 * ((i & 1) + 1); j++) {
+ if(i>0)
+ for(j=1000*(i&1); j<1000*((i&1)+1); j++) {
H5Eclear2(H5E_DEFAULT);
- if(H5HG_remove(f, H5AC_ind_read_dxpl_id, &obj[j]) < 0)
+ status = H5HG_remove(f, H5AC_ind_read_dxpl_id, &obj[j]);
+ if (status<0)
GHEAP_REPEATED_ERR(" Unable to remove object from global heap");
} /* end for */
} /* end for */
@@ -546,41 +479,37 @@ test_ooo_indices(hid_t fapl)
HDassert(obj[535].idx == 1);
/* Reopen the file */
- if(H5Fclose(fid) < 0) goto error;
- if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+ if (H5Fclose(file)<0) goto error;
+ if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5I_object(fid))) {
+ if(NULL == (f = (H5F_t *)H5I_object(file))) {
H5_FAILED();
- HDputs(" Unable to open file");
+ puts(" Unable to open file");
goto error;
} /* end if */
/* Read the objects to make sure the heap is still readable */
- for(i = 0; i < 1000; i++) {
+ for(i=0; i<1000; i++) {
if(NULL == H5HG_read(f, H5AC_ind_read_dxpl_id, &obj[i], &j, NULL))
goto error;
if(i != j) {
H5_FAILED();
- HDputs(" Incorrect read value");
+ puts(" Incorrect read value");
goto error;
} /* end if */
} /* end for */
- if(H5Fclose(fid) < 0) goto error;
- if(nerrors) goto error;
-
- HDfree(filename);
+ if (H5Fclose(file)<0) goto error;
+ if (nerrors) goto error;
HDfree(obj);
-
+ obj = NULL;
PASSED();
return 0;
-error:
+ error:
H5E_BEGIN_TRY {
- H5Fclose(fid);
+ H5Fclose(file);
} H5E_END_TRY;
- if(filename)
- HDfree(filename);
if(obj)
HDfree(obj);
return MAX(1, nerrors);
@@ -588,43 +517,46 @@ error:
/*-------------------------------------------------------------------------
- * Function: main
+ * Function: main
*
- * Purpose: Tests global heap
+ * Purpose: Tests global heap.
*
- * Return: EXIT_SUCCESS/EXIT_FAILURE
+ * Return: Success: zero
*
- * Programmer: Robb Matzke
+ * Failure: non-zero
+ *
+ * Programmer: Robb Matzke
* Tuesday, March 31, 1998
*
+ * Modifications:
+ *
*-------------------------------------------------------------------------
*/
int
-main(void)
+main (void)
{
- int nerrors = 0; /* # of errors */
- hid_t fapl = -1; /* VFD-dependent fapl ID */
+ int nerrors=0;
+ hid_t fapl;
h5_reset();
fapl = h5_fileaccess();
- nerrors += test_monotonic_increasing(fapl);
- nerrors += test_monotonic_decreasing(fapl);
- nerrors += test_complete_removal(fapl);
- nerrors += test_partial_removal(fapl);
+ nerrors += test_1(fapl);
+ nerrors += test_2(fapl);
+ nerrors += test_3(fapl);
+ nerrors += test_4(fapl);
nerrors += test_ooo_indices(fapl);
/* Verify symbol table messages are cached */
nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0);
- if(nerrors) goto error;
+ if (nerrors) goto error;
- HDputs("All global heap tests passed.");
+ puts("All global heap tests passed.");
h5_cleanup(FILENAME, fapl);
- return EXIT_SUCCESS;
-
-error:
- HDputs("*** TESTS FAILED ***");
- return EXIT_FAILURE;
-} /* end main() */
+ return 0;
+ error:
+ puts("*** TESTS FAILED ***");
+ return 1;
+}