diff options
Diffstat (limited to 'test/dsets.c')
-rw-r--r-- | test/dsets.c | 305 |
1 files changed, 136 insertions, 169 deletions
diff --git a/test/dsets.c b/test/dsets.c index df19ba1..c92824c 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -1,11 +1,11 @@ /* * Copyright (C) 1997 NCSA - * All rights reserved. + * All rights reserved. * - * Programmer: Robb Matzke <matzke@llnl.gov> - * Tuesday, December 9, 1997 + * Programmer: Robb Matzke <matzke@llnl.gov> + * Tuesday, December 9, 1997 * - * Purpose: Tests the dataset interface (H5D) + * Purpose: Tests the dataset interface (H5D) */ #include <assert.h> #include <hdf5.h> @@ -18,25 +18,51 @@ #undef __FUNCTION__ #define __FUNCTION__ "" #endif -#define AT() printf (" at %s:%d in %s()...\n", \ - __FILE__, __LINE__, __FUNCTION__); +#define AT() printf (" at %s:%d in %s()...\n", \ + __FILE__, __LINE__, __FUNCTION__); + +#define DSET_DEFAULT_NAME "default" +#define DSET_CHUNKED_NAME "chunked" +#define DSET_SIMPLE_IO_NAME "simple_io" +#define DSET_TCONV_NAME "tconv" + + +/*------------------------------------------------------------------------- + * Function: display_error_cb + * + * Purpose: Displays the error stack after printing "*FAILED*". + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Robb Matzke + * Wednesday, March 4, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +display_error_cb (void *client_data) +{ + puts ("*FAILED*"); + H5Eprint (stdout); + return 0; +} -#define DSET_DEFAULT_NAME "default" -#define DSET_CHUNKED_NAME "chunked" -#define DSET_SIMPLE_IO_NAME "simple_io" -#define DSET_TCONV_NAME "tconv" /*------------------------------------------------------------------------- - * Function: test_create + * Function: test_create * - * Purpose: Attempts to create a dataset. + * Purpose: Attempts to create a dataset. * - * Return: Success: 0 + * Return: Success: 0 * - * Failure: -1 + * Failure: -1 * - * Programmer: Robb Matzke - * Tuesday, December 9, 1997 + * Programmer: Robb Matzke + * Tuesday, December 9, 1997 * * Modifications: * @@ -45,10 +71,12 @@ static herr_t test_create(hid_t file) { - hid_t dataset, space, create_parms; - size_t dims[2]; - herr_t status; - size_t csize[2]; + hid_t dataset, space, create_parms; + size_t dims[2]; + herr_t status; + size_t csize[2]; + herr_t (*func)(void*) = NULL; + void *client_data = NULL; printf("%-70s", "Testing create/open/close"); @@ -59,85 +87,54 @@ test_create(hid_t file) assert(space>=0); /* - * Create a dataset using the default dataset creation properties. We're + * Create a dataset using the default dataset creation properties. We're * not sure what they are, so we won't check. */ dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space, - H5P_DEFAULT); - if (dataset < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Cannot create initial dataset.\n"); - } - goto error; - } + H5P_DEFAULT); + if (dataset<0) goto error; + /* Close the dataset */ - if (H5Dclose(dataset) < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Cannot close initial dataset.\n"); - } - goto error; - } + if (H5Dclose(dataset) < 0) goto error; /* * Try creating a dataset that already exists. This should fail since a * dataset can only be created once. Temporarily turn off error * reporting. */ + H5Eget_auto (&func, &client_data); H5Eset_auto (NULL, NULL); dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space, - H5P_DEFAULT); - H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout); + H5P_DEFAULT); + H5Eset_auto (func, client_data); if (dataset >= 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Library allowed overwrite of existing dataset.\n"); - } - goto error; + puts("*FAILED*"); + printf(" Library allowed overwrite of existing dataset.\n"); + goto error; } /* * Open the dataset we created above and then close it. This is how * existing datasets are accessed. */ - dataset = H5Dopen(file, DSET_DEFAULT_NAME); - if (dataset < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Cannot open dataset `%s'.\n", DSET_DEFAULT_NAME); - } - goto error; - } - if (H5Dclose(dataset) < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Cannot close dataset.\n"); - } - goto error; - } + if ((dataset = H5Dopen(file, DSET_DEFAULT_NAME))<0) goto error; + if (H5Dclose(dataset) < 0) goto error; /* * Try opening a non-existent dataset. This should fail since new datasets * cannot be created with this function. Temporarily turn off error * reporting. */ + H5Eget_auto (&func, &client_data); H5Eset_auto (NULL, NULL); dataset = H5Dopen(file, "does_not_exist"); - H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout); + H5Eset_auto (func, client_data); if (dataset >= 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Opened a non-existent dataset.\n"); - } - goto error; + puts("*FAILED*"); + printf(" Opened a non-existent dataset.\n"); + goto error; } + /* * Create a new dataset that uses chunked storage instead of the default * layout. @@ -150,46 +147,35 @@ test_create(hid_t file) assert(status >= 0); dataset = H5Dcreate(file, DSET_CHUNKED_NAME, H5T_NATIVE_DOUBLE, space, - create_parms); - if (dataset < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Could not create a chunked dataset.\n"); - } - goto error; - } + create_parms); + if (dataset < 0) goto error; + /* * Close the chunked dataset. */ - if (H5Dclose(dataset) < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Cannot close chunked dataset.\n"); - } - goto error; - } + if (H5Dclose(dataset) < 0) goto error; + puts(" PASSED"); return 0; - error: + error: return -1; } + /*------------------------------------------------------------------------- - * Function: test_simple_io + * Function: test_simple_io * - * Purpose: Tests simple I/O. That is, reading and writing a complete - * multi-dimensional array without data type or data space - * conversions, without compression, and stored contiguously. + * Purpose: Tests simple I/O. That is, reading and writing a complete + * multi-dimensional array without data type or data space + * conversions, without compression, and stored contiguously. * - * Return: Success: 0 + * Return: Success: 0 * - * Failure: -1 + * Failure: -1 * - * Programmer: Robb Matzke - * Wednesday, December 10, 1997 + * Programmer: Robb Matzke + * Wednesday, December 10, 1997 * * Modifications: * @@ -198,19 +184,19 @@ test_create(hid_t file) static herr_t test_simple_io(hid_t file) { - hid_t dataset, space; - herr_t status; - int points[100][200], check[100][200]; - int i, j, n; - size_t dims[2]; + hid_t dataset, space; + herr_t status; + int points[100][200], check[100][200]; + int i, j, n; + size_t dims[2]; printf("%-70s", "Testing simple I/O"); /* Initialize the dataset */ for (i = n = 0; i < 100; i++) { - for (j = 0; j < 100; j++) { - points[i][j] = n++; - } + for (j = 0; j < 100; j++) { + points[i][j] = n++; + } } /* Create the data space */ @@ -221,44 +207,29 @@ test_simple_io(hid_t file) /* Create the dataset */ dataset = H5Dcreate(file, DSET_SIMPLE_IO_NAME, H5T_NATIVE_INT, space, - H5P_DEFAULT); + H5P_DEFAULT); assert(dataset >= 0); /* Write the data to the dataset */ status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - H5P_DEFAULT, points); - if (status < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" H5Dwrite() failed\n"); - } - goto error; - } + H5P_DEFAULT, points); + if (status<0) goto error; + /* Read the dataset back */ status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - H5P_DEFAULT, check); - if (status < 0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" H5Dread() failed\n"); - } - goto error; - } + H5P_DEFAULT, check); + if (status<0) goto error; + /* Check that the values read are the same as the values written */ for (i = 0; i < 100; i++) { - for (j = 0; j < 200; j++) { - if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Read different values than written.\n"); - printf(" At index %d,%d\n", i, j); - } - goto error; - } - } + for (j = 0; j < 200; j++) { + if (points[i][j] != check[i][j]) { + puts("*FAILED*"); + printf(" Read different values than written.\n"); + printf(" At index %d,%d\n", i, j); + goto error; + } + } } H5Dclose(dataset); @@ -271,16 +242,16 @@ test_simple_io(hid_t file) } /*------------------------------------------------------------------------- - * Function: test_tconv + * Function: test_tconv * - * Purpose: Test some simple data type conversion stuff. + * Purpose: Test some simple data type conversion stuff. * - * Return: Success: 0 + * Return: Success: 0 * - * Failure: -1 + * Failure: -1 * - * Programmer: Robb Matzke - * Wednesday, January 14, 1998 + * Programmer: Robb Matzke + * Wednesday, January 14, 1998 * * Modifications: * @@ -317,26 +288,26 @@ test_tconv(hid_t file) /* Create the data set */ dataset = H5Dcreate(file, DSET_TCONV_NAME, H5T_NATIVE_INT32, space, - H5P_DEFAULT); + H5P_DEFAULT); assert(dataset >= 0); /* Write the data to the dataset */ status = H5Dwrite(dataset, H5T_NATIVE_INT32, H5S_ALL, H5S_ALL, - H5P_DEFAULT, out); + H5P_DEFAULT, out); assert(status >= 0); /* Create a new type with the opposite byte order */ type = H5Tcopy(H5T_NATIVE_INT32); switch (H5Tget_order(type)) { case H5T_ORDER_BE: - H5Tset_order(type, H5T_ORDER_LE); - break; + H5Tset_order(type, H5T_ORDER_LE); + break; case H5T_ORDER_LE: - H5Tset_order(type, H5T_ORDER_BE); - break; + H5Tset_order(type, H5T_ORDER_BE); + break; default: - assert("funny byte order" && 0); - break; + assert("funny byte order" && 0); + break; } /* Read data with byte order conversion */ @@ -345,10 +316,10 @@ test_tconv(hid_t file) /* Check */ for (i = 0; i < 1000000; i++) { - assert(in[4 * i + 0] == out[4 * i + 3]); - assert(in[4 * i + 1] == out[4 * i + 2]); - assert(in[4 * i + 2] == out[4 * i + 1]); - assert(in[4 * i + 3] == out[4 * i + 0]); + assert(in[4 * i + 0] == out[4 * i + 3]); + assert(in[4 * i + 1] == out[4 * i + 2]); + assert(in[4 * i + 2] == out[4 * i + 1]); + assert(in[4 * i + 3] == out[4 * i + 0]); } H5Dclose(dataset); @@ -359,16 +330,16 @@ test_tconv(hid_t file) } /*------------------------------------------------------------------------- - * Function: main + * Function: main * - * Purpose: Tests the dataset interface (H5D) + * Purpose: Tests the dataset interface (H5D) * - * Return: Success: exit(0) + * Return: Success: exit(0) * - * Failure: exit(1) + * Failure: exit(1) * - * Programmer: Robb Matzke - * Tuesday, December 9, 1997 + * Programmer: Robb Matzke + * Tuesday, December 9, 1997 * * Modifications: * @@ -377,15 +348,15 @@ test_tconv(hid_t file) int main(void) { - hid_t file; - herr_t status; - int nerrors = 0; + hid_t file; + herr_t status; + int nerrors = 0; status = H5open (); assert (status>=0); /* Automatic error reporting to standard output */ - H5Eset_auto ((herr_t(*)(void*))H5Eprint, stdout); + H5Eset_auto (display_error_cb, NULL); unlink("dataset.h5"); file = H5Fcreate("dataset.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); @@ -403,13 +374,9 @@ main(void) status = H5Fclose(file); if (nerrors) { - printf("***** %d DATASET TEST%s FAILED! *****\n", - nerrors, 1 == nerrors ? "" : "S"); - if (isatty(1)) { - printf("(Redirect output to a pager or a file to see debug " - "output)\n"); - } - exit(1); + printf("***** %d DATASET TEST%s FAILED! *****\n", + nerrors, 1 == nerrors ? "" : "S"); + exit(1); } printf("All dataset tests passed.\n"); |