diff options
Diffstat (limited to 'test/gheap.c')
-rw-r--r-- | test/gheap.c | 317 |
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() */ - |