summaryrefslogtreecommitdiffstats
path: root/test/gheap.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/gheap.c')
-rw-r--r--test/gheap.c317
1 files changed, 150 insertions, 167 deletions
diff --git a/test/gheap.c b/test/gheap.c
index 077f921..51e1dd2 100644
--- a/test/gheap.c
+++ b/test/gheap.c
@@ -21,7 +21,7 @@
*/
#include "h5test.h"
#include "H5ACprivate.h"
-#include "H5CXprivate.h" /* API Contexts */
+#include "H5CXprivate.h" /* API Contexts */
#include "H5Eprivate.h"
#include "H5Fprivate.h"
#include "H5Gprivate.h"
@@ -35,28 +35,20 @@
#define GHEAP_REPEATED_ERR_LIM 20
/* Number of heap objects to test */
-#define GHEAP_TEST_NOBJS 1024
-
-#define GHEAP_REPEATED_ERR(MSG) \
-{ \
- nerrors++; \
- if(nerrors <= GHEAP_REPEATED_ERR_LIM) { \
- H5_FAILED(); \
- puts(MSG); \
- if(nerrors == GHEAP_REPEATED_ERR_LIM) \
- puts(" Suppressing further errors..."); \
- } /* end if */ \
-} /* end GHEAP_REPEATED_ERR */
-
-const char *FILENAME[] = {
- "gheap1",
- "gheap2",
- "gheap3",
- "gheap4",
- "gheapooo",
- NULL
-};
+#define GHEAP_TEST_NOBJS 1024
+#define GHEAP_REPEATED_ERR(MSG) \
+ { \
+ nerrors++; \
+ if (nerrors <= GHEAP_REPEATED_ERR_LIM) { \
+ H5_FAILED(); \
+ puts(MSG); \
+ if (nerrors == GHEAP_REPEATED_ERR_LIM) \
+ puts(" Suppressing further errors..."); \
+ } /* end if */ \
+ } /* end GHEAP_REPEATED_ERR */
+
+const char *FILENAME[] = {"gheap1", "gheap2", "gheap3", "gheap4", "gheapooo", NULL};
/*-------------------------------------------------------------------------
* Function: test_1
@@ -74,30 +66,30 @@ const char *FILENAME[] = {
*-------------------------------------------------------------------------
*/
static int
-test_1 (hid_t fapl)
+test_1(hid_t fapl)
{
- hid_t file = H5I_INVALID_HID;
- H5F_t *f = NULL;
- H5HG_t *obj = NULL;
- uint8_t out[GHEAP_TEST_NOBJS];
- uint8_t in[GHEAP_TEST_NOBJS];
- size_t u;
- size_t size;
- herr_t status;
- int nerrors = 0;
- char filename[1024];
+ hid_t file = H5I_INVALID_HID;
+ H5F_t * f = NULL;
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ uint8_t in[GHEAP_TEST_NOBJS];
+ size_t u;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("monotonically increasing lengths");
/* Allocate buffer for H5HG_t */
- if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ if (NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
goto error;
/* Open a clean file */
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" Unable to create file");
goto error;
@@ -108,17 +100,17 @@ test_1 (hid_t fapl)
* a clean file, the addresses allocated for the collections should also
* be monotonically increasing.
*/
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u + 1;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
status = H5HG_insert(f, size, out, obj + u);
- if(status < 0) {
+ if (status < 0) {
H5_FAILED();
HDputs(" Unable to insert object into global heap");
nerrors++;
}
- else if(u && H5F_addr_gt(obj[u - 1].addr, obj[u].addr)) {
+ else if (u && H5F_addr_gt(obj[u - 1].addr, obj[u].addr)) {
H5_FAILED();
HDputs(" Collection addresses are not monotonically increasing");
nerrors++;
@@ -128,16 +120,16 @@ test_1 (hid_t fapl)
/*
* Now try to read each object back.
*/
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u + 1;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
- if(NULL == H5HG_read(f, obj + u, in, NULL)) {
+ if (NULL == H5HG_read(f, obj + u, in, NULL)) {
H5_FAILED();
HDputs(" Unable to read object");
nerrors++;
}
- else if(HDmemcmp(in, out, size)) {
+ else if (HDmemcmp(in, out, size)) {
H5_FAILED();
HDputs(" Value read doesn't match value written");
nerrors++;
@@ -148,24 +140,22 @@ test_1 (hid_t fapl)
HDfree(obj);
obj = NULL;
- if(H5Fclose(file) < 0)
+ if (H5Fclose(file) < 0)
goto error;
- if(nerrors)
+ if (nerrors)
goto error;
PASSED();
return 0;
error:
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- if(obj)
+ H5E_BEGIN_TRY { H5Fclose(file); }
+ H5E_END_TRY;
+ if (obj)
HDfree(obj);
return MAX(1, nerrors);
}
-
/*-------------------------------------------------------------------------
* Function: test_2
*
@@ -182,29 +172,29 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_2 (hid_t fapl)
+test_2(hid_t fapl)
{
- hid_t file = H5I_INVALID_HID;
- H5F_t *f = NULL;
- H5HG_t *obj = NULL;
- uint8_t out[GHEAP_TEST_NOBJS];
- uint8_t in[GHEAP_TEST_NOBJS];
- size_t u;
- size_t size;
- int nerrors = 0;
- char filename[1024];
+ hid_t file = H5I_INVALID_HID;
+ H5F_t * f = NULL;
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ uint8_t in[GHEAP_TEST_NOBJS];
+ size_t u;
+ size_t size;
+ int nerrors = 0;
+ char filename[1024];
TESTING("monotonically decreasing lengths");
/* Allocate buffer for H5HG_t */
- if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ if (NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
goto error;
/* Open a clean file */
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" Unable to create file");
goto error;
@@ -213,11 +203,11 @@ test_2 (hid_t fapl)
/*
* Write the objects, monotonically decreasing in length.
*/
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = GHEAP_TEST_NOBJS - u;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
- if(H5HG_insert(f, size, out, obj + u) < 0) {
+ if (H5HG_insert(f, size, out, obj + u) < 0) {
H5_FAILED();
HDputs(" Unable to insert object into global heap");
nerrors++;
@@ -227,16 +217,16 @@ test_2 (hid_t fapl)
/*
* Now try to read each object back.
*/
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = GHEAP_TEST_NOBJS - u;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
- if(NULL == H5HG_read(f, obj + u, in, NULL)) {
+ if (NULL == H5HG_read(f, obj + u, in, NULL)) {
H5_FAILED();
HDputs(" Unable to read object");
nerrors++;
}
- else if (memcmp (in, out, size)) {
+ else if (memcmp(in, out, size)) {
H5_FAILED();
HDputs(" Value read doesn't match value written");
nerrors++;
@@ -247,24 +237,22 @@ test_2 (hid_t fapl)
HDfree(obj);
obj = NULL;
- if(H5Fclose(file) < 0)
+ if (H5Fclose(file) < 0)
goto error;
- if(nerrors)
+ if (nerrors)
goto error;
PASSED();
return 0;
- error:
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- if(obj)
+error:
+ H5E_BEGIN_TRY { H5Fclose(file); }
+ H5E_END_TRY;
+ if (obj)
HDfree(obj);
return MAX(1, nerrors);
}
-
/*-------------------------------------------------------------------------
* Function: test_3
*
@@ -281,41 +269,41 @@ test_2 (hid_t fapl)
*-------------------------------------------------------------------------
*/
static int
-test_3 (hid_t fapl)
+test_3(hid_t fapl)
{
- hid_t file = H5I_INVALID_HID;
- H5F_t *f = NULL;
- H5HG_t *obj = NULL;
- uint8_t out[GHEAP_TEST_NOBJS];
- size_t u;
- size_t size;
- herr_t status;
- int nerrors = 0;
- char filename[1024];
+ hid_t file = H5I_INVALID_HID;
+ H5F_t * f = NULL;
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ size_t u;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("complete object removal");
/* Allocate buffer for H5HG_t */
- if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ if (NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
goto error;
/* Open a clean file */
h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" Unable to create file");
goto error;
}
/* Create some stuff */
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
size = u % 30 + 100;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
status = H5HG_insert(f, size, out, obj + u);
- if (status<0) {
+ if (status < 0) {
H5_FAILED();
HDputs(" Unable to insert object into global heap");
nerrors++;
@@ -323,9 +311,9 @@ test_3 (hid_t fapl)
}
/* Remove everything */
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
status = H5HG_remove(f, obj + u);
- if (status<0) {
+ if (status < 0) {
H5_FAILED();
HDputs(" Unable to remove object");
nerrors++;
@@ -336,24 +324,22 @@ test_3 (hid_t fapl)
HDfree(obj);
obj = NULL;
- if(H5Fclose(file) < 0)
+ if (H5Fclose(file) < 0)
goto error;
- if(nerrors)
+ if (nerrors)
goto error;
PASSED();
return 0;
- error:
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- if(obj)
+error:
+ H5E_BEGIN_TRY { H5Fclose(file); }
+ H5E_END_TRY;
+ if (obj)
HDfree(obj);
return MAX(1, nerrors);
}
-
/*-------------------------------------------------------------------------
* Function: test_4
*
@@ -371,41 +357,41 @@ test_3 (hid_t fapl)
*-------------------------------------------------------------------------
*/
static int
-test_4 (hid_t fapl)
+test_4(hid_t fapl)
{
- hid_t file = H5I_INVALID_HID;
- H5F_t *f = NULL;
- H5HG_t *obj = NULL;
- uint8_t out[GHEAP_TEST_NOBJS];
- size_t u;
- size_t size;
- herr_t status;
- int nerrors = 0;
- char filename[1024];
+ hid_t file = H5I_INVALID_HID;
+ H5F_t * f = NULL;
+ H5HG_t *obj = NULL;
+ uint8_t out[GHEAP_TEST_NOBJS];
+ size_t u;
+ size_t size;
+ herr_t status;
+ int nerrors = 0;
+ char filename[1024];
TESTING("partial object removal");
/* Allocate buffer for H5HG_t */
- if(NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
+ if (NULL == (obj = (H5HG_t *)HDmalloc(sizeof(H5HG_t) * GHEAP_TEST_NOBJS)))
goto error;
/* Open a clean file */
h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" Unable to create file");
goto error;
}
- for(u = 0; u < GHEAP_TEST_NOBJS; u++) {
+ for (u = 0; u < GHEAP_TEST_NOBJS; u++) {
/* Insert */
size = u % 30 + 100;
HDmemset(out, (int)('A' + u % 26), size);
H5Eclear2(H5E_DEFAULT);
status = H5HG_insert(f, size, out, obj + u);
- if (status<0) {
+ if (status < 0) {
H5_FAILED();
HDputs(" Unable to insert object into global heap");
nerrors++;
@@ -415,10 +401,10 @@ test_4 (hid_t fapl)
* next one has already been inserted. That is, insert A, B, C;
* remove B, insert D, E, F; remove E; etc.
*/
- if(1 == (u % 3)) {
+ if (1 == (u % 3)) {
H5Eclear2(H5E_DEFAULT);
status = H5HG_remove(f, obj + u - 1);
- if (status<0) {
+ if (status < 0) {
H5_FAILED();
HDputs(" Unable to remove object");
nerrors++;
@@ -431,24 +417,22 @@ test_4 (hid_t fapl)
HDfree(obj);
obj = NULL;
- if(H5Fclose(file) < 0)
+ if (H5Fclose(file) < 0)
goto error;
- if(nerrors)
+ if (nerrors)
goto error;
PASSED();
return 0;
- error:
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- if(obj)
+error:
+ H5E_BEGIN_TRY { H5Fclose(file); }
+ H5E_END_TRY;
+ if (obj)
HDfree(obj);
return MAX(1, nerrors);
}
-
/*-------------------------------------------------------------------------
* Function: test_ooo_indices
*
@@ -469,24 +453,24 @@ test_4 (hid_t fapl)
static int
test_ooo_indices(hid_t fapl)
{
- hid_t file = H5I_INVALID_HID;
- H5F_t *f = NULL;
- unsigned i, j;
- H5HG_t *obj = NULL;
- herr_t status;
- int nerrors = 0;
- char filename[1024];
+ hid_t file = H5I_INVALID_HID;
+ 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");
- if(NULL == (obj = (H5HG_t *)HDmalloc(2000 * sizeof(*obj))))
+ if (NULL == (obj = (H5HG_t *)HDmalloc(2000 * sizeof(*obj))))
goto error;
/* Open a clean file */
h5_fixname(FILENAME[4], fapl, filename, sizeof filename);
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" Unable to create file");
goto error;
@@ -495,28 +479,28 @@ test_ooo_indices(hid_t fapl)
/* Alternately insert 1000 entries and remove the previous group of 1000
* entries, until the indices wrap around.
*/
- for(i = 0; i < 66; i++) {
+ 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++) {
+ for (j = 1000 * ((~i & 1)); j < 1000 * ((~i & 1) + 1); j++) {
H5Eclear2(H5E_DEFAULT);
status = H5HG_insert(f, sizeof(j), &j, &obj[j]);
- if (status<0)
+ if (status < 0)
GHEAP_REPEATED_ERR(" Unable to insert object into global heap")
/* Check that the index is as expected */
- if(obj[j].idx != ((1000 * i) + j - (1000 * ((~i & 1)))) % ((1u << 16) - 1) + 1)
+ if (obj[j].idx != ((1000 * i) + j - (1000 * ((~i & 1)))) % ((1u << 16) - 1) + 1)
GHEAP_REPEATED_ERR(" Unexpected global heap index");
}
/* 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);
status = H5HG_remove(f, &obj[j]);
- if (status<0)
+ if (status < 0)
GHEAP_REPEATED_ERR(" Unable to remove object from global heap");
}
}
@@ -528,28 +512,28 @@ test_ooo_indices(hid_t fapl)
/* Reopen the file */
if (H5Fclose(file) < 0)
goto error;
- if((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
+ if ((file = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0)
goto error;
- if(NULL == (f = (H5F_t *)H5VL_object(file))) {
+ if (NULL == (f = (H5F_t *)H5VL_object(file))) {
H5_FAILED();
HDputs(" 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++) {
- if(NULL == H5HG_read(f, &obj[i], &j, NULL))
+ for (i = 0; i < 1000; i++) {
+ if (NULL == H5HG_read(f, &obj[i], &j, NULL))
goto error;
- if(i != j) {
+ if (i != j) {
H5_FAILED();
HDputs(" Incorrect read value");
goto error;
}
}
- if(H5Fclose(file) < 0)
+ if (H5Fclose(file) < 0)
goto error;
- if(nerrors)
+ if (nerrors)
goto error;
HDfree(obj);
obj = NULL;
@@ -557,16 +541,14 @@ test_ooo_indices(hid_t fapl)
PASSED();
return 0;
- error:
- H5E_BEGIN_TRY {
- H5Fclose(file);
- } H5E_END_TRY;
- if(obj)
+error:
+ H5E_BEGIN_TRY { H5Fclose(file); }
+ H5E_END_TRY;
+ if (obj)
HDfree(obj);
return MAX(1, nerrors);
} /* end test_ooo_indices */
-
/*-------------------------------------------------------------------------
* Function: main
*
@@ -577,18 +559,19 @@ test_ooo_indices(hid_t fapl)
*-------------------------------------------------------------------------
*/
int
-main (void)
+main(void)
{
- int nerrors = 0;
- hid_t fapl_id = H5I_INVALID_HID;
- hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */
+ int nerrors = 0;
+ hid_t fapl_id = H5I_INVALID_HID;
+ hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */
h5_reset();
if ((fapl_id = h5_fileaccess()) < 0)
goto error;
/* Push API context */
- if(H5CX_push() < 0) FAIL_STACK_ERROR
+ if (H5CX_push() < 0)
+ FAIL_STACK_ERROR
api_ctx_pushed = TRUE;
nerrors += test_1(fapl_id);
@@ -606,20 +589,20 @@ main (void)
HDputs("All global heap tests passed.");
/* Pop API context */
- if(api_ctx_pushed && H5CX_pop() < 0) FAIL_STACK_ERROR
+ if (api_ctx_pushed && H5CX_pop() < 0)
+ FAIL_STACK_ERROR
api_ctx_pushed = FALSE;
h5_cleanup(FILENAME, fapl_id);
HDexit(EXIT_SUCCESS);
- error:
- H5E_BEGIN_TRY {
- H5Pclose(fapl_id);
- } H5E_END_TRY;
+error:
+ H5E_BEGIN_TRY { H5Pclose(fapl_id); }
+ H5E_END_TRY;
- if(api_ctx_pushed) H5CX_pop();
+ if (api_ctx_pushed)
+ H5CX_pop();
HDputs("*** TESTS FAILED ***");
HDexit(EXIT_FAILURE);
} /* end main() */
-