From 2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Thu, 8 Jan 2009 13:37:24 -0500 Subject: [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 --- README.txt | 32 +- bin/release | 49 +- config/lt_vers.am | 2 +- configure | 22 +- configure.in | 2 +- fortran/src/H5Lff.f90 | 2 +- fortran/test/tH5G_1_8.f90 | 7 +- release_docs/RELEASE.txt | 2 +- src/H5Dint.c | 14 + src/H5public.h | 4 +- src/Makefile.in | 18 +- test/set_extent.c | 2373 ++++++++++++++++++++++++++++++++++++++------- vms/src/h5pubconf.h | 6 +- windows/src/H5pubconf.h | 6 +- 14 files changed, 2070 insertions(+), 469 deletions(-) diff --git a/README.txt b/README.txt index 72f686e..89e4a08 100644 --- a/README.txt +++ b/README.txt @@ -1,33 +1,5 @@ -HDF5 version 1.9.26 currently under development -Please refer to the release_docs/INSTALL file for installation instructions. ------------------------------------------------------------------------------- - -This release is almost fully functional for the entire API defined in the -documentation, see the RELEASE.txt file in the release_docs directory for information -specific to this release of the library. The INSTALL file contains -instructions on compiling and installing the library. The INSTALL_parallel -file contains instructions on installing the parallel version of the -library. The INSTALL* files can be found in the release_docs/ directory. - -Documentation for this snapshot can be found at the following URL: -http://www.hdfgroup.uiuc.edu/HDF5/doc_dev_snapshot/H5_dev/ - -Four mailing lists are currently set up for use with the HDF5 -library. - - news - For announcements of HDF5 related developments, - not a discussion list. - - hdf-forum - For general discussion of the HDF5 library with - other users. - - hdf5dev - For discussion of the HDF5 library development - with developers and other interested parties. - -To subscribe to a list, send mail to "-subscribe@hdfgroup.org". -where is the name of the list. -E.g., mail hdf5-subscribe@hdfgroup.org - +HDF5 version 1.9.27 currently under development +==> README.txt <== Messages to be sent to the list should be sent to "@hdfgroup.org". Periodic code snapshots are provided at the following URL: diff --git a/bin/release b/bin/release index 921e125..b41c5d4 100755 --- a/bin/release +++ b/bin/release @@ -14,42 +14,10 @@ # access to either file, you may request a copy from help@hdfgroup.org. # -# Make a release of hdf5. The command-line switches are: +# Make a release of hdf5. # -# -d DIR The name of the directory where the releas(es) should be -# placed. By default, the directory is ./releases -# -# --nocheck Ignore errors in MANIFEST file. -# -# --private Make a private release with today's date in version information. -# -# The other command-line options are the names of the programs to use -# for compressing the resulting tar archive (if none are given then -# `tar md5' is assumed): -# -# tar -- use tar and don't do any compressing. -# compress -- use compress and append `.Z' to the output name. -# gzip -- use gzip with `-9' and append `.gz' to the output name. -# bzip2 -- use bzip2 with `-9' and append `.bz2' to the output name. -# md5 -- produce a md5 checksum in addition to the archive. -# doc -- produce the latest doc tree in addition to the archive. -# -# Examples: -# -# $ release -# releases/hdf5-1.0.38.tar -# releases/hdf5-1.0.38.tar.md5 -# -# $ release gzip -# releases/hdf5-1.0.38.tar.gz -# -# $ release -d /tmp tar compress gzip bzip2 md5 doc -# /tmp/hdf5-1.0.38.tar -# /tmp/hdf5-1.0.38.tar.Z -# /tmp/hdf5-1.0.38.tar.gz -# /tmp/hdf5-1.0.38.tar.bz2 -# /tmp/hdf5-1.0.38.tar.md5 -# /tmp/hdf5-1.0.38_doc.tar +# Programmer: Robb Matzke +# Creation date: on or before 1998-01-29. # # Modifications # Robb Matzke, 1999-07-16 @@ -59,6 +27,12 @@ # Albert Cheng, 1999-10-26 # Moved the MANIFEST checking to a separate command file so that # it can be invoked individually. +# +# Albert Cheng, 2004-08-14 +# Added the --private option. +# +# James Laird, 2005-09-07 +# Added the md5 method. # Function definitions # @@ -225,10 +199,11 @@ ln -s `pwd` $tmpdir/$HDF5_VERS || exit 1 mv Makefile $tmpdir/Makefile.x 2>/dev/null #might fail cp -p Makefile.dist Makefile -# Update README.txt and release_docs/RELEASE.txt with release information. +# Update README.txt and release_docs/RELEASE.txt with release information in +# line 1. for f in README.txt release_docs/RELEASE.txt; do echo "HDF5 version $VERS released on `date`" >$f.x - tail +2l $f >>$f.x + sed -e 1d $f >>$f.x mv $f.x $f # Make sure new files are of the right access mode chmod 644 $f diff --git a/config/lt_vers.am b/config/lt_vers.am index f202528..72af096 100644 --- a/config/lt_vers.am +++ b/config/lt_vers.am @@ -17,7 +17,7 @@ # Add libtool shared library version numbers to the HDF5 library # See libtool versioning documentation online. LT_VERS_INTERFACE = 6 -LT_VERS_REVISION = 16 +LT_VERS_REVISION = 17 LT_VERS_AGE = 0 ## If the API changes *at all*, increment LT_VERS_INTERFACE and diff --git a/configure b/configure index a3ccc28..bb857f4 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.in Id: configure.in 16138 2008-11-30 13:38:02Z hdftest . +# From configure.in Id: configure.in 16194 2008-12-15 18:39:20Z mamcgree . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for HDF5 1.9.26. +# Generated by GNU Autoconf 2.61 for HDF5 1.9.27. # # Report bugs to . # @@ -724,8 +724,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='HDF5' PACKAGE_TARNAME='hdf5' -PACKAGE_VERSION='1.9.26' -PACKAGE_STRING='HDF5 1.9.26' +PACKAGE_VERSION='1.9.27' +PACKAGE_STRING='HDF5 1.9.27' PACKAGE_BUGREPORT='help@hdfgroup.org' ac_unique_file="src/H5.c" @@ -1501,7 +1501,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures HDF5 1.9.26 to adapt to many kinds of systems. +\`configure' configures HDF5 1.9.27 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1571,7 +1571,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of HDF5 1.9.26:";; + short | recursive ) echo "Configuration of HDF5 1.9.27:";; esac cat <<\_ACEOF @@ -1753,7 +1753,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -HDF5 configure 1.9.26 +HDF5 configure 1.9.27 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1767,7 +1767,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by HDF5 $as_me 1.9.26, which was +It was created by HDF5 $as_me 1.9.27, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -2462,7 +2462,7 @@ fi # Define the identity of the package. PACKAGE='hdf5' - VERSION='1.9.26' + VERSION='1.9.27' cat >>confdefs.h <<_ACEOF @@ -51882,7 +51882,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by HDF5 $as_me 1.9.26, which was +This file was extended by HDF5 $as_me 1.9.27, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -51935,7 +51935,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -HDF5 config.status 1.9.26 +HDF5 config.status 1.9.27 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.in b/configure.in index df6a8cc..ff9ded5 100644 --- a/configure.in +++ b/configure.in @@ -26,7 +26,7 @@ dnl dnl NOTE: Don't forget to change the version number here when we do a dnl release!!! dnl -AC_INIT([HDF5], [1.9.26], [help@hdfgroup.org]) +AC_INIT([HDF5], [1.9.27], [help@hdfgroup.org]) AC_CONFIG_SRCDIR([src/H5.c]) AM_CONFIG_HEADER([src/H5config.h]) diff --git a/fortran/src/H5Lff.f90 b/fortran/src/H5Lff.f90 index cad00b6..966e9f3 100644 --- a/fortran/src/H5Lff.f90 +++ b/fortran/src/H5Lff.f90 @@ -952,7 +952,7 @@ CONTAINS !DEC$ IF DEFINED(HDF5F90_WINDOWS) !DEC$ ATTRIBUTES C,reference,decorate,alias:'H5LGET_NAME_BY_IDX_C'::h5lget_name_by_idx_c !DEC$ ENDIF - !DEC$ATTRIBUTES reference :: group_name + !DEC$ATTRIBUTES reference :: group_name, name INTEGER(HID_T), INTENT(IN) :: loc_id CHARACTER(LEN=*), INTENT(IN) :: group_name INTEGER(SIZE_T) :: group_namelen diff --git a/fortran/test/tH5G_1_8.f90 b/fortran/test/tH5G_1_8.f90 index 0caec01..42dd617 100644 --- a/fortran/test/tH5G_1_8.f90 +++ b/fortran/test/tH5G_1_8.f90 @@ -39,7 +39,6 @@ SUBROUTINE group_test(cleanup, total_error) ! /* Check for FAPL to USE */ my_fapl = fapl2 - ret_total_error = 0 CALL mklinks(fapl2, ret_total_error) CALL write_test_status(ret_total_error, & @@ -613,7 +612,6 @@ SUBROUTINE group_info(cleanup, fapl, total_error) IF(cleanup) CALL h5_cleanup_f(prefix, H5P_DEFAULT_F, error) CALL check("h5_cleanup_f", error, total_error) - END SUBROUTINE timestamps !/*------------------------------------------------------------------------- @@ -1485,6 +1483,7 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, & INTEGER :: i INTEGER :: tmp1, tmp2 + INTEGER(HID_T) :: crp_list ! WRITE(*,*) "link creation property lists (w/new group format)" @@ -1541,9 +1540,11 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, & !/* Create a dataspace */ CALL h5screate_simple_f(2, dims, space_id, error) CALL check("test_lcpl.h5screate_simple_f",error,total_error) + CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error) + CALL h5pset_chunk_f(crp_list, 2, dims, error) ! /* Create a dataset using the default LCPL */ - CALL h5dcreate_f(file_id, "/dataset", H5T_NATIVE_INTEGER, space_id, dset_id, error) + CALL h5dcreate_f(file_id, "/dataset", H5T_NATIVE_INTEGER, space_id, dset_id, error, crp_list) CALL check("test_lcpl.h5dcreate_f", error, total_error) CALL h5dclose_f(dset_id, error) CALL check("test_lcpl.h5dclose_f", error, total_error) diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 2ecb540..bfb30f8 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -1,4 +1,4 @@ -HDF5 version 1.9.26 currently under development +HDF5 version 1.9.27 currently under development ================================================================================ diff --git a/src/H5Dint.c b/src/H5Dint.c index 9ccd7e0..37a4701 100644 --- a/src/H5Dint.c +++ b/src/H5Dint.c @@ -2284,6 +2284,20 @@ H5D_set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id) if(0 == (H5F_INTENT(dset->oloc.file) & H5F_ACC_RDWR)) HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "no write intent on file") + /* Check if we are allowed to modify the space; only datasets with chunked and external storage are allowed to be modified */ + if( H5D_COMPACT == dset->shared->layout.type ) + { + HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "dataset has compact storage") + } + if( H5D_CONTIGUOUS == dset->shared->layout.type ) + { + if( 0 == dset->shared->dcpl_cache.efl.nused) + { + HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "dataset has contiguous storage") + } + + } + /* Check if the filters in the DCPL will need to encode, and if so, can they? */ if(H5D_check_filters(dset) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't apply filters") diff --git a/src/H5public.h b/src/H5public.h index 65dd29c..e926473 100644 --- a/src/H5public.h +++ b/src/H5public.h @@ -71,10 +71,10 @@ extern "C" { /* Version numbers */ #define H5_VERS_MAJOR 1 /* For major interface/format changes */ #define H5_VERS_MINOR 9 /* For minor interface/format changes */ -#define H5_VERS_RELEASE 26 /* For tweaks, bug-fixes, or development */ +#define H5_VERS_RELEASE 27 /* For tweaks, bug-fixes, or development */ #define H5_VERS_SUBRELEASE "" /* For pre-releases like snap0 */ /* Empty string for real releases. */ -#define H5_VERS_INFO "HDF5 library version: 1.9.26" /* Full version string */ +#define H5_VERS_INFO "HDF5 library version: 1.9.27" /* Full version string */ #define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \ H5_VERS_RELEASE) diff --git a/src/Makefile.in b/src/Makefile.in index 4fde49e..8d71154 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -80,11 +80,11 @@ LTLIBRARIES = $(lib_LTLIBRARIES) libhdf5_la_LIBADD = am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \ H5timer.lo H5trace.lo H5A.lo H5Abtree2.lo H5Adense.lo \ - H5Adeprec.lo H5Aint.lo H5Atest.lo H5AC.lo H5B.lo H5Bcache.lo H5Bdbg.lo \ - H5B2.lo H5B2cache.lo H5B2dbg.lo H5B2int.lo H5B2stat.lo \ - H5B2test.lo H5C.lo H5CS.lo H5D.lo H5Dchunk.lo H5Dcompact.lo \ - H5Dcontig.lo H5Ddbg.lo H5Ddeprec.lo H5Defl.lo H5Dfill.lo \ - H5Dint.lo H5Dio.lo H5Dbtree.lo H5Dmpio.lo H5Doh.lo \ + H5Adeprec.lo H5Aint.lo H5Atest.lo H5AC.lo H5B.lo H5Bcache.lo \ + H5Bdbg.lo H5B2.lo H5B2cache.lo H5B2dbg.lo H5B2int.lo \ + H5B2stat.lo H5B2test.lo H5C.lo H5CS.lo H5D.lo H5Dbtree.lo \ + H5Dchunk.lo H5Dcompact.lo H5Dcontig.lo H5Ddbg.lo H5Ddeprec.lo \ + H5Defl.lo H5Dfill.lo H5Dint.lo H5Dio.lo H5Dmpio.lo H5Doh.lo \ H5Dscatgath.lo H5Dselect.lo H5Dtest.lo H5E.lo H5Edeprec.lo \ H5Eint.lo H5EA.lo H5EAcache.lo H5EAdbg.lo H5EAdblkpage.lo \ H5EAdblock.lo H5EAhdr.lo H5EAiblock.lo H5EAint.lo \ @@ -408,7 +408,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog # Add libtool shared library version numbers to the HDF5 library # See libtool versioning documentation online. LT_VERS_INTERFACE = 6 -LT_VERS_REVISION = 16 +LT_VERS_REVISION = 17 LT_VERS_AGE = 0 H5detect_CFLAGS = -g @@ -429,10 +429,10 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \ H5AC.c H5B.c H5Bcache.c H5Bdbg.c \ H5B2.c H5B2cache.c H5B2dbg.c H5B2int.c H5B2stat.c H5B2test.c \ H5C.c H5CS.c \ - H5D.c H5Dchunk.c H5Dcompact.c H5Dcontig.c H5Ddbg.c \ + H5D.c H5Dbtree.c H5Dchunk.c H5Dcompact.c H5Dcontig.c H5Ddbg.c \ H5Ddeprec.c H5Defl.c H5Dfill.c H5Dint.c \ H5Dio.c \ - H5Dbtree.c H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \ + H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \ H5E.c H5Edeprec.c H5Eint.c \ H5EA.c H5EAcache.c H5EAdbg.c H5EAdblkpage.c H5EAdblock.c H5EAhdr.c \ H5EAiblock.c H5EAint.c H5EAsblock.c H5EAstat.c H5EAtest.c \ @@ -635,6 +635,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5C.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5CS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5D.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dbtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dchunk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dcompact.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dcontig.Plo@am__quote@ @@ -644,7 +645,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dfill.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dbtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dmpio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Doh.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dscatgath.Plo@am__quote@ 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,44 +247,68 @@ int main( void ) PASSED(); - puts("All set_extent tests passed."); return 0; error: - - - - H5_FAILED(); - return 1; + return -1; } +/*------------------------------------------------------------------------- +* test with different storage layouts +*------------------------------------------------------------------------- +*/ +static int do_layouts( void ) +{ + + TESTING("storage layout use"); + + if (test_layouts( H5D_COMPACT ) < 0) + { + goto error; + } + + if (test_layouts( H5D_CONTIGUOUS ) < 0) + { + goto error; + } + + PASSED(); + + return 0; + +error: + return -1; +} /*------------------------------------------------------------------------- - * test + * test usage with a 1D rank *------------------------------------------------------------------------- */ -static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_k) +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; - 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}; - int buf_o[DIM0][DIM1]; - int buf_s[DIMS0][DIMS1]; - int buf_e[DIME0][DIME1]; - int buf_r[DIM0][DIM1]; - int i, j; + 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; @@ -189,13 +321,11 @@ 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++ ) - { - buf_o[i][j] = 2; - } + + buf_o[i] = 2; } /* create a file creation property list */ @@ -214,7 +344,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_NAME1, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) { goto error; } @@ -226,7 +356,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(RANK1, dims_o, maxdims)) < 0) { goto error; } @@ -236,7 +366,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, RANK1, dims_c) < 0) { goto error; } @@ -246,6 +376,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 +391,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,17 +399,8 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ } } - - /*------------------------------------------------------------------------- - * create and write one dataset - * data is - * - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 2 - * + * create, write dataset *------------------------------------------------------------------------- */ @@ -295,12 +421,11 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ 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"); + + printf("%d ", buf_o[i]); + } + printf("\n"); #endif @@ -312,16 +437,6 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ /*------------------------------------------------------------------------- * set new dimensions for the array; expand it - * data is now, extended space was initialized with fill value or default value - * - * 2 2 2 2 1 1 1 - * 2 2 2 2 1 1 1 - * 2 2 2 2 1 1 1 - * 2 2 2 2 1 1 1 - * 1 1 1 1 1 1 1 - * 1 1 1 1 1 1 1 - * 1 1 1 1 1 1 1 - * *------------------------------------------------------------------------- */ @@ -350,7 +465,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 < RANK1; i++ ) { if (dims_r[i] != dims_e[i]) goto error; @@ -366,12 +481,11 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ 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"); + + printf("%d ", buf_e[i]); + } + printf("\n"); #endif @@ -380,94 +494,28 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ /* 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 ) { - if (i >= DIM0 || j >= DIM1) + if(buf_e[i] != comp_value) { - 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; - } + printf("buf_e[%d] = %d\n", i, buf_e[i]); + printf("value = %d\n", comp_value); + goto error; } - else - { - if(buf_e[i][j] != buf_o[i][j]) - goto error; - } - } - } - - - /*------------------------------------------------------------------------- - * 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 - * - *------------------------------------------------------------------------- - */ - - 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++ ) + } + else { - printf("%d ", buf_e[i][j]); + if(buf_e[i] != buf_o[i]) + goto error; } - printf("\n"); } -#endif - + /*------------------------------------------------------------------------- - * set new dimensions for the array; shrink it - * data is now - * - * 2 2 - * 2 2 + * shrink * *------------------------------------------------------------------------- */ @@ -496,7 +544,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 < RANK1; i++ ) { if (dims_r[i] != dims_s[i]) goto error; @@ -517,7 +565,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_NAME1, H5F_ACC_RDWR, H5P_DEFAULT ))<0) { goto error; } @@ -547,12 +595,11 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ 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"); + + printf("%d ", buf_s[i]); } + printf("\n"); + #endif @@ -561,27 +608,18 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ /* 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] != buf_o[i] ) { - if ( buf_s[i][j] != buf_o[i][j] ) - { - 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; - } - } + printf("buf_s[%d] = %d\n", i, buf_s[i]); + printf("buf_o[%d] = %d\n", i, buf_o[i]); + 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 - * + * expand it back to original size *------------------------------------------------------------------------- */ @@ -602,20 +640,21 @@ 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 < RANK1; 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; @@ -624,77 +663,1761 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ 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 usage with a 2D rank + *------------------------------------------------------------------------- + */ + +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=-1; + hid_t did=-1; + hid_t sid=-1; + hid_t dcpl=-1; + hid_t fcpl; + 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]; + int buf_r[DIM0][DIM1]; + int i, j; + 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++ ) + { + buf_o[i][j] = 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_NAME2, 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(RANK2, 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, RANK2, 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; + } + } + + /*------------------------------------------------------------------------- + * 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 + * 2 2 2 2 + * 2 2 2 2 + * + *------------------------------------------------------------------------- + */ + + /* 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_DEBUG2) + 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; + } + + /*------------------------------------------------------------------------- + * set new dimensions for the array; expand it + * data is now, extended space was initialized with fill value or default value + * + * 2 2 2 2 1 1 1 + * 2 2 2 2 1 1 1 + * 2 2 2 2 1 1 1 + * 2 2 2 2 1 1 1 + * 1 1 1 1 1 1 1 + * 1 1 1 1 1 1 1 + * 1 1 1 1 1 1 1 + * + *------------------------------------------------------------------------- + */ + + /* 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_DEBUG2) + 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; + } + } + } + + + + + /*------------------------------------------------------------------------- + * + * 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 + * + * 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; + } + + + + /* 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_NAME2, 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_DEBUG2) + 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; + } + } + } + + + /*------------------------------------------------------------------------- + * 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 + * + *------------------------------------------------------------------------- + */ + + /* 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 < 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_DEBUG2) + 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 + + + + /* compare the read array with the original array */ + for (i = 0; i < (int)dims_r[0]; i++ ) + { + for (j = 0; j < (int)dims_r[1]; j++ ) + { + if (i >= DIMS0 || j >= DIMS1) + { + if(buf_r[i][j] != comp_value) + { + printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); + printf("value = %d\n", comp_value); + goto error; + } + } + else + { + if(buf_r[i][j] != buf_o[i][j]) + goto error; + } + } + } + + /*------------------------------------------------------------------------- + * 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 + *------------------------------------------------------------------------- + */ + + 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; + } + 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 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(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 , "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_DEBUG3) + printf("\n"); + for (i = 0; i < (int)dims_o[0]; i++ ) + { + for (j = 0; j < (int)dims_o[1]; 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 + + + + 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 < 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 + + + + + /* 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 + *------------------------------------------------------------------------- + */ + + /* 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; + } + + + + /* 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; + } + + + + } + + + /*------------------------------------------------------------------------- + * read + *------------------------------------------------------------------------- + */ + + /* read */ + if (H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_s ) < 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_s[i][j][k]); + } + printf("[%d] ", j); + } + printf("\n"); + + } + 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++ ) + { + for( k = 0; k < (int)dims_r[2]; k++ ) + { + 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 + *------------------------------------------------------------------------- + */ + + /* 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 < RANK3; 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_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_r[i][j][k]); + } + printf("[%d] ", j); + } + printf("\n"); + + } + printf("\n"); +#endif + + + + /* compare the read array with the original 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 >= DIMS0 || j >= DIMS1 || k >= DIMS2 ) + { + 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][k] != buf_o[i][j][k]) + goto error; + } + } + } + } + + + /*------------------------------------------------------------------------- + * shrink to 0 + * + *------------------------------------------------------------------------- + */ + + dims_s[0] = 0; + dims_s[1] = 0; + dims_s[2] = 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(RANK3, 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; + dims_o[ 2 ] = 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 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_r[i][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 + * + *------------------------------------------------------------------------- + */ - /* compare the read array with the original array */ + /* 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++ ) + 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) { - if (i >= DIMS0 || j >= DIMS1) - { - if(buf_r[i][j] != comp_value) - { - printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); - printf("value = %d\n", comp_value); - goto error; - } - } - else - { - if(buf_r[i][j] != buf_o[i][j]) - goto error; - } + goto error; } - } - - + + } H5E_END_TRY; + + + /*------------------------------------------------------------------------- - * close dataset and space + * close property list *------------------------------------------------------------------------- */ - if (H5Dclose(did) < 0) + + if (H5Pclose(dcpl) < 0) { goto error; } - if (H5Sclose(sid) < 0) + + 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 and write one dataset - * data is - * - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 2 - * 2 2 2 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(RANK, dims_o, maxdims)) < 0) + 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 , "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,7 +2429,7 @@ 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_DEBUG4) printf("\n"); for (i = 0; i < (int)dims_o[0]; i++ ) { @@ -724,23 +2447,25 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } - - - /*------------------------------------------------------------------------- - * set new dimensions for the array; shrink it - * data is now - * - * 2 2 - * 2 2 - * + + /*------------------------------------------------------------------------- + * negative test + * try to extend dimension *------------------------------------------------------------------------- */ - - /* set new dimensions for the array. */ - if (H5Dset_extent(did , dims_s) < 0) + + H5E_BEGIN_TRY { - goto error; - } + + if (H5Dset_extent(did , dims_e) == SUCCEED) + { + goto error; + } + + } H5E_END_TRY; + + + /* get the space */ if ((sid = H5Dget_space(did)) < 0) @@ -759,92 +2484,75 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ goto error; } + /* check dimensions */ - for( i = 0; i < RANK; i++ ) + for( i = 0; i < RANK2; i++ ) { - if (dims_r[i] != dims_s[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_s ) < 0) - { + 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_DEBUG4) 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("%d ", buf_r[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_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; - } - } - } - + /*------------------------------------------------------------------------- - * 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 - * + * negative test + * try to shrink dimension *------------------------------------------------------------------------- */ + + H5E_BEGIN_TRY + { + + if (H5Dset_extent(did , dims_s) == SUCCEED) + { + goto error; + } + + } H5E_END_TRY; + - /* set new dimensions for the array */ - if (H5Dset_extent(did, dims_o) < 0) + /* get the space */ + if ((sid = H5Dget_space(did)) < 0) { goto error; } - /* get the space */ - if ((sid = H5Dget_space(did)) < 0) + /* get dimensions */ + if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) { goto error; } - /* get dimensions. */ - if (H5Sget_simple_extent_dims(sid, dims_r, NULL) < 0) + 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; } - + /*------------------------------------------------------------------------- * read @@ -852,10 +2560,12 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ */ /* read */ - if (H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf_r) < 0) + 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_DEBUG4) printf("\n"); for (i = 0; i < (int)dims_r[0]; i++ ) { @@ -868,32 +2578,9 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ #endif - - /* compare the read array with the original array */ - for (i = 0; i < (int)dims_r[0]; i++ ) - { - for (j = 0; j < (int)dims_r[1]; j++ ) - { - if (i >= DIMS0 || j >= DIMS1) - { - if(buf_r[i][j] != comp_value) - { - printf("buf_r[%d][%d] = %d\n", i, j, buf_r[i][j]); - printf("value = %d\n", comp_value); - goto error; - } - } - else - { - if(buf_r[i][j] != buf_o[i][j]) - goto error; - } - } - } - - + /*------------------------------------------------------------------------- - * close dataset and space + * close *------------------------------------------------------------------------- */ @@ -901,54 +2588,7 @@ static int test( hbool_t do_compress, hbool_t do_fill_value, hbool_t set_istore_ { goto error; } - if (H5Sclose(sid) < 0) - { - goto error; - } - - - /*------------------------------------------------------------------------- - * test a dataset with non initialized chunks - *------------------------------------------------------------------------- - */ - - if ((sid = H5Screate_simple(RANK, 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; - } - if (H5Sclose(sid) < 0) - { - goto error; - } - - - - - /*------------------------------------------------------------------------- - * close property list - *------------------------------------------------------------------------- - */ - - if (H5Pclose(dcpl) < 0) { goto error; @@ -971,7 +2611,6 @@ error: H5Dclose( did ); H5Sclose( sid ); H5Pclose( dcpl ); - H5Pclose( fcpl ); H5Fclose( fid ); } H5E_END_TRY; return -1; diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h index 0a02516..34dbac1 100644 --- a/vms/src/h5pubconf.h +++ b/vms/src/h5pubconf.h @@ -391,13 +391,13 @@ #define H5_PACKAGE_NAME "HDF5" /* Define to the full name and version of this package. */ -#define H5_PACKAGE_STRING "HDF5 1.9.26" +#define H5_PACKAGE_STRING "HDF5 1.9.27" /* Define to the one symbol short name of this package. */ #define H5_PACKAGE_TARNAME "hdf5" /* Define to the version of this package. */ -#define H5_PACKAGE_VERSION "1.9.26" +#define H5_PACKAGE_VERSION "1.9.27" /* Width for printf() for type `long long' or `__int64', use `ll' */ #define H5_PRINTF_LL_WIDTH "ll" @@ -551,7 +551,7 @@ #define H5_ULLONG_TO_LDOUBLE_PRECISION 1 /* Version number of package */ -#define H5_VERSION "1.9.26" +#define H5_VERSION "1.9.27" /* Define if vsnprintf() returns the correct value for formatted strings that don't fit into size allowed */ diff --git a/windows/src/H5pubconf.h b/windows/src/H5pubconf.h index 7712e7c..9956cbc 100755 --- a/windows/src/H5pubconf.h +++ b/windows/src/H5pubconf.h @@ -475,13 +475,13 @@ #define H5_PACKAGE_NAME "HDF5" /* Define to the full name and version of this package. */ -#define H5_PACKAGE_STRING "HDF5 1.9.26" +#define H5_PACKAGE_STRING "HDF5 1.9.27" /* Define to the one symbol short name of this package. */ #define H5_PACKAGE_TARNAME "hdf5" /* Define to the version of this package. */ -#define H5_PACKAGE_VERSION "1.9.26" +#define H5_PACKAGE_VERSION "1.9.27" /* Width for printf() for type `long long' or `__int64', use `ll' */ #define H5_PRINTF_LL_WIDTH "I64" @@ -638,7 +638,7 @@ /* #undef H5_USING_MEMCHECKER */ /* Version number of package */ -#define H5_VERSION "1.9.26" +#define H5_VERSION "1.9.27" /* Define if vsnprintf() returns the correct value for formatted strings that don't fit into size allowed */ -- cgit v0.12