diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/dsets.c | 305 | ||||
-rw-r--r-- | test/external.c | 75 |
2 files changed, 193 insertions, 187 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"); diff --git a/test/external.c b/test/external.c index 53f1c15..1e0df7e 100644 --- a/test/external.c +++ b/test/external.c @@ -630,16 +630,16 @@ test_2 (void) static void test_3 (void) { - hid_t file, plist, space, dset; + hid_t file, plist, mem_space, file_space, dset; herr_t status; - int i; - int part[25], whole[100]; - size_t size; + int i, fd; + int part[25], whole[100], hs_start=100; + size_t size=100, max_size=200, hs_count=100; /* - * Open the file from test_2(). + * Create another file */ - file = H5Fcreate ("extern_2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + file = H5Fcreate ("extern_3.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); assert (file>=0); /* Create the external file list */ @@ -651,31 +651,37 @@ test_3 (void) assert (status>=0); status = H5Pset_external (plist, "extern_3b.raw", 20, sizeof(part)); assert (status>=0); - status = H5Pset_external (plist, "extern_4b.raw", 30, sizeof(part)); + status = H5Pset_external (plist, "extern_4b.raw", 30, H5F_UNLIMITED); assert (status>=0); - /* Touch the files so they exist */ - system ("touch extern_1b.raw extern_2b.raw extern_3b.raw extern_4b.raw"); + /* Make sure the output files are fresh*/ + fd = open ("extern_1b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666); + close (fd); + fd = open ("extern_2b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666); + close (fd); + fd = open ("extern_3b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666); + close (fd); + fd = open ("extern_4b.raw", O_RDWR|O_CREAT|O_TRUNC, 0666); + close (fd); /* Create the data space */ - size = 100; - space = H5Screate_simple (1, &size, NULL); - assert (space>=0); + mem_space = H5Screate_simple (1, &size, &max_size); + assert (mem_space>=0); + file_space = H5Scopy (mem_space); /* Create the dataset */ - dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, space, plist); + dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, file_space, plist); assert (dset>=0); /* * Write the entire dataset and compare with the original */ do { - /* Write to the dataset */ printf ("%-70s", "...writing entire dataset"); fflush (stdout); - for (i=0; i<100; i++) whole[i] = i; - status = H5Dwrite (dset, H5T_NATIVE_INT, space, space, + for (i=0; i<size; i++) whole[i] = i; + status = H5Dwrite (dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT, whole); if (status<0) break; for (i=0; i<4; i++) { @@ -692,10 +698,43 @@ test_3 (void) puts (" PASSED"); } while (0); + /* + * Extend the dataset by another 100 elements + */ + do { + printf ("%-70s", "...extending external contiguous dataset"); + fflush (stdout); + + if (H5Dextend (dset, &max_size)<0) break; + H5Sclose (file_space); + file_space = H5Dget_space (dset); + puts (" PASSED"); + } while (0); + + /* + * Write second half of dataset + */ + do { + printf ("%-70s", "...writing to extended part of dataset"); + fflush (stdout); + + for (i=0; i<hs_count; i++) { + whole[i] = 100+i; + } + status = H5Sset_hyperslab (file_space, &hs_start, &hs_count, NULL); + assert (status>=0); + status = H5Dwrite (dset, H5T_NATIVE_INT, mem_space, file_space, + H5P_DEFAULT, whole); + if (status<0) break; + puts (" PASSED"); + } while (0); + + H5Dclose (dset); H5Pclose (plist); - H5Sclose (space); + H5Sclose (mem_space); + H5Sclose (file_space); H5Fclose (file); } @@ -732,5 +771,5 @@ main (void) printf ("%d TEST%s FAILED.\n", nerrors_g, 1==nerrors_g?"":"s"); } - exit (nerrors_g?1:0); + return (nerrors_g?1:0); } |