From bac55034d815df3cfb1b1d69999f9f6585d8419c Mon Sep 17 00:00:00 2001 From: Quincey Koziol Date: Tue, 2 Oct 2001 11:58:16 -0500 Subject: [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) --- test/th5s.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/test/th5s.c b/test/th5s.c index df27c16..54c45ac 100644 --- a/test/th5s.c +++ b/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() */ -- cgit v0.12