summaryrefslogtreecommitdiffstats
path: root/tools/h5dump/h5dumpgentest.c
diff options
context:
space:
mode:
authorAllen Byrne <byrn@hdfgroup.org>2009-07-31 20:11:07 (GMT)
committerAllen Byrne <byrn@hdfgroup.org>2009-07-31 20:11:07 (GMT)
commit2b3b747d4cfb9cefc9f3bd3183e1b11237441dca (patch)
tree3451a397fa7353f59902accbf4fc86d6ace4844e /tools/h5dump/h5dumpgentest.c
parent8d1ccbfd44d8fc8e35b248db1d5c81a745d31323 (diff)
downloadhdf5-2b3b747d4cfb9cefc9f3bd3183e1b11237441dca.zip
hdf5-2b3b747d4cfb9cefc9f3bd3183e1b11237441dca.tar.gz
hdf5-2b3b747d4cfb9cefc9f3bd3183e1b11237441dca.tar.bz2
[svn-r17289] Added test targeted for bug 1520, which was fixed last week. The test generates an array datatype of ints larger than the display buffer. The bug was exposed when the buffer was reallocated.
Tested: linux
Diffstat (limited to 'tools/h5dump/h5dumpgentest.c')
-rw-r--r--tools/h5dump/h5dumpgentest.c93
1 files changed, 56 insertions, 37 deletions
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index 75d9b60..2d4a620 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -236,6 +236,13 @@ typedef struct s1_t {
/* "File 51" macros */
#define F51_MAX_NAME_LEN ((64*1024)+1024)
+/* "File 64" macros */
+#define F64_FILE "tarray8.h5"
+#define F64_DATASET "DS1"
+#define F64_DIM0 1
+#define F64_ARRAY_BUF_LEN (4*1024)
+#define F64_DIM1 (F64_ARRAY_BUF_LEN / sizeof(int) + 1)
+
static void
gent_group(void)
{
@@ -2813,48 +2820,59 @@ static void gent_array7(void)
assert(ret >= 0);
}
+/* Test the boundary of the display output buffer at the reallocation event */
static void gent_array8(void)
{
- int *buf; /* information to write */
- hid_t fid; /* HDF5 File ID */
- hid_t did; /* dataset ID */
- hid_t sid; /* dataspace ID */
- hid_t tid; /* datatype ID */
- size_t size;
- hsize_t sdims[] = {1};
- hsize_t tdims[] = {H5TOOLS_BUFSIZE / sizeof(int) + 1};
- int i;
- herr_t ret;
-
- size = ( H5TOOLS_BUFSIZE / sizeof(int) + 1 ) * sizeof(int);
- buf = malloc( size );
-
- for( i = 0; i < H5TOOLS_BUFSIZE / sizeof(int) + 1; i++)
- buf[i] = i;
-
- /* create file */
- fid = H5Fcreate(FILE64, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- /* create a type larger than H5TOOLS_BUFSIZE */
- tid = H5Tarray_create2(H5T_NATIVE_INT, 1, tdims);
- size = H5Tget_size(tid);
- sid = H5Screate_simple(1, sdims, NULL);
- did = H5Dcreate2(fid, "dset", tid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
- ret = H5Dwrite(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
- assert(ret >= 0);
+ hid_t file = -1; /* Handles */
+ hid_t filetype = -1; /* Handles */
+ hid_t space = -1; /* Handles */
+ hid_t dset = -1; /* Handles */
+ herr_t status = -1;
+ hsize_t sdims[] = {F64_DIM0};
+ hsize_t tdims[] = {F64_DIM1};
+ int wdata[(F64_DIM1) * sizeof(int)]; /* Write buffer */
+ int ndims;
+ int i;
+ /*
+ * Initialize data. i is the element in the dataspace, j and k the
+ * elements within the array datatype.
+ */
+ for (i=0; i<F64_DIM1; i++)
+ wdata[i] = i;
- /* close */
- ret = H5Dclose(did);
- assert(ret >= 0);
- ret = H5Tclose(tid);
- assert(ret >= 0);
- ret = H5Sclose(sid);
- assert(ret >= 0);
+ /*
+ * Create a new file using the default properties.
+ */
+ file = H5Fcreate (F64_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
- ret = H5Fclose(fid);
- assert(ret >= 0);
- free( buf );
+ /*
+ * Create array datatypes for file and memory.
+ */
+ filetype = H5Tarray_create (H5T_NATIVE_INT, 1, tdims);
+
+ /*
+ * Create dataspace. Setting maximum size to NULL sets the maximum
+ * size to be the current size.
+ */
+ space = H5Screate_simple (1, sdims, NULL);
+
+ /*
+ * Create the dataset and write the array data to it.
+ */
+ if(file>=0 && filetype>=0 && space>=0) {
+ dset = H5Dcreate (file, F64_DATASET, filetype, space, H5P_DEFAULT, H5P_DEFAULT,
+ H5P_DEFAULT);
+ if(dset>=0)
+ status = H5Dwrite (dset, filetype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+ }
+ /*
+ * Close and release resources.
+ */
+ status = H5Dclose (dset);
+ status = H5Sclose (space);
+ status = H5Tclose (filetype);
+ status = H5Fclose (file);
}
static void gent_empty(void)
@@ -6348,6 +6366,7 @@ int main(void)
gent_array5();
gent_array6();
gent_array7();
+ gent_array8();
gent_empty();
gent_group_comments();
gent_split_file();