diff options
author | Robb Matzke <matzke@llnl.gov> | 1998-11-25 14:58:22 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1998-11-25 14:58:22 (GMT) |
commit | 4354606d1e86a514958f20b21163c19c30dc26f5 (patch) | |
tree | db93fa4fa072524becbc7a8e6221a6c64fdbfa3f /test | |
parent | 49ca76e303a15bfb6a46d7b68086ca974044c5c1 (diff) | |
download | hdf5-4354606d1e86a514958f20b21163c19c30dc26f5.zip hdf5-4354606d1e86a514958f20b21163c19c30dc26f5.tar.gz hdf5-4354606d1e86a514958f20b21163c19c30dc26f5.tar.bz2 |
[svn-r949] Changes since 19981124
----------------------
./src/H5T.c
Fixed a typo in the registration of the `unsigned char' to
`unsigned long long' type conversion that caused it to not be
registered, falling back to software whenever that conversion
path was taken.
./MANIFEST
./test/Makefile.in
./test/testhdf5.c
./test/testhdf5.h
./test/theap.c [REMOVED]
./test/lheap.c [NEW]
./test/tohdr.c [REMOVED]
./test/ohdr.c [NEW]
./test/tstab.c [REMOVED]
./test/stab.c [NEW]
Removed the `t' from the front of these names and made each
test a stand-alone program following the format of most of the
other tests.
./test/big.c
Uses libh5test.a but always sets the low-level driver to 1GB
file family.
The `#if' near the top to set the data space to 8GB has been
simplified now that `long_long' is always defined and the
error message is improved when `long_long' isn't wide enough.
Cleanup code was added to the error handling.
./test/gheap.c
./test/istore.c
Uses libh5test.a. Added error cleanup code.
./test/dtypes.c
./test/h5test.c
Added 68 new tests that check hardware and software
conversions between `long long' and `unsigned long long' and
the other integer types. The tests only run on machines where
sizeof(long_long)!=sizeof(long). We test a total of 180
different integer conversions, half in hardware and half in
software.
Cut down the number of times each test is run from 5 to 1 so
it doesn't take so long. If you want to run more times
there's a constant that can be changed at the top of the file.
./test/extend.c
Removed unused variable.
./test/h5test.c
./test/h5test.h
./test/external.c
./test/fillval.c
The h5_cleanup() returns true/false so it can be used in an `if'
statement to clean up additional files.
./doc/html/Environment.html
Indented. Added HDF5_PREFIX and HDF5_DRIVER descriptions.
./src/H5P.c
Changed the trace type for the second argument from `Iu' to
`x' since it's an output parameter.
./INSTALL
Added a warning that the GNU zlib that comes with the latest
version of HDF4 is too old to use with HDF5 and must be
renamed so configure doesn't see it when `--enable-hdf4' is
used.
Diffstat (limited to 'test')
-rw-r--r-- | test/.distdep | 580 | ||||
-rw-r--r-- | test/Makefile.in | 47 | ||||
-rw-r--r-- | test/big.c | 200 | ||||
-rw-r--r-- | test/dtypes.c | 570 | ||||
-rw-r--r-- | test/extend.c | 1 | ||||
-rw-r--r-- | test/external.c | 5 | ||||
-rw-r--r-- | test/fillval.c | 3 | ||||
-rw-r--r-- | test/gheap.c | 334 | ||||
-rw-r--r-- | test/h5test.c | 62 | ||||
-rw-r--r-- | test/h5test.h | 3 | ||||
-rw-r--r-- | test/istore.c | 313 | ||||
-rw-r--r-- | test/lheap.c | 131 | ||||
-rw-r--r-- | test/ohdr.c | 278 | ||||
-rw-r--r-- | test/stab.c | 199 | ||||
-rw-r--r-- | test/testhdf5.c | 3 | ||||
-rw-r--r-- | test/testhdf5.h | 6 | ||||
-rw-r--r-- | test/theap.c | 113 | ||||
-rw-r--r-- | test/tohdr.c | 197 | ||||
-rw-r--r-- | test/tstab.c | 251 |
19 files changed, 1812 insertions, 1484 deletions
diff --git a/test/.distdep b/test/.distdep index b550592..503d7a2 100644 --- a/test/.distdep +++ b/test/.distdep @@ -30,26 +30,18 @@ h5test.o: \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ ../src/H5Gprivate.h -testhdf5.o: \ - testhdf5.c \ - testhdf5.h \ - ../src/H5private.h \ - ../src/H5public.h \ - ../src/H5config.h -tattr.o: \ - tattr.c \ - testhdf5.h \ - ../src/H5private.h \ +big.o: \ + big.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ + ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -59,93 +51,85 @@ tattr.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h -tfile.o: \ - tfile.c \ - testhdf5.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +bittests.o: \ + bittests.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/H5Bprivate.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Pprivate.h -theap.o: \ - theap.c \ - testhdf5.h \ - ../src/H5private.h \ - ../src/H5public.h \ - ../src/H5config.h \ - ../src/H5Eprivate.h \ ../src/H5Epublic.h \ - ../src/H5Ipublic.h \ - ../src/H5Iprivate.h \ - ../src/H5ACprivate.h \ - ../src/H5ACpublic.h \ - ../src/H5Fprivate.h \ ../src/H5Fpublic.h \ - ../src/H5Dpublic.h \ - ../src/H5Pprivate.h \ + ../src/H5Gpublic.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ ../src/H5Ppublic.h \ - ../src/H5Zpublic.h -tmeta.o: \ - tmeta.c \ - testhdf5.h \ - ../src/H5private.h \ - ../src/H5public.h \ - ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ - ../src/H5Ipublic.h -tohdr.o: \ - tohdr.c \ - testhdf5.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +chunk.o: \ + chunk.c \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/H5Iprivate.h \ - ../src/H5ACprivate.h \ + ../src/H5Apublic.h \ ../src/H5ACpublic.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ + ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Pprivate.h \ - ../src/H5Ppublic.h \ - ../src/H5Zpublic.h \ - ../src/H5Gprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ - ../src/H5Bprivate.h \ - ../src/H5Bpublic.h \ - ../src/H5Oprivate.h \ - ../src/H5Opublic.h \ - ../src/H5HGprivate.h \ ../src/H5HGpublic.h \ - ../src/H5Tprivate.h \ - ../src/H5Tpublic.h \ - ../src/H5Sprivate.h \ - ../src/H5Spublic.h -trefer.o: \ - trefer.c \ - testhdf5.h \ - ../src/H5private.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h +cmpd_dset.o: \ + cmpd_dset.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ + ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -155,21 +139,29 @@ trefer.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h -tselect.o: \ - tselect.c \ - testhdf5.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +dsets.o: \ + dsets.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ + ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -179,66 +171,83 @@ tselect.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h -tstab.o: \ - tstab.c \ - testhdf5.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +dtypes.o: \ + dtypes.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/H5Iprivate.h \ - ../src/H5ACprivate.h \ + ../src/H5Apublic.h \ ../src/H5ACpublic.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ + ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Pprivate.h \ - ../src/H5Ppublic.h \ - ../src/H5Zpublic.h \ - ../src/H5Gprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ - ../src/H5Bprivate.h \ - ../src/H5Bpublic.h \ - ../src/H5Oprivate.h \ - ../src/H5Opublic.h \ - ../src/H5HGprivate.h \ ../src/H5HGpublic.h \ - ../src/H5Tprivate.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ ../src/H5Tpublic.h \ - ../src/H5Sprivate.h \ - ../src/H5Spublic.h -th5s.o: \ - th5s.c \ - testhdf5.h \ ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +extend.o: \ + extend.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/H5Bprivate.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Sprivate.h \ - ../src/H5Spublic.h \ - ../src/H5Gprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ - ../src/H5Oprivate.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ ../src/H5HGprivate.h \ - ../src/H5HGpublic.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ - ../src/H5Tpublic.h \ - ../src/H5Zprivate.h \ - ../src/H5Zpublic.h \ - ../src/H5Pprivate.h -dtypes.o: \ - dtypes.c \ + ../src/H5Gprivate.h +external.o: \ + external.c \ h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ @@ -269,42 +278,40 @@ dtypes.o: \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ ../src/H5Gprivate.h -hyperslab.o: \ - hyperslab.c \ - ../src/H5private.h \ - ../src/H5public.h \ - ../src/H5config.h -istore.o: \ - istore.c \ - ../src/H5private.h \ +fillval.o: \ + fillval.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Dprivate.h \ - ../src/H5Dpublic.h \ ../src/H5Ipublic.h \ - ../src/H5Fprivate.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ + ../src/H5Bpublic.h \ + ../src/H5Dpublic.h \ + ../src/H5Epublic.h \ ../src/H5Fpublic.h \ - ../src/H5Gprivate.h \ ../src/H5Gpublic.h \ - ../src/H5Bprivate.h \ - ../src/H5Bpublic.h \ - ../src/H5Oprivate.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ ../src/H5HGprivate.h \ - ../src/H5HGpublic.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ - ../src/H5Tpublic.h \ - ../src/H5Sprivate.h \ - ../src/H5Spublic.h \ - ../src/H5Zprivate.h \ - ../src/H5Zpublic.h \ - ../src/H5Iprivate.h \ - ../src/H5Pprivate.h \ - ../src/H5Ppublic.h \ - ../src/H5MMprivate.h \ - ../src/H5MMpublic.h -dsets.o: \ - dsets.c \ + ../src/H5Gprivate.h +flush1.o: \ + flush1.c \ h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ @@ -335,8 +342,8 @@ dsets.o: \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ ../src/H5Gprivate.h -cmpd_dset.o: \ - cmpd_dset.c \ +flush2.o: \ + flush2.c \ h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ @@ -367,8 +374,8 @@ cmpd_dset.o: \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ ../src/H5Gprivate.h -extend.o: \ - extend.c \ +gheap.o: \ + gheap.c \ h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ @@ -398,8 +405,15 @@ extend.o: \ ../src/H5Fprivate.h \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ - ../src/H5Gprivate.h - + ../src/H5Gprivate.h \ + ../src/H5Bprivate.h \ + ../src/H5Eprivate.h \ + ../src/H5Iprivate.h +hyperslab.o: \ + hyperslab.c \ + ../src/H5private.h \ + ../src/H5public.h \ + ../src/H5config.h iopipe.o: \ iopipe.c \ ../src/hdf5.h \ @@ -424,25 +438,47 @@ iopipe.o: \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ ../src/H5Tpublic.h -gheap.o: \ - gheap.c \ - ../src/H5private.h \ +istore.o: \ + istore.c \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h \ ../src/H5Ipublic.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ + ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Gprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ - ../src/H5Bprivate.h \ - ../src/H5Bpublic.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ ../src/H5HGprivate.h \ - ../src/H5HGpublic.h -shtype.o: \ - shtype.c \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h \ + ../src/H5Bprivate.h \ + ../src/H5Dprivate.h \ + ../src/H5Oprivate.h \ + ../src/H5Sprivate.h \ + ../src/H5Zprivate.h \ + ../src/H5Iprivate.h +lheap.o: \ + lheap.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -464,9 +500,17 @@ shtype.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h -big.o: \ - big.c \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +links.o: \ + links.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -489,9 +533,16 @@ big.o: \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ ../src/H5Tpublic.h \ - ../src/H5private.h -links.o: \ - links.c \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +mount.o: \ + mount.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -513,9 +564,17 @@ links.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h -chunk.o: \ - chunk.c \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +mtime.o: \ + mtime.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -537,9 +596,16 @@ chunk.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h -bittests.o: \ - bittests.c \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +ohdr.o: \ + ohdr.c \ h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ @@ -569,9 +635,15 @@ bittests.o: \ ../src/H5Fprivate.h \ ../src/H5Rprivate.h \ ../src/H5Tprivate.h \ - ../src/H5Gprivate.h -mtime.o: \ - mtime.c \ + ../src/H5Gprivate.h \ + ../src/H5Bprivate.h \ + ../src/H5Iprivate.h \ + ../src/H5Oprivate.h \ + ../src/H5Sprivate.h \ + ../src/H5Zprivate.h \ + ../src/H5Gpkg.h +overhead.o: \ + overhead.c \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -593,8 +665,7 @@ mtime.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h \ - ../src/H5private.h + ../src/H5Tpublic.h ragged.o: \ ragged.c \ ../src/hdf5.h \ @@ -620,8 +691,8 @@ ragged.o: \ ../src/H5Spublic.h \ ../src/H5Tpublic.h \ ../src/H5private.h -unlink.o: \ - unlink.c \ +space_overflow.o: \ + space_overflow.c \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -642,8 +713,9 @@ unlink.o: \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ ../src/H5RApublic.h -overhead.o: \ - overhead.c \ +stab.o: \ + stab.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -665,18 +737,28 @@ overhead.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h -fillval.o: \ - fillval.c \ - ../src/hdf5.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h +tattr.o: \ + tattr.c \ + testhdf5.h \ + ../src/H5private.h \ ../src/H5public.h \ ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ ../src/H5Ipublic.h \ + ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -686,21 +768,78 @@ fillval.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h \ + ../src/H5Rpublic.h +testhdf5.o: \ + testhdf5.c \ + testhdf5.h \ + ../src/H5private.h \ + ../src/H5public.h \ + ../src/H5config.h +tfile.o: \ + tfile.c \ + testhdf5.h \ + ../src/H5private.h \ + ../src/H5public.h \ + ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Ipublic.h \ + ../src/H5Bprivate.h \ + ../src/H5Bpublic.h \ + ../src/H5Fprivate.h \ + ../src/H5Fpublic.h \ + ../src/H5Dpublic.h \ + ../src/H5Pprivate.h +th5s.o: \ + th5s.c \ + testhdf5.h \ + ../src/H5private.h \ + ../src/H5public.h \ + ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Ipublic.h \ + ../src/H5Bprivate.h \ + ../src/H5Bpublic.h \ + ../src/H5Fprivate.h \ + ../src/H5Fpublic.h \ + ../src/H5Dpublic.h \ + ../src/H5Sprivate.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h -mount.o: \ - mount.c \ - ../src/hdf5.h \ + ../src/H5Gprivate.h \ + ../src/H5Gpublic.h \ + ../src/H5Oprivate.h \ + ../src/H5Opublic.h \ + ../src/H5HGprivate.h \ + ../src/H5HGpublic.h \ + ../src/H5Tprivate.h \ + ../src/H5Tpublic.h \ + ../src/H5Zprivate.h \ + ../src/H5Zpublic.h \ + ../src/H5Pprivate.h +tmeta.o: \ + tmeta.c \ + testhdf5.h \ + ../src/H5private.h \ ../src/H5public.h \ ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Ipublic.h +trefer.o: \ + trefer.c \ + testhdf5.h \ + ../src/H5private.h \ + ../src/H5public.h \ + ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ ../src/H5Ipublic.h \ + ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -710,19 +849,21 @@ mount.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h -flush1.o: \ - flush1.c \ - ../src/hdf5.h \ + ../src/H5Rpublic.h +tselect.o: \ + tselect.c \ + testhdf5.h \ + ../src/H5private.h \ ../src/H5public.h \ ../src/H5config.h \ + ../src/H5Eprivate.h \ + ../src/H5Epublic.h \ ../src/H5Ipublic.h \ + ../src/hdf5.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Epublic.h \ ../src/H5Fpublic.h \ ../src/H5Gpublic.h \ ../src/H5HGpublic.h \ @@ -732,12 +873,10 @@ flush1.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h \ - ../src/H5Spublic.h \ - ../src/H5Tpublic.h -flush2.o: \ - flush2.c \ + ../src/H5Rpublic.h +unlink.o: \ + unlink.c \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ @@ -759,4 +898,11 @@ flush2.o: \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ - ../src/H5Tpublic.h + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h diff --git a/test/Makefile.in b/test/Makefile.in index 44218d5..8881e0e 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -13,8 +13,9 @@ LIBS=libh5test.a ../src/libhdf5.a @LIBS@ # These are our main targets. They should be listed in the order to be # executed, generally most specific tests to least specific tests. -TEST_PROGS=testhdf5 gheap hyperslab istore bittests dtypes dsets cmpd_dset \ - extend external links unlink big mtime fillval mount flush1 flush2 +TEST_PROGS=testhdf5 lheap ohdr stab gheap hyperslab istore bittests dtypes \ + dsets cmpd_dset extend external links unlink big mtime fillval mount \ + flush1 flush2 TIMINGS=iopipe chunk ragged overhead # The libh5test.a library provides common support code for the tests. @@ -22,27 +23,31 @@ LIB=libh5test.a LIB_SRC=h5test.c LIB_OBJ=$(LIB_SRC:.c=.o) -# Temporary files +# Temporary files. These files are the ones created by setting the +# HDF5_NOCLEANUP environment variable and running `make test' without +# specifying a file prefix or low-level driver. Changing the file +# prefix or low-level driver with environment variables will influence +# the temporary file name in ways that the makefile is not aware of. MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \ - tfile3.h5 th5s1.h5 theap.h5 tohdr.h5 tstab1.h5 tstab2.h5 \ - extern_1.h5 extern_2.h5 extern_3.h5 extern_1.raw extern_1b.raw \ - extern_2.raw extern_2b.raw extern_3.raw extern_3b.raw \ - extern_4.raw extern_4b.raw iopipe.raw iopipe.h5 gheap0.h5 \ + tfile3.h5 th5s1.h5 lheap.h5 ohdr.h5 stab1.h5 stab2.h5 \ + extern_1.h5 extern_2.h5 extern_3.h5 extern_1a.raw extern_1b.raw \ + extern_2a.raw extern_2b.raw extern_3a.raw extern_3b.raw \ + extern_4a.raw extern_4b.raw iopipe.raw iopipe.h5 gheap0.h5 \ gheap1.h5 gheap2.h5 gheap3.h5 gheap4.h5 links.h5 chunk.h5 \ big.data big[0-9][0-9][0-9][0-9][0-9].h5 dtypes1.h5 dtypes2.h5 \ - tattr.h5 tselect.h5 mtime.h5 ragged.h5 grptime.h5 unlink.h5 \ - overhead.h5 fillval_[0-9].h5 mount_[0-9].h5 trefer.h5 flush.h5 + tattr.h5 tselect.h5 mtime.h5 ragged.h5 unlink.h5 overhead.h5 \ + fillval_[0-9].h5 fillval.raw mount_[0-9].h5 trefer.h5 flush.h5 CLEAN=$(TIMINGS) # Source and object files for programs... The TEST_SRC list contains all the # source files and is used for things like dependencies, archiving, etc. The # other source lists are for the individual tests, the files of which may # overlap with other tests. -TEST_SRC=testhdf5.c tattr.c tfile.c theap.c tmeta.c tohdr.c trefer.c \ - tselect.c tstab.c th5s.c dtypes.c hyperslab.c istore.c dsets.c \ - cmpd_dset.c extend.c external.c iopipe.c gheap.c big.c links.c chunk.c \ - bittests.c mtime.c ragged.c unlink.c overhead.c fillval.c mount.c \ - flush1.c flush2.c +TEST_SRC=big.c bittests.c chunk.c cmpd_dset.c dsets.c dtypes.c extend.c \ + external.c fillval.c flush1.c flush2.c gheap.c h5test.c hyperslab.c \ + iopipe.c istore.c lheap.c links.c mount.c mtime.c ohdr.c overhead.c \ + ragged.c space_overflow.c stab.c tattr.c testhdf5.c tfile.c th5s.c \ + tmeta.c trefer.c tselect.c unlink.c TEST_OBJ=$(TEST_SRC:.c=.o) # Private header files (not to be installed)... @@ -60,10 +65,19 @@ timings _timings: $(TIMINGS) # How to build the tests... They all depend on the test and hdf5 libraries. $(TEST_PROGS): libh5test.a ../src/libhdf5.a -TESTHDF5_OBJ=testhdf5.o tattr.o tfile.o theap.o tmeta.o tohdr.o trefer.o tselect.o tstab.o th5s.o +TESTHDF5_OBJ=testhdf5.o tattr.o tfile.o tmeta.o trefer.o tselect.o th5s.o testhdf5: $(TESTHDF5_OBJ) $(CC) $(CFLAGS) -o $@ $(TESTHDF5_OBJ) $(LDFLAGS) $(LIBS) +lheap: lheap.o + $(CC) $(CFLAGS) -o $@ lheap.o $(LDFLAGS) $(LIBS) + +ohdr: ohdr.o + $(CC) $(CFLAGS) -o $@ ohdr.o $(LDFLAGS) $(LIBS) + +stab: stab.o + $(CC) $(CFLAGS) -o $@ stab.o $(LDFLAGS) $(LIBS) + gheap: gheap.o $(CC) $(CFLAGS) -o $@ gheap.o $(LDFLAGS) $(LIBS) @@ -94,9 +108,6 @@ external: external.o iopipe: iopipe.o $(CC) $(CFLAGS) -o $@ iopipe.o $(LDFLAGS) $(LIBS) -grptime: grptime.o - $(CC) $(CFLAGS) -o $@ grptime.o $(LDFLAGS) $(LIBS) - big: big.o $(CC) $(CFLAGS) -o $@ big.o $(LDFLAGS) $(LIBS) @@ -5,60 +5,50 @@ * Programmer: Robb Matzke <matzke@llnl.gov> * Wednesday, April 8, 1998 */ +#include <h5test.h> -/* See H5private.h for how to include headers */ -#undef NDEBUG -#include <hdf5.h> -#include <H5private.h> /*needed for HDfprintf() and long_long*/ +const char *FILENAME[] = { + "big", + NULL +}; -#define FNAME "big%05d.h5" #define DNAME "big.data" + #define WRT_N 50 #define WRT_SIZE 4*1024 #define FAMILY_SIZE 1024*1024*1024 -#if SIZEOF_LONG_LONG > SIZEOF_LONG -#define GB8LL ((unsigned long_long)8*1024*1024*1024) -#elif SIZEOF___INT64 > SIZEOF_LONG -#define GB8LL ((unsigned __int64)8*1024*1024*1024) -#elif SIZEOF_LONG >= 8 -#define GB8LL ((unsigned long)8*1024*1024*1024) +#if SIZEOF_LONG_LONG >= 8 +# define GB8LL ((unsigned long_long)8*1024*1024*1024) #else -#define GB8LL ((unsigned long)0) /* cannot do the test */ +# define GB8LL ((unsigned long_long)0) /*cannot do the test*/ #endif -static hsize_t -randll (hsize_t limit) -{ - hsize_t acc = rand (); - acc *= rand (); - - return acc % limit; -} - /*------------------------------------------------------------------------- - * Function: display_error_cb + * Function: randll * - * Purpose: Displays the error stack after printing "*FAILED*". + * Purpose: Create a random long_long value. * - * Return: Success: 0 + * Return: Success: Random value * - * Failure: -1 + * Failure: never fails * * Programmer: Robb Matzke - * Wednesday, March 4, 1998 + * Tuesday, November 24, 1998 * * Modifications: * *------------------------------------------------------------------------- */ -static herr_t -display_error_cb (void __unused__ *client_data) +static hsize_t +randll(hsize_t limit) { - puts ("*FAILED*"); - H5Eprint (stdout); - return 0; + + hsize_t acc = rand (); + acc *= rand (); + + return acc % limit; } @@ -118,23 +108,23 @@ is_sparse(void) *------------------------------------------------------------------------- */ static int -enough_room(void) +enough_room(hid_t fapl) { int ret_value=0; int fd[68]; size_t i, size = (size_t)1 << 30; - char name[32]; - - /* verify if this machine supports 8GB sizes */ - if (GB8LL==0) - goto done; + char filename[1024], name[1024]; /* Initialize file descriptors */ for (i=0; i<NELMTS(fd); i++) fd[i] = -1; + /* Get file name template */ + assert(H5F_LOW_FAMILY==H5Pget_driver(fapl)); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + /* Create files */ for (i=0; i<NELMTS(fd); i++) { - sprintf(name, FNAME, i); + HDsnprintf(name, sizeof name, filename, i); if ((fd[i]=open(name, O_RDWR|O_CREAT|O_TRUNC, 0666))<0) { goto done; } @@ -149,7 +139,7 @@ enough_room(void) done: for (i=0; i<NELMTS(fd) && fd[i]>=0; i++) { - sprintf(name, FNAME, i); + HDsnprintf(name, sizeof name, filename, i); close(fd[i]); unlink(name); } @@ -177,29 +167,27 @@ enough_room(void) *------------------------------------------------------------------------- */ static int -writer (int wrt_n) +writer (hid_t fapl, int wrt_n) { hsize_t size1[4] = {8, 1024, 1024, 1024}; hsize_t size2[1] = {GB8LL}; hssize_t hs_start[1]; hsize_t hs_size[1]; - hid_t plist, file, space1, space2, mem_space, d1, d2; + hid_t file=-1, space1=-1, space2=-1, mem_space=-1, d1=-1, d2=-1; int *buf = malloc (sizeof(int) * WRT_SIZE); int i, j; FILE *out = fopen(DNAME, "w"); + char filename[1024]; - printf("%-70s", "Writing large dataset"); - fflush(stdout); + TESTING("large dataset write"); /* * We might be on a machine that has 32-bit files, so create an HDF5 file * which is a family of files. Each member of the family will be 1GB */ - if ((plist = H5Pcreate (H5P_FILE_ACCESS))<0) goto error; - if (H5Pset_family (plist, FAMILY_SIZE, H5P_DEFAULT)<0) goto error; - file = H5Fcreate (FNAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG, H5P_DEFAULT, plist); - if (file<0) goto error; - if (H5Pclose (plist)<0) goto error; + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, H5P_DEFAULT, + fapl))<0) goto error; /* Create simple data spaces according to the size specified above. */ if ((space1 = H5Screate_simple (4, size1, size1))<0 || @@ -237,10 +225,20 @@ writer (int wrt_n) if (H5Fclose (file)<0) goto error; free (buf); fclose(out); - puts(" PASSED"); + PASSED(); return 0; error: + H5E_BEGIN_TRY { + H5Dclose(d1); + H5Dclose(d2); + H5Sclose(space1); + H5Sclose(space2); + H5Sclose(mem_space); + H5Fclose(file); + } H5E_END_TRY; + if (buf) free(buf); + if (out) fclose(out); return 1; } @@ -262,26 +260,25 @@ writer (int wrt_n) *------------------------------------------------------------------------- */ static int -reader (void) +reader (hid_t fapl) { - FILE *script; - hid_t plist, file, mspace, fspace, d2; + FILE *script = NULL; + hid_t file=-1, mspace=-1, fspace=-1, d2=-1; char ln[128], *s; hssize_t hs_offset[1]; hsize_t hs_size[1] = {WRT_SIZE}; int *buf = malloc (sizeof(int) * WRT_SIZE); int i, j, zero, wrong, nerrors=0; + char filename[1024]; /* Open script file */ script = fopen (DNAME, "r"); /* Open HDF5 file */ - if ((plist = H5Pcreate (H5P_FILE_ACCESS))<0) goto error; - if (H5Pset_family (plist, FAMILY_SIZE, H5P_DEFAULT)<0) goto error; - if ((file = H5Fopen (FNAME, H5F_ACC_RDONLY|H5F_ACC_DEBUG, plist))<0) { + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fopen(filename, H5F_ACC_RDONLY|H5F_ACC_DEBUG, fapl))<0) { goto error; } - if (H5Pclose (plist)<0) goto error; /* Open the dataset */ if ((d2 = H5Dopen (file, "d2"))<0) goto error; @@ -310,14 +307,14 @@ reader (void) else if (buf[j]!=i+1) wrong++; } if (zero) { - puts("*FAILED*"); - printf(" %d zero%s\n", zero, 1==zero?"":"s"); + FAILED(); + printf(" %d zero%s\n", zero, 1==zero?"":"s"); } else if (wrong) { - puts("--SKIP--"); - puts(" Possible overlap with another region."); + SKIPPED(); + puts(" Possible overlap with another region."); nerrors++; } else { - puts(" PASSED"); + PASSED(); } } @@ -330,41 +327,19 @@ reader (void) return nerrors; error: + H5E_BEGIN_TRY { + H5Dclose(d2); + H5Sclose(mspace); + H5Sclose(fspace); + H5Fclose(file); + } H5E_END_TRY; + if (buf) free(buf); + if (script) fclose(script); return 1; } /*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Removes test files - * - * Return: void - * - * Programmer: Robb Matzke - * Thursday, June 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup (void) -{ - int i; - char buf[256]; - - if (!getenv ("HDF5_NOCLEANUP")) { - for (i=0; i<512; i++) { - sprintf(buf, FNAME, i); - remove(buf); - } - remove(DNAME); - } -} - - -/*------------------------------------------------------------------------- * Function: main * * Purpose: @@ -383,18 +358,41 @@ cleanup (void) int main (void) { - int nerrors = 0; + hid_t fapl=-1; + hsize_t family_size; + /* Reset library */ + h5_reset(); + fapl = h5_fileaccess(); + + /* The file driver must be the family driver */ + if (H5F_LOW_FAMILY!=H5Pget_driver(fapl)) { + printf("Changing file drivers to the family driver, %lu bytes each\n", + (unsigned long)FAMILY_SIZE); + if (H5Pset_family(fapl, FAMILY_SIZE, H5P_DEFAULT)<0) goto error; + } else if (H5Pget_family(fapl, &family_size, NULL)<0) { + goto error; + } else if (family_size!=FAMILY_SIZE) { + printf("Changing family member size from %lu to %lu\n", + (unsigned long)family_size, (unsigned long)FAMILY_SIZE); + if (H5Pset_family(fapl, FAMILY_SIZE, H5P_DEFAULT)<0) goto error; + } + /* * We shouldn't run this test if the file system doesn't support holes * because we would generate multi-gigabyte files. */ puts("Checking if file system is adequate for this test..."); + if (sizeof(long_long)<8 || 0==GB8LL) { + puts("Test skipped because sizeof(long_long) is too small. This"); + puts("hardware apparently doesn't support 64-bit integer types."); + exit(0); + } if (!is_sparse()) { puts("Test skipped because file system does not support holes."); exit(0); } - if (!enough_room()) { + if (!enough_room(fapl)) { puts("Test skipped because of quota (file size or num open files)."); exit(0); } @@ -403,13 +401,15 @@ main (void) puts("--disable-hsizet flag in order to work around a compiler bug."); exit(0); } - - /* Set the error handler */ - H5Eset_auto (display_error_cb, NULL); + /* Do the test */ + if (writer(fapl, WRT_N)) goto error; + if (reader(fapl)) goto error; + puts("All big tests passed."); + if (h5_cleanup(fapl)) remove(DNAME); + return 0; - if ((nerrors=writer(WRT_N))>0) exit(nerrors); - nerrors = reader(); - cleanup(); - return nerrors; + error: + puts("*** TEST FAILED ***"); + return 1; } diff --git a/test/dtypes.c b/test/dtypes.c index fef773a..fee49ab 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -10,9 +10,12 @@ #include <h5test.h> -#if SIZEOF_DOUBLE != SIZEOF_LONG_DOUBLE -# define USE_LDOUBLE -#endif +/* Number of times to run each test */ +#define NTESTS 1 + +/* Define if you want to see a count of overflows */ +#undef SHOW_OVERFLOWS + const char *FILENAME[] = { "dtypes1", @@ -38,7 +41,7 @@ typedef enum flt_t { typedef enum int_t { INT_CHAR, INT_UCHAR, INT_SHORT, INT_USHORT, INT_INT, INT_UINT, - INT_LONG, INT_ULONG, INT_OTHER + INT_LONG, INT_ULONG, INT_LLONG, INT_ULLONG, INT_OTHER } int_t; /* Count the number of overflows */ @@ -217,7 +220,9 @@ static void reset_hdf5(void) { h5_reset(); +#ifdef SHOW_OVERFLOWS H5Tset_overflow(overflow_handler); +#endif if (without_hardware_g) h5_no_hwconv(); } @@ -958,7 +963,7 @@ test_conv_str_2(void) { char *buf=NULL, s[80]; hid_t c_type, f_type; - const size_t nelmts = 200000, ntests=5; + const size_t nelmts = 200000, ntests=NTESTS; size_t i, j, nchars; herr_t ret_value = -1; @@ -978,8 +983,12 @@ test_conv_str_2(void) /* Do the conversions */ for (i=0; i<ntests; i++) { - sprintf(s, "Testing random string conversion speed (test %d/%d)", - (int)(i+1), (int)ntests); + if (ntests>1) { + sprintf(s, "Testing random string conversion speed (test %d/%d)", + (int)(i+1), (int)ntests); + } else { + sprintf(s, "Testing random string conversion speed"); + } printf("%-70s", s); fflush(stdout); if (H5Tconvert(c_type, f_type, nelmts, buf, NULL)<0) goto error; @@ -1141,7 +1150,7 @@ test_conv_int (void) static int test_conv_int_1(const char *name, hid_t src, hid_t dst) { - const size_t ntests=5; /*number of tests */ + const size_t ntests=NTESTS; /*number of tests */ const size_t nelmts=200000; /*num values per test */ const size_t max_fails=8; /*max number of failures*/ size_t fails_all_tests=0; /*number of failures */ @@ -1168,6 +1177,8 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) unsigned hw_uint; long hw_long; unsigned long hw_ulong; + long_long hw_llong; + unsigned long_long hw_ullong; /* What are the names of the source and destination types */ @@ -1195,6 +1206,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) } else if (H5Tequal(src, H5T_NATIVE_ULONG)) { src_type_name = "unsigned long"; src_type = INT_ULONG; + } else if (H5Tequal(src, H5T_NATIVE_LLONG)) { + src_type_name = "long long"; + src_type = INT_LLONG; + } else if (H5Tequal(src, H5T_NATIVE_ULLONG)) { + src_type_name = "unsigned long long"; + src_type = INT_ULLONG; } else { src_type_name = "UNKNOWN"; src_type = INT_OTHER; @@ -1224,6 +1241,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) } else if (H5Tequal(dst, H5T_NATIVE_ULONG)) { dst_type_name = "unsigned long"; dst_type = INT_ULONG; + } else if (H5Tequal(dst, H5T_NATIVE_LLONG)) { + dst_type_name = "long long"; + dst_type = INT_LLONG; + } else if (H5Tequal(dst, H5T_NATIVE_ULLONG)) { + dst_type_name = "unsigned long long"; + dst_type = INT_ULLONG; } else { dst_type_name = "UNKNOWN"; dst_type = INT_OTHER; @@ -1249,8 +1272,13 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) /* The tests */ for (i=0; i<ntests; i++) { - sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)", - name, src_type_name, dst_type_name, (int)i+1, (int)ntests); + if (ntests>1) { + sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)", + name, src_type_name, dst_type_name, (int)i+1, (int)ntests); + } else { + sprintf(str, "Testing random %s %s -> %s conversions", + name, src_type_name, dst_type_name); + } printf("%-70s", str); fflush(stdout); fails_this_test=0; @@ -1294,6 +1322,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_char = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_char = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_char = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1324,6 +1358,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_uchar = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_uchar = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_uchar = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1354,6 +1394,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_short = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_short = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_short = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1384,6 +1430,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_ushort = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_ushort = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_ushort = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1414,6 +1466,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_int = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_int = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_int = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1444,6 +1502,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_uint = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_uint = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_uint = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1474,6 +1538,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_long = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_long = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_long = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1504,6 +1574,84 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: hw_ulong = ((unsigned long*)saved)[j]; break; + case INT_LLONG: + hw_ulong = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_ulong = ((unsigned long_long*)saved)[j]; + break; + case INT_OTHER: + break; + } + } else if (INT_LLONG==dst_type) { + hw = (unsigned char*)&hw_llong; + switch (src_type) { + case INT_CHAR: + hw_llong = ((signed char*)saved)[j]; + break; + case INT_UCHAR: + hw_llong = ((unsigned char*)saved)[j]; + break; + case INT_SHORT: + hw_llong = ((short*)saved)[j]; + break; + case INT_USHORT: + hw_llong = ((unsigned short*)saved)[j]; + break; + case INT_INT: + hw_llong = ((int*)saved)[j]; + break; + case INT_UINT: + hw_llong = ((unsigned*)saved)[j]; + break; + case INT_LONG: + hw_llong = ((long*)saved)[j]; + break; + case INT_ULONG: + hw_llong = ((unsigned long*)saved)[j]; + break; + case INT_LLONG: + hw_llong = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_llong = ((unsigned long_long*)saved)[j]; + break; + case INT_OTHER: + break; + } + } else if (INT_ULLONG==dst_type) { + hw = (unsigned char*)&hw_ullong; + switch (src_type) { + case INT_CHAR: + hw_ullong = ((signed char*)saved)[j]; + break; + case INT_UCHAR: + hw_ullong = ((unsigned char*)saved)[j]; + break; + case INT_SHORT: + hw_ullong = ((short*)saved)[j]; + break; + case INT_USHORT: + hw_ullong = ((unsigned short*)saved)[j]; + break; + case INT_INT: + hw_ullong = ((int*)saved)[j]; + break; + case INT_UINT: + hw_ullong = ((unsigned*)saved)[j]; + break; + case INT_LONG: + hw_ullong = ((long*)saved)[j]; + break; + case INT_ULONG: + hw_ullong = ((unsigned long*)saved)[j]; + break; + case INT_LLONG: + hw_ullong = ((long_long*)saved)[j]; + break; + case INT_ULLONG: + hw_ullong = ((unsigned long_long*)saved)[j]; + break; case INT_OTHER: break; } @@ -1663,6 +1811,13 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: printf(" %29lu\n", ((unsigned long*)saved)[j]); break; + case INT_LLONG: + printf(" %29"PRINTF_LL_WIDTH"d\n", ((long_long*)saved)[j]); + break; + case INT_ULLONG: + printf(" %29"PRINTF_LL_WIDTH"u\n", + ((unsigned long_long*)saved)[j]); + break; case INT_OTHER: break; } @@ -1697,6 +1852,13 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: printf(" %29lu\n", ((unsigned long*)buf)[j]); break; + case INT_LLONG: + printf(" %29"PRINTF_LL_WIDTH"d\n", ((long_long*)buf)[j]); + break; + case INT_ULLONG: + printf(" %29"PRINTF_LL_WIDTH"u\n", + ((unsigned long_long*)buf)[j]); + break; case INT_OTHER: break; } @@ -1731,6 +1893,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) case INT_ULONG: printf(" %29lu\n", *((unsigned long*)hw)); break; + case INT_LLONG: + printf(" %29"PRINTF_LL_WIDTH"d\n", *((long_long*)hw)); + break; + case INT_ULLONG: + printf(" %29"PRINTF_LL_WIDTH"u\n", *((unsigned long_long*)hw)); + break; case INT_OTHER: break; } @@ -1742,9 +1910,12 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) } PASSED(); } +#ifdef SHOW_OVERFLOWS if (noverflows_g>0) { - printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); + printf(" %d overflow%s in previous test\n", + noverflows_g, 1==noverflows_g?"":"s"); } +#endif done: if (buf) free(buf); @@ -1791,7 +1962,7 @@ my_isnan(flt_t type, void *val) retval = (*((double*)val)!=*((double*)val)); break; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE case FLT_LDOUBLE: retval = (*((long double*)val)!=*((long double*)val)); break; @@ -1815,7 +1986,7 @@ my_isnan(flt_t type, void *val) sprintf(s, "%g", *((double*)val)); break; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE case FLT_LDOUBLE: sprintf(s, "%Lg", *((long double*)val)); break; @@ -1856,7 +2027,7 @@ static int test_conv_flt_1 (const char *name, hid_t src, hid_t dst) { flt_t src_type, dst_type; /*data types */ - const size_t ntests=5; /*number of tests */ + const size_t ntests=NTESTS; /*number of tests */ const size_t nelmts=200000; /*num values per test */ const size_t max_fails=8; /*max number of failures*/ size_t fails_all_tests=0; /*number of failures */ @@ -1869,7 +2040,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) char str[256]; /*hello string */ float hw_f; /*hardware-converted */ double hw_d; /*hardware-converted */ -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE long double hw_ld; /*hardware-converted */ #endif unsigned char *hw=NULL; /*ptr to hardware-conv'd*/ @@ -1917,7 +2088,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else if (H5Tequal(src, H5T_NATIVE_DOUBLE)) { src_type_name = "double"; src_type = FLT_DOUBLE; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else if (H5Tequal(src, H5T_NATIVE_LDOUBLE)) { src_type_name = "long double"; src_type = FLT_LDOUBLE; @@ -1933,7 +2104,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else if (H5Tequal(dst, H5T_NATIVE_DOUBLE)) { dst_type_name = "double"; dst_type = FLT_DOUBLE; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else if (H5Tequal(dst, H5T_NATIVE_LDOUBLE)) { dst_type_name = "long double"; dst_type = FLT_LDOUBLE; @@ -1968,8 +2139,13 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) * If it looks like it might take a long time then print a progress * report between each test. */ - sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)", - name, src_type_name, dst_type_name, (int)i+1, (int)ntests); + if (ntests>1) { + sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)", + name, src_type_name, dst_type_name, (int)i+1, (int)ntests); + } else { + sprintf(str, "Testing random %s %s -> %s conversions", + name, src_type_name, dst_type_name); + } printf("%-70s", str); fflush(stdout); fails_this_test = 0; @@ -1984,7 +2160,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else { for (j=0; j<nelmts; j++) { /* Do it this way for alignment reasons */ -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE long double temp[1]; #else double temp[1]; @@ -1998,7 +2174,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) if (FLT_DOUBLE==src_type && FLT_FLOAT==dst_type) { hw_d = *((float*)temp); memcpy(buf+j*src_size, &hw_d, src_size); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else if (FLT_LDOUBLE==src_type && FLT_FLOAT==dst_type) { hw_ld = *((float*)temp); memcpy(buf+j*src_size, &hw_ld, src_size); @@ -2019,7 +2195,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) for (j=0; j<nelmts; j++) { hw_f = 911.0; hw_d = 911.0; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE hw_ld = 911.0; #endif @@ -2031,7 +2207,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else if (FLT_DOUBLE==dst_type) { hw_d = ((float*)saved)[j]; hw = (unsigned char*)&hw_d; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { hw_ld = ((float*)saved)[j]; hw = (unsigned char*)&hw_ld; @@ -2044,13 +2220,13 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else if (FLT_DOUBLE==dst_type) { hw_d = ((double*)saved)[j]; hw = (unsigned char*)&hw_d; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { hw_ld = ((double*)saved)[j]; hw = (unsigned char*)&hw_ld; #endif } -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { if (FLT_FLOAT==dst_type) { hw_f = ((long double*)saved)[j]; @@ -2086,7 +2262,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) my_isnan(dst_type, (double*)buf+j) && my_isnan(dst_type, hw)) { continue; -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else if (FLT_LDOUBLE==dst_type && my_isnan(dst_type, (long double*)buf+j) && my_isnan(dst_type, hw)) { @@ -2121,7 +2297,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } else if (FLT_DOUBLE==dst_type) { check_mant[0] = frexp(((double*)buf)[j], check_expo+0); check_mant[1] = frexp(((double*)hw)[0], check_expo+1); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { check_mant[0] = frexp(((long double*)buf)[j],check_expo+0); check_mant[1] = frexp(((long double*)hw)[0],check_expo+1); @@ -2146,7 +2322,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) printf(" %29.20e\n", ((float*)saved)[j]); } else if (FLT_DOUBLE==src_type) { printf(" %29.20e\n", ((double*)saved)[j]); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { printf(" %29.20Le\n", ((long double*)saved)[j]); #endif @@ -2161,7 +2337,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) printf(" %29.20e\n", ((float*)buf)[j]); } else if (FLT_DOUBLE==dst_type) { printf(" %29.20e\n", ((double*)buf)[j]); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { printf(" %29.20Le\n", ((long double*)buf)[j]); #endif @@ -2176,7 +2352,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) printf(" %29.20e\n", hw_f); } else if (FLT_DOUBLE==dst_type) { printf(" %29.20e\n", hw_d); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE } else { printf(" %29.20Le\n", hw_ld); #endif @@ -2189,9 +2365,12 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } PASSED(); } +#ifdef SHOW_OVERFLOWS if (noverflows_g>0) { - printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); + printf(" %d overflow%s in previous test\n", + noverflows_g, 1==noverflows_g?"":"s"); } +#endif done: if (buf) free (buf); @@ -2218,6 +2397,169 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) /*------------------------------------------------------------------------- + * Function: run_integer_tests + * + * Purpose: Runs all integer tests. + * + * Return: Number of errors + * + * Programmer: Robb Matzke + * Tuesday, November 24, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static int +run_integer_tests(const char *name) +{ + int nerrors = 0; + + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_CHAR, H5T_NATIVE_ULLONG); +#endif + + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_ULLONG); +#endif + + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_ULLONG); +#endif + + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_ULLONG); +#endif + + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_ULLONG); +#endif + + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_INT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_ULONG); +#endif +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_ULLONG); +#endif + +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_UINT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_ULONG); +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_ULLONG); +#endif +#endif + +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_UINT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_LONG); +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_LLONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_ULLONG); +#endif +#endif + +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_ULONG); +#endif + nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_ULLONG); +#endif + +#if SIZEOF_LONG_LONG!=SIZEOF_LONG + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_CHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_UCHAR); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_SHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_USHORT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_INT); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_UINT); +#if SIZEOF_LONG!=SIZEOF_INT + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_LONG); + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_ULONG); +#endif + nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_LLONG); +#endif + + return nerrors; +} + + +/*------------------------------------------------------------------------- * Function: main * * Purpose: Test the data type interface. @@ -2248,6 +2590,7 @@ main(void) nerrors += test_compound()<0 ? 1 : 0; nerrors += test_transient (fapl)<0 ? 1 : 0; nerrors += test_named (fapl)<0 ? 1 : 0; + h5_cleanup (fapl); /*must happen before first reset*/ reset_hdf5(); nerrors += test_conv_str_1()<0 ? 1 : 0; @@ -2262,182 +2605,26 @@ main(void) nerrors += test_conv_flt_1("noop", H5T_NATIVE_DOUBLE, H5T_NATIVE_DOUBLE); /* Test hardware integer conversion functions */ - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_CHAR, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UCHAR, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_SHORT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_USHORT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_INT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_INT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("hw", H5T_NATIVE_UINT, H5T_NATIVE_ULONG); -#endif - -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_UINT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_LONG, H5T_NATIVE_ULONG); -#endif - -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_INT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_UINT); - nerrors += test_conv_int_1("hw", H5T_NATIVE_ULONG, H5T_NATIVE_LONG); -#endif + nerrors += run_integer_tests("hw"); /* Test hardware floating-point conversion functions */ nerrors += test_conv_flt_1("hw", H5T_NATIVE_FLOAT, H5T_NATIVE_DOUBLE); nerrors += test_conv_flt_1("hw", H5T_NATIVE_DOUBLE, H5T_NATIVE_FLOAT); /*---------------------------------------------------------------------- - * Software tests follow + * Software tests *---------------------------------------------------------------------- */ without_hardware_g = TRUE; reset_hdf5(); /* Test software integer conversion functions */ - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_CHAR, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UCHAR, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_SHORT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_USHORT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_UINT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_INT, H5T_NATIVE_ULONG); -#endif - - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_INT); -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_LONG); - nerrors += test_conv_int_1("sw", H5T_NATIVE_UINT, H5T_NATIVE_ULONG); -#endif - -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_UINT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_LONG, H5T_NATIVE_ULONG); -#endif - -#if SIZEOF_INT != SIZEOF_LONG - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_CHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_UCHAR); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_SHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_USHORT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_INT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_UINT); - nerrors += test_conv_int_1("sw", H5T_NATIVE_ULONG, H5T_NATIVE_LONG); -#endif + nerrors += run_integer_tests("sw"); /* Test software floating-point conversion functions */ nerrors += test_conv_flt_1("sw", H5T_NATIVE_FLOAT, H5T_NATIVE_DOUBLE); nerrors += test_conv_flt_1("sw", H5T_NATIVE_DOUBLE, H5T_NATIVE_FLOAT); -#ifdef USE_LDOUBLE +#if SIZEOF_LDOUBLE!=SIZEOF_DOUBLE nerrors += test_conv_flt_1("sw", H5T_NATIVE_FLOAT, H5T_NATIVE_LDOUBLE); nerrors += test_conv_flt_1("sw", H5T_NATIVE_DOUBLE, H5T_NATIVE_LDOUBLE); nerrors += test_conv_flt_1("sw", H5T_NATIVE_LDOUBLE, H5T_NATIVE_FLOAT); @@ -2450,6 +2637,5 @@ main(void) exit(1); } printf("All data type tests passed.\n"); - h5_cleanup (fapl); return 0; } diff --git a/test/extend.c b/test/extend.c index 42348bc..a996d3f 100644 --- a/test/extend.c +++ b/test/extend.c @@ -40,7 +40,6 @@ main (void) { hid_t file, dataset, mem_space, file_space, cparms; hid_t fapl; - herr_t status; int i, j, k, m; static int buf1[NY][NX], buf2[NX/2][NY/2]; static const hsize_t dims[2] = {NX, NY}; diff --git a/test/external.c b/test/external.c index b17df58..48aea9c 100644 --- a/test/external.c +++ b/test/external.c @@ -824,10 +824,7 @@ main (void) if (H5Fclose(file)<0) goto error; puts("All external storage tests passed."); - h5_cleanup(fapl); - - /* cleanup external files */ - if (!getenv("HDF5_NOCLEANUP")) { + if (h5_cleanup(fapl)) { remove("extern_1a.raw"); remove("extern_1b.raw"); remove("extern_2a.raw"); diff --git a/test/fillval.c b/test/fillval.c index 71aa7fb..53190a1 100644 --- a/test/fillval.c +++ b/test/fillval.c @@ -726,8 +726,7 @@ main(int argc, char *argv[]) if (nerrors) goto error; puts("All fill value tests passed."); - h5_cleanup(fapl); - if (!getenv("HDF5_NOCLEANUP")) remove(FILE_NAME_RAW); + if (h5_cleanup(fapl)) remove(FILE_NAME_RAW); return 0; error: diff --git a/test/gheap.c b/test/gheap.c index 9218c3a..404b24a 100644 --- a/test/gheap.c +++ b/test/gheap.c @@ -9,59 +9,22 @@ * collections but the collections are not related to one * another by anything that appears in the file format. */ +#include <h5test.h> #include <H5private.h> #include <H5Eprivate.h> #include <H5Fprivate.h> #include <H5Gprivate.h> #include <H5HGprivate.h> +#include <H5Iprivate.h> #include <H5Pprivate.h> -#ifndef HAVE_FUNCTION -# undef __FUNCTION__ -# define __FUNCTION__ "" -#endif - -#define TEST_FILE_NAME0 "gheap0.h5" -#define TEST_FILE_NAME1 "gheap1.h5" -#define TEST_FILE_NAME2 "gheap2.h5" -#define TEST_FILE_NAME3 "gheap3.h5" -#define TEST_FILE_NAME4 "gheap4.h5" - -#define FAILED(S) { \ - puts ("*FAILED*"); \ - printf (" Failed at %s:%d in %s()%s%s\n", \ - __FILE__, __LINE__, __FUNCTION__, \ - (S)&&*(S)?": ":"", (S)?(S):""); \ - H5Eprint (stdout); \ -} - - -/*------------------------------------------------------------------------- - * Function: emit_diagnostics - * - * Purpose: If debugging is turned on then this function will cause the - * library to emit its diagnostic messages now instead of when - * we're trying to make the output look nice. - * - * Return: void - * - * Programmer: Robb Matzke - * Tuesday, March 31, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -emit_diagnostics (void) -{ - H5F_t *f = H5F_open (TEST_FILE_NAME0, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC, - NULL, NULL); - H5G_t *g = H5G_create (H5G_entof(f->shared->root_grp), "emit", 0); - H5G_close (g); - H5F_close (f); -} +const char *FILENAME[] = { + "gheap1", + "gheap2", + "gheap3", + "gheap4", + NULL +}; /*------------------------------------------------------------------------- @@ -72,7 +35,7 @@ emit_diagnostics (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -82,28 +45,29 @@ emit_diagnostics (void) *------------------------------------------------------------------------- */ static int -test_1 (void) +test_1 (hid_t fapl) { - H5F_t *f; + hid_t file=-1; + H5F_t *f=NULL; H5HG_t obj[1024]; uint8_t out[1024]; uint8_t in[1024]; int i; size_t size; herr_t status; - int retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...monotonically increasing lengths"); - fflush (stdout); + TESTING("monotonically increasing lengths"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME1, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* @@ -117,11 +81,13 @@ test_1 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } else if (i && H5F_addr_gt (&(obj[i-1].addr), &(obj[i].addr))) { - FAILED ("collection addresses are not monotonically increasing"); - --retval; + FAILED(); + puts(" Collection addresses are not monotonically increasing"); + nerrors++; } } @@ -133,17 +99,26 @@ test_1 (void) memset (out, 'A'+i%26, size); H5Eclear (); if (NULL==H5HG_read (f, obj+i, in)) { - FAILED ("unable to read object"); - --retval; + FAILED(); + puts(" Unable to read object"); + nerrors++; } else if (memcmp (in, out, size)) { - FAILED ("value read doesn't match value written"); - --retval; + FAILED(); + puts(" Value read doesn't match value written"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -155,7 +130,7 @@ test_1 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -165,28 +140,28 @@ test_1 (void) *------------------------------------------------------------------------- */ static int -test_2 (void) +test_2 (hid_t fapl) { - H5F_t *f; + hid_t file=-1; + H5F_t *f=NULL; H5HG_t obj[1024]; uint8_t out[1024]; uint8_t in[1024]; int i; size_t size; - herr_t status; - int retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...monotonically decreasing lengths"); - fflush (stdout); + TESTING("monotonically decreasing lengths"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME2, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[1], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* @@ -196,10 +171,10 @@ test_2 (void) size = 1024-i; memset (out, 'A'+i%26, size); H5Eclear (); - status = H5HG_insert (f, size, out, obj+i); - if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + if (H5HG_insert (f, size, out, obj+i)<0) { + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } } @@ -211,17 +186,26 @@ test_2 (void) memset (out, 'A'+i%26, size); H5Eclear (); if (NULL==H5HG_read (f, obj+i, in)) { - FAILED ("unable to read object"); - --retval; + FAILED(); + puts(" Unable to read object"); + nerrors++; } else if (memcmp (in, out, size)) { - FAILED ("value read doesn't match value written"); - --retval; + FAILED(); + puts(" Value read doesn't match value written"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -233,7 +217,7 @@ test_2 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -243,27 +227,28 @@ test_2 (void) *------------------------------------------------------------------------- */ static int -test_3 (void) +test_3 (hid_t fapl) { - H5F_t *f; + hid_t file=-1; + H5F_t *f=NULL; H5HG_t obj[1024]; uint8_t out[1024]; int i; size_t size; herr_t status; - int retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...complete object removal"); - fflush (stdout); + TESTING("complete object removal"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME3, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[2], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } /* Create some stuff */ @@ -273,8 +258,9 @@ test_3 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } } @@ -282,14 +268,22 @@ test_3 (void) for (i=0; i<1024; i++) { status = H5HG_remove (f, obj+i); if (status<0) { - FAILED ("unable to remove object"); - --retval; + FAILED(); + puts(" Unable to remove object"); + nerrors++; } } - puts (" PASSED"); - H5F_close (f); - return retval; + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } @@ -302,7 +296,7 @@ test_3 (void) * * Return: Success: 0 * - * Failure: -1 + * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, March 31, 1998 @@ -312,30 +306,30 @@ test_3 (void) *------------------------------------------------------------------------- */ static int -test_4 (void) +test_4 (hid_t fapl) { - H5F_t *f; + hid_t file=-1; + H5F_t *f=NULL; H5HG_t obj[1024]; uint8_t out[1024]; int i; size_t size; herr_t status; - int retval = 0; + int nerrors=0; + char filename[1024]; - printf ("%-70s", "...partial object removal"); - fflush (stdout); + TESTING("partial object removal"); /* Open a clean file */ - H5Eclear (); - f = H5F_open (TEST_FILE_NAME4, - H5F_ACC_CREAT|H5F_ACC_RDWR|H5F_ACC_TRUNC|H5F_ACC_DEBUG, - NULL, NULL); - if (!f) { - FAILED ("unable to create file"); - return -1; + h5_fixname(FILENAME[3], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + puts(" Unable to create file"); + goto error; } - for (i=0; i<1024; i++) { /* Insert */ size = i%30+100; @@ -343,8 +337,9 @@ test_4 (void) H5Eclear (); status = H5HG_insert (f, size, out, obj+i); if (status<0) { - FAILED ("unable to insert object into global heap"); - --retval; + FAILED(); + puts(" Unable to insert object into global heap"); + nerrors++; } /* @@ -356,46 +351,26 @@ test_4 (void) H5Eclear (); status = H5HG_remove (f, obj+i-1); if (status<0) { - FAILED ("unable to remove object"); - --retval; + FAILED(); + puts(" Unable to remove object"); + nerrors++; } memset (obj+i-1, 0, sizeof *obj); } } - puts (" PASSED"); - H5F_close (f); - return retval; -} - + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; + PASSED(); + return 0; - -/*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(TEST_FILE_NAME0); - remove(TEST_FILE_NAME1); - remove(TEST_FILE_NAME2); - remove(TEST_FILE_NAME3); - remove(TEST_FILE_NAME4); - } + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return MAX(1, nerrors); } - + /*------------------------------------------------------------------------- * Function: main @@ -416,22 +391,23 @@ cleanup(void) int main (void) { - int nfailed=0; + int nerrors=0; + hid_t fapl; - emit_diagnostics (); - + h5_reset(); + fapl = h5_fileaccess(); - nfailed += test_1()<0 ? 1 : 0; - nfailed += test_2()<0 ? 1 : 0; - nfailed += test_3()<0 ? 1 : 0; - nfailed += test_4()<0 ? 1 : 0; + nerrors += test_1(fapl); + nerrors += test_2(fapl); + nerrors += test_3(fapl); + nerrors += test_4(fapl); + if (nerrors) goto error; - if (nfailed) { - printf ("*** %d global heap test%s failed ***\n", - nfailed, 1==nfailed?"":"s"); - } else { - printf ("All global heap tests passed.\n"); - cleanup(); - } - return nfailed?-1:0; + puts("All global heap tests passed."); + h5_cleanup(fapl); + return 0; + + error: + puts("*** TESTS FAILED ***"); + return 1; } diff --git a/test/h5test.c b/test/h5test.c index 0e2ef53..f124e0e 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -66,7 +66,7 @@ h5_errors(void __unused__ *client_data) * `extern const char *FILENAMES[]' -- these are only the base * names. The file access property list is also closed. * - * Return: none + * Return: Non-zero if cleanup actions were performed; zero otherwise. * * Programmer: Albert Cheng * May 28, 1998 @@ -75,12 +75,13 @@ h5_errors(void __unused__ *client_data) * *------------------------------------------------------------------------- */ -void +int h5_cleanup(hid_t fapl) { char filename[1024]; char temp[2048]; int i, j; + int retval=0; if (!getenv("HDF5_NOCLEANUP")) { for (i=0; FILENAME[i]; i++) { @@ -113,8 +114,10 @@ h5_cleanup(hid_t fapl) break; } } + retval=1; } H5Pclose(fapl); + return retval; } @@ -135,10 +138,27 @@ h5_cleanup(hid_t fapl) void h5_reset(void) { + char filename[1024]; + fflush(stdout); fflush(stderr); H5close(); - H5Eset_auto (h5_errors, NULL);} + H5Eset_auto (h5_errors, NULL); + + /* + * Cause the library to emit some diagnostics early so they don't + * interfere with other formatted output. + */ + sprintf(filename, "/tmp/h5emit-%05d.h5", getpid()); + H5E_BEGIN_TRY { + hid_t file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, + H5P_DEFAULT); + hid_t grp = H5Gcreate(file, "emit", 0); + H5Gclose(grp); + H5Fclose(file); + unlink(filename); + } H5E_END_TRY; +} /*------------------------------------------------------------------------- @@ -304,6 +324,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_char_uint); H5Tunregister(H5T_conv_char_long); H5Tunregister(H5T_conv_char_ulong); + H5Tunregister(H5T_conv_char_llong); + H5Tunregister(H5T_conv_char_ullong); H5Tunregister(H5T_conv_uchar_char); H5Tunregister(H5T_conv_uchar_short); @@ -312,6 +334,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_uchar_uint); H5Tunregister(H5T_conv_uchar_long); H5Tunregister(H5T_conv_uchar_ulong); + H5Tunregister(H5T_conv_uchar_llong); + H5Tunregister(H5T_conv_uchar_ullong); H5Tunregister(H5T_conv_short_char); H5Tunregister(H5T_conv_short_uchar); @@ -320,6 +344,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_short_uint); H5Tunregister(H5T_conv_short_long); H5Tunregister(H5T_conv_short_ulong); + H5Tunregister(H5T_conv_short_llong); + H5Tunregister(H5T_conv_short_ullong); H5Tunregister(H5T_conv_ushort_char); H5Tunregister(H5T_conv_ushort_uchar); @@ -328,6 +354,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_ushort_uint); H5Tunregister(H5T_conv_ushort_long); H5Tunregister(H5T_conv_ushort_ulong); + H5Tunregister(H5T_conv_ushort_llong); + H5Tunregister(H5T_conv_ushort_ullong); H5Tunregister(H5T_conv_int_char); H5Tunregister(H5T_conv_int_uchar); @@ -336,6 +364,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_int_uint); H5Tunregister(H5T_conv_int_long); H5Tunregister(H5T_conv_int_ulong); + H5Tunregister(H5T_conv_int_llong); + H5Tunregister(H5T_conv_int_ullong); H5Tunregister(H5T_conv_uint_char); H5Tunregister(H5T_conv_uint_uchar); @@ -344,6 +374,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_uint_int); H5Tunregister(H5T_conv_uint_long); H5Tunregister(H5T_conv_uint_ulong); + H5Tunregister(H5T_conv_uint_llong); + H5Tunregister(H5T_conv_uint_ullong); H5Tunregister(H5T_conv_long_char); H5Tunregister(H5T_conv_long_uchar); @@ -352,6 +384,8 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_long_int); H5Tunregister(H5T_conv_long_uint); H5Tunregister(H5T_conv_long_ulong); + H5Tunregister(H5T_conv_long_llong); + H5Tunregister(H5T_conv_long_ullong); H5Tunregister(H5T_conv_ulong_char); H5Tunregister(H5T_conv_ulong_uchar); @@ -360,6 +394,28 @@ h5_no_hwconv(void) H5Tunregister(H5T_conv_ulong_int); H5Tunregister(H5T_conv_ulong_uint); H5Tunregister(H5T_conv_ulong_long); + H5Tunregister(H5T_conv_ulong_llong); + H5Tunregister(H5T_conv_ulong_ullong); + + H5Tunregister(H5T_conv_llong_char); + H5Tunregister(H5T_conv_llong_uchar); + H5Tunregister(H5T_conv_llong_short); + H5Tunregister(H5T_conv_llong_ushort); + H5Tunregister(H5T_conv_llong_int); + H5Tunregister(H5T_conv_llong_uint); + H5Tunregister(H5T_conv_llong_long); + H5Tunregister(H5T_conv_llong_ulong); + H5Tunregister(H5T_conv_llong_ullong); + + H5Tunregister(H5T_conv_ullong_char); + H5Tunregister(H5T_conv_ullong_uchar); + H5Tunregister(H5T_conv_ullong_short); + H5Tunregister(H5T_conv_ullong_ushort); + H5Tunregister(H5T_conv_ullong_int); + H5Tunregister(H5T_conv_ullong_uint); + H5Tunregister(H5T_conv_ullong_long); + H5Tunregister(H5T_conv_ullong_ulong); + H5Tunregister(H5T_conv_ullong_llong); H5Tunregister(H5T_conv_float_double); H5Tunregister(H5T_conv_double_float); diff --git a/test/h5test.h b/test/h5test.h index fa69b9f..fc26f2f 100644 --- a/test/h5test.h +++ b/test/h5test.h @@ -54,8 +54,7 @@ extern const char *FILENAME[]; extern "C" { #endif -void h5_cleanup(hid_t fapl); -void h5_cleanup(hid_t fapl); +int h5_cleanup(hid_t fapl); herr_t h5_errors(void __unused__ *client_data); char *h5_fixname(const char *basename, hid_t fapl, char *fullname, size_t size); diff --git a/test/istore.c b/test/istore.c index da458a4..93c47b7 100644 --- a/test/istore.c +++ b/test/istore.c @@ -7,6 +7,7 @@ * * Purpose: Tests various aspects of indexed raw data storage. */ +#include <h5test.h> #include <H5private.h> #include <H5Dprivate.h> #include <H5Iprivate.h> @@ -17,29 +18,16 @@ #include <H5Oprivate.h> #include <H5Vprivate.h> -#if 1 -# define FILETYPE H5F_LOW_DFLT -# define FILENAME "istore.h5" -#elif 0 -# define FILETYPE H5F_LOW_FAM -# define FILENAME "istore-%05d.h5" -# define TEST_FAMILY 1 -#else -# define FILETYPE H5F_LOW_SPLIT -# define FILENAME "istore-split" -#endif +const char *FILENAME[] = { + "istore", + NULL +}; + #define TEST_SMALL 0x0001 #define TEST_MEDIUM 0x0002 #define TEST_LARGE 0x0004 -#ifndef HAVE_FUNCTION -#undef __FUNCTION__ -#define __FUNCTION__ "" -#endif -#define AT() printf (" at %s:%d in %s()...\n", \ - __FILE__, __LINE__, __FUNCTION__); - hsize_t align_g[3] = {50, 50, 50}; hssize_t zero[H5O_LAYOUT_NDIMS]; @@ -82,6 +70,7 @@ print_array(uint8_t *array, size_t nx, size_t ny, size_t nz) printf("\n"); } } + /*------------------------------------------------------------------------- * Function: new_object @@ -89,9 +78,9 @@ print_array(uint8_t *array, size_t nx, size_t ny, size_t nz) * Purpose: Creates a new object that refers to a indexed storage of raw * data. No raw data is stored. * - * Return: Success: Handle to a new open object. + * Return: Success: 0 * - * Failure: NULL, error message printed. + * Failure: -1 * * Programmer: Robb Matzke * Wednesday, October 15, 1997 @@ -108,13 +97,11 @@ new_object(H5F_t *f, const char *name, intn ndims, H5G_entry_t *ent/*out*/) /* Create the object header */ if (H5O_create(f, 64, ent)) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" H5O_create() = NULL\n"); - } - return -1; + FAILED(); + puts(" H5O_create() = NULL"); + goto error; } + /* create chunked storage */ layout.type = H5D_CHUNKED; layout.ndims = ndims; @@ -127,27 +114,26 @@ new_object(H5F_t *f, const char *name, intn ndims, H5G_entry_t *ent/*out*/) } H5F_arr_create(f, &layout/*in,out*/); if (H5O_modify(ent, H5O_LAYOUT, H5O_NEW_MESG, 0, &layout) < 0) { - printf("*FAILED*\n"); - if (!isatty(1)) { - AT(); - printf(" H5O_modify istore message failure\n"); - } - return -1; + FAILED(); + puts(" H5O_modify istore message failure."); + goto error; } + /* Give the object header a name */ if (H5G_insert(H5G_entof(H5G_rootof(f)), name, ent) < 0) { - printf("*FAILED*\n"); - if (!isatty(1)) { - AT(); - printf(" H5G_insert(f, name=\"%s\", ent) failed\n", name); - } - return -1; + FAILED(); + printf(" H5G_insert(f, name=\"%s\", ent) failed\n", name); + goto error; } + /* Close the header */ H5O_close(ent); - return 0; + + error: + return -1; } + /*------------------------------------------------------------------------- * Function: test_create @@ -173,17 +159,18 @@ test_create(H5F_t *f, const char *prefix) intn i; char name[256]; - printf("%-70s", "Testing istore create"); + TESTING("istore create"); for (i = 1; i <= H5O_LAYOUT_NDIMS; i++) { - sprintf(name, "%s_%02d", prefix, i); + HDsnprintf(name, sizeof name, "%s_%02d", prefix, i); if (new_object(f, name, i, &handle) < 0) return FAIL; } - puts(" PASSED"); + PASSED(); return SUCCEED; } + /*------------------------------------------------------------------------- * Function: test_extend @@ -244,26 +231,17 @@ test_extend(H5F_t *f, const char *prefix, /* Build the new empty object */ sprintf(name, "%s_%s", prefix, dims); if (new_object(f, name, ndims, &handle) < 0) { - if (!isatty(1)) { - AT(); - printf(" Cannot create %d-d object `%s'\n", ndims, name); - } + printf(" Cannot create %d-d object `%s'\n", ndims, name); goto error; } if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout)) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Unable to read istore message\n"); - } + FAILED(); + puts(" Unable to read istore message."); goto error; } if (ndims != layout.ndims) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Header read error: istore.ndims != %d\n", ndims); - } + FAILED(); + printf(" Header read error: istore.ndims != %d\n", ndims); goto error; } whole_size[0] = nx; @@ -298,7 +276,7 @@ test_extend(H5F_t *f, const char *prefix, #if 0 if (0 == ctr) printf("\n"); - printf(" Insert: ctr=%d, corner=(%d", ctr, offset[0]); + printf(" Insert: ctr=%d, corner=(%d", ctr, offset[0]); if (ndims > 1) printf(",%d", offset[1]); if (ndims > 2) @@ -321,42 +299,35 @@ test_extend(H5F_t *f, const char *prefix, /* Write to disk */ if (H5F_arr_write(f, &H5D_xfer_dflt, &layout, NULL, NULL, NULL, size, size, zero, offset, buf)<0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Write failed: ctr=%lu\n", (unsigned long)ctr); - } + FAILED(); + printf(" Write failed: ctr=%lu\n", (unsigned long)ctr); goto error; } + /* Read from disk */ memset(check, 0xff, (size_t)nelmts); if (H5F_arr_read(f, &H5D_xfer_dflt, &layout, NULL, NULL, NULL, size, size, zero, offset, check)<0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Read failed: ctr=%lu\n", (unsigned long)ctr); - } + FAILED(); + printf(" Read failed: ctr=%lu\n", (unsigned long)ctr); goto error; } if (memcmp(buf, check, (size_t)nelmts)) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Read check failed: ctr=%lu\n", (unsigned long)ctr); - printf(" Wrote:\n"); - print_array(buf, (size_t)size[0], (size_t)size[1], - (size_t)size[2]); - printf(" Read:\n"); - print_array(check, (size_t)size[0], (size_t)size[1], - (size_t)size[2]); - } + FAILED(); + printf(" Read check failed: ctr=%lu\n", (unsigned long)ctr); + printf(" Wrote:\n"); + print_array(buf, (size_t)size[0], (size_t)size[1], + (size_t)size[2]); + printf(" Read:\n"); + print_array(check, (size_t)size[0], (size_t)size[1], + (size_t)size[2]); goto error; } + /* Write to `whole' buffer for later checking */ H5V_hyper_copy(ndims, size, - whole_size, offset, whole, /*dst */ - size, H5V_ZERO, buf); /*src */ + whole_size, offset, whole, /*dst*/ + size, H5V_ZERO, buf); /*src*/ /* Update max corner */ for (i=0; i<(size_t)ndims; i++) { @@ -368,42 +339,36 @@ test_extend(H5F_t *f, const char *prefix, memset(buf, 0xff, nx * ny * nz); if (H5F_arr_read(f, &H5D_xfer_dflt, &layout, NULL, NULL, NULL, whole_size, whole_size, zero, zero, buf)<0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Read failed for whole array\n"); - } + FAILED(); + puts(" Read failed for whole array."); goto error; } - for (i = 0; i < nx; i++) { - for (j = 0; j < ny; j++) { - for (k = 0; k < nz; k++) { - if (whole[i * ny * nz + j * nz + k] != buf[i * ny * nz + j * nz + k]) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Check failed at i=%lu", (unsigned long)i); - if (ndims > 1) { - printf(", j=%lu", (unsigned long)j); - } - if (ndims > 2) { - printf(", k=%lu", (unsigned long)k); - } - printf("\n Check array is:\n"); - print_array(whole, nx, ny, nz); - printf(" Value read is:\n"); - print_array(buf, nx, ny, nz); + for (i=0; i<nx; i++) { + for (j=0; j<ny; j++) { + for (k=0; k<nz; k++) { + if (whole[i*ny*nz + j*nz + k] != buf[i*ny*nz + j*nz + k]) { + FAILED(); + printf(" Check failed at i=%lu", (unsigned long)i); + if (ndims > 1) { + printf(", j=%lu", (unsigned long)j); + } + if (ndims > 2) { + printf(", k=%lu", (unsigned long)k); } + printf("\n Check array is:\n"); + print_array(whole, nx, ny, nz); + printf(" Value read is:\n"); + print_array(buf, nx, ny, nz); goto error; } } } } - puts(" PASSED"); H5MM_xfree(buf); H5MM_xfree(check); H5MM_xfree(whole); + PASSED(); return SUCCEED; error: @@ -412,6 +377,7 @@ test_extend(H5F_t *f, const char *prefix, H5MM_xfree(whole); return FAIL; } + /*------------------------------------------------------------------------- * Function: test_sparse @@ -466,18 +432,12 @@ test_sparse(H5F_t *f, const char *prefix, size_t nblocks, /* Build the new empty object */ sprintf(name, "%s_%s", prefix, dims); if (new_object(f, name, ndims, &handle) < 0) { - if (!isatty(1)) { - AT(); - printf(" Cannot create %d-d object `%s'\n", ndims, name); - } + printf(" Cannot create %d-d object `%s'\n", ndims, name); goto error; } if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout)) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Unable to read istore message\n"); - } + FAILED(); + printf(" Unable to read istore message\n"); goto error; } for (ctr=0; ctr<nblocks; ctr++) { @@ -492,22 +452,19 @@ test_sparse(H5F_t *f, const char *prefix, size_t nblocks, /* write to disk */ if (H5F_arr_write(f, &H5D_xfer_dflt, &layout, NULL, NULL, NULL, size, size, zero, offset, buf)<0) { - puts("*FAILED*"); - if (!isatty(1)) { - AT(); - printf(" Write failed: ctr=%lu\n", (unsigned long)ctr); - printf(" offset=(%lu", (unsigned long) (offset[0])); - if (ndims > 1) - printf(",%lu", (unsigned long) (offset[1])); - if (ndims > 2) - printf(",%lu", (unsigned long) (offset[2])); - printf("), size=(%lu", (unsigned long) (size[0])); - if (ndims > 1) - printf(",%lu", (unsigned long) (size[1])); - if (ndims > 2) - printf(",%lu", (unsigned long) (size[2])); - printf(")\n"); - } + FAILED(); + printf(" Write failed: ctr=%lu\n", (unsigned long)ctr); + printf(" offset=(%lu", (unsigned long) (offset[0])); + if (ndims > 1) + printf(",%lu", (unsigned long) (offset[1])); + if (ndims > 2) + printf(",%lu", (unsigned long) (offset[2])); + printf("), size=(%lu", (unsigned long) (size[0])); + if (ndims > 1) + printf(",%lu", (unsigned long) (size[1])); + if (ndims > 2) + printf(",%lu", (unsigned long) (size[2])); + printf(")\n"); goto error; } total += nx * ny * nz; @@ -518,36 +475,14 @@ test_sparse(H5F_t *f, const char *prefix, size_t nblocks, /* We don't test reading yet.... */ } - puts(" PASSED"); H5MM_xfree(buf); + PASSED(); return SUCCEED; error: H5MM_xfree(buf); return FAIL; } - -/*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(FILENAME); - } -} /*------------------------------------------------------------------------- @@ -569,15 +504,12 @@ cleanup(void) int main(int argc, char *argv[]) { - H5F_t *f; - herr_t status; - int nerrors = 0; - uintn size_of_test; - hid_t template_id; - H5F_create_t *creation_template = NULL; - H5G_t *dir = NULL; - - setbuf(stdout, NULL); + hid_t fapl=-1, file=-1, fcpl=-1; + H5F_t *f; + herr_t status; + int nerrors = 0; + uintn size_of_test; + char filename[1024]; /* Parse arguments or assume `small' */ if (1 == argc) { @@ -608,40 +540,31 @@ main(int argc, char *argv[]) printf(" LARGE"); printf("\n"); - /* - * Use larger file addresses... - */ - template_id = H5Pcreate(H5P_FILE_CREATE); - H5Pset_sizes(template_id, 8, 0); - creation_template = H5I_object(template_id); + /* Reset library */ + h5_reset(); + fapl = h5_fileaccess(); + + /* Use larger file addresses... */ + fcpl = H5Pcreate(H5P_FILE_CREATE); + H5Pset_sizes(fcpl, 8, 0); /* Create the test file */ - if (NULL == (f = H5F_open(FILENAME, - (H5F_ACC_CREAT | H5F_ACC_RDWR | H5F_ACC_TRUNC | - H5F_ACC_DEBUG), - creation_template, NULL))) { - printf("Cannot create file %s; test aborted\n", FILENAME); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0 || + NULL==(f=H5I_object(file))) { + printf("Cannot create file %s; test aborted\n", filename); exit(1); } -#ifdef TEST_FAMILY - { - /* - * For testing file families, fool the library into thinking it already - * allocated a whole bunch of data. - */ - haddr_t addr; - addr.offset = 8 * ((uint64) 1 << 30); /*8 GB */ - H5F_low_seteof(f->shared->lf, &addr); - } -#endif - + /* - * By creating a group we cause the library to emit it's debugging - * diagnostic messages before we begin testing... + * For testing file families, fool the library into thinking it already + * allocated a whole bunch of data. */ - dir = H5G_create(H5G_entof(H5G_rootof(f)), "flushing_diagnostics", 0); - H5G_close(dir); - dir = NULL; + if (H5F_LOW_FAMILY==H5Pget_driver(fapl)) { + haddr_t addr; + addr.offset = 8 * ((uint64_t)1<<30); /*8 GB */ + H5F_low_seteof(f->shared->lf, &addr); + } /* * Creation test: Creates empty objects with various raw data sizes @@ -686,19 +609,17 @@ main(int argc, char *argv[]) status = test_sparse(f, "sparse", 800, 50, 50, 50); nerrors += status < 0 ? 1 : 0; } + /* Close the test file and exit */ - H5F_close(f); + H5Fclose(file); + if (nerrors) { printf("***** %d I-STORE TEST%s FAILED! *****\n", nerrors, 1 == nerrors ? "" : "S"); - if (isatty(1)) { - printf("(Redirect output to a pager or a file to see " - "debug output)\n"); - } exit(1); } - H5Pclose (template_id); + printf("All i-store tests passed.\n"); - cleanup(); + h5_cleanup(fapl); return 0; } diff --git a/test/lheap.c b/test/lheap.c new file mode 100644 index 0000000..d281bf2 --- /dev/null +++ b/test/lheap.c @@ -0,0 +1,131 @@ +/* + * Copyright © 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Tuesday, November 24, 1998 + * + * Purpose: Test local heaps used by symbol tables (groups). + */ +#include <h5test.h> +#include <H5HLprivate.h> +#include <H5Iprivate.h> + +const char *FILENAME[] = { + "lheap", + NULL +}; + +#define NOBJS 40 + + +/*------------------------------------------------------------------------- + * Function: main + * + * Purpose: Create a file, create a local heap, write data into the local + * heap, close the file, open the file, read data out of the + * local heap, close the file. + * + * Return: Success: zero + * + * Failure: non-zero + * + * Programmer: Robb Matzke + * Tuesday, November 24, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main(void) +{ + hid_t fapl=-1; /*file access properties */ + hid_t file=-1; /*hdf5 file */ + H5F_t *f=NULL; /*hdf5 file pointer */ + char filename[1024]; /*file name */ + haddr_t heap_addr; /*local heap address */ + size_t obj[NOBJS]; /*offsets within the heap */ + int i, j; /*miscellaneous counters */ + char buf[1024]; /*the value to store */ + const char *s; /*value to read */ + + /* Reset library */ + h5_reset(); + fapl = h5_fileaccess(); + + /* + * Test writing to the heap... + */ + TESTING("local heap write"); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5HL_create(f, 0, &heap_addr/*out*/)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + for (i = 0; i < NOBJS; i++) { + sprintf(buf, "%03d-", i); + for (j=4; j<i; j++) buf[j] = '0' + j%10; + if (j>4) buf[j] = '\0'; + + if ((size_t)(-1)==(obj[i]=H5HL_insert(f, &heap_addr, strlen(buf)+1, + buf))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + } + if (H5Fclose(file)<0) goto error; + PASSED(); + + /* + * Test reading from the heap... + */ + TESTING("local heap read"); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) goto error; + if (NULL==(f=H5I_object(file))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + for (i=0; i<NOBJS; i++) { + sprintf(buf, "%03d-", i); + for (j=4; j<i; j++) buf[j] = '0' + j%10; + if (j>4) buf[j] = '\0'; + if (NULL==(s=H5HL_peek(f, &heap_addr, obj[i]))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (strcmp(s, buf)) { + FAILED(); + printf(" i=%d, heap offset=%lu\n", i, (unsigned long)(obj[i])); + printf(" got: \"%s\"\n", s); + printf(" ans: \"%s\"\n", buf); + goto error; + } + } + if (H5Fclose(file)<0) goto error; + PASSED(); + + + puts("All local heap tests passed."); + h5_cleanup(fapl); + return 0; + + error: + puts("*** TESTS FAILED ***"); + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return 1; +} diff --git a/test/ohdr.c b/test/ohdr.c new file mode 100644 index 0000000..ec6c3b1 --- /dev/null +++ b/test/ohdr.c @@ -0,0 +1,278 @@ +/* + * Copyright © 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Tuesday, November 24, 1998 + */ +#include <h5test.h> +#include <H5Iprivate.h> +#include <H5Oprivate.h> + +/* + * This file needs to access private datatypes from the H5G package. + */ +#define H5G_PACKAGE +#include <H5Gpkg.h> + +const char *FILENAME[] = { + "ohdr", + NULL +}; + + +/*------------------------------------------------------------------------- + * Function: main + * + * Purpose: + * + * Return: Success: + * + * Failure: + * + * Programmer: Robb Matzke + * Tuesday, November 24, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main(void) +{ + hid_t fapl=-1, file=-1; + H5F_t *f=NULL; + char filename[1024]; + H5G_entry_t oh_ent; + H5O_stab_t stab, ro, *ptr=NULL; + int i; + + /* Reset library */ + h5_reset(); + fapl = h5_fileaccess(); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + if (NULL==(f=H5I_object(file))) { + H5Eprint(stdout); + goto error; + } + + /* + * Test object header creation + */ + TESTING("object header creation"); + if (H5O_create(f, 64, &oh_ent/*out*/)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + PASSED(); + + /* create a new message */ + TESTING("message creation"); + stab.btree_addr.offset = 11111111; + stab.heap_addr.offset = 22222222; + if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (NULL==(ptr=H5O_read(&oh_ent, H5O_STAB, 0, &ro))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5F_addr_ne(&(ro.btree_addr), &(stab.btree_addr)) || + H5F_addr_ne(&(ro.heap_addr), &(stab.heap_addr))) { + FAILED(); + HDfprintf(stdout, " got: {%a, %a}\n", + &(ro.btree_addr), &(ro.heap_addr)); + HDfprintf(stdout, " ans: {%a, %a}\n", + &(stab.btree_addr), &(stab.heap_addr)); + goto error; + } + PASSED(); + + /* + * Test modification of an existing message. + */ + TESTING("message modification"); + stab.btree_addr.offset = 33333333; + stab.heap_addr.offset = 44444444; + if (H5O_modify(&oh_ent, H5O_STAB, 0, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (NULL==(ptr=H5O_read(&oh_ent, H5O_STAB, 0, &ro))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5F_addr_ne(&(ro.btree_addr), &(stab.btree_addr)) || + H5F_addr_ne(&(ro.heap_addr), &(stab.heap_addr))) { + FAILED(); + HDfprintf(stdout, " got: {%a, %a}\n", + &(ro.btree_addr), &(ro.heap_addr)); + HDfprintf(stdout, " ans: {%a, %a}\n", + &(stab.btree_addr), &(stab.heap_addr)); + goto error; + } + PASSED(); + + + /* + * Test creation of a second message of the same type. + */ + TESTING("duplicate message creation"); + stab.btree_addr.offset = 55555555; + stab.heap_addr.offset = 66666666; + if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (NULL==(ptr=H5O_read(&oh_ent, H5O_STAB, 1, &ro))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5F_addr_ne(&(ro.btree_addr), &(stab.btree_addr)) || + H5F_addr_ne(&(ro.heap_addr), &(stab.heap_addr))) { + FAILED(); + HDfprintf(stdout, " got: {%a, %a}\n", + &(ro.btree_addr), &(ro.heap_addr)); + HDfprintf(stdout, " ans: {%a, %a}\n", + &(stab.btree_addr), &(stab.heap_addr)); + goto error; + } + PASSED(); + + /* + * Test modification of the second message with a symbol table. + */ + TESTING("duplicate message modification"); + stab.btree_addr.offset = 77777777; + stab.heap_addr.offset = 88888888; + if (H5O_modify(&oh_ent, H5O_STAB, 1, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (NULL==(ptr=H5O_read(&oh_ent, H5O_STAB, 1, &ro))) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5F_addr_ne(&(ro.btree_addr), &(stab.btree_addr)) || + H5F_addr_ne(&(ro.heap_addr), &(stab.heap_addr))) { + FAILED(); + HDfprintf(stdout, " got: {%a, %a}\n", + &(ro.btree_addr), &(ro.heap_addr)); + HDfprintf(stdout, " ans: {%a, %a}\n", + &(stab.btree_addr), &(stab.heap_addr)); + goto error; + } + PASSED(); + + /* + * Test creation of a bunch of messages one after another to see + * what happens when the object header overflows in core. + */ + TESTING("object header overflow in memory"); + for (i=0; i<40; i++) { + stab.btree_addr.offset = (i+1)*1000+1; + stab.heap_addr.offset = (i+1)*1000+2; + if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + PASSED(); + + /* + * Test creation of a bunch of messages one after another to see + * what happens when the object header overflows on disk. + */ + TESTING("object header overflow on disk"); + for (i=0; i<10; i++) { + stab.btree_addr.offset = (i + 1) * 1000 + 10; + stab.heap_addr.offset = (i + 1) * 1000 + 20; + if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5AC_flush(f, NULL, 0, TRUE)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + } + PASSED(); + + /* + * Delete all symbol table messages. + */ + TESTING("message deletion"); + if (H5O_remove(&oh_ent, H5O_STAB, H5O_ALL)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5O_read(&oh_ent, H5O_STAB, 0, &ro)) { + FAILED(); + puts(" H5O_read() should have failed but didn't"); + H5Eclear(); + goto error; + } + PASSED(); + + + /* release resources */ + TESTING("object header closing"); + if (H5O_close(&oh_ent)<0) { + FAILED(); + H5Eprint(stdout); + goto error; + } + if (H5Fclose(file)<0) goto error; + PASSED(); + + puts("All object header tests passed."); + h5_cleanup(fapl); + return 0; + + error: + H5E_BEGIN_TRY { + H5Fclose(file); + } H5E_END_TRY; + return 1; +} diff --git a/test/stab.c b/test/stab.c new file mode 100644 index 0000000..5ea730e --- /dev/null +++ b/test/stab.c @@ -0,0 +1,199 @@ +/* + * Copyright © 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Tuesday, November 24, 1998 + */ +#include <h5test.h> + +/* + * This file needs to access private datatypes from the H5G package. + */ +#define H5G_PACKAGE +#include <H5Gpkg.h> + +const char *FILENAME[] = { + "stab1", + "stab2", + NULL +}; + + +/*------------------------------------------------------------------------- + * Function: test_misc + * + * Purpose: Test miscellaneous group stuff. + * + * Return: Success: 0 + * + * Failure: number of errors + * + * Programmer: Robb Matzke + * Tuesday, November 24, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static int +test_misc(hid_t fapl) +{ + hid_t file=-1; + hid_t g1=-1, g2=-1, g3=-1; + char comment[64], filename[1024]; + + /* Test current working groups */ + TESTING("miscellaneous group tests"); + + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) + goto error; + + if ((g1=H5Gcreate(file, "test_1a", 0))<0) goto error; + if ((g2=H5Gcreate(g1, "sub_1", 0))<0) goto error; + if ((g3=H5Gcreate(file, "test_1b", 0))<0) goto error; + if (H5Gset_comment(g3, ".", "hello world")<0) goto error; + + /* Close all groups */ + if (H5Gclose(g1)<0) goto error; + if (H5Gclose(g2)<0) goto error; + if (H5Gclose(g3)<0) goto error; + + /* Open all groups with absolute names to check for exsistence */ + if ((g1=H5Gopen(file, "/test_1a"))<0) goto error; + if ((g2=H5Gopen(file, "/test_1a/sub_1"))<0) goto error; + if ((g3=H5Gopen(file, "/test_1b"))<0) goto error; + if (H5Gget_comment(g3, "././.", sizeof comment, comment)<0) goto error; + if (strcmp(comment, "hello world")) { + FAILED(); + puts(" Read the wrong comment string from the group."); + printf(" got: \"%s\"\n ans: \"hello world\"\n", comment); + goto error; + } + + /* Close everything */ + if (H5Gclose(g1)<0) goto error; + if (H5Gclose(g2)<0) goto error; + if (H5Gclose(g3)<0) goto error; + if (H5Fclose(file)<0) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Gclose(g1); + H5Gclose(g2); + H5Gclose(g3); + H5Fclose(file); + } H5E_END_TRY; + return 1; +} + + +/*------------------------------------------------------------------------- + * Function: test_large + * + * Purpose: Creates a really large directory. + * + * Return: Success: 0 + * + * Failure: number of errors + * + * Programmer: Robb Matzke + * robb@maya.nuance.com + * Aug 29 1997 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static int +test_large(hid_t fapl) +{ + hid_t file=-1, cwg=-1, fcpl=-1, dir=-1; + int i; + char name[1024]; + int nsyms = 5000; + + TESTING("large directories"); + + /* + * Use larger symbol table data structures to be more efficient, use + * defaults to bang harder on the library for testing. + */ + fcpl = H5Pcreate(H5P_FILE_CREATE); + H5Pset_sym_k(fcpl, 16, 16); + h5_fixname(FILENAME[1], fapl, name, sizeof name); + if ((file=H5Fcreate(name, H5F_ACC_TRUNC, fcpl, fapl))<0) goto error; + + /* + * Create a directory that has so many entries that the root + * of the B-tree ends up splitting. + */ + if ((cwg=H5Gcreate(file, "/big", (size_t)nsyms*16+2))<0) goto error; + for (i=0; i<nsyms; i++) { + sprintf(name, "%05d%05d", rand()%100000, i); + if ((dir=H5Gcreate(cwg, name, 0))<0) goto error; + if (H5Gclose(dir)<0) goto error; + } + if (H5Gclose(cwg)<0) goto error; + + /* Close everything */ + if (H5Pclose(fcpl)<0) goto error; + if (H5Fclose(file)<0) goto error; + PASSED(); + return 0; + + error: + H5E_BEGIN_TRY { + H5Pclose(fcpl); + H5Gclose(dir); + H5Gclose(cwg); + H5Fclose(file); + } H5E_END_TRY; + return 1; +} + + +/*------------------------------------------------------------------------- + * Function: main + * + * Purpose: Test groups + * + * Return: Success: zero + * + * Failure: non-zero + * + * Programmer: Robb Matzke + * Tuesday, November 24, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main(void) +{ + hid_t fapl; + int nerrors=0; + + /* Reset library */ + h5_reset(); + fapl = h5_fileaccess(); + + /* Perform tests */ + nerrors += test_misc(fapl); + nerrors += test_large(fapl); + if (nerrors) goto error; + + /* Cleanup */ + puts("All symbol table tests passed."); + h5_cleanup(fapl); + return 0; + + error: + puts("*** TESTS FAILED ***"); + return 1; +} + diff --git a/test/testhdf5.c b/test/testhdf5.c index 85b22a2..787d9b0 100644 --- a/test/testhdf5.c +++ b/test/testhdf5.c @@ -164,9 +164,6 @@ main(int argc, char *argv[]) /* Tests are generally arranged from least to most complexity... */ InitTest("metadata", test_metadata, cleanup_metadata, "Encode/decode metadata code"); InitTest("file", test_file, cleanup_file, "Low-Level File I/O"); - InitTest("heap", test_heap, cleanup_heap, "Object and Name Heaps"); - InitTest("ohdr", test_ohdr, cleanup_ohdr, "Object Headers"); - InitTest("stab", test_stab, cleanup_stab, "Symbol Tables"); InitTest("h5s", test_h5s, cleanup_h5s, "Dataspaces"); InitTest("attr", test_attr, cleanup_attr, "Attributes"); InitTest("select", test_select, cleanup_select, "Selections"); diff --git a/test/testhdf5.h b/test/testhdf5.h index 3aafe88..a9d99f5 100644 --- a/test/testhdf5.h +++ b/test/testhdf5.h @@ -119,9 +119,6 @@ int print_func(const char *,...); /* Prototypes for the test routines */ void test_metadata(void); void test_file(void); -void test_heap(void); -void test_ohdr(void); -void test_stab(void); void test_h5t(void); void test_h5s(void); void test_h5d(void); @@ -132,9 +129,6 @@ void test_reference(void); /* Prototypes for the cleanup routines */ void cleanup_metadata(void); void cleanup_file(void); -void cleanup_heap(void); -void cleanup_ohdr(void); -void cleanup_stab(void); void cleanup_h5s(void); void cleanup_attr(void); void cleanup_select(void); diff --git a/test/theap.c b/test/theap.c deleted file mode 100644 index c4ebe0a..0000000 --- a/test/theap.c +++ /dev/null @@ -1,113 +0,0 @@ -/*------------------------------------------------------------------------- - * Copyright (C) 1997 National Center for Supercomputing Applications. - * All rights reserved. - * - *------------------------------------------------------------------------- - * - * Created: theap.c - * Jul 17 1997 - * Robb Matzke <robb@maya.nuance.com> - * - * Purpose: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -#include <testhdf5.h> - -#include <H5private.h> -#include <H5Iprivate.h> -#include <H5ACprivate.h> -#include <H5Pprivate.h> -#include <H5Fprivate.h> -#include <H5HLprivate.h> - -#define FILE "theap.h5" -#define NOBJS 40 - -/*------------------------------------------------------------------------- - * Function: test_heap - * - * Purpose: Test name and object heaps. - * - * Return: void - * - * Programmer: Robb Matzke - * robb@maya.nuance.com - * Jul 17 1997 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -test_heap(void) -{ - int i, j; - hid_t fid; - H5F_t *f; - haddr_t heap_addr; - char buf[NOBJS + 8]; - const char *s; - size_t obj[NOBJS]; - herr_t status; - - MESSAGE(5, ("Testing Heaps\n")); - - /* Create the file */ - fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - CHECK(fid, FAIL, "H5Fcreate"); - f = H5I_object(fid); - CHECK(f, NULL, "H5I_object"); - - /* Create a new heap */ - status = H5HL_create(f, 0, &heap_addr /*out */ ); - CHECK_I(status, "H5HL_create"); - - /* Add stuff to the heap */ - for (i = 0; i < NOBJS; i++) { - sprintf(buf, "%03d-", i); - for (j = 4; j < i; j++) - buf[j] = '0' + j % 10; - if (j > 4) - buf[j] = '\0'; - - obj[i] = H5HL_insert(f, &heap_addr, strlen(buf) + 1, buf); - assert ((size_t)(-1)!=obj[i]); - } - - /* Flush the cache and invalidate everything */ - H5AC_flush(f, NULL, 0, TRUE); - - /* Read the objects back out */ - for (i = 0; i < NOBJS; i++) { - s = H5HL_peek(f, &heap_addr, obj[i]); - MESSAGE(8, ("object is `%s'\n", s)); - } - - /* Close the file */ - H5Fclose(fid); -} - - -/*------------------------------------------------------------------------- - * Function: cleanup_heap - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * July 2, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -cleanup_heap(void) -{ - remove(FILE); -} - diff --git a/test/tohdr.c b/test/tohdr.c deleted file mode 100644 index 4b249de..0000000 --- a/test/tohdr.c +++ /dev/null @@ -1,197 +0,0 @@ -/*------------------------------------------------------------------------- - * Copyright (C) 1997 National Center for Supercomputing Applications. - * All rights reserved. - * - *------------------------------------------------------------------------- - * - * Created: tohdr.c - * Aug 6 1997 - * Robb Matzke <robb@maya.nuance.com> - * - * Purpose: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ - -#include <testhdf5.h> - -#include <H5private.h> -#include <H5Iprivate.h> -#include <H5ACprivate.h> -#include <H5Pprivate.h> -#include <H5Fprivate.h> -#include <H5Gprivate.h> -#include <H5Oprivate.h> - -#define TEST_FILE "tohdr.h5" - -/* - * This file needs to access private datatypes from the H5G package. - */ -#define H5G_PACKAGE -#include <H5Gpkg.h> - -/*------------------------------------------------------------------------- - * Function: test_ohdr - * - * Purpose: Test object headers. - * - * Return: void - * - * Programmer: Robb Matzke - * robb@maya.nuance.com - * Aug 6 1997 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -test_ohdr(void) -{ - hid_t fid; - H5F_t *f; - H5G_entry_t oh_ent; - H5O_stab_t stab, ro; - herr_t status; - void *ptr; - int i; - - MESSAGE(5, ("Testing Object Headers\n")); - - /* create the file */ - fid = H5Fcreate(TEST_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - CHECK(fid, FAIL, "H5Fcreate"); - f = H5I_object(fid); - CHECK(f, NULL, "H5I_object"); - - /* the new object header */ - MESSAGE(8, ("Creating new object header...\n")); - status = H5O_create(f, 64, &oh_ent /*out */ ); - CHECK_I(status, "H5O_new"); - - /* - * Test creation of a new message. - */ - MESSAGE(8, ("Creating new message...\n")); - stab.btree_addr.offset = 11111111; - stab.heap_addr.offset = 22222222; - status = H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab); - VERIFY(status, 0, "H5O_modify"); - - H5AC_flush(f, NULL, 0, TRUE); - ptr = H5O_read(&oh_ent, H5O_STAB, 0, &ro); - CHECK_PTR(ptr, "H5O_read"); - VERIFY(ptr, &ro, "H5O_read"); - VERIFY(ro.btree_addr.offset, stab.btree_addr.offset, "H5O_read"); - VERIFY(ro.heap_addr.offset, stab.heap_addr.offset, "H5O_read"); - - /* - * Test modification of an existing message. - */ - MESSAGE(8, ("Modifying message...\n")); - stab.btree_addr.offset = 33333333; - stab.heap_addr.offset = 44444444; - status = H5O_modify(&oh_ent, H5O_STAB, 0, 0, &stab); - VERIFY(status, 0, "H5O_modify"); - - H5AC_flush(f, NULL, 0, TRUE); - ptr = H5O_read(&oh_ent, H5O_STAB, 0, &ro); - CHECK_PTR(ptr, "H5O_read"); - VERIFY(ptr, &ro, "H5O_read"); - VERIFY(ro.btree_addr.offset, stab.btree_addr.offset, "H5O_read"); - VERIFY(ro.heap_addr.offset, stab.heap_addr.offset, "H5O_read"); - - /* - * Test creation of a second message of the same type with a symbol - * table. - */ - MESSAGE(8, ("Creating a duplicate message...\n")); - stab.btree_addr.offset = 55555555; - stab.heap_addr.offset = 66666666; - status = H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab); - VERIFY(status, 1, "H5O_modify"); - - H5AC_flush(f, NULL, 0, TRUE); - ptr = H5O_read(&oh_ent, H5O_STAB, 1, &ro); - CHECK_PTR(ptr, "H5O_read"); - VERIFY(ptr, &ro, "H5O_read"); - VERIFY(ro.btree_addr.offset, stab.btree_addr.offset, "H5O_read"); - VERIFY(ro.heap_addr.offset, stab.heap_addr.offset, "H5O_read"); - - /* - * Test modification of the second message with a symbol table. - */ - MESSAGE(8, ("Modifying the duplicate message...\n")); - stab.btree_addr.offset = 77777777; - stab.heap_addr.offset = 88888888; - status = H5O_modify(&oh_ent, H5O_STAB, 1, 0, &stab); - VERIFY(status, 1, "H5O_modify"); - - H5AC_flush(f, NULL, 0, TRUE); - ptr = H5O_read(&oh_ent, H5O_STAB, 1, &ro); - CHECK_PTR(ptr, "H5O_read"); - VERIFY(ptr, &ro, "H5O_read"); - VERIFY(ro.btree_addr.offset, stab.btree_addr.offset, "H5O_read"); - VERIFY(ro.heap_addr.offset, stab.heap_addr.offset, "H5O_read"); - - /* - * Test creation of a bunch of messages one after another to see - * what happens when the object header overflows in core. - */ - MESSAGE(8, ("Overflowing header in core...\n")); - for (i = 0; i < 40; i++) { - stab.btree_addr.offset = (i + 1) * 1000 + 1; - stab.heap_addr.offset = (i + 1) * 1000 + 2; - status = H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab); - VERIFY(status, 2 + i, "H5O_modify"); - } - H5AC_flush(f, NULL, 0, TRUE); - - /* - * Test creation of a bunch of messages one after another to see - * what happens when the object header overflows on disk. - */ - MESSAGE(8, ("Overflowing header on disk...\n")); - for (i = 0; i < 10; i++) { - stab.btree_addr.offset = (i + 1) * 1000 + 10; - stab.heap_addr.offset = (i + 1) * 1000 + 20; - status = H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, &stab); - VERIFY(status, 42 + i, "H5O_modify"); - H5AC_flush(f, NULL, 0, TRUE); - } - - /* - * Delete all symbol table messages. - */ - status = H5O_remove(&oh_ent, H5O_STAB, H5O_ALL); - CHECK_I(status, "H5O_remove"); - - /* release resources */ - H5O_close(&oh_ent); - H5Fclose(fid); -} - - -/*------------------------------------------------------------------------- - * Function: cleanup_ohdr - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * July 2, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -cleanup_ohdr(void) -{ - remove(TEST_FILE); -} - diff --git a/test/tstab.c b/test/tstab.c deleted file mode 100644 index 52bc8cb..0000000 --- a/test/tstab.c +++ /dev/null @@ -1,251 +0,0 @@ -/*------------------------------------------------------------------------- - * Copyright (C) 1997 National Center for Supercomputing Applications. - * All rights reserved. - * - *------------------------------------------------------------------------- - * - * Created: tstab.c - * Aug 7 1997 - * Robb Matzke <matzke@llnl.gov> - * - * Purpose: - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -#include <testhdf5.h> - -#include <H5private.h> -#include <H5Iprivate.h> -#include <H5ACprivate.h> -#include <H5Pprivate.h> -#include <H5Fprivate.h> -#include <H5Gprivate.h> -#include <H5Oprivate.h> - -#define TEST_FILE_1 "tstab1.h5" -#define TEST_FILE_2 "tstab2.h5" - -/* - * This file needs to access private datatypes from the H5G package. - */ -#define H5G_PACKAGE -#include <H5Gpkg.h> - - -/*------------------------------------------------------------------------- - * Function: test_1 - * - * Purpose: Miscellaneous group tests - * - * Return: void - * - * Programmer: Robb Matzke - * Friday, September 11, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -test_1(void) -{ - hid_t file; - hid_t g1, g2, g3; - herr_t status; - char comment[64]; - int cmp; - - /* Test current working groups */ - MESSAGE(2, ("........current working groups\n")); - file = H5Fcreate(TEST_FILE_1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - CHECK_I(file, "H5Fcreate"); - - g1 = H5Gcreate(file, "test_1a", 0); - CHECK_I(g1, "H5Gcreate"); - - g2 = H5Gcreate(g1, "sub_1", 0); - CHECK_I(g2, "H5Gcreate"); - - g3 = H5Gcreate(file, "test_1b", 0); - CHECK_I(g3, "H5Gcreate"); - status = H5Gset_comment(g3, ".", "hello world"); - CHECK_I(status, "H5Gset_comment"); - - /* Close all groups */ - status = H5Gclose(g1); - CHECK_I(status, "H5Gclose"); - status = H5Gclose(g2); - CHECK_I(status, "H5Gclose"); - status = H5Gclose(g3); - CHECK_I(status, "H5Gclose"); - - /* Open all groups with absolute names to check for exsistence */ - g1 = H5Gopen(file, "/test_1a"); - CHECK_I(g1, "H5Gopen"); - g2 = H5Gopen(file, "/test_1a/sub_1"); - CHECK_I(g2, "H5Gopen"); - g3 = H5Gopen(file, "/test_1b"); - CHECK_I(g3, "H5Gopen"); - status = H5Gget_comment(g3, "././.", sizeof comment, comment); - CHECK_I(status, "H5Gget_comment"); - cmp = strcmp(comment, "hello world"); - VERIFY(cmp, 0, "strcmp"); - - /* Close all groups */ - status = H5Gclose(g1); - CHECK_I(status, "H5Gclose"); - status = H5Gclose(g2); - CHECK_I(status, "H5Gclose"); - status = H5Gclose(g3); - CHECK_I(status, "H5Gclose"); - - /* Close file */ - status = H5Fclose(file); - CHECK_I(status, "H5Fclose"); -} - - -/*------------------------------------------------------------------------- - * Function: test_2 - * - * Purpose: Creates a really large directory. - * - * Return: void - * - * Programmer: Robb Matzke - * robb@maya.nuance.com - * Aug 29 1997 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -test_2(void) -{ - hid_t fid, cwg, create_plist, access_plist, dir; - H5F_t *f; - int i; - char name[256]; - herr_t status; - int nsyms = 5000; - - MESSAGE(2, ("........large directories\n")); - - /* - * Use larger symbol table data structures to be more efficient, use - * defaults to bang harder on the library for testing. - */ - create_plist = H5Pcreate(H5P_FILE_CREATE); - H5Pset_sym_k(create_plist, 16, 16); - - /* - * File access property list. - */ - access_plist = H5Pcreate (H5P_FILE_ACCESS); - -#if 0 - /* Try temporary core files */ - H5Cset_core (access_plist, 3000000); -#elif 0 - /* Try a default split file but with our own name extensions */ - H5Cset_split (access_plist, ".XX1", H5C_DEFAULT, ".XX2", H5C_DEFAULT); -#elif 0 - { - /* Try a split file with an in-core meta data part */ - hid_t meta_access = H5Ccreate (H5C_FILE_ACCESS); - H5Cset_core (meta_access, 1024*1024); - H5Cset_split (access_plist, NULL, meta_access, NULL, H5C_DEFAULT); - } -#elif 0 - { - /* Try a split file with an in-core raw data part */ - hid_t raw_access = H5Ccreate (H5C_FILE_ACCESS); - H5Cset_core (raw_access, 1024*1024); - H5Cset_split (access_plist, NULL, H5C_DEFAULT, NULL, raw_access); - } -#endif - - /* create the file */ - fid = H5Fcreate(TEST_FILE_2, H5F_ACC_TRUNC, create_plist, access_plist); - CHECK(fid, FAIL, "H5Fcreate"); - f = H5I_object(fid); - CHECK(f, NULL, "H5I_object"); - f->intent |= H5F_ACC_DEBUG; - - /* - * Create a directory that has so many entries that the root - * of the B-tree ends up splitting. - */ - cwg = H5Gcreate(fid, "/big", (size_t)nsyms*16+2); - CHECK_I(cwg, "H5Gcreate"); - - for (i = 0; i < nsyms; i++) { - sprintf(name, "%05d%05d", rand() % 100000, i); - MESSAGE(8, ("%s\n", name)); - dir = H5Gcreate(cwg, name, 0); - CHECK_I(dir, "H5Gcreate"); - status = H5Gclose(dir); - CHECK_I(status, "H5Gclose"); - } - - status = H5Gclose(cwg); - CHECK_I(status, "H5Gclose"); - - /* close the property lists */ - status = H5Pclose(create_plist); - CHECK_I(status, "H5Pclose"); - status = H5Pclose(access_plist); - CHECK_I(status, "H5Pclose"); - - /* close the file */ - status = H5Fclose(fid); - CHECK_I(status, "H5Fclose"); -} - -/*------------------------------------------------------------------------- - * Function: test_stab - * - * Purpose: Test symbol tables - * - * Return: void - * - * Programmer: Robb Matzke - * matzke@viper.llnl.gov - * Aug 7 1997 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -test_stab(void) -{ - test_1(); - test_2(); -} - - -/*------------------------------------------------------------------------- - * Function: cleanup_stab - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * July 2, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -void -cleanup_stab(void) -{ - remove(TEST_FILE_1); - remove(TEST_FILE_2); -} - |