summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/dsets.c305
-rw-r--r--test/external.c75
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);
}