diff options
Diffstat (limited to 'test/gheap.c')
-rw-r--r-- | test/gheap.c | 334 |
1 files changed, 155 insertions, 179 deletions
diff --git a/test/gheap.c b/test/gheap.c index 9218c3a..404b24a 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -9,59 +9,22 @@ * collections but the collections are not related to one * another by anything that appears in the file format. */ +#include <h5test.h> #include <H5private.h> #include <H5Eprivate.h> #include <H5Fprivate.h> #include <H5Gprivate.h> #include <H5HGprivate.h> +#include <H5Iprivate.h> #include <H5Pprivate.h> -#ifndef HAVE_FUNCTION -# undef __FUNCTION__ -# define __FUNCTION__ "" -#endif - -#define TEST_FILE_NAME0 "gheap0.h5" -#define TEST_FILE_NAME1 "gheap1.h5" -#define TEST_FILE_NAME2 "gheap2.h5" -#define TEST_FILE_NAME3 "gheap3.h5" -#define TEST_FILE_NAME4 "gheap4.h5" - -#define FAILED(S) { \ - puts ("*FAILED*"); \ - printf (" Failed at %s:%d in %s()%s%s\n", \ - __FILE__, __LINE__, __FUNCTION__, \ - (S)&&*(S)?": ":"", (S)?(S):""); \ - H5Eprint (stdout); \ -} - - -/*------------------------------------------------------------------------- - * Function: emit_diagnostics - * - * Purpose: If debugging is turned on then this function will cause the - * library to emit its diagnostic messages now instead of when - * we're trying to make the output look nice. - * - * Return: void - * - * Programmer: Robb Matzke - * Tuesday, March 31, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -emit_diagnostics (void) -{ - H5F_t *f = H5F_open (TEST_FILE_NAME0, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC, - NULL, NULL); - H5G_t *g = H5G_create (H5G_entof(f->shared->root_grp), "emit", 0); - H5G_close (g); - H5F_close (f); -} +const char *FILENAME[] = { + "gheap1", + "gheap2", + "gheap3", + "gheap4", + NULL +}; /*------------------------------------------------------------------------- @@ -72,7 +35,7 @@ emit_diagnostics (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -82,28 +45,29 @@ emit_diagnostics (void) *------------------------------------------------------------------------- */ static int -test_1 (void) +test_1 (hid_t fapl) { - H5F_t *f; + 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 retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...monotonically increasing lengths"); - fflush (stdout); + TESTING("monotonically increasing lengths"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME1, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* @@ -117,11 +81,13 @@ test_1 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } else if (i && H5F_addr_gt (&(obj[i-1].addr), &(obj[i].addr))) { - FAILED ("collection addresses are not monotonically increasing"); - --retval; + FAILED(); + puts(" Collection addresses are not monotonically increasing"); + nerrors++; } } @@ -133,17 +99,26 @@ test_1 (void) memset (out, 'A'+i%26, size); H5Eclear (); if (NULL==H5HG_read (f, obj+i, in)) { - FAILED ("unable to read object"); - --retval; + FAILED(); + puts(" Unable to read object"); + nerrors++; } else if (memcmp (in, out, size)) { - FAILED ("value read doesn't match value written"); - --retval; + FAILED(); + puts(" Value read doesn't match value written"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -155,7 +130,7 @@ test_1 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -165,28 +140,28 @@ test_1 (void) *------------------------------------------------------------------------- */ static int -test_2 (void) +test_2 (hid_t fapl) { - H5F_t *f; + 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 retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...monotonically decreasing lengths"); - fflush (stdout); + TESTING("monotonically decreasing lengths"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME2, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[1], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* @@ -196,10 +171,10 @@ test_2 (void) size = 1024-i; memset (out, 'A'+i%26, size); H5Eclear (); - status = H5HG_insert (f, size, out, obj+i); - if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + if (H5HG_insert (f, size, out, obj+i)<0) { + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } } @@ -211,17 +186,26 @@ test_2 (void) memset (out, 'A'+i%26, size); H5Eclear (); if (NULL==H5HG_read (f, obj+i, in)) { - FAILED ("unable to read object"); - --retval; + FAILED(); + puts(" Unable to read object"); + nerrors++; } else if (memcmp (in, out, size)) { - FAILED ("value read doesn't match value written"); - --retval; + FAILED(); + puts(" Value read doesn't match value written"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -233,7 +217,7 @@ test_2 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -243,27 +227,28 @@ test_2 (void) *------------------------------------------------------------------------- */ static int -test_3 (void) +test_3 (hid_t fapl) { - H5F_t *f; + 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 retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...complete object removal"); - fflush (stdout); + TESTING("complete object removal"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME3, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[2], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* Create some stuff */ @@ -273,8 +258,9 @@ test_3 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } } @@ -282,14 +268,22 @@ test_3 (void) for (i=0; i<1024; i++) { status = H5HG_remove (f, obj+i); if (status<0) { - FAILED ("unable to remove object"); - --retval; + FAILED(); + puts(" Unable to remove object"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -302,7 +296,7 @@ test_3 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -312,30 +306,30 @@ test_3 (void) *------------------------------------------------------------------------- */ static int -test_4 (void) +test_4 (hid_t fapl) { - H5F_t *f; + 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 retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...partial object removal"); - fflush (stdout); + TESTING("partial object removal"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME4, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[3], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } - for (i=0; i<1024; i++) { /* Insert */ size = i%30+100; @@ -343,8 +337,9 @@ test_4 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } /* @@ -356,46 +351,26 @@ test_4 (void) H5Eclear (); status = H5HG_remove (f, obj+i-1); if (status<0) { - FAILED ("unable to remove object"); - --retval; + FAILED(); + puts(" Unable to remove object"); + nerrors++; } memset (obj+i-1, 0, sizeof *obj); } } - puts (" PASSED"); - H5F_close (f); - return retval; -} - + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; - -/*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(TEST_FILE_NAME0); - remove(TEST_FILE_NAME1); - remove(TEST_FILE_NAME2); - remove(TEST_FILE_NAME3); - remove(TEST_FILE_NAME4); - } + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } - + /*------------------------------------------------------------------------- * Function: main @@ -416,22 +391,23 @@ cleanup(void) int main (void) { - int nfailed=0; + int nerrors=0; + hid_t fapl; - emit_diagnostics (); - + h5_reset(); + fapl = h5_fileaccess(); - nfailed += test_1()<0 ? 1 : 0; - nfailed += test_2()<0 ? 1 : 0; - nfailed += test_3()<0 ? 1 : 0; - nfailed += test_4()<0 ? 1 : 0; + nerrors += test_1(fapl); + nerrors += test_2(fapl); + nerrors += test_3(fapl); + nerrors += test_4(fapl); + if (nerrors) goto error; - if (nfailed) { - printf ("*** %d global heap test%s failed ***\n", - nfailed, 1==nfailed?"":"s"); - } else { - printf ("All global heap tests passed.\n"); - cleanup(); - } - return nfailed?-1:0; + puts("All global heap tests passed."); + h5_cleanup(fapl); + return 0; + + error: + puts("*** TESTS FAILED ***"); + return 1; } |