summaryrefslogtreecommitdiffstats
path: root/test/lheap.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/lheap.c')
-rw-r--r--test/lheap.c237
1 files changed, 125 insertions, 112 deletions
diff --git a/test/lheap.c b/test/lheap.c
index 51ae25b..7db032e 100644
--- a/test/lheap.c
+++ b/test/lheap.c
@@ -1,123 +1,121 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
- * 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://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://www.hdfgroup.org/licenses. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*
- * Programmer: Robb Matzke <matzke@llnl.gov>
+ * Programmer: Robb Matzke
* Tuesday, November 24, 1998
*
- * Purpose: Test local heaps used by symbol tables (groups).
+ * Purpose: Test local heaps used by symbol tables (groups).
*/
#include "h5test.h"
#include "H5srcdir.h"
#include "H5ACprivate.h"
+#include "H5CXprivate.h" /* API Contexts */
#include "H5HLprivate.h"
#include "H5Iprivate.h"
+#include "H5VLprivate.h" /* Virtual Object Layer */
-const char *FILENAME[] = {
- "lheap",
- NULL
-};
+const char *FILENAME[] = {"lheap", NULL};
#define TESTFILE "tsizeslheap.h5"
-#define NOBJS 40
+#define NOBJS 40
-
/*-------------------------------------------------------------------------
- * Function: main
+ * Function: main
*
- * Purpose: Create a file, create a local heap, write data into the local
- * heap, close the file, open the file, read data out of the
- * local heap, close the file.
+ * Purpose: Create a file, create a local heap, write data into the local
+ * heap, close the file, open the file, read data out of the
+ * local heap, close the file.
*
- * Return: Success: zero
+ * Return: EXIT_SUCCESS/EXIT_FAILURE
*
- * Failure: non-zero
- *
- * Programmer: Robb Matzke
+ * Programmer: Robb Matzke
* Tuesday, November 24, 1998
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
int
main(void)
{
- hid_t fapl=H5P_DEFAULT; /*file access properties */
- hid_t file=-1; /*hdf5 file */
- H5F_t *f=NULL; /*hdf5 file pointer */
- char filename[1024]; /*file name */
- haddr_t heap_addr; /*local heap address */
- H5HL_t *heap = NULL; /*local heap */
- size_t obj[NOBJS]; /*offsets within the heap */
- int i, j; /*miscellaneous counters */
- char buf[1024]; /*the value to store */
- const char *s; /*value to read */
+ hid_t fapl = H5P_DEFAULT; /* file access properties */
+ hid_t file = -1; /* hdf5 file */
+ H5F_t *f = NULL; /* hdf5 file pointer */
+ char filename[1024]; /* file name */
+ haddr_t heap_addr; /* local heap address */
+ H5HL_t *heap = NULL; /* local heap */
+ size_t obj[NOBJS]; /* offsets within the heap */
+ int i, j; /* miscellaneous counters */
+ char buf[1024]; /* the value to store */
+ const char *s; /* value to read */
+ hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */
+ hbool_t driver_is_default_compatible;
/* Reset library */
h5_reset();
fapl = h5_fileaccess();
+ /* Push API context */
+ if (H5CX_push() < 0)
+ FAIL_STACK_ERROR;
+ api_ctx_pushed = TRUE;
/*
* Test writing to the heap...
*/
TESTING("local heap write");
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();
- H5Eprint2(H5E_DEFAULT, stdout);
- goto error;
+ if (FAIL == (file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)))
+ goto error;
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
+ H5_FAILED();
+ H5Eprint2(H5E_DEFAULT, stdout);
+ goto error;
}
- if (H5AC_ignore_tags(f) < 0) {
- H5_FAILED();
- H5Eprint2(H5E_DEFAULT, stdout);
- goto error;
+ if (FAIL == H5AC_ignore_tags(f)) {
+ H5_FAILED();
+ H5Eprint2(H5E_DEFAULT, stdout);
+ goto error;
}
- if(H5HL_create(f, H5P_DATASET_XFER_DEFAULT, (size_t)0, &heap_addr/*out*/) < 0) {
- H5_FAILED();
- H5Eprint2(H5E_DEFAULT, stdout);
- goto error;
+ if (FAIL == H5HL_create(f, (size_t)0, &heap_addr /*out*/)) {
+ H5_FAILED();
+ H5Eprint2(H5E_DEFAULT, stdout);
+ goto error;
}
- if (NULL == (heap = H5HL_protect(f, H5P_DATASET_XFER_DEFAULT, heap_addr, H5AC_WRITE))) {
+ if (NULL == (heap = H5HL_protect(f, heap_addr, H5AC__NO_FLAGS_SET))) {
H5_FAILED();
H5Eprint2(H5E_DEFAULT, stdout);
goto error;
}
- for(i = 0; i < NOBJS; i++) {
- sprintf(buf, "%03d-", i);
- for(j = 4; j < i; j++)
- buf[j] = '0' + j % 10;
- if(j > 4)
+ for (i = 0; i < NOBJS; i++) {
+ HDsnprintf(buf, sizeof(buf), "%03d-", i);
+ for (j = 4; j < i; j++)
+ buf[j] = (char)('0' + j % 10);
+ if (j > 4)
buf[j] = '\0';
- if((size_t)(-1) == (obj[i] = H5HL_insert(f, H5P_DATASET_XFER_DEFAULT, heap, strlen(buf) + 1, buf))) {
- H5_FAILED();
- H5Eprint2(H5E_DEFAULT, stdout);
- goto error;
- }
+ if (H5HL_insert(f, heap, HDstrlen(buf) + 1, buf, &obj[i]) < 0) {
+ H5_FAILED();
+ H5Eprint2(H5E_DEFAULT, stdout);
+ goto error;
+ }
}
- if(H5HL_unprotect(heap) < 0) {
+ if (FAIL == H5HL_unprotect(heap)) {
H5_FAILED();
H5Eprint2(H5E_DEFAULT, stdout);
goto error;
}
- if (H5Fclose(file)<0) goto error;
+ if (FAIL == H5Fclose(file))
+ goto error;
PASSED();
/*
@@ -126,25 +124,26 @@ main(void)
TESTING("local heap read");
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
- if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) goto error;
- if(NULL == (f = (H5F_t *)H5I_object(file))) {
+ if (FAIL == (file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)))
+ goto error;
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
H5Eprint2(H5E_DEFAULT, stdout);
goto error;
}
- if (H5AC_ignore_tags(f) < 0) {
- H5_FAILED();
- H5Eprint2(H5E_DEFAULT, stdout);
- goto error;
+ if (FAIL == H5AC_ignore_tags(f)) {
+ H5_FAILED();
+ H5Eprint2(H5E_DEFAULT, stdout);
+ goto error;
}
- for(i = 0; i < NOBJS; i++) {
- sprintf(buf, "%03d-", i);
- for(j = 4; j < i; j++)
- buf[j] = '0' + j % 10;
- if(j > 4)
+ for (i = 0; i < NOBJS; i++) {
+ HDsnprintf(buf, sizeof(buf), "%03d-", i);
+ for (j = 4; j < i; j++)
+ buf[j] = (char)('0' + j % 10);
+ if (j > 4)
buf[j] = '\0';
- if (NULL == (heap = H5HL_protect(f, H5P_DATASET_XFER_DEFAULT, heap_addr, H5AC_READ))) {
+ if (NULL == (heap = H5HL_protect(f, heap_addr, H5AC__READ_ONLY_FLAG))) {
H5_FAILED();
H5Eprint2(H5E_DEFAULT, stdout);
goto error;
@@ -156,62 +155,76 @@ main(void)
goto error;
}
- if (strcmp(s, buf)) {
+ if (HDstrcmp(s, buf) != 0) {
H5_FAILED();
- printf(" i=%d, heap offset=%lu\n", i, (unsigned long)(obj[i]));
- printf(" got: \"%s\"\n", s);
- printf(" ans: \"%s\"\n", buf);
+ HDprintf(" i=%d, heap offset=%lu\n", i, (unsigned long)(obj[i]));
+ HDprintf(" got: \"%s\"\n", s);
+ HDprintf(" ans: \"%s\"\n", buf);
goto error;
}
- if(H5HL_unprotect(heap) < 0) {
+ if (FAIL == H5HL_unprotect(heap)) {
H5_FAILED();
H5Eprint2(H5E_DEFAULT, stdout);
goto error;
}
}
- if (H5Fclose(file)<0) goto error;
+ if (FAIL == H5Fclose(file))
+ goto error;
PASSED();
- /* Check opening existing file non-default sizes of lengths and addresses */
- TESTING("opening pre-created file with non-default sizes");
- {
- const char *testfile = H5_get_srcdir_filename(TESTFILE); /* Corrected test file name */
- hid_t dset = -1;
-#ifdef H5_VMS
- file = H5Fopen(TESTFILE, H5F_ACC_RDONLY, H5P_DEFAULT);
-#else
- file = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
-#endif
- if(file >= 0){
- if((dset = H5Dopen2(file, "/Dataset1", H5P_DEFAULT)) < 0)
- TEST_ERROR
- if(H5Dclose(dset) < 0) TEST_ERROR
- if(H5Fclose(file) < 0) TEST_ERROR
+ if (h5_driver_is_default_vfd_compatible(H5P_DEFAULT, &driver_is_default_compatible) < 0)
+ TEST_ERROR;
+
+ if (driver_is_default_compatible) {
+ /* Check opening existing file non-default sizes of lengths and addresses */
+ TESTING("opening pre-created file with non-default sizes");
+ {
+ const char *testfile = H5_get_srcdir_filename(TESTFILE); /* Corrected test file name */
+ hid_t dset = -1;
+ file = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+ if (file >= 0) {
+ if ((dset = H5Dopen2(file, "/Dataset1", H5P_DEFAULT)) < 0)
+ TEST_ERROR;
+ if (H5Dclose(dset) < 0)
+ TEST_ERROR;
+ if (H5Fclose(file) < 0)
+ TEST_ERROR;
+ }
+ else {
+ H5_FAILED();
+ HDprintf("***cannot open the pre-created non-default sizes test file (%s)\n", testfile);
+ goto error;
+ } /* end else */
}
- else {
- H5_FAILED();
- printf("***cannot open the pre-created non-default sizes test file (%s)\n",
- testfile);
- goto error;
- } /* end else */
+ PASSED();
}
- PASSED();
/* Verify symbol table messages are cached */
- if(h5_verify_cached_stabs(FILENAME, fapl) < 0) TEST_ERROR
+ if (h5_verify_cached_stabs(FILENAME, fapl) < 0)
+ TEST_ERROR;
- puts("All local heap tests passed.");
+ /* Pop API context */
+ if (api_ctx_pushed && H5CX_pop(FALSE) < 0)
+ FAIL_STACK_ERROR;
+ api_ctx_pushed = FALSE;
+
+ HDputs("All local heap tests passed.");
h5_cleanup(FILENAME, fapl);
- return 0;
+ return EXIT_SUCCESS;
- error:
- puts("*** TESTS FAILED ***");
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- return 1;
-}
+error:
+ HDputs("*** TESTS FAILED ***");
+ H5E_BEGIN_TRY
+ {
+ H5Fclose(file);
+ }
+ H5E_END_TRY;
+ if (api_ctx_pushed)
+ H5CX_pop(FALSE);
+
+ return EXIT_FAILURE;
+}