mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r511] Changes since 19980715
---------------------- ./src/H5Flow.c ./src/H5Fprivate.h ./src/H5Fsplit.c Changed the allocation size request from `size_t' to `hsize_t' because it was overflowing for the `big' test. ./src/H5detect.c If `long double' and `double' are the same size then we define H5T_NATIVE_LDOUBLE to be the same as H5T_NATIVE_DOUBLE. Similarly for `long' vs. `long long' and `unsigned long' vs. `unsigned long long'. ./test/Makefile.in Added `big' to the list of tests to normally run. ./test/big.c Added a check to see if the file system supports holes and if it doesn't then the test is skipped.
This commit is contained in:
parent
8ad2f1aae0
commit
077d7c8c86
2
README
2
README
@ -1,4 +1,4 @@
|
||||
This is hdf5-1.0.23a released on 1998-06-15 16:36 UTC
|
||||
This is hdf5-1.0.23a released on 1998-06-15 18:31 UTC
|
||||
Please refer to the INSTALL file for installation instructions.
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
|
@ -821,11 +821,10 @@ H5D_create(H5G_t *loc, const char *name, const H5T_t *type, const H5S_t *space,
|
||||
* Also, only the slowest varying dimension of a simple data space
|
||||
* can be extendible.
|
||||
*/
|
||||
if ((ndims=H5S_extent_dims(space, new_dset->layout.dim, max_dim)) < 0) {
|
||||
if ((ndims=H5S_extent_dims(space, new_dset->layout.dim, max_dim))<0) {
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL,
|
||||
"unable to initialize contiguous storage");
|
||||
}
|
||||
|
||||
for (i=1; i<ndims; i++) {
|
||||
if (max_dim[i]>new_dset->layout.dim[i]) {
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL,
|
||||
|
@ -545,7 +545,7 @@ H5F_low_extend(H5F_low_t *lf, const H5F_access_t *access_parms, intn op,
|
||||
*/
|
||||
intn
|
||||
H5F_low_alloc (H5F_low_t *lf, intn op, hsize_t alignment, hsize_t threshold,
|
||||
size_t size, H5MF_free_t *blk, haddr_t *addr/*out*/)
|
||||
hsize_t size, H5MF_free_t *blk, haddr_t *addr/*out*/)
|
||||
{
|
||||
intn ret_value = FAIL;
|
||||
hsize_t wasted;
|
||||
|
@ -323,7 +323,7 @@ typedef struct H5F_low_class_t {
|
||||
const H5F_access_t *access_parms,
|
||||
intn op, hsize_t size, haddr_t *addr/*out*/);
|
||||
intn (*alloc)(struct H5F_low_t *lf, intn op, hsize_t alignment,
|
||||
hsize_t threshold, size_t size, H5MF_free_t *blk,
|
||||
hsize_t threshold, hsize_t size, H5MF_free_t *blk,
|
||||
haddr_t *addr/*out*/);
|
||||
} H5F_low_class_t;
|
||||
|
||||
@ -557,7 +557,7 @@ herr_t H5F_low_extend(H5F_low_t *lf, const H5F_access_t *access_parms,
|
||||
intn op, hsize_t size, haddr_t *addr/*out*/);
|
||||
herr_t H5F_low_seteof(H5F_low_t *lf, const haddr_t *addr);
|
||||
intn H5F_low_alloc (H5F_low_t *lf, intn op, hsize_t alignment,
|
||||
hsize_t threshold, size_t size, H5MF_free_t *blk,
|
||||
hsize_t threshold, hsize_t size, H5MF_free_t *blk,
|
||||
haddr_t *addr/*out*/);
|
||||
hbool_t H5F_low_access(const H5F_low_class_t *type, const char *name,
|
||||
const H5F_access_t *access_parms, int mode,
|
||||
|
@ -44,7 +44,7 @@ static herr_t H5F_split_flush(H5F_low_t *lf, const H5F_access_t *access_parms);
|
||||
static herr_t H5F_split_extend(H5F_low_t *lf, const H5F_access_t *access_parms,
|
||||
intn op, hsize_t size, haddr_t *addr/*out*/);
|
||||
static intn H5F_split_alloc (H5F_low_t *lf, intn op, hsize_t alignment,
|
||||
hsize_t threshold, size_t size, H5MF_free_t *blk,
|
||||
hsize_t threshold, hsize_t size, H5MF_free_t *blk,
|
||||
haddr_t *addr/*out*/);
|
||||
|
||||
const H5F_low_class_t H5F_LOW_SPLIT_g[1] = {{
|
||||
@ -487,7 +487,7 @@ H5F_split_extend(H5F_low_t *lf, const H5F_access_t *access_parms, intn op,
|
||||
*/
|
||||
static intn
|
||||
H5F_split_alloc (H5F_low_t *lf, intn op, hsize_t alignment, hsize_t threshold,
|
||||
size_t size, H5MF_free_t *blk, haddr_t *addr/*out*/)
|
||||
hsize_t size, H5MF_free_t *blk, haddr_t *addr/*out*/)
|
||||
{
|
||||
intn ret_value = FAIL;
|
||||
hsize_t wasted;
|
||||
|
@ -937,19 +937,41 @@ main(void)
|
||||
|
||||
print_header();
|
||||
|
||||
DETECT_I (signed char, CHAR, d[nd]); nd++;
|
||||
DETECT_I (unsigned char, UCHAR, d[nd]); nd++;
|
||||
DETECT_I (short, SHORT, d[nd]); nd++;
|
||||
DETECT_I (unsigned short, USHORT, d[nd]); nd++;
|
||||
DETECT_I (int, INT, d[nd]); nd++;
|
||||
DETECT_I (unsigned int, UINT, d[nd]); nd++;
|
||||
DETECT_I (long, LONG, d[nd]); nd++;
|
||||
DETECT_I (unsigned long, ULONG, d[nd]); nd++;
|
||||
DETECT_I (long long, LLONG, d[nd]); nd++;
|
||||
DETECT_I (unsigned long long, ULLONG, d[nd]); nd++;
|
||||
DETECT_F (float, FLOAT, d[nd]); nd++;
|
||||
DETECT_F (double, DOUBLE, d[nd]); nd++;
|
||||
DETECT_F (long double, LDOUBLE, d[nd]); nd++;
|
||||
DETECT_I(signed char, CHAR, d[nd]); nd++;
|
||||
DETECT_I(unsigned char, UCHAR, d[nd]); nd++;
|
||||
DETECT_I(short, SHORT, d[nd]); nd++;
|
||||
DETECT_I(unsigned short, USHORT, d[nd]); nd++;
|
||||
DETECT_I(int, INT, d[nd]); nd++;
|
||||
DETECT_I(unsigned int, UINT, d[nd]); nd++;
|
||||
DETECT_I(long, LONG, d[nd]); nd++;
|
||||
DETECT_I(unsigned long, ULONG, d[nd]); nd++;
|
||||
|
||||
#if SIZEOF_LONG == SIZEOF_LONG_LONG
|
||||
/*
|
||||
* If sizeof(long)==sizeof(long long) then assume that `long long' isn't
|
||||
* supported and use `long' instead. This suppresses warnings on some
|
||||
* systems.
|
||||
*/
|
||||
DETECT_I(long, LLONG, d[nd]); nd++;
|
||||
DETECT_I(unsigned long, ULLONG, d[nd]); dn++;
|
||||
#else
|
||||
DETECT_I(long long, LLONG, d[nd]); nd++;
|
||||
DETECT_I(unsigned long long, ULLONG, d[nd]); nd++;
|
||||
#endif
|
||||
|
||||
DETECT_F(float, FLOAT, d[nd]); nd++;
|
||||
DETECT_F(double, DOUBLE, d[nd]); nd++;
|
||||
|
||||
#if SIZEOF_DOUBLE == SIZEOF_LONG_DOUBLE
|
||||
/*
|
||||
* If sizeof(double)==sizeof(long double) then assume that `long double'
|
||||
* isn't supported and use `double' instead. This suppresses warnings on
|
||||
* some systems.
|
||||
*/
|
||||
DETECT_F(double, LDOUBLE, d[nd]); nd++;
|
||||
#else
|
||||
DETECT_F(long double, LDOUBLE, d[nd]); nd++;
|
||||
#endif
|
||||
|
||||
print_results (nd, d);
|
||||
return 0;
|
||||
|
@ -283,29 +283,6 @@ shtype.o: \
|
||||
../src/H5Ppublic.h \
|
||||
../src/H5Zpublic.h \
|
||||
../src/H5Spublic.h
|
||||
big.o: \
|
||||
big.c \
|
||||
../src/hdf5.h \
|
||||
../src/H5public.h \
|
||||
../src/H5config.h \
|
||||
../src/H5Ipublic.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 \
|
||||
../src/H5HLpublic.h \
|
||||
../src/H5MFpublic.h \
|
||||
../src/H5MMpublic.h \
|
||||
../src/H5Opublic.h \
|
||||
../src/H5Ppublic.h \
|
||||
../src/H5Zpublic.h \
|
||||
../src/H5Spublic.h \
|
||||
../src/H5Tpublic.h \
|
||||
../src/H5private.h
|
||||
links.o: \
|
||||
links.c \
|
||||
../src/hdf5.h \
|
||||
@ -470,3 +447,26 @@ dsets.o: \
|
||||
../src/H5Zpublic.h \
|
||||
../src/H5Spublic.h \
|
||||
../src/H5Tpublic.h
|
||||
big.o: \
|
||||
big.c \
|
||||
../src/hdf5.h \
|
||||
../src/H5public.h \
|
||||
../src/H5config.h \
|
||||
../src/H5Ipublic.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 \
|
||||
../src/H5HLpublic.h \
|
||||
../src/H5MFpublic.h \
|
||||
../src/H5MMpublic.h \
|
||||
../src/H5Opublic.h \
|
||||
../src/H5Ppublic.h \
|
||||
../src/H5Zpublic.h \
|
||||
../src/H5Spublic.h \
|
||||
../src/H5Tpublic.h \
|
||||
../src/H5private.h
|
||||
|
@ -12,7 +12,7 @@ CPPFLAGS=-I. -I../src @CPPFLAGS@
|
||||
# These are our main targets. They should be listed in the order to be
|
||||
# executed, generally most specific tests to least specific tests.
|
||||
TESTS=testhdf5 gheap hyperslab istore bittests dtypes dsets cmpd_dset extend \
|
||||
external shtype links
|
||||
external shtype links big
|
||||
TIMINGS=iopipe chunk
|
||||
|
||||
# Temporary files
|
||||
@ -22,7 +22,8 @@ MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \
|
||||
extern_2.raw extern_2b.raw extern_3.raw extern_3b.raw \
|
||||
extern_4.raw extern_4b.raw iopipe.raw iopipe.h5 gheap0.h5 \
|
||||
gheap1.h5 gheap2.h5 gheap3.h5 gheap4.h5 shtype0.h5 shtype1.h5 \
|
||||
shtype2a.h5 shtype2b.h5 shtype3.h5 links.h5 chunk.h5
|
||||
shtype2a.h5 shtype2b.h5 shtype3.h5 links.h5 chunk.h5 big.data \
|
||||
big[0-9][0-9][0-9][0-9][0-9].h5
|
||||
|
||||
# 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
|
||||
|
247
test/big.c
247
test/big.c
@ -7,16 +7,21 @@
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <hdf5.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <H5private.h> /*needed for HDfprintf() */
|
||||
|
||||
#define FNAME "big%05d.h5"
|
||||
#define DNAME "big.data"
|
||||
#define WRT_N 50
|
||||
#define WRT_SIZE 4*1024
|
||||
#define FAMILY_SIZE 1024*1024*1024
|
||||
#define GB8LL ((unsigned long long)8*1024*1024*1024)
|
||||
|
||||
static hsize_t
|
||||
randll (hsize_t limit)
|
||||
@ -27,34 +32,96 @@ randll (hsize_t limit)
|
||||
return acc % limit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
* Function: display_error_cb
|
||||
*
|
||||
* Purpose: Creates a *big* dataset.
|
||||
* Purpose: Displays the error stack after printing "*FAILED*".
|
||||
*
|
||||
* Return: Success:
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure:
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, April 8, 1998
|
||||
* Wednesday, March 4, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
static herr_t
|
||||
display_error_cb (void __unused__ *client_data)
|
||||
{
|
||||
puts ("*FAILED*");
|
||||
H5Eprint (stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: is_sparse
|
||||
*
|
||||
* Purpose: Determines if the file system of the current working
|
||||
* directory supports holes.
|
||||
*
|
||||
* Return: Success: Non-zero if holes are supported; zero
|
||||
* otherwise.
|
||||
*
|
||||
* Failure: zero
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, July 15, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
is_sparse(void)
|
||||
{
|
||||
int fd;
|
||||
struct stat sb;
|
||||
|
||||
if ((fd=open("x.h5", O_RDWR|O_TRUNC|O_CREAT, 0666))<0) return 0;
|
||||
if (lseek(fd, 1024*1024, SEEK_SET)!=1024*1024) return 0;
|
||||
if (5!=write(fd, "hello", 5)) return 0;
|
||||
if (stat("x.h5", &sb)<0) return 0;
|
||||
if (unlink("x.h5")<0) return 0;
|
||||
return (sb.st_blocks*512 < (unsigned)sb.st_size);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: writer
|
||||
*
|
||||
* Purpose: Creates a *big* dataset.
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: >0
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, April 8, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Robb Matzke, 15 Jul 1998
|
||||
* Addresses are written to the file DNAME instead of stdout.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
writer (int wrt_n)
|
||||
{
|
||||
hsize_t size1[4] = {8, 1024, 1024, 1024};
|
||||
hsize_t size2[1] = {8589934592LL};
|
||||
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;
|
||||
int *buf = malloc (sizeof(int) * WRT_SIZE);
|
||||
int i, j;
|
||||
FILE *out = fopen(DNAME, "w");
|
||||
|
||||
printf("%-70s", "Writing large dataset");
|
||||
|
||||
/*
|
||||
* Make sure that `hsize_t' is large enough to represent the entire data
|
||||
@ -66,39 +133,53 @@ writer (int wrt_n)
|
||||
* 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
|
||||
*/
|
||||
plist = H5Pcreate (H5P_FILE_ACCESS);
|
||||
H5Pset_family (plist, FAMILY_SIZE, H5P_DEFAULT);
|
||||
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);
|
||||
H5Pclose (plist);
|
||||
if (file<0) goto error;
|
||||
if (H5Pclose (plist)<0) goto error;
|
||||
|
||||
/* Create simple data spaces according to the size specified above. */
|
||||
space1 = H5Screate_simple (4, size1, size1);
|
||||
space2 = H5Screate_simple (1, size2, size2);
|
||||
if ((space1 = H5Screate_simple (4, size1, size1))<0 ||
|
||||
(space2 = H5Screate_simple (1, size2, size2))<0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Create the datasets */
|
||||
d1 = H5Dcreate (file, "d1", H5T_NATIVE_INT, space1, H5P_DEFAULT);
|
||||
d2 = H5Dcreate (file, "d2", H5T_NATIVE_INT, space2, H5P_DEFAULT);
|
||||
if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, space1, H5P_DEFAULT))<0 ||
|
||||
(d2=H5Dcreate (file, "d2", H5T_NATIVE_INT, space2, H5P_DEFAULT))<0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
||||
/* Write some things to them randomly */
|
||||
hs_size[0] = WRT_SIZE;
|
||||
mem_space = H5Screate_simple (1, hs_size, hs_size);
|
||||
if ((mem_space = H5Screate_simple (1, hs_size, hs_size))<0) goto error;
|
||||
for (i=0; i<wrt_n; i++) {
|
||||
hs_start[0] = randll (size2[0]);
|
||||
HDfprintf (stdout, "#%03d 0x%016Hx\n", i, hs_start[0]);
|
||||
H5Sselect_hyperslab (space2, H5S_SELECT_SET, hs_start, NULL, hs_size, NULL);
|
||||
HDfprintf (out, "#%03d 0x%016Hx\n", i, hs_start[0]);
|
||||
if (H5Sselect_hyperslab (space2, H5S_SELECT_SET, hs_start, NULL,
|
||||
hs_size, NULL)<0) goto error;
|
||||
for (j=0; j<WRT_SIZE; j++) {
|
||||
buf[j] = i+1;
|
||||
}
|
||||
H5Dwrite (d2, H5T_NATIVE_INT, mem_space, space2, H5P_DEFAULT, buf);
|
||||
if (H5Dwrite (d2, H5T_NATIVE_INT, mem_space, space2,
|
||||
H5P_DEFAULT, buf)<0) goto error;
|
||||
}
|
||||
|
||||
H5Dclose (d1);
|
||||
H5Dclose (d2);
|
||||
H5Sclose (mem_space);
|
||||
H5Sclose (space1);
|
||||
H5Sclose (space2);
|
||||
H5Fclose (file);
|
||||
if (H5Dclose (d1)<0) goto error;
|
||||
if (H5Dclose (d2)<0) goto error;
|
||||
if (H5Sclose (mem_space)<0) goto error;
|
||||
if (H5Sclose (space1)<0) goto error;
|
||||
if (H5Sclose (space2)<0) goto error;
|
||||
if (H5Fclose (file)<0) goto error;
|
||||
free (buf);
|
||||
fclose(out);
|
||||
puts(" PASSED");
|
||||
return 0;
|
||||
|
||||
error:
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -107,7 +188,9 @@ writer (int wrt_n)
|
||||
*
|
||||
* Purpose: Reads some data from random locations in the dataset.
|
||||
*
|
||||
* Return: void
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: >0
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, April 10, 1998
|
||||
@ -116,43 +199,48 @@ writer (int wrt_n)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
reader (const char *script_name)
|
||||
static int
|
||||
reader (void)
|
||||
{
|
||||
FILE *script;
|
||||
hid_t plist, file, mspace, fspace, d2;
|
||||
char ln[64], *s;
|
||||
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;
|
||||
int i, j, zero, wrong, nerrors=0;
|
||||
|
||||
/* Open script file */
|
||||
script = fopen (script_name, "r");
|
||||
script = fopen (DNAME, "r");
|
||||
|
||||
/* Open HDF5 file */
|
||||
plist = H5Pcreate (H5P_FILE_ACCESS);
|
||||
H5Pset_family (plist, FAMILY_SIZE, H5P_DEFAULT);
|
||||
file = H5Fopen (FNAME, H5F_ACC_RDONLY|H5F_ACC_DEBUG, plist);
|
||||
H5Pclose (plist);
|
||||
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) {
|
||||
goto error;
|
||||
}
|
||||
if (H5Pclose (plist)<0) goto error;
|
||||
|
||||
/* Open the dataset */
|
||||
d2 = H5Dopen (file, "d2");
|
||||
fspace = H5Dget_space (d2);
|
||||
if ((d2 = H5Dopen (file, "d2"))<0) goto error;
|
||||
if ((fspace = H5Dget_space (d2))<0) goto error;
|
||||
|
||||
/* Describe `buf' */
|
||||
mspace = H5Screate_simple (1, hs_size, hs_size);
|
||||
if ((mspace = H5Screate_simple (1, hs_size, hs_size))<0) goto error;
|
||||
|
||||
/* Read each region */
|
||||
while (fgets (ln, sizeof(ln), script)) {
|
||||
if ('#'!=ln[0]) break;
|
||||
i = (int)strtol (ln+1, &s, 10);
|
||||
hs_offset[0] = HDstrtoll (s, NULL, 0);
|
||||
HDfprintf (stdout, "#%03d 0x%016Hx", i, hs_offset[0]);
|
||||
HDfprintf (stdout, "#%03d 0x%016Hx%47s", i, hs_offset[0], "");
|
||||
fflush (stdout);
|
||||
|
||||
H5Sselect_hyperslab (fspace, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL);
|
||||
H5Dread (d2, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, buf);
|
||||
if (H5Sselect_hyperslab (fspace, H5S_SELECT_SET, hs_offset, NULL,
|
||||
hs_size, NULL)<0) goto error;
|
||||
if (H5Dread (d2, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, buf)<0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Check */
|
||||
for (j=zero=wrong=0; j<WRT_SIZE; j++) {
|
||||
@ -160,20 +248,57 @@ reader (const char *script_name)
|
||||
else if (buf[j]!=i+1) wrong++;
|
||||
}
|
||||
if (zero) {
|
||||
printf (" *FAILED* (%d zeros)\n", zero);
|
||||
puts("*FAILED*");
|
||||
printf(" %d zero%s\n", zero, 1==zero?"":"s");
|
||||
} else if (wrong) {
|
||||
printf (" *SKIPPED* (possible overlap with another region)\n");
|
||||
puts("--SKIP--");
|
||||
puts(" Possible overlap with another region.");
|
||||
nerrors++;
|
||||
} else {
|
||||
printf (" PASSED\n");
|
||||
puts(" PASSED");
|
||||
}
|
||||
}
|
||||
|
||||
H5Dclose (d2);
|
||||
H5Sclose (mspace);
|
||||
H5Sclose (fspace);
|
||||
H5Fclose (file);
|
||||
if (H5Dclose (d2)<0) goto error;
|
||||
if (H5Sclose (mspace)<0) goto error;
|
||||
if (H5Sclose (fspace)<0) goto error;
|
||||
if (H5Fclose (file)<0) goto error;
|
||||
free (buf);
|
||||
fclose (script);
|
||||
return nerrors;
|
||||
|
||||
error:
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -194,14 +319,24 @@ reader (const char *script_name)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
main (void)
|
||||
{
|
||||
if (1==argc) {
|
||||
writer (WRT_N);
|
||||
} else if (isdigit (argv[1][0])) {
|
||||
writer ((int)strtol(argv[1], NULL, 0));
|
||||
} else {
|
||||
reader (argv[1]);
|
||||
int nerrors = 0;
|
||||
|
||||
/*
|
||||
* We shouldn't run this test if the file system doesn't support holes
|
||||
* because we would generate multi-gigabyte files.
|
||||
*/
|
||||
if (!is_sparse()) {
|
||||
puts("Test skipped because file system does not support holes.");
|
||||
exit(0);
|
||||
}
|
||||
return 0;
|
||||
|
||||
/* Set the error handler */
|
||||
H5Eset_auto (display_error_cb, NULL);
|
||||
|
||||
if ((nerrors=writer(WRT_N))>0) exit(nerrors);
|
||||
nerrors = reader();
|
||||
cleanup();
|
||||
return nerrors;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user