diff options
author | Allen Byrne <byrn@hdfgroup.org> | 2020-10-01 16:47:45 (GMT) |
---|---|---|
committer | Allen Byrne <byrn@hdfgroup.org> | 2020-10-01 16:47:45 (GMT) |
commit | 1ba1f2f3222cbe8df0bf601929a4bffd478d7e02 (patch) | |
tree | ae51dfc33cf40432dad25a5088767115a98f195e /test/gheap.c | |
parent | 8eef7d295cc3dd134aef0a826f1de4287629996d (diff) | |
download | hdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.zip hdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.tar.gz hdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.tar.bz2 |
Source formatted
Diffstat (limited to 'test/gheap.c')
-rw-r--r-- | test/gheap.c | 306 |
1 files changed, 143 insertions, 163 deletions
diff --git a/test/gheap.c b/test/gheap.c index 59db1d4..7ada7c8 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -33,28 +33,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 @@ -72,30 +64,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_object(file))) { H5_FAILED(); HDputs(" Unable to create file"); goto error; @@ -106,17 +98,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, H5P_DATASET_XFER_DEFAULT, 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++; @@ -126,16 +118,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, H5P_DATASET_XFER_DEFAULT, obj + u, in, NULL)) { + if (NULL == H5HG_read(f, H5P_DATASET_XFER_DEFAULT, 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++; @@ -146,24 +138,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 * @@ -180,29 +170,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_object(file))) { H5_FAILED(); HDputs(" Unable to create file"); goto error; @@ -211,11 +201,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, H5P_DATASET_XFER_DEFAULT, size, out, obj + u) < 0) { + if (H5HG_insert(f, H5P_DATASET_XFER_DEFAULT, size, out, obj + u) < 0) { H5_FAILED(); HDputs(" Unable to insert object into global heap"); nerrors++; @@ -225,16 +215,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, H5P_DATASET_XFER_DEFAULT, obj + u, in, NULL)) { + if (NULL == H5HG_read(f, H5P_DATASET_XFER_DEFAULT, 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++; @@ -245,24 +235,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 * @@ -279,41 +267,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_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, H5P_DATASET_XFER_DEFAULT, size, out, obj + u); - if (status<0) { + if (status < 0) { H5_FAILED(); HDputs(" Unable to insert object into global heap"); nerrors++; @@ -321,9 +309,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, H5P_DATASET_XFER_DEFAULT, obj + u); - if (status<0) { + if (status < 0) { H5_FAILED(); HDputs(" Unable to remove object"); nerrors++; @@ -334,24 +322,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 * @@ -369,41 +355,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_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, H5P_DATASET_XFER_DEFAULT, size, out, obj + u); - if (status<0) { + if (status < 0) { H5_FAILED(); HDputs(" Unable to insert object into global heap"); nerrors++; @@ -413,10 +399,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, H5P_DATASET_XFER_DEFAULT, obj + u - 1); - if (status<0) { + if (status < 0) { H5_FAILED(); HDputs(" Unable to remove object"); nerrors++; @@ -429,24 +415,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 * @@ -467,24 +451,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_object(file))) { H5_FAILED(); HDputs(" Unable to create file"); goto error; @@ -493,28 +477,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, H5P_DATASET_XFER_DEFAULT, 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, H5P_DATASET_XFER_DEFAULT, &obj[j]); - if (status<0) + if (status < 0) GHEAP_REPEATED_ERR(" Unable to remove object from global heap"); } } @@ -526,28 +510,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 *)H5I_object(file))) { + if (NULL == (f = (H5F_t *)H5I_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, H5P_DATASET_XFER_DEFAULT, &obj[i], &j, NULL)) + for (i = 0; i < 1000; i++) { + if (NULL == H5HG_read(f, H5P_DATASET_XFER_DEFAULT, &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; @@ -555,16 +539,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 * @@ -575,10 +557,10 @@ test_ooo_indices(hid_t fapl) *------------------------------------------------------------------------- */ int -main (void) +main(void) { - int nerrors = 0; - hid_t fapl_id = H5I_INVALID_HID; + int nerrors = 0; + hid_t fapl_id = H5I_INVALID_HID; h5_reset(); if ((fapl_id = h5_fileaccess()) < 0) @@ -597,16 +579,14 @@ main (void) goto error; HDputs("All global heap tests passed."); - + 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; HDputs("*** TESTS FAILED ***"); HDexit(EXIT_FAILURE); } /* end main() */ - |