summaryrefslogtreecommitdiffstats
path: root/test/set_extent.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2003-05-07 21:52:24 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2003-05-07 21:52:24 (GMT)
commit43e3b450214310728cbb6904211319a8459f06e4 (patch)
tree13cc61b9f713aa60fdcaf606665f03189689046d /test/set_extent.c
parentdb543f1a23194e81d0a984c346398e72bf4be87f (diff)
downloadhdf5-43e3b450214310728cbb6904211319a8459f06e4.zip
hdf5-43e3b450214310728cbb6904211319a8459f06e4.tar.gz
hdf5-43e3b450214310728cbb6904211319a8459f06e4.tar.bz2
[svn-r6825] Purpose:
New feature/enhancement Description: Chunked datasets are handled poorly in several circumstances involving certain selections and chunks that are too large for the chunk cache and/or chunks with filters, causing the chunk to be read from disk multiple times. Solution: Rearrange raw data I/O infrastructure to handle chunked datasets in a much more friendly way by creating a selection in memory and on disk for each chunk in a chunked dataset and performing all of the I/O on that chunk at one time. There are still some scalability (the current code attempts to create a selection for all the chunks in the dataset, instead of just the chunks that are accessed, requiring portions of the istore.c and fillval.c tests to be commented out) and performance issues, but checking this in will allow the changes to be tested by a much wider audience while I address the remaining issues. Platforms tested: h5committested, FreeBSD 4.8 (sleipnir) serial & parallel, Linux 2.4 (eirene)
Diffstat (limited to 'test/set_extent.c')
-rw-r--r--test/set_extent.c935
1 files changed, 429 insertions, 506 deletions
diff --git a/test/set_extent.c b/test/set_extent.c
index c7d8e67..220c376 100644
--- a/test/set_extent.c
+++ b/test/set_extent.c
@@ -37,522 +37,445 @@
int main( void )
{
-
- hid_t file_id;
- hid_t dataset_id=(-1);
- hid_t space_id=(-1);
- hid_t plist_id=(-1);
- hsize_t dims[RANK] = { 90, 90 };
- hsize_t dims_new[RANK] = { 70, 70 };
- hsize_t dims_chunk[RANK] = { 20, 20 };
- hsize_t dims_out[RANK];
- hsize_t maxdims[RANK] = { H5S_UNLIMITED, H5S_UNLIMITED };
- int data[ 90 ][ 90 ];
- int buf1[ 70 ][ 70 ];
- int buf2[ 90 ][ 90 ];
- int i, j, n = 0;
- int fillvalue = 1; /* Fill value for the dataset */
-
-
- for( i = 0; i < 90; i++ )
- {
- for( j = 0; j < 90; j++ )
- {
- data[i][j] = n++;
- }
- }
-
-/*-------------------------------------------------------------------------
- * Test H5Dset_extent with chunks on the raw data cache
- *-------------------------------------------------------------------------
- */
-
-
- /* Create a new file using default properties. */
- if ((file_id = H5Fcreate( "set_extent_create.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ))<0) goto out;
-
- TESTING("extend dataset create with fill value");
-
- /* Create the data space with unlimited dimensions. */
- if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
-
- /* Modify dataset creation properties, i.e. enable chunking. */
- if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
- if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
- if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) goto out;
-
-
-/*-------------------------------------------------------------------------
- * Create and write one dataset
- *-------------------------------------------------------------------------
- */
-
- /* Create a new dataset */
- if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
-
- /* Write the data. */
- if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; shrink it
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims_new )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims_new[0] )
- goto out;
-
-
-/*-------------------------------------------------------------------------
- * Read
- *-------------------------------------------------------------------------
- */
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
-
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( buf1[i][j] != data[i][j] ) {
- goto out;
- }
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; expand it again
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims[0] )
- goto out;
-
-
-/*-------------------------------------------------------------------------
- * Read
- *-------------------------------------------------------------------------
- */
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( i >= 70 || j >= 70 )
- {
- if ( buf2[i][j] != fillvalue ) {
- goto out;
- }
- }
- else
- {
- if ( buf2[i][j] != data[i][j] ) {
- goto out;
- }
- }
-
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Close/release resources
- *-------------------------------------------------------------------------
- */
-
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Pclose( plist_id );
-
- PASSED();
- TESTING("extend dataset create without fill value");
-
- /* Create the data space with unlimited dimensions. */
- if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
-
- /* Modify dataset creation properties, i.e. enable chunking. */
- if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
- if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
-
-/*-------------------------------------------------------------------------
- * Create and write one dataset
- *-------------------------------------------------------------------------
- */
-
- /* Create a new dataset */
- if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
-
- /* Write the data. */
- if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; shrink it
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims_new )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims_new[0] )
- goto out;
-
-
-/*-------------------------------------------------------------------------
- * Read
- *-------------------------------------------------------------------------
- */
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
-
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( buf1[i][j] != data[i][j] ) {
- goto out;
- }
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; expand it again
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims[0] )
- goto out;
-
-
-/*-------------------------------------------------------------------------
- * Read
- *-------------------------------------------------------------------------
- */
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( i >= 70 || j >= 70 )
- {
- if ( buf2[i][j] != 0 ) {
- goto out;
- }
- }
- else
- {
- if ( buf2[i][j] != data[i][j] ) {
- goto out;
- }
- }
-
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Close/release resources
- *-------------------------------------------------------------------------
- */
-
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Pclose( plist_id );
+ hid_t file_id;
+ hid_t dataset_id=(-1);
+ hid_t space_id=(-1);
+ hid_t plist_id=(-1);
+ hsize_t dims[RANK] = { 90, 90 };
+ hsize_t dims_new[RANK] = { 70, 70 };
+ hsize_t dims_chunk[RANK] = { 20, 20 };
+ hsize_t dims_out[RANK];
+ hsize_t maxdims[RANK] = { H5S_UNLIMITED, H5S_UNLIMITED };
+ int data[ 90 ][ 90 ];
+ int buf1[ 70 ][ 70 ];
+ int buf2[ 90 ][ 90 ];
+ int i, j, n = 0;
+ int fillvalue = 1; /* Fill value for the dataset */
- H5Fclose( file_id );
-
- PASSED();
-
-
-/*-------------------------------------------------------------------------
- * Test H5Dset_extent with chunks written to file
- *-------------------------------------------------------------------------
- */
-
-
- /* Create a new file using default properties. */
- if ((file_id = H5Fcreate( "set_extent_read.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ))<0) goto out;
-
-
- TESTING("extend dataset read with fill value");
-
- /* Create the data space with unlimited dimensions. */
- if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
-
- /* Modify dataset creation properties, i.e. enable chunking. */
- if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
- if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
- if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) goto out;
-
- /* Create a new dataset within the file using cparms creation properties. */
- if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
-
- /* Write the data. */
- if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
-
- /* Close/release resources. */
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Pclose( plist_id );
- H5Fclose( file_id );
-
-
- /* Open the file */
- if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) goto out;
-
- /* Open the dataset */
- if ((dataset_id = H5Dopen( file_id , "Dataset1" ))<0) goto out;
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id, dims_new )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims_new[0] )
- goto out;
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( buf1[i][j] != data[i][j] ) {
- goto out;
- }
- }
- }
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; expand it again
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims[0] )
- goto out;
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( i >= 70 || j >= 70 )
- {
- if ( buf2[i][j] != fillvalue ) {
- goto out;
+ for( i = 0; i < 90; i++ )
+ for( j = 0; j < 90; j++ )
+ data[i][j] = n++;
+
+ /*-------------------------------------------------------------------------
+ * Test H5Dset_extent with chunks on the raw data cache
+ *-------------------------------------------------------------------------
+ */
+
+
+ /* Create a new file using default properties. */
+ if ((file_id = H5Fcreate( "set_extent_create.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ))<0) goto out;
+
+ TESTING("extend dataset create with fill value");
+
+ /* Create the data space with unlimited dimensions. */
+ if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
+
+ /* Modify dataset creation properties, i.e. enable chunking. */
+ if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
+ if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
+ if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Create and write one dataset
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
+
+ /* Write the data. */
+ if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; shrink it
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims_new )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims_new[0] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Read
+ *-------------------------------------------------------------------------
+ */
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
+
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ )
+ for( j = 0; j < (int)dims_out[1]; j++ )
+ if ( buf1[i][j] != data[i][j] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; expand it again
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims[0] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Read
+ *-------------------------------------------------------------------------
+ */
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ ) {
+ for( j = 0; j < (int)dims_out[1]; j++ ) {
+ if ( i >= 70 || j >= 70 ) {
+ if ( buf2[i][j] != fillvalue ) goto out;
+ }
+ else {
+ if ( buf2[i][j] != data[i][j] ) goto out;
+ }
+ }
}
- }
- else
- {
- if ( buf2[i][j] != data[i][j] ) {
- goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Close/release resources
+ *-------------------------------------------------------------------------
+ */
+
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Pclose( plist_id );
+
+ PASSED();
+ TESTING("extend dataset create without fill value");
+
+ /* Create the data space with unlimited dimensions. */
+ if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
+
+ /* Modify dataset creation properties, i.e. enable chunking. */
+ if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
+ if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
+
+ /*-------------------------------------------------------------------------
+ * Create and write one dataset
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
+
+ /* Write the data. */
+ if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; shrink it
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims_new )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims_new[0] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Read
+ *-------------------------------------------------------------------------
+ */
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
+
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ )
+ for( j = 0; j < (int)dims_out[1]; j++ )
+ if ( buf1[i][j] != data[i][j] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; expand it again
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims[0] ) goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Read
+ *-------------------------------------------------------------------------
+ */
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ ) {
+ for( j = 0; j < (int)dims_out[1]; j++ ) {
+ if ( i >= 70 || j >= 70 ) {
+ if ( buf2[i][j] != 0 ) goto out;
+ }
+ else {
+ if ( buf2[i][j] != data[i][j] ) goto out;
+ }
+ }
}
- }
-
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Close/release resources
- *-------------------------------------------------------------------------
- */
-
- H5Dclose( dataset_id );
- H5Sclose( space_id );
-
- PASSED();
-
-
- TESTING("extend dataset read without fill value");
-
- /* Create the data space with unlimited dimensions. */
- if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
-
- /* Modify dataset creation properties, i.e. enable chunking. */
- if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
- if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
-
- /* Create a new dataset within the file using cparms creation properties. */
- if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
-
- /* Write the data. */
- if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
-
- /* Close/release resources. */
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Pclose( plist_id );
- H5Fclose( file_id );
-
-
- /* Open the file */
- if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) goto out;
-
- /* Open the dataset */
- if ((dataset_id = H5Dopen( file_id , "Dataset2" ))<0) goto out;
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id, dims_new )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims_new[0] )
- goto out;
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( buf1[i][j] != data[i][j] ) {
- goto out;
- }
- }
- }
-
-/*-------------------------------------------------------------------------
- * Set new dimensions for the array; expand it again
- *-------------------------------------------------------------------------
- */
-
- /* Set new dimensions for the array. */
- if (H5Dset_extent( dataset_id , dims )<0) goto out;
-
- /* Get the space. */
- if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
-
- /* Get dimensions. */
- if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
-
- if ( dims_out[0] != dims[0] )
- goto out;
-
- /* Read the new dataset. */
- if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
-
- /* Compare the read array with the original array */
- for( i = 0; i < (int)dims_out[0]; i++ )
- {
- for( j = 0; j < (int)dims_out[1]; j++ )
- {
- if ( i >= 70 || j >= 70 )
- {
- if ( buf2[i][j] != 0 ) {
- goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Close/release resources
+ *-------------------------------------------------------------------------
+ */
+
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Pclose( plist_id );
+
+ H5Fclose( file_id );
+
+ PASSED();
+
+
+
+ /*-------------------------------------------------------------------------
+ * Test H5Dset_extent with chunks written to file
+ *-------------------------------------------------------------------------
+ */
+
+
+ /* Create a new file using default properties. */
+ if ((file_id = H5Fcreate( "set_extent_read.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ))<0) goto out;
+
+
+ TESTING("extend dataset read with fill value");
+
+ /* Create the data space with unlimited dimensions. */
+ if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
+
+ /* Modify dataset creation properties, i.e. enable chunking. */
+ if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
+ if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
+ if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) goto out;
+
+ /* Create a new dataset within the file using cparms creation properties. */
+ if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
+
+ /* Write the data. */
+ if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
+
+ /* Close/release resources. */
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Pclose( plist_id );
+ H5Fclose( file_id );
+
+
+ /* Open the file */
+ if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) goto out;
+
+ /* Open the dataset */
+ if ((dataset_id = H5Dopen( file_id , "Dataset1" ))<0) goto out;
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id, dims_new )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims_new[0] ) goto out;
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ )
+ for( j = 0; j < (int)dims_out[1]; j++ )
+ if ( buf1[i][j] != data[i][j] ) goto out;
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; expand it again
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims[0] ) goto out;
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ ) {
+ for( j = 0; j < (int)dims_out[1]; j++ ) {
+ if ( i >= 70 || j >= 70 ) {
+ if ( buf2[i][j] != fillvalue ) goto out;
+ }
+ else {
+ if ( buf2[i][j] != data[i][j] ) goto out;
+ }
+ }
}
- }
- else
- {
- if ( buf2[i][j] != data[i][j] ) {
- goto out;
+
+
+ /*-------------------------------------------------------------------------
+ * Close/release resources
+ *-------------------------------------------------------------------------
+ */
+
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+
+ PASSED();
+
+
+ TESTING("extend dataset read without fill value");
+
+ /* Create the data space with unlimited dimensions. */
+ if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) goto out;
+
+ /* Modify dataset creation properties, i.e. enable chunking. */
+ if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) goto out;
+ if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) goto out;
+
+ /* Create a new dataset within the file using cparms creation properties. */
+ if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) goto out;
+
+ /* Write the data. */
+ if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) goto out;
+
+ /* Close/release resources. */
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Pclose( plist_id );
+ H5Fclose( file_id );
+
+
+ /* Open the file */
+ if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) goto out;
+
+ /* Open the dataset */
+ if ((dataset_id = H5Dopen( file_id , "Dataset2" ))<0) goto out;
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id, dims_new )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims_new[0] ) goto out;
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ )
+ for( j = 0; j < (int)dims_out[1]; j++ )
+ if ( buf1[i][j] != data[i][j] ) goto out;
+
+ /*-------------------------------------------------------------------------
+ * Set new dimensions for the array; expand it again
+ *-------------------------------------------------------------------------
+ */
+
+ /* Set new dimensions for the array. */
+ if (H5Dset_extent( dataset_id , dims )<0) goto out;
+
+ /* Get the space. */
+ if ((space_id = H5Dget_space( dataset_id ))<0) goto out;
+
+ /* Get dimensions. */
+ if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) goto out;
+
+ if ( dims_out[0] != dims[0] ) goto out;
+
+ /* Read the new dataset. */
+ if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) goto out;
+
+ /* Compare the read array with the original array */
+ for( i = 0; i < (int)dims_out[0]; i++ ) {
+ for( j = 0; j < (int)dims_out[1]; j++ ) {
+ if ( i >= 70 || j >= 70 ) {
+ if ( buf2[i][j] != 0 ) goto out;
+ }
+ else {
+ if ( buf2[i][j] != data[i][j] ) goto out;
+ }
+ }
}
- }
-
- }
- }
-
-
-/*-------------------------------------------------------------------------
- * Close/release resources
- *-------------------------------------------------------------------------
- */
-
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Fclose( file_id );
-
- PASSED();
+ /*-------------------------------------------------------------------------
+ * Close/release resources
+ *-------------------------------------------------------------------------
+ */
+
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
-
- return 0;
-
-
-out:
- H5Dclose( dataset_id );
- H5Sclose( space_id );
- H5Pclose( plist_id );
- H5Fclose( file_id );
- H5_FAILED();
- return 1;
-
-}
+ H5Fclose( file_id );
+ PASSED();
+
+ return 0;
+
+
+out:
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Pclose( plist_id );
+ H5Fclose( file_id );
+ H5_FAILED();
+ return 1;
+}