summaryrefslogtreecommitdiffstats
path: root/test/dsets.c
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1998-03-05 21:27:38 (GMT)
committerRobb Matzke <matzke@llnl.gov>1998-03-05 21:27:38 (GMT)
commit79158424981ffc6cf5ce69a64cd096e4c928d842 (patch)
tree3e0dc2fb04966ef49cbe10ee820a770d1c5a1215 /test/dsets.c
parent4badc161ae7cd13a01e17b8c920759e47631951a (diff)
downloadhdf5-79158424981ffc6cf5ce69a64cd096e4c928d842.zip
hdf5-79158424981ffc6cf5ce69a64cd096e4c928d842.tar.gz
hdf5-79158424981ffc6cf5ce69a64cd096e4c928d842.tar.bz2
[svn-r306] Changes since 19980305
---------------------- ./src/H5D.c ./test/external.c A contiguous dataset can now be stored in external files in such a way that the slowest varying dimension can be increased after the dataset is created and even written. The user must have reserved enough space in the external file and the data space must allow an increase the the slowest varying dimension. See test_3() of ./test/external.c ./src/H5Oefl.c ./configure.in ./src/H5Fprivate.h Fixed an overflow bug with unlimited external storage. ./src/H5V.c Fixed a cast warning. ./test/dsets.c Make better use of automatic error reporting.
Diffstat (limited to 'test/dsets.c')
-rw-r--r--test/dsets.c305
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");