diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2009-01-08 18:37:24 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2009-01-08 18:37:24 (GMT) |
commit | 2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de (patch) | |
tree | d30f170a49ca3186bc8beddac7bf3523dfdb1ad3 /test | |
parent | 596f9b43271b088bf4f13783024f0a75ac05011c (diff) | |
download | hdf5-2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de.zip hdf5-2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de.tar.gz hdf5-2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de.tar.bz2 |
[svn-r16283] Description:
Bring revisions 16218:16280 back from trunk.
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Mac OS X/32 10.5.6 (amazon) in debug mode
Mac OS X/32 10.5.6 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
Diffstat (limited to 'test')
-rw-r--r-- | test/set_extent.c | 2003 |
1 files changed, 1821 insertions, 182 deletions
diff --git a/test/set_extent.c b/test/set_extent.c index 1523015..47a6ce5 100644 --- a/test/set_extent.c +++ b/test/set_extent.c @@ -20,60 +20,132 @@ * Purpose: Tests the H5Dset_extent call */ -#if 0 -#define H5_SET_EXTENT_DEBUG -#endif - -#if 0 -#define H5_SET_EXTENT_DEBUG2 -#endif - - #include "hdf5.h" #include "h5test.h" /*------------------------------------------------------------------------- * - * Tests the function H5Dset_extent. In the current version of the library - * the dataset MUST be chunked. + * Tests the function H5Dset_extent. * *------------------------------------------------------------------------- */ -#define RANK 2 + +#define FILE_NAME1 "set_extent1.h5" +#define FILE_NAME2 "set_extent2.h5" +#define FILE_NAME3 "set_extent3.h5" +#define FILE_NAME4 "set_extent4.h5" +#define FILE_NAME5 "set_extent5.h5" + +#define RANK1 1 +#define RANK2 2 +#define RANK3 3 #define DIM0 4 #define DIM1 4 +#define DIM2 4 #define DIMS0 2 #define DIMS1 2 +#define DIMS2 2 #define DIME0 7 #define DIME1 7 +#define DIME2 7 #define ISTORE_IK 64 - -static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_k); - +static int do_ranks( void ); +static int do_layouts( void ); + +static int test_rank1( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time); +static int test_rank2( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time); +static int test_rank3( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time); + +static int test_external( void ); +static int test_layouts( H5D_layout_t layout ); /*------------------------------------------------------------------------- * main *------------------------------------------------------------------------- */ - int main( void ) { + if ( do_ranks() < 0 ) + { + goto error; + } + + if ( test_external() < 0 ) + { + goto error; + } + + if ( do_layouts() < 0 ) + { + goto error; + } + + + puts("All set_extent tests passed."); + return 0; + + +error: + H5_FAILED(); + return 1; +} + + + +/*------------------------------------------------------------------------- +* test with several ranks +*------------------------------------------------------------------------- +*/ +static int do_ranks( void ) +{ + hbool_t do_compress = 0; hbool_t do_fillvalue = 0; hbool_t set_istore_k = 0; - + TESTING("with fill value, no compression"); do_fillvalue = 1; - if (test( do_compress, do_fillvalue, set_istore_k ) < 0) + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) { goto error; - } + } + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) + { + goto error; + } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) + { + goto error; + } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) + { + goto error; + } + + PASSED(); @@ -82,10 +154,19 @@ int main( void ) do_fillvalue = 0; - if (test( do_compress, do_fillvalue, set_istore_k ) < 0) + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) { goto error; } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) + { + goto error; + } + PASSED(); @@ -95,10 +176,29 @@ int main( void ) #ifdef H5_HAVE_FILTER_DEFLATE do_compress = 1; - do_fillvalue = 1; - if (test( do_compress, do_fillvalue, set_istore_k ) < 0) + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) + { + goto error; + } + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) + { + goto error; + } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) + { + goto error; + } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_IFSET ) < 0) { goto error; } @@ -115,7 +215,15 @@ int main( void ) do_fillvalue = 0; - if (test( do_compress, do_fillvalue, set_istore_k ) < 0) + if (test_rank1( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) + { + goto error; + } + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) + { + goto error; + } + if (test_rank3( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ERROR ) < 0) { goto error; } @@ -130,7 +238,7 @@ int main( void ) do_fillvalue = 1; set_istore_k = 1; - if (test( do_compress, do_fillvalue, set_istore_k ) < 0) + if (test_rank2( do_compress, do_fillvalue, set_istore_k, H5D_FILL_TIME_ALLOC ) < 0) { goto error; } @@ -139,39 +247,596 @@ int main( void ) PASSED(); - puts("All set_extent tests passed."); return 0; error: + return -1; +} + + +/*------------------------------------------------------------------------- +* test with different storage layouts +*------------------------------------------------------------------------- +*/ +static int do_layouts( void ) +{ - + TESTING("storage layout use"); + + if (test_layouts( H5D_COMPACT ) < 0) + { + goto error; + } - H5_FAILED(); - return 1; + if (test_layouts( H5D_CONTIGUOUS ) < 0) + { + goto error; + } + + PASSED(); + + return 0; + +error: + return -1; } +/*------------------------------------------------------------------------- + * test usage with a 1D rank + *------------------------------------------------------------------------- + */ + +static int test_rank1( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time) +{ + + hid_t fid=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; + hid_t fcpl; + hsize_t dims_o[RANK1] = {DIM0}; /* original dimensions */ + hsize_t dims_s[RANK1] = {DIMS0}; /* shrinking dimensions */ + hsize_t dims_e[RANK1] = {DIME0}; /* extended dimensions */ + hsize_t dims_c[RANK1] = {2}; /* chunk dimensions */ + hsize_t dims_r[RANK1]; /* read dimensions */ + hsize_t maxdims[RANK1] = {H5S_UNLIMITED}; + int buf_o[DIM0]; + int buf_s[DIMS0]; + int buf_e[DIME0]; + int buf_r[DIM0]; + int i; + int fillvalue = 1; + int comp_value; + + if ( do_fill_value ) + { + comp_value = fillvalue; + } + else + { + comp_value = 0; + } + + + for( i = 0; i < DIM0; i++ ) + { + + buf_o[i] = 2; + } + + /* create a file creation property list */ + if ((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) + { + goto error; + } + + if ( set_istore_k ) + { + /* set non-default indexed storage B-tree internal 'K' value */ + if (H5Pset_istore_k(fcpl,ISTORE_IK) < 0) + { + goto error; + } + + } + /* create a new file */ + if ((fid = H5Fcreate(FILE_NAME1, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + + /* close property list */ + if(H5Pclose(fcpl) < 0) + { + goto error; + } + + /* create the data space with unlimited dimensions. */ + if ((sid = H5Screate_simple(RANK1, dims_o, maxdims)) < 0) + { + goto error; + } + + /* modify dataset creation properties, i.e. enable chunking. */ + if ((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0) + { + goto error; + } + if (H5Pset_chunk(dcpl, RANK1, dims_c) < 0) + { + goto error; + } + if ( do_fill_value ) + { + if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillvalue) < 0) + { + goto error; + } + + if(H5Pset_fill_time(dcpl, fill_time) < 0) + { + goto error; + } + } + else + { + + if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) + { + goto error; + } + + } + if (do_compress) + { + if(H5Pset_deflate(dcpl, 9) < 0) + { + goto error; + } + } + + /*------------------------------------------------------------------------- + * create, write dataset + *------------------------------------------------------------------------- + */ + + /* create a dataset */ + if ((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + + /* write */ + if (H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_o) < 0) + { + goto error; + } + + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_o[0]; i++ ) + { + + printf("%d ", buf_o[i]); + + } + printf("\n"); +#endif + + + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /*------------------------------------------------------------------------- + * set new dimensions for the array; expand it + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_e) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /* check dimensions */ + for( i = 0; i < RANK1; i++ ) + { + if (dims_r[i] != dims_e[i]) + goto error; + } + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_e) < 0) + goto error; + + + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + + printf("%d ", buf_e[i]); + + } + printf("\n"); +#endif + + + + + /* compare the read array with the expanded array */ + for (i = 0; i < (int)dims_r[0]; i++ ) + { + + if ( i >= DIM0 ) + { + if(buf_e[i] != comp_value) + { + printf("buf_e[%d] = %d\n", i, buf_e[i]); + printf("value = %d\n", comp_value); + goto error; + } + } + else + { + if(buf_e[i] != buf_o[i]) + goto error; + } + } + + + + + /*------------------------------------------------------------------------- + * shrink + * + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_s) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /* check dimensions */ + for( i = 0; i < RANK1; i++ ) + { + if (dims_r[i] != dims_s[i]) + goto error; + } + + + + /* for this case we close and reopen file */ + if ( set_istore_k ) + { + + if (H5Dclose(did) < 0) + { + goto error; + } + if (H5Fclose(fid) < 0) + { + goto error; + } + + if ((fid = H5Fopen( FILE_NAME1, H5F_ACC_RDWR, H5P_DEFAULT ))<0) + { + goto error; + } + + if ((did = H5Dopen2( fid , "dset1", H5P_DEFAULT ))<0) + { + goto error; + } + + + + } + + + /*------------------------------------------------------------------------- + * read + *------------------------------------------------------------------------- + */ + + /* read */ + if (H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_s ) < 0) + { + goto error; + } + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + + printf("%d ", buf_s[i]); + } + printf("\n"); + +#endif + + + + + /* compare the read array with the shrinked array */ + for( i = 0; i < (int)dims_r[0]; i++ ) + { + + if ( buf_s[i] != buf_o[i] ) + { + printf("buf_s[%d] = %d\n", i, buf_s[i]); + printf("buf_o[%d] = %d\n", i, buf_o[i]); + goto error; + } + } + + + /*------------------------------------------------------------------------- + * expand it back to original size + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array */ + if (H5Dset_extent(did, dims_o) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions. */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /* check dimensions */ + for( i = 0; i < RANK1; i++ ) + { + if (dims_r[i] != dims_o[i]) + goto error; + } + + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0) + goto error; + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + + printf("%d ", buf_r[i]); + + } + printf("\n"); +#endif + + + + /* compare the read array with the original array */ + for (i = 0; i < (int)dims_r[0]; i++ ) + { + + if (i >= DIMS0 ) + { + if(buf_r[i] != comp_value) + { + printf("buf_r[%d] = %d\n", i, buf_r[i] ); + printf("value = %d\n", comp_value); + goto error; + } + } + else + { + if(buf_r[i] != buf_o[i]) + goto error; + } + } + + /*------------------------------------------------------------------------- + * shrink to 0 + * + *------------------------------------------------------------------------- + */ + + dims_s[0] = 0; + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_s) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /* check dimensions */ + for( i = 0; i < RANK1; i++ ) + { + if (dims_r[i] != dims_s[i]) + goto error; + } + + /*------------------------------------------------------------------------- + * close dataset + *------------------------------------------------------------------------- + */ + + if (H5Dclose(did) < 0) + { + goto error; + } + + + + + + /*------------------------------------------------------------------------- + * test a dataset with non initialized chunks + *------------------------------------------------------------------------- + */ + + + if ((sid = H5Screate_simple(RANK1, dims_o, maxdims)) < 0) + { + goto error; + } + if ((did = H5Dcreate2(fid , "dset3", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + /* set new dimensions for the array */ + dims_o[ 0 ] = 0; + if (H5Dset_extent( did , dims_o ) < 0) + { + goto error; + } + + + + if (H5Dclose(did) < 0) + { + goto error; + } + if (H5Sclose(sid) < 0) + { + goto error; + } + + + + + /*------------------------------------------------------------------------- + * close property list + *------------------------------------------------------------------------- + */ + + + if (H5Pclose(dcpl) < 0) + { + goto error; + } + + if (H5Fclose( fid ) < 0) + { + goto error; + } + + + return 0; + + + +error: + + H5E_BEGIN_TRY + { + H5Dclose( did ); + H5Sclose( sid ); + H5Pclose( dcpl ); + H5Pclose( fcpl ); + H5Fclose( fid ); + } H5E_END_TRY; + return -1; + +} /*------------------------------------------------------------------------- - * test + * test usage with a 2D rank *------------------------------------------------------------------------- */ -static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_k) +static int test_rank2( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time) { - hid_t fid; - hid_t did; - hid_t sid; - hid_t dcpl; + hid_t fid=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; hid_t fcpl; - hsize_t dims_o[RANK] = {DIM0,DIM1}; - hsize_t dims_s[RANK] = {DIMS0,DIMS1}; - hsize_t dims_e[RANK] = {DIME0,DIME1}; - hsize_t dims_c[RANK] = {2,2}; - hsize_t dims_r[RANK]; - hsize_t maxdims[RANK] = {H5S_UNLIMITED,H5S_UNLIMITED}; + hsize_t dims_o[RANK2] = {DIM0,DIM1}; /* original dimensions */ + hsize_t dims_s[RANK2] = {DIMS0,DIMS1}; /* shrinking dimensions */ + hsize_t dims_e[RANK2] = {DIME0,DIME1}; /* extended dimensions */ + hsize_t dims_c[RANK2] = {2,2}; /* chunk dimensions */ + hsize_t dims_r[RANK2]; /* read dimensions */ + hsize_t maxdims[RANK2] = {H5S_UNLIMITED,H5S_UNLIMITED}; int buf_o[DIM0][DIM1]; int buf_s[DIMS0][DIMS1]; int buf_e[DIME0][DIME1]; @@ -189,7 +854,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ comp_value = 0; } - + for( i = 0; i < DIM0; i++ ) { for( j = 0; j < DIM1; j++ ) @@ -214,7 +879,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } /* create a new file */ - if ((fid = H5Fcreate("set_extent1.h5", H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) + if ((fid = H5Fcreate(FILE_NAME2, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) { goto error; } @@ -226,7 +891,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } /* create the data space with unlimited dimensions. */ - if ((sid = H5Screate_simple(RANK, dims_o, maxdims)) < 0) + if ((sid = H5Screate_simple(RANK2, dims_o, maxdims)) < 0) { goto error; } @@ -236,7 +901,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } - if (H5Pset_chunk(dcpl, RANK, dims_c) < 0) + if (H5Pset_chunk(dcpl, RANK2, dims_c) < 0) { goto error; } @@ -246,6 +911,11 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } + + if(H5Pset_fill_time(dcpl, fill_time) < 0) + { + goto error; + } } else { @@ -256,7 +926,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } } - if(do_compress) + if (do_compress) { if(H5Pset_deflate(dcpl, 9) < 0) { @@ -264,11 +934,15 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } } - - /*------------------------------------------------------------------------- - * create and write one dataset - * data is + * Procedure 1 + * a. Write an array AxB. These are the dimensions for creating the dataset + * b. Define a greater array CxD where C > A and D > B + * c. Read data back + * d. Verify if new dimensions are C and D + * e. Verify if data from A to C and B to D is what it is to be expected + * + * original data is * * 2 2 2 2 * 2 2 2 2 @@ -291,7 +965,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } -#if defined (H5_SET_EXTENT_DEBUG) +#if defined (H5_SET_EXTENT_DEBUG2) printf("\n"); for (i = 0; i < (int)dims_o[0]; i++ ) { @@ -350,7 +1024,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK2; i++ ) { if (dims_r[i] != dims_e[i]) goto error; @@ -362,7 +1036,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ -#if defined (H5_SET_EXTENT_DEBUG) +#if defined (H5_SET_EXTENT_DEBUG2) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { @@ -382,7 +1056,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { for (j = 0; j < (int)dims_r[1]; j++ ) { - if (i >= DIM0 || j >= DIM1) + if ( i >= DIM0 || j >= DIM1 ) { if(buf_e[i][j] != comp_value) { @@ -400,70 +1074,16 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } + + /*------------------------------------------------------------------------- - * write to the expanded array. fill the space with fill value with other value - * data is now, extended space was written * - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 - * 2 2 2 2 2 2 2 + * Procedure 2 + * a. Define a smaller array ExF where E < A and F < B + * b. Read data back + * c. Verify if new dimensions are E and F + * d. Verify if data up until E and F is what to be expected * - *------------------------------------------------------------------------- - */ - - for( i = 0; i < DIME0; i++ ) - { - for( j = 0; j < DIME1; j++ ) - { - buf_e[i][j] = 2; - } - } - - /* get the space */ - if ((sid = H5Dget_space(did)) < 0) - { - goto error; - } - - /* write */ - if (H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_e) < 0) - { - goto error; - } - - /* read */ - if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_e) < 0) - goto error; - - - /* close space */ - if (H5Sclose(sid) < 0) - { - goto error; - } - - -#if defined (H5_SET_EXTENT_DEBUG) - printf("\n"); - for (i = 0; i < (int)dims_r[0]; i++ ) - { - for (j = 0; j < (int)dims_r[1]; j++ ) - { - printf("%d ", buf_e[i][j]); - } - printf("\n"); - } -#endif - - - - - /*------------------------------------------------------------------------- - * set new dimensions for the array; shrink it * data is now * * 2 2 @@ -496,7 +1116,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK2; i++ ) { if (dims_r[i] != dims_s[i]) goto error; @@ -517,7 +1137,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ goto error; } - if ((fid = H5Fopen( "set_extent1.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) + if ((fid = H5Fopen( FILE_NAME2, H5F_ACC_RDWR, H5P_DEFAULT ))<0) { goto error; } @@ -543,7 +1163,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ goto error; } -#if defined (H5_SET_EXTENT_DEBUG) +#if defined (H5_SET_EXTENT_DEBUG2) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { @@ -565,7 +1185,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { if ( buf_s[i][j] != buf_o[i][j] ) { - printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); + printf("buf_s[%d][%d] = %d\n", i, j, buf_s[i][j]); printf("buf_o[%d][%d] = %d\n", i, j, buf_o[i][j]); goto error; } @@ -602,9 +1222,14 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } + + if (H5Sclose(sid) < 0) + { + goto error; + } /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK2; i++ ) { if (dims_r[i] != dims_o[i]) goto error; @@ -620,7 +1245,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0) goto error; -#if defined (H5_SET_EXTENT_DEBUG) +#if defined (H5_SET_EXTENT_DEBUG2) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { @@ -655,13 +1280,82 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } } } + + /*------------------------------------------------------------------------- + * shrink to 0 + * + *------------------------------------------------------------------------- + */ + + dims_s[0] = 0; + dims_s[1] = 0; + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_s) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /* check dimensions */ + for( i = 0; i < RANK2; i++ ) + { + if (dims_r[i] != dims_s[i]) + goto error; + } /*------------------------------------------------------------------------- - * close dataset and space + * close dataset + *------------------------------------------------------------------------- + */ + + if (H5Dclose(did) < 0) + { + goto error; + } + + + /*------------------------------------------------------------------------- + * test a dataset with non initialized chunks *------------------------------------------------------------------------- */ + + if ((sid = H5Screate_simple(RANK2, dims_o, maxdims)) < 0) + { + goto error; + } + if ((did = H5Dcreate2(fid , "dset3", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + /* set new dimensions for the array */ + dims_o[ 0 ] = 0; + dims_o[ 1 ] = 0; + if (H5Dset_extent( did , dims_o ) < 0) + { + goto error; + } + + + if (H5Dclose(did) < 0) { goto error; @@ -670,31 +1364,177 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } + - - - /*------------------------------------------------------------------------- - * create and write one dataset - * data is - * - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 2 - * + /*------------------------------------------------------------------------- + * close property list *------------------------------------------------------------------------- */ + + + if (H5Pclose(dcpl) < 0) + { + goto error; + } + + if (H5Fclose( fid ) < 0) + { + goto error; + } + + + return 0; + + + +error: + + H5E_BEGIN_TRY + { + H5Dclose( did ); + H5Sclose( sid ); + H5Pclose( dcpl ); + H5Pclose( fcpl ); + H5Fclose( fid ); + } H5E_END_TRY; + return -1; + +} + + + + +/*------------------------------------------------------------------------- + * test usage with a 3D rank + *------------------------------------------------------------------------- + */ + +static int test_rank3( hbool_t do_compress, + hbool_t do_fill_value, + hbool_t set_istore_k, + H5D_fill_time_t fill_time) +{ + + hid_t fid=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; + hid_t fcpl; + hsize_t dims_o[RANK3] = {DIM0,DIM1,DIM2}; /* original dimensions */ + hsize_t dims_s[RANK3] = {DIMS0,DIMS1,DIMS2}; /* shrinking dimensions */ + hsize_t dims_e[RANK3] = {DIME0,DIME1,DIME2}; /* extended dimensions */ + hsize_t dims_c[RANK3] = {2,2,2}; /* chunk dimensions */ + hsize_t dims_r[RANK3]; /* read dimensions */ + hsize_t maxdims[RANK3] = {H5S_UNLIMITED,H5S_UNLIMITED,H5S_UNLIMITED}; + int buf_o[DIM0][DIM1][DIM2]; + int buf_s[DIMS0][DIMS1][DIMS2]; + int buf_e[DIME0][DIME1][DIME2]; + int buf_r[DIM0][DIM1][DIM2]; + int i, j, k; + int fillvalue = 1; + int comp_value; + + if ( do_fill_value ) + { + comp_value = fillvalue; + } + else + { + comp_value = 0; + } + + + for( i = 0; i < DIM0; i++ ) + { + for( j = 0; j < DIM1; j++ ) + { + for( k = 0; k < DIM2; k++ ) + { + buf_o[i][j][k] = 2; + } + } + } + + /* create a file creation property list */ + if ((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) + { + goto error; + } + + if ( set_istore_k ) + { + /* set non-default indexed storage B-tree internal 'K' value */ + if (H5Pset_istore_k(fcpl,ISTORE_IK) < 0) + { + goto error; + } + + } + /* create a new file */ + if ((fid = H5Fcreate(FILE_NAME3, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + /* close property list */ + if(H5Pclose(fcpl) < 0) + { + goto error; + } + /* create the data space with unlimited dimensions. */ - if ((sid = H5Screate_simple(RANK, dims_o, maxdims)) < 0) + if ((sid = H5Screate_simple(RANK3, dims_o, maxdims)) < 0) { goto error; } + /* modify dataset creation properties, i.e. enable chunking. */ + if ((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0) + { + goto error; + } + if (H5Pset_chunk(dcpl, RANK3, dims_c) < 0) + { + goto error; + } + if ( do_fill_value ) + { + if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillvalue) < 0) + { + goto error; + } + + if(H5Pset_fill_time(dcpl, fill_time) < 0) + { + goto error; + } + } + else + { + + if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) + { + goto error; + } + + } + if (do_compress) + { + if(H5Pset_deflate(dcpl, 9) < 0) + { + goto error; + } + } + + /*------------------------------------------------------------------------- + * create, write array + *------------------------------------------------------------------------- + */ + /* create a dataset */ - if ((did = H5Dcreate2(fid , "dset2", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + if ((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) { goto error; } @@ -706,16 +1546,22 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } -#if defined (H5_SET_EXTENT_DEBUG2) +#if defined (H5_SET_EXTENT_DEBUG3) printf("\n"); for (i = 0; i < (int)dims_o[0]; i++ ) { for (j = 0; j < (int)dims_o[1]; j++ ) { - printf("%d ", buf_o[i][j]); + for( k = 0; k < (int)dims_o[2]; k++ ) + { + printf("%d ", buf_o[i][j][k]); + } + printf("[%d] ", j); } printf("\n"); + } + printf("\n"); #endif @@ -724,15 +1570,101 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } + + /*------------------------------------------------------------------------- + * set new dimensions for the array; expand it + * + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_e) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /* check dimensions */ + for( i = 0; i < RANK3; i++ ) + { + if (dims_r[i] != dims_e[i]) + goto error; + } + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_e) < 0) + goto error; + + +#if defined (H5_SET_EXTENT_DEBUG3) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + for( k = 0; k < (int)dims_r[2]; k++ ) + { + printf("%d ", buf_e[i][j][k]); + } + printf("[%d] ", j); + } + printf("\n"); + + } + printf("\n"); +#endif - /*------------------------------------------------------------------------- - * set new dimensions for the array; shrink it - * data is now - * - * 2 2 - * 2 2 - * + + + + /* compare the read array with the expanded array */ + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + for( k = 0; k < (int)dims_r[2]; k++ ) + { + if ( i >= DIM0 || j >= DIM1 || k >= DIM2 ) + { + if(buf_e[i][j][k] != comp_value) + { + printf("buf_e[%d][%d][%d] = %d\n", i, j, k, buf_e[i][j][k] ); + printf("value = %d\n", comp_value); + goto error; + } + } + else + { + if(buf_e[i][j][k] != buf_o[i][j][k] ) + goto error; + } + } + } + } + + + + + /*------------------------------------------------------------------------- + * shrink *------------------------------------------------------------------------- */ @@ -760,11 +1692,40 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK3; i++ ) { if (dims_r[i] != dims_s[i]) goto error; } + + + + /* for this case we close and reopen file */ + if ( set_istore_k ) + { + + if (H5Dclose(did) < 0) + { + goto error; + } + if (H5Fclose(fid) < 0) + { + goto error; + } + + if ((fid = H5Fopen( FILE_NAME3, H5F_ACC_RDWR, H5P_DEFAULT ))<0) + { + goto error; + } + + if ((did = H5Dopen2( fid , "dset1", H5P_DEFAULT ))<0) + { + goto error; + } + + + + } /*------------------------------------------------------------------------- @@ -778,16 +1739,22 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ goto error; } -#if defined (H5_SET_EXTENT_DEBUG2) +#if defined (H5_SET_EXTENT_DEBUG3) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { for (j = 0; j < (int)dims_r[1]; j++ ) { - printf("%d ", buf_s[i][j]); + for( k = 0; k < (int)dims_r[2]; k++ ) + { + printf("%d ", buf_s[i][j][k]); + } + printf("[%d] ", j); } printf("\n"); + } + printf("\n"); #endif @@ -798,25 +1765,21 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { for( j = 0; j < (int)dims_r[1]; j++ ) { - if ( buf_s[i][j] != buf_o[i][j] ) + for( k = 0; k < (int)dims_r[2]; k++ ) { - printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); - printf("buf_o[%d][%d] = %d\n", i, j, buf_o[i][j]); - goto error; - } + if ( buf_s[i][j][k] != buf_o[i][j][k] ) + { + printf("buf_s[%d][%d][%d] = %d\n", i, j, k, buf_s[i][j][k] ); + printf("buf_o[%d][%d][%d] = %d\n", i, j, k, buf_o[i][j][k] ); + goto error; + } + } } } /*------------------------------------------------------------------------- * set new dimensions for the array; expand it back to original size - * data is now, extended space was initialized with fill value or default value - * - * 2 2 1 1 - * 2 2 1 1 - * 1 1 1 1 - * 1 1 1 1 - * *------------------------------------------------------------------------- */ @@ -837,34 +1800,40 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } + + if (H5Sclose(sid) < 0) + { + goto error; + } /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK3; i++ ) { if (dims_r[i] != dims_o[i]) goto error; } - - /*------------------------------------------------------------------------- - * read - *------------------------------------------------------------------------- - */ - /* read */ if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0) goto error; -#if defined (H5_SET_EXTENT_DEBUG2) +#if defined (H5_SET_EXTENT_DEBUG3) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { for (j = 0; j < (int)dims_r[1]; j++ ) { - printf("%d ", buf_r[i][j]); + for( k = 0; k < (int)dims_r[2]; k++ ) + { + + printf("%d ", buf_r[i][j][k]); + } + printf("[%d] ", j); } printf("\n"); + } + printf("\n"); #endif @@ -874,46 +1843,87 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { for (j = 0; j < (int)dims_r[1]; j++ ) { - if (i >= DIMS0 || j >= DIMS1) + for( k = 0; k < (int)dims_r[2]; k++ ) { - if(buf_r[i][j] != comp_value) + if (i >= DIMS0 || j >= DIMS1 || k >= DIMS2 ) { - printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); - printf("value = %d\n", comp_value); - goto error; + if( buf_r[i][j][k] != comp_value ) + { + printf("buf_r[%d][%d][%d] = %d\n", i, j, k, buf_r[i][j][k] ); + printf("value = %d\n", comp_value); + goto error; + } } - } - else - { - if(buf_r[i][j] != buf_o[i][j]) - goto error; + else + { + if(buf_r[i][j][k] != buf_o[i][j][k]) + goto error; + } } } } - + /*------------------------------------------------------------------------- - * close dataset and space + * shrink to 0 + * *------------------------------------------------------------------------- */ + + dims_s[0] = 0; + dims_s[1] = 0; + dims_s[2] = 0; - if (H5Dclose(did) < 0) + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_s) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) { goto error; } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + if (H5Sclose(sid) < 0) { goto error; } + /* check dimensions */ + for( i = 0; i < RANK3; i++ ) + { + if (dims_r[i] != dims_s[i]) + goto error; + } - /*------------------------------------------------------------------------- + + + /*------------------------------------------------------------------------- + * close dataset + *------------------------------------------------------------------------- + */ + + if (H5Dclose(did) < 0) + { + goto error; + } + + + /*------------------------------------------------------------------------- * test a dataset with non initialized chunks *------------------------------------------------------------------------- */ - if ((sid = H5Screate_simple(RANK, dims_o, maxdims)) < 0) + if ((sid = H5Screate_simple(RANK3, dims_o, maxdims)) < 0) { goto error; } @@ -924,6 +1934,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ /* set new dimensions for the array */ dims_o[ 0 ] = 0; dims_o[ 1 ] = 0; + dims_o[ 2 ] = 0; if (H5Dset_extent( did , dims_o ) < 0) { goto error; @@ -979,5 +1990,633 @@ error: } +/*------------------------------------------------------------------------- + * test usage with external storage + *------------------------------------------------------------------------- + */ +static int test_external( void ) +{ + + hid_t fid=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; + hsize_t dims_o[RANK2] = {DIM0,DIM1}; /* original dimensions */ + hsize_t dims_s[RANK2] = {DIMS0,DIMS1}; /* shrinking dimensions */ + hsize_t dims_e[RANK2] = {DIME0,DIM1}; /* extended dimensions, dimension 1 is the original */ + hsize_t dims_r[RANK2]; /* read dimensions */ + hsize_t maxdims[RANK2] = {DIME0,DIM1}; /* only the first dimension can be extendible */ + int buf_o[DIM0][DIM1]; /* original buffer, for writing */ + int buf_s[DIMS0][DIMS1]; /* shrinked buffer, for reading */ + int buf_e[DIME0][DIM1]; /* extended buffer, for writing, dimension 1 is the original */ + int buf_ro[DIM0][DIM1]; /* original buffer for reading */ + int i, j; + int comp_value = 0; + + + hsize_t size; /* number of bytes reserved in the file for the data */ + hsize_t max_size[2]; + + max_size[0] = dims_e[0]; + max_size[1] = dims_e[1]; + size = max_size[0] * max_size[1] * sizeof(int) / 2; + + + for( i = 0; i < DIM0; i++ ) + { + for( j = 0; j < DIM1; j++ ) + { + buf_o[i][j] = 2; + } + } + + TESTING("external file use"); + + /* create a new file */ + if ((fid = H5Fcreate(FILE_NAME4, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) + { + goto error; + } + + /* modify dataset creation properties */ + if ((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0) + { + goto error; + } + + if(H5Pset_external(dcpl, "ext1.bin", (off_t)0, size) < 0) + { + goto error; + } + + if(H5Pset_external(dcpl, "ext2.bin", (off_t)0, size) < 0) + { + goto error; + } + + { + + char name[256]; /*external file name */ + off_t file_offset; /*external file offset */ + hsize_t file_size; /*sizeof external file segment */ + + if(H5Pget_external(dcpl, 0, sizeof(name), name, &file_offset, + &file_size) < 0) goto error; + + } + + + + /*------------------------------------------------------------------------- + * Write an array AxB. These are the dimensions for creating the dataset + * + * original data is + * + * 2 2 2 2 + * 2 2 2 2 + * 2 2 2 2 + * 2 2 2 2 + * + *------------------------------------------------------------------------- + */ + + + /* create the data space with unlimited dimensions. */ + if ((sid = H5Screate_simple(RANK2, dims_o, maxdims)) < 0) + { + goto error; + } + if ((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + if (H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_o) < 0) + { + goto error; + } + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /*------------------------------------------------------------------------- + * read + *------------------------------------------------------------------------- + */ + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_ro) < 0) + goto error; + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_o[0]; i++ ) + { + for (j = 0; j < (int)dims_o[1]; j++ ) + { + printf("%d ", buf_ro[i][j]); + } + printf("\n"); + } +#endif + + + + /*------------------------------------------------------------------------- + * expand + *------------------------------------------------------------------------- + */ + + /*------------------------------------------------------------------------- + * set new dimensions for the array; expand it + * data is now, extended space was initialized with default value + * + * 2 2 2 2 + * 2 2 2 2 + * 2 2 2 2 + * 2 2 2 2 + * 0 0 0 0 + * 0 0 0 0 + * 0 0 0 0 + * + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_e) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /* check dimensions */ + for( i = 0; i < RANK2; i++ ) + { + if (dims_r[i] != dims_e[i]) + goto error; + } + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_e) < 0) + goto error; + + + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + printf("%d ", buf_e[i][j]); + } + printf("\n"); + } +#endif + + + + + /* compare the read array with the expanded array */ + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + if ( i >= DIM0 || j >= DIM1 ) + { + if(buf_e[i][j] != comp_value) + { + printf("buf_e[%d][%d] = %d\n", i, j, buf_e[i][j]); + printf("value = %d\n", comp_value); + goto error; + } + } + else + { + if(buf_e[i][j] != buf_o[i][j]) + goto error; + } + } + } + + + + /*------------------------------------------------------------------------- + * shrink + * + * data is now + * + * 2 2 + * 2 2 + * + *------------------------------------------------------------------------- + */ + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_s) < 0) + { + goto error; + } + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /* check dimensions */ + for( i = 0; i < RANK2; i++ ) + { + if (dims_r[i] != dims_s[i]) + goto error; + } + + + + + /*------------------------------------------------------------------------- + * read + *------------------------------------------------------------------------- + */ + + /* read */ + if (H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_s ) < 0) + { + goto error; + } + +#if defined (H5_SET_EXTENT_DEBUG) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + printf("%d ", buf_s[i][j]); + } + printf("\n"); + } +#endif + + + + + /* compare the read array with the shrinked array */ + for( i = 0; i < (int)dims_r[0]; i++ ) + { + for( j = 0; j < (int)dims_r[1]; j++ ) + { + if ( buf_s[i][j] != buf_o[i][j] ) + { + printf("buf_s[%d][%d] = %d\n", i, j, buf_s[i][j]); + printf("buf_o[%d][%d] = %d\n", i, j, buf_o[i][j]); + goto error; + } + } + } + + + /*------------------------------------------------------------------------- + * negative test + * try to extend dimension above maximum + *------------------------------------------------------------------------- + */ + + + dims_e[1] = DIME1; + + + H5E_BEGIN_TRY + { + + + /* set new dimensions for the array. */ + if (H5Dset_extent(did , dims_e) == SUCCEED) + { + goto error; + } + + } H5E_END_TRY; + + + + /*------------------------------------------------------------------------- + * close property list + *------------------------------------------------------------------------- + */ + + + if (H5Pclose(dcpl) < 0) + { + goto error; + } + + if (H5Fclose( fid ) < 0) + { + goto error; + } + + PASSED(); + + + return 0; + + + +error: + + H5E_BEGIN_TRY + { + H5Dclose( did ); + H5Sclose( sid ); + H5Pclose( dcpl ); + H5Fclose( fid ); + } H5E_END_TRY; + return -1; + +} + + +/*------------------------------------------------------------------------- + * test usage with layouts compact and contiguous + *------------------------------------------------------------------------- + */ +static int test_layouts( H5D_layout_t layout ) +{ + + hid_t fid=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; + hsize_t dims_o[RANK2] = {DIM0,DIM1}; /* original dimensions */ + hsize_t dims_s[RANK2] = {DIMS0,DIMS1}; /* shrinking dimensions */ + hsize_t dims_e[RANK2] = {DIME0,DIME1}; /* extended dimensions */ + hsize_t dims_r[RANK2]; /* read dimensions */ + int buf_o[DIM0][DIM1]; + int buf_r[DIM0][DIM1]; + int i, j; + + for( i = 0; i < DIM0; i++ ) + { + for( j = 0; j < DIM1; j++ ) + { + buf_o[i][j] = 2; + } + } + + + /* create a new file */ + if ((fid = H5Fcreate(FILE_NAME5, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) + { + goto error; + } + + /* create the data space with unlimited dimensions. */ + if ((sid = H5Screate_simple(RANK2, dims_o, NULL)) < 0) + { + goto error; + } + + /* modify dataset creation properties */ + if ((dcpl = H5Pcreate (H5P_DATASET_CREATE)) < 0) + { + goto error; + } + + if (H5Pset_layout (dcpl, layout) < 0) + { + goto error; + } + + /* create a dataset */ + if ((did = H5Dcreate2(fid , "dset1", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) + { + goto error; + } + + /* write */ + if (H5Dwrite(did , H5T_NATIVE_INT, sid, H5S_ALL, H5P_DEFAULT, buf_o) < 0) + { + goto error; + } + + +#if defined (H5_SET_EXTENT_DEBUG4) + printf("\n"); + for (i = 0; i < (int)dims_o[0]; i++ ) + { + for (j = 0; j < (int)dims_o[1]; j++ ) + { + printf("%d ", buf_o[i][j]); + } + printf("\n"); + } +#endif + + + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /*------------------------------------------------------------------------- + * negative test + * try to extend dimension + *------------------------------------------------------------------------- + */ + + H5E_BEGIN_TRY + { + + if (H5Dset_extent(did , dims_e) == SUCCEED) + { + goto error; + } + + } H5E_END_TRY; + + + + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + + /* check dimensions */ + for( i = 0; i < RANK2; i++ ) + { + if (dims_r[i] != dims_o[i]) + goto error; + } + + /* read */ + if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0) + goto error; + + + +#if defined (H5_SET_EXTENT_DEBUG4) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + printf("%d ", buf_r[i][j]); + } + printf("\n"); + } +#endif + + + + /*------------------------------------------------------------------------- + * negative test + * try to shrink dimension + *------------------------------------------------------------------------- + */ + + H5E_BEGIN_TRY + { + + if (H5Dset_extent(did , dims_s) == SUCCEED) + { + goto error; + } + + } H5E_END_TRY; + + + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) + { + goto error; + } + + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + { + goto error; + } + + if (H5Sclose(sid) < 0) + { + goto error; + } + + /* check dimensions */ + for( i = 0; i < RANK2; i++ ) + { + if (dims_r[i] != dims_o[i]) + goto error; + } + + + /*------------------------------------------------------------------------- + * read + *------------------------------------------------------------------------- + */ + + /* read */ + if (H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r ) < 0) + { + goto error; + } + +#if defined (H5_SET_EXTENT_DEBUG4) + printf("\n"); + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + printf("%d ", buf_r[i][j]); + } + printf("\n"); + } +#endif + + + + /*------------------------------------------------------------------------- + * close + *------------------------------------------------------------------------- + */ + + if (H5Dclose(did) < 0) + { + goto error; + } + + if (H5Pclose(dcpl) < 0) + { + goto error; + } + + if (H5Fclose( fid ) < 0) + { + goto error; + } + + + return 0; + + + +error: + + H5E_BEGIN_TRY + { + H5Dclose( did ); + H5Sclose( sid ); + H5Pclose( dcpl ); + H5Fclose( fid ); + } H5E_END_TRY; + return -1; + +} + + |