mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r4509] Purpose:
Test bug fix. Description: When reading or writing to chunked datasets and the data needed datatype conversion, and the amount of data was more than one conversion buffer, data in the conversion buffer was getting corrupted. Solution: Corrected error in advancing buffer pointer where it was being advanced by the number of elements instead of the number of bytes. Platforms tested: FreeBSD 4.4 (hawkwind)
This commit is contained in:
parent
d808a5b53a
commit
bac55034d8
91
test/th5s.c
91
test/th5s.c
@ -464,6 +464,94 @@ test_h5s_compound_scalar_read(void)
|
||||
CHECK(ret, FAIL, "H5Fclose");
|
||||
} /* test_h5s_compound_scalar_read() */
|
||||
|
||||
/* Data arrays for chunk test */
|
||||
double chunk_data_dbl[50000][3];
|
||||
float chunk_data_flt[50000][3];
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s_chunk(): Exercise chunked I/O, testing when data conversion
|
||||
** is necessary and the entire chunk read in doesn't fit into the
|
||||
** conversion buffer
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_h5s_chunk(void)
|
||||
{
|
||||
herr_t status;
|
||||
hid_t fileID, dsetID;
|
||||
hid_t plist_id;
|
||||
hid_t space_id;
|
||||
hsize_t dims[2];
|
||||
hsize_t csize[2];
|
||||
int i,j;
|
||||
|
||||
fileID = H5Fcreate(DATAFILE,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
|
||||
CHECK(fileID, FAIL, "H5Fcreate");
|
||||
|
||||
plist_id = H5Pcreate(H5P_DATASET_CREATE);
|
||||
CHECK(plist_id, FAIL, "H5Pcreate");
|
||||
|
||||
csize[0] = 50000;
|
||||
csize[1] = 3;
|
||||
status = H5Pset_chunk(plist_id, 2, csize);
|
||||
CHECK(status, FAIL, "H5Pset_chunk");
|
||||
|
||||
/* Create the data space */
|
||||
dims[0] = 50000;
|
||||
dims[1] = 3;
|
||||
space_id = H5Screate_simple(2, dims, NULL);
|
||||
CHECK(space_id, FAIL, "H5Screate_simple");
|
||||
|
||||
dsetID = H5Dcreate(fileID,"coords",H5T_NATIVE_FLOAT,space_id,plist_id);
|
||||
CHECK(dsetID, FAIL, "H5Dcreate");
|
||||
|
||||
/* Initialize float array */
|
||||
for(i=0; i<50000; i++)
|
||||
for(j=0; j<3; j++)
|
||||
chunk_data_flt[i][j]=i*2.5-j*100.3;
|
||||
|
||||
status= H5Dwrite(dsetID,H5T_NATIVE_FLOAT,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_flt);
|
||||
CHECK(status, FAIL, "H5Dwrite");
|
||||
|
||||
status=H5Pclose(plist_id);
|
||||
CHECK(status, FAIL, "H5Pclose");
|
||||
status=H5Sclose(space_id);
|
||||
CHECK(status, FAIL, "H5Sclose");
|
||||
status=H5Dclose(dsetID);
|
||||
CHECK(status, FAIL, "H5Dclose");
|
||||
status=H5Fclose(fileID);
|
||||
CHECK(status, FAIL, "H5Fclose");
|
||||
|
||||
/* Reset/initialize the data arrays to read in */
|
||||
HDmemset(chunk_data_dbl,0,sizeof(double)*50000*3);
|
||||
HDmemset(chunk_data_flt,0,sizeof(float)*50000*3);
|
||||
|
||||
fileID = H5Fopen(DATAFILE,H5F_ACC_RDONLY,H5P_DEFAULT);
|
||||
CHECK(fileID, FAIL, "H5Fopen");
|
||||
dsetID = H5Dopen(fileID,"coords");
|
||||
CHECK(dsetID, FAIL, "H5Dopen");
|
||||
|
||||
status= H5Dread (dsetID,H5T_NATIVE_DOUBLE,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_dbl);
|
||||
CHECK(status, FAIL, "H5Dread");
|
||||
status= H5Dread (dsetID,H5T_NATIVE_FLOAT,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_flt);
|
||||
CHECK(status, FAIL, "H5Dread");
|
||||
|
||||
status=H5Dclose(dsetID);
|
||||
CHECK(status, FAIL, "H5Dclose");
|
||||
status=H5Fclose(fileID);
|
||||
CHECK(status, FAIL, "H5Fclose");
|
||||
|
||||
for(i=0; i<50000; i++) {
|
||||
for(j=0; j<3; j++) {
|
||||
if(chunk_data_dbl[i][j]!=chunk_data_flt[i][j]) {
|
||||
num_errs++;
|
||||
printf("chunk_data_dbl[%d][%d]=%f, chunk_data_flt[%d][%d]=%f\n",i,j,chunk_data_dbl[i][j],i,j,chunk_data_flt[i][j]);
|
||||
} /* end if */
|
||||
} /* end for */
|
||||
} /* end for */
|
||||
} /* test_h5s_chunk() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5s(): Main H5S (dataspace) testing routine.
|
||||
@ -480,6 +568,9 @@ test_h5s(void)
|
||||
test_h5s_scalar_read(); /* Test scalar H5S reading code */
|
||||
test_h5s_compound_scalar_write(); /* Test compound datatype scalar H5S writing code */
|
||||
test_h5s_compound_scalar_read(); /* Test compound datatype scalar H5S reading code */
|
||||
|
||||
/* This test was added later to exercise a bug in chunked I/O */
|
||||
test_h5s_chunk(); /* Exercise bug fix for chunked I/O */
|
||||
} /* test_h5s() */
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user