summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-01-08 18:37:24 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-01-08 18:37:24 (GMT)
commit2ac77da499ca7e4dc5df553f7bf7d2ac279eb2de (patch)
treed30f170a49ca3186bc8beddac7bf3523dfdb1ad3
parent596f9b43271b088bf4f13783024f0a75ac05011c (diff)
downloadhdf5-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
-rw-r--r--README.txt32
-rwxr-xr-xbin/release49
-rw-r--r--config/lt_vers.am2
-rwxr-xr-xconfigure22
-rw-r--r--configure.in2
-rw-r--r--fortran/src/H5Lff.f902
-rw-r--r--fortran/test/tH5G_1_8.f907
-rw-r--r--release_docs/RELEASE.txt2
-rw-r--r--src/H5Dint.c14
-rw-r--r--src/H5public.h4
-rw-r--r--src/Makefile.in18
-rw-r--r--test/set_extent.c2003
-rw-r--r--vms/src/h5pubconf.h6
-rwxr-xr-xwindows/src/H5pubconf.h6
14 files changed, 1885 insertions, 284 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 "<list>-subscribe@hdfgroup.org".
-where <list> 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 "<list>@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 <help@hdfgroup.org>.
#
@@ -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 <bug-autoconf@gnu.org>."
_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,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;
+
+}
+
+
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 */