mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r8252] Purpose:
bug fix new test Description: the fletcher filter used a temporary 2 byte word buffer to compute the checksum. this is non portable between big-endian/little endian. added a test that reads 2 pre-saved files (one LE, other BE) with that filter enabled Solution: replaced with a buffer of 1 byte type Platforms tested: linux solaris solaris 64 bit AIX windows Misc. update:
This commit is contained in:
parent
5ca8720063
commit
472394a0e9
234
test/dsets.c
234
test/dsets.c
@ -23,6 +23,8 @@
|
||||
#include <time.h>
|
||||
|
||||
#include "h5test.h"
|
||||
#include "H5private.h"
|
||||
|
||||
|
||||
/*
|
||||
* This file needs to access private datatypes from the H5Z package.
|
||||
@ -3093,23 +3095,23 @@ error:
|
||||
static herr_t
|
||||
test_filter_delete(hid_t file)
|
||||
{
|
||||
H5Z_filter_t filtn; /* filter identification number */
|
||||
hid_t dsid; /* dataset ID */
|
||||
hid_t sid; /* dataspace ID */
|
||||
hid_t dcpl; /* dataset creation property list ID */
|
||||
hid_t dcpl1; /* dataset creation property list ID */
|
||||
hsize_t dims[2] = {20,20}; /* dataspace dimensions */
|
||||
hsize_t chunk_dims[2] = {10,10}; /* chunk dimensions */
|
||||
size_t nfilters; /* number of filters in DCPL */
|
||||
size_t i;
|
||||
herr_t ret; /* Generic return value */
|
||||
H5Z_filter_t filtn; /* filter identification number */
|
||||
hid_t dsid; /* dataset ID */
|
||||
hid_t sid; /* dataspace ID */
|
||||
hid_t dcpl; /* dataset creation property list ID */
|
||||
hid_t dcpl1; /* dataset creation property list ID */
|
||||
hsize_t dims[2]={20,20}; /* dataspace dimensions */
|
||||
hsize_t chunk_dims[2]={10,10}; /* chunk dimensions */
|
||||
int nfilters; /* number of filters in DCPL */
|
||||
herr_t ret; /* generic return value */
|
||||
int i;
|
||||
|
||||
TESTING("filter deletion");
|
||||
|
||||
/* Create the data space */
|
||||
/* create the data space */
|
||||
if ((sid = H5Screate_simple(2, dims, NULL))<0) goto error;
|
||||
|
||||
/* Create dcpl */
|
||||
/* create dcpl */
|
||||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
|
||||
if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) goto error;
|
||||
|
||||
@ -3125,13 +3127,13 @@ test_filter_delete(hid_t file)
|
||||
if (H5Pset_shuffle (dcpl)<0) goto error;
|
||||
#endif
|
||||
|
||||
/* Create a dataset */
|
||||
/* create a dataset */
|
||||
if ((dsid = H5Dcreate(file,"dsetdel", H5T_NATIVE_INT, sid, dcpl)) <0) goto error;
|
||||
|
||||
/* Get copy of dataset's dataset creation property list */
|
||||
/* get copy of dataset's dataset creation property list */
|
||||
if ((dcpl1=H5Dget_create_plist(dsid))<0) goto error;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
/*----------------------------------------------------------------------
|
||||
* delete the deflate filter
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@ -3144,12 +3146,12 @@ test_filter_delete(hid_t file)
|
||||
|
||||
/* check if filter was deleted */
|
||||
for (i=0; i<nfilters; i++) {
|
||||
filtn = H5Pget_filter(dcpl1,i,0,0,0,0,0);
|
||||
filtn = H5Pget_filter(dcpl1,(unsigned)i,0,0,0,0,0);
|
||||
if (H5Z_FILTER_DEFLATE==filtn)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Try to delete the deflate filter again */
|
||||
/* try to delete the deflate filter again */
|
||||
H5E_BEGIN_TRY {
|
||||
ret=H5Premove_filter(dcpl1,H5Z_FILTER_DEFLATE);
|
||||
} H5E_END_TRY;
|
||||
@ -3161,7 +3163,7 @@ test_filter_delete(hid_t file)
|
||||
|
||||
#endif /*H5_HAVE_FILTER_DEFLATE*/
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
/*----------------------------------------------------------------------
|
||||
* delete all filters
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@ -3174,7 +3176,7 @@ test_filter_delete(hid_t file)
|
||||
/* check if filters were deleted */
|
||||
if (nfilters)goto error;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
/*----------------------------------------------------------------------
|
||||
* close
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
@ -3198,6 +3200,198 @@ error:
|
||||
return -1;
|
||||
} /* end test_filter_delete() */
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: auxread_fdata
|
||||
*
|
||||
* Purpose: reads a dataset "NAME" from FID
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Pedro Vicente
|
||||
* Monday, March 8, 2004
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
auxread_fdata(hid_t fid, const char *name)
|
||||
{
|
||||
hid_t dset_id; /* dataset ID */
|
||||
hid_t dcpl_id; /* dataset creation property list ID */
|
||||
hid_t space_id; /* space ID */
|
||||
hid_t ftype_id; /* file data type ID */
|
||||
hid_t mtype_id; /* memory data type ID */
|
||||
size_t msize; /* memory size of memory type */
|
||||
void *buf=NULL; /* data buffer */
|
||||
hsize_t nelmts; /* number of elements in dataset */
|
||||
int rank; /* rank of dataset */
|
||||
hsize_t dims[H5S_MAX_RANK];/* dimensions of dataset */
|
||||
int i;
|
||||
|
||||
if ((dset_id=H5Dopen(fid,name))<0)
|
||||
goto error;
|
||||
if ((space_id=H5Dget_space(dset_id))<0)
|
||||
goto error;
|
||||
if ((ftype_id=H5Dget_type (dset_id))<0)
|
||||
goto error;
|
||||
if ((dcpl_id=H5Dget_create_plist(dset_id))<0)
|
||||
goto error;
|
||||
if ( (rank=H5Sget_simple_extent_ndims(space_id))<0)
|
||||
goto error;
|
||||
HDmemset(dims, 0, sizeof dims);
|
||||
if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0)
|
||||
goto error;
|
||||
nelmts=1;
|
||||
for (i=0; i<rank; i++)
|
||||
nelmts*=dims[i];
|
||||
if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0)
|
||||
goto error;
|
||||
if ((msize=H5Tget_size(mtype_id))==0)
|
||||
goto error;
|
||||
|
||||
if (nelmts)
|
||||
{
|
||||
buf=(void *) HDmalloc((unsigned)(nelmts*msize));
|
||||
if ( buf==NULL){
|
||||
printf( "cannot read into memory\n" );
|
||||
goto error;
|
||||
}
|
||||
if (H5Dread(dset_id,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (H5Pclose(dcpl_id)<0)
|
||||
goto error;
|
||||
if (H5Sclose(space_id)<0)
|
||||
goto error;
|
||||
if (H5Dclose(dset_id)<0)
|
||||
goto error;
|
||||
if (buf)
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(dcpl_id);
|
||||
H5Sclose(space_id);
|
||||
H5Dclose(dset_id);
|
||||
H5Tclose(ftype_id);
|
||||
H5Tclose(mtype_id);
|
||||
if (buf)
|
||||
free(buf);
|
||||
} H5E_END_TRY;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_filters_endianess
|
||||
*
|
||||
* Purpose: Reads/writes data with filters (big-endian/little-endian data)
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Pedro Vicente
|
||||
* Monday, March 8, 2004
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
test_filters_endianess(void)
|
||||
{
|
||||
hid_t fid; /* file ID */
|
||||
hid_t dsid; /* dataset ID */
|
||||
hid_t sid; /* dataspace ID */
|
||||
hid_t dcpl; /* dataset creation property list ID */
|
||||
hsize_t dims[1]={2}; /* dataspace dimensions */
|
||||
hsize_t chunk_dims[1]={2}; /* chunk dimensions */
|
||||
int buf[2];
|
||||
int rank=1;
|
||||
int i;
|
||||
|
||||
for (i=0; i<2; i++){
|
||||
buf[i]=1;
|
||||
}
|
||||
|
||||
TESTING("filters with big-endian/little-endian data");
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* step1: create a file
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* create a file using default properties */
|
||||
fid=H5Fcreate("test_filters.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
|
||||
|
||||
/* create a data space */
|
||||
if ((sid = H5Screate_simple(rank,dims,NULL))<0) goto error;
|
||||
|
||||
/* create dcpl */
|
||||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
|
||||
if(H5Pset_chunk(dcpl,rank,chunk_dims)<0) goto error;
|
||||
|
||||
#if defined H5_HAVE_FILTER_FLETCHER32
|
||||
if (H5Pset_fletcher32 (dcpl)<0) goto error;
|
||||
#endif
|
||||
|
||||
/* create a dataset */
|
||||
if ((dsid = H5Dcreate(fid,"dset",H5T_NATIVE_INT,sid,dcpl)) <0) goto error;
|
||||
|
||||
if(H5Dwrite(dsid,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
|
||||
goto error;
|
||||
|
||||
/* close */
|
||||
if (H5Pclose (dcpl)<0) goto error;
|
||||
if (H5Dclose (dsid)<0) goto error;
|
||||
if (H5Sclose (sid)<0) goto error;
|
||||
if (H5Fclose (fid)<0) goto error;
|
||||
/*-------------------------------------------------------------------------
|
||||
* step 2: open a file written on a little-endian machine in step 1
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* open */
|
||||
if ((fid=H5Fopen("test_filters_le.hdf5",H5F_ACC_RDONLY,H5P_DEFAULT))<0)
|
||||
goto error;
|
||||
|
||||
/* read */
|
||||
if (auxread_fdata(fid,"dset")<0) goto error;
|
||||
|
||||
/* close */
|
||||
if (H5Fclose(fid)<0) goto error;
|
||||
/*-------------------------------------------------------------------------
|
||||
* step 3: open a file written on a big-endian machine in step 1
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
/* open */
|
||||
if ((fid=H5Fopen("test_filters_be.hdf5",H5F_ACC_RDONLY,H5P_DEFAULT))<0)
|
||||
goto error;
|
||||
|
||||
/* read */
|
||||
if (auxread_fdata(fid,"dset")<0) goto error;
|
||||
|
||||
/* close */
|
||||
if (H5Fclose(fid)<0) goto error;
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Pclose(dcpl);
|
||||
H5Dclose(dsid);
|
||||
H5Sclose(sid);
|
||||
H5Fclose(fid);
|
||||
} H5E_END_TRY;
|
||||
return -1;
|
||||
} /* end test_filters_endianess() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
@ -3247,7 +3441,6 @@ main(void)
|
||||
if (H5Gset_comment(grp, ".", "Causes diagnostic messages to be emitted")<0)
|
||||
goto error;
|
||||
if (H5Gclose (grp)<0) goto error;
|
||||
|
||||
nerrors += test_create(file)<0 ?1:0;
|
||||
nerrors += test_simple_io(fapl)<0 ?1:0;
|
||||
nerrors += test_compact_io(fapl)<0 ?1:0;
|
||||
@ -3265,6 +3458,7 @@ main(void)
|
||||
nerrors += test_can_apply_szip(file)<0 ?1:0;
|
||||
nerrors += test_compare_dcpl(file)<0 ?1:0;
|
||||
nerrors += test_filter_delete(file)<0 ?1:0;
|
||||
nerrors += test_filters_endianess()<0 ?1:0;
|
||||
|
||||
if (H5Fclose(file)<0) goto error;
|
||||
if (nerrors) goto error;
|
||||
|
@ -141,6 +141,21 @@ int make_filters(hid_t loc_id)
|
||||
if (make_dset(loc_id,"dset_shuffle",sid,dcpl,buf)<0)
|
||||
goto out;
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* checksum
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#if 1
|
||||
/* remove the filters from the dcpl */
|
||||
if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
|
||||
goto out;
|
||||
/* set the checksum filter */
|
||||
if (H5Pset_fletcher32(dcpl)<0)
|
||||
goto out;
|
||||
if (make_dset(loc_id,"dset_fletcher32",sid,dcpl,buf)<0)
|
||||
goto out;
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* shuffle + SZIP
|
||||
*-------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user