summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2008-02-11 20:13:23 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2008-02-11 20:13:23 (GMT)
commit31e6484930b140b9bc827a534a7764ceccb7476b (patch)
tree6256a142bd764a39a2e8474febb6db757fe1fbc8
parent349702f97d852c5bbde3f3cc5b9c3bdc2d5b15da (diff)
downloadhdf5-31e6484930b140b9bc827a534a7764ceccb7476b.zip
hdf5-31e6484930b140b9bc827a534a7764ceccb7476b.tar.gz
hdf5-31e6484930b140b9bc827a534a7764ceccb7476b.tar.bz2
[svn-r14549] Added more tests. Test both H5Sselect_elements and H5Sselect_hyperslab, for both chunked and
contiguous datasets. Tested on smirom, kagiso, and linew.
-rw-r--r--test/tcoords.c290
1 files changed, 249 insertions, 41 deletions
diff --git a/test/tcoords.c b/test/tcoords.c
index ab921d8..c9d4316 100644
--- a/test/tcoords.c
+++ b/test/tcoords.c
@@ -29,21 +29,31 @@
#define FILENAME "coord.h5"
+#define SINGLE_END_DSET "single_end_dset"
+#define MULTI_ENDS_SEL_HYPER_DSET "multiple_ends_dset"
+
+#define NAME_LEN 128
+
+/* Data written to the dataset for single block test. Global variable
+ * for convenience. */
+int da_buffer[2][3][6][2];
+
/***********************************************************
**
-** test_single_end(): Test full hyperslab selection of only
+** test_singleEnd_selElements(): Test element selection of only
** one block.
**
*************************************************************/
-static void test_single_end(hid_t file)
+static void test_singleEnd_selElements(hid_t file, hbool_t is_chunked)
{
hid_t sid, plid, did, msid;
+ char dset_name[NAME_LEN]; /* Dataset name */
+ size_t elmts_numb;
herr_t ret; /* Generic error return */
int i, j, k;
hsize_t da_dims[4] = { 2, 3, 6, 2 };
hsize_t da_chunksize[4] = { 1, 3, 3, 2 };
- int da_buffer[2][3][6][2];
-
+
/* For testing the full selection in the fastest-growing end */
int mem1_buffer[1][1][6][2];
hsize_t mem1_dims[4] = { 1, 1, 6, 2 };
@@ -73,10 +83,24 @@ static void test_single_end(hid_t file)
/* For testing the full selection in the middle dimensions */
int mem3_buffer[1][3][6][1];
hsize_t mem3_dims[4] = { 1, 3, 6, 1 };
- hsize_t mem3_start[4] = { 0, 0, 0, 0 };
- hsize_t mem3_count[4] = { 1, 1, 1, 1 };
- hsize_t mem3_stride[4] = { 1, 1, 1, 1 };
- hsize_t mem3_block[4] = { 1, 3, 6, 1 };
+ hsize_t da_elmts3[18][4] = { {0, 0, 0, 0},
+ {0, 0, 1, 0},
+ {0, 0, 2, 0},
+ {0, 0, 3, 0},
+ {0, 0, 4, 0},
+ {0, 0, 5, 0},
+ {0, 1, 0, 0},
+ {0, 1, 1, 0},
+ {0, 1, 2, 0},
+ {0, 1, 3, 0},
+ {0, 1, 4, 0},
+ {0, 1, 5, 0},
+ {0, 2, 0, 0},
+ {0, 2, 1, 0},
+ {0, 2, 2, 0},
+ {0, 2, 3, 0},
+ {0, 2, 4, 0},
+ {0, 2, 5, 0} };
/* Create and write the dataset */
sid = H5Screate_simple(4, da_dims, da_dims);
@@ -85,17 +109,26 @@ static void test_single_end(hid_t file)
plid = H5Pcreate(H5P_DATASET_CREATE);
CHECK(plid, FAIL, "H5Pcreate");
- ret = H5Pset_chunk(plid, 4, da_chunksize);
- CHECK(ret, FAIL, "H5Pset_chunk");
+ if(is_chunked) {
+ ret = H5Pset_chunk(plid, 4, da_chunksize);
+ CHECK(ret, FAIL, "H5Pset_chunk");
+ }
+
+ /* Construct dataset's name */
+ memset(dset_name, 0, (size_t)NAME_LEN);
+ strcat(dset_name, SINGLE_END_DSET);
+ if(is_chunked)
+ strcat(dset_name, "_chunked");
- did = H5Dcreate2(file, "single_end", H5T_NATIVE_INT, sid, H5P_DEFAULT, plid, H5P_DEFAULT);
+ did = H5Dcreate2(file, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, plid, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dcreate2");
+ /* Initialize the data to be written to file */
for(i=0; i<2; i++) {
for(j=0; j<3; j++) {
for(k=0; k<6; k++) {
da_buffer[i][j][k][0] = i*100 + j*10 + k;
- da_buffer[i][j][k][0] = i*100 + j*10 + k + 1;
+ da_buffer[i][j][k][1] = i*100 + j*10 + k + 1;
}
}
}
@@ -109,13 +142,16 @@ static void test_single_end(hid_t file)
/* ****** Case 1: ******
* Testing the full selection in the fastest-growing end */
- did = H5Dopen2(file, "single_end", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
- ret = H5Sselect_elements(sid, H5S_SELECT_SET, 12, da_elmts1);
+ elmts_numb = 12;
+
+ ret = H5Sselect_elements(sid, H5S_SELECT_SET, elmts_numb, da_elmts1);
CHECK(ret, FAIL, "H5Sselect_elements");
+ /* Dataspace for memory buffer */
msid = H5Screate_simple(4, mem1_dims, mem1_dims);
CHECK(msid, FAIL, "H5Screate_simple");
@@ -139,13 +175,16 @@ static void test_single_end(hid_t file)
/* ****** Case 2: ******
* Testing the full selection in the slowest-growing end */
- did = H5Dopen2(file, "single_end", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
- ret = H5Sselect_elements(sid, H5S_SELECT_SET, 6, da_elmts2);
+ elmts_numb = 6;
+
+ ret = H5Sselect_elements(sid, H5S_SELECT_SET, elmts_numb, da_elmts2);
CHECK(ret, FAIL, "H5Sselect_elements");
+ /* Dataspace for memory buffer */
msid = H5Screate_simple(4, mem2_dims, mem2_dims);
CHECK(msid, FAIL, "H5Screate_simple");
@@ -169,13 +208,16 @@ static void test_single_end(hid_t file)
/* ****** Case 3: ******
* Testing the full selection in the middle dimensions */
- did = H5Dopen2(file, "single_end", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
- ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem3_start, mem3_stride, mem3_count, mem3_block);
- CHECK(ret, FAIL, "H5Sselect_hyperslab");
+ elmts_numb = 18;
+ ret = H5Sselect_elements(sid, H5S_SELECT_SET, elmts_numb, da_elmts3);
+ CHECK(ret, FAIL, "H5Sselect_elements");
+
+ /* Dataspace for memory buffer */
msid = H5Screate_simple(4, mem3_dims, mem3_dims);
CHECK(msid, FAIL, "H5Screate_simple");
@@ -205,6 +247,153 @@ static void test_single_end(hid_t file)
CHECK(ret, FAIL, "H5Pclose");
}
+/***********************************************************
+**
+** test_singleEnd_selHyperslab(): Test full hyperslab selection
+** of only one block.
+**
+*************************************************************/
+static void test_singleEnd_selHyperslab(hid_t file, hbool_t is_chunked)
+{
+ hid_t sid, did, msid;
+ char dset_name[NAME_LEN]; /* Dataset name */
+ herr_t ret; /* Generic error return */
+ int i, j;
+ hsize_t da_dims[4] = { 2, 3, 6, 2 };
+
+ /* For testing the full selection in the fastest-growing end */
+ int mem1_buffer[1][1][6][2];
+ hsize_t mem1_dims[4] = { 1, 1, 6, 2 };
+ hsize_t mem1_start[4] = { 0, 0, 0, 0 };
+ hsize_t mem1_count[4] = { 1, 1, 1, 1 };
+ hsize_t mem1_stride[4] = { 1, 1, 1, 1 };
+ hsize_t mem1_block[4] = { 1, 1, 6, 2 };
+
+ /* For testing the full selection in the slowest-growing end */
+ int mem2_buffer[2][3][1][1];
+ hsize_t mem2_dims[4] = { 2, 3, 1, 1 };
+ hsize_t mem2_start[4] = { 0, 0, 0, 0 };
+ hsize_t mem2_count[4] = { 1, 1, 1, 1 };
+ hsize_t mem2_stride[4] = { 1, 1, 1, 1 };
+ hsize_t mem2_block[4] = { 2, 3, 1, 1 };
+
+ /* For testing the full selection in the middle dimensions */
+ int mem3_buffer[1][3][6][1];
+ hsize_t mem3_dims[4] = { 1, 3, 6, 1 };
+ hsize_t mem3_start[4] = { 0, 0, 0, 0 };
+ hsize_t mem3_count[4] = { 1, 1, 1, 1 };
+ hsize_t mem3_stride[4] = { 1, 1, 1, 1 };
+ hsize_t mem3_block[4] = { 1, 3, 6, 1 };
+
+ /* Construct dataset's name */
+ memset(dset_name, 0, NAME_LEN);
+ strcat(dset_name, SINGLE_END_DSET);
+ if(is_chunked)
+ strcat(dset_name, "_chunked");
+
+ /* Dataspace for the dataset in file */
+ sid = H5Screate_simple(4, da_dims, da_dims);
+ CHECK(sid, FAIL, "H5Screate_simple");
+
+ /* ****** Case 1: ******
+ * Testing the full selection in the fastest-growing end */
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
+ CHECK(did, FAIL, "H5Dopen");
+
+ /* Select the elements in the dataset */
+ ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem1_start, mem1_stride, mem1_count, mem1_block);
+ CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+ /* Dataspace for memory buffer */
+ msid = H5Screate_simple(4, mem1_dims, mem1_dims);
+ CHECK(msid, FAIL, "H5Screate_simple");
+
+ ret = H5Sselect_all(msid);
+ CHECK(ret, FAIL, "H5Sselect_all");
+
+ ret = H5Dread(did, H5T_NATIVE_INT, msid, sid, H5P_DEFAULT, mem1_buffer);
+ CHECK(ret, FAIL, "H5Dread");
+
+ ret = H5Dclose(did);
+ CHECK(ret, FAIL, "H5Dclose");
+
+ ret = H5Sclose(msid);
+ CHECK(ret, FAIL, "H5Sclose");
+
+ for(i=0; i<6; i++)
+ for(j=0; j<2; j++)
+ if(da_buffer[0][0][i][j] != mem1_buffer[0][0][i][j]) {
+ TestErrPrintf("Read different values than written at index 0,0,%d,%d\n", i, j);
+ }
+
+ /* ****** Case 2: ******
+ * Testing the full selection in the slowest-growing end */
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
+ CHECK(did, FAIL, "H5Dopen");
+
+ /* Select the elements in the dataset */
+ ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem2_start, mem2_stride, mem2_count, mem2_block);
+ CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+ /* Dataspace for memory buffer */
+ msid = H5Screate_simple(4, mem2_dims, mem2_dims);
+ CHECK(msid, FAIL, "H5Screate_simple");
+
+ ret = H5Sselect_all(msid);
+ CHECK(ret, FAIL, "H5Sselect_all");
+
+ ret = H5Dread(did, H5T_NATIVE_INT, msid, sid, H5P_DEFAULT, mem2_buffer);
+ CHECK(ret, FAIL, "H5Dread");
+
+ ret = H5Dclose(did);
+ CHECK(ret, FAIL, "H5Dclose");
+
+ ret = H5Sclose(msid);
+ CHECK(ret, FAIL, "H5Sclose");
+
+ for(i=0; i<2; i++)
+ for(j=0; j<3; j++)
+ if(da_buffer[i][j][0][0] != mem2_buffer[i][j][0][0]) {
+ TestErrPrintf("Read different values than written at index %d,%d,0,0\n", i, j);
+ }
+
+ /* ****** Case 3: ******
+ * Testing the full selection in the middle dimensions */
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
+ CHECK(did, FAIL, "H5Dopen");
+
+ /* Select the elements in the dataset */
+ ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, mem3_start, mem3_stride, mem3_count, mem3_block);
+ CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+ /* Dataspace for memory buffer */
+ msid = H5Screate_simple(4, mem3_dims, mem3_dims);
+ CHECK(msid, FAIL, "H5Screate_simple");
+
+ ret = H5Sselect_all(msid);
+ CHECK(ret, FAIL, "H5Sselect_all");
+
+ ret = H5Dread(did, H5T_NATIVE_INT, msid, sid, H5P_DEFAULT, mem3_buffer);
+ CHECK(ret, FAIL, "H5Dread");
+
+ ret = H5Dclose(did);
+ CHECK(ret, FAIL, "H5Dclose");
+
+ ret = H5Sclose(msid);
+ CHECK(ret, FAIL, "H5Sclose");
+
+ for(i=0; i<3; i++)
+ for(j=0; j<6; j++)
+ if(da_buffer[0][i][j][0] != mem3_buffer[0][i][j][0]) {
+ TestErrPrintf("Read different values than written at index 0,%d,%d,0\n", i, j);
+ }
+
+
+ ret = H5Sclose(sid);
+ CHECK(ret, FAIL, "H5Sclose");
+}
+
+
/***********************************************************
**
@@ -212,14 +401,15 @@ static void test_single_end(hid_t file)
** multiple blocks.
**
*************************************************************/
-static void test_multiple_ends(hid_t file)
+static void test_multiple_ends(hid_t file, hbool_t is_chunked)
{
hid_t sid, plid, did, msid;
+ char dset_name[NAME_LEN]; /* Dataset name */
herr_t ret; /* Generic error return */
int i, j, k, l, m, n, p;
hsize_t da_dims[8] = { 4, 5, 3, 4, 2, 3, 6, 2 };
hsize_t da_chunksize[8] = { 1, 5, 3, 2, 2, 3, 3, 2 };
- int da_buffer[4][5][3][4][2][3][6][2];
+ int data_buf[4][5][3][4][2][3][6][2];
/* For testing the full selections in the fastest-growing end and in the middle dimensions */
int mem1_buffer[1][1][1][4][2][1][6][2];
@@ -269,10 +459,18 @@ static void test_multiple_ends(hid_t file)
plid = H5Pcreate(H5P_DATASET_CREATE);
CHECK(plid, FAIL, "H5Pcreate");
- ret = H5Pset_chunk(plid, 8, da_chunksize);
- CHECK(ret, FAIL, "H5Pset_chunk");
+ if(is_chunked) {
+ ret = H5Pset_chunk(plid, 8, da_chunksize);
+ CHECK(ret, FAIL, "H5Pset_chunk");
+ }
- did = H5Dcreate2(file, "multiple_ends", H5T_NATIVE_INT, sid, H5P_DEFAULT, plid, H5P_DEFAULT);
+ /* Construct dataset's name */
+ memset(dset_name, 0, NAME_LEN);
+ strcat(dset_name, MULTI_ENDS_SEL_HYPER_DSET);
+ if(is_chunked)
+ strcat(dset_name, "_chunked");
+
+ did = H5Dcreate2(file, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, plid, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dcreate2");
for(i=0; i<4; i++)
@@ -282,11 +480,11 @@ static void test_multiple_ends(hid_t file)
for(m=0; m<2; m++)
for(n=0; n<3; n++)
for(p=0; p<6; p++) {
- da_buffer[i][j][k][l][m][n][p][0] = i*1000000 + j*100000 + k*10000 + l*1000 + m*100 + n*10 + p;
- da_buffer[i][j][k][l][m][n][p][1] = i*1000000 + j*100000 + k*10000 + l*1000 + m*100 + n*10 + p + 1;
+ data_buf[i][j][k][l][m][n][p][0] = i*1000000 + j*100000 + k*10000 + l*1000 + m*100 + n*10 + p;
+ data_buf[i][j][k][l][m][n][p][1] = i*1000000 + j*100000 + k*10000 + l*1000 + m*100 + n*10 + p + 1;
}
- ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, da_buffer);
+ ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data_buf);
CHECK(ret, FAIL, "H5Dwrite");
ret = H5Dclose(did);
@@ -294,7 +492,7 @@ static void test_multiple_ends(hid_t file)
/* ****** Case 1: ******
* Testing the full selections in the fastest-growing end and in the middle dimensions*/
- did = H5Dopen2(file, "multiple_ends", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
@@ -320,13 +518,13 @@ static void test_multiple_ends(hid_t file)
for(j=0; j<2; j++)
for(k=0; k<6; k++)
for(l=0; l<2; l++)
- if(da_buffer[0][0][0][i][j][0][k][l] != mem1_buffer[0][0][0][i][j][0][k][l]) {
+ if(data_buf[0][0][0][i][j][0][k][l] != mem1_buffer[0][0][0][i][j][0][k][l]) {
TestErrPrintf("Read different values than written at index 0,0,0,%d,%d,0,%d,%d\n", i, j, k, l);
}
/* ****** Case 2: ******
* Testing the full selections in the slowest-growing end and in the middle dimensions*/
- did = H5Dopen2(file, "multiple_ends", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
@@ -352,13 +550,13 @@ static void test_multiple_ends(hid_t file)
for(j=0; j<5; j++)
for(k=0; k<4; k++)
for(l=0; l<2; l++)
- if(da_buffer[i][j][0][k][l][0][0][0] != mem2_buffer[i][j][0][k][l][0][0][0]) {
+ if(data_buf[i][j][0][k][l][0][0][0] != mem2_buffer[i][j][0][k][l][0][0][0]) {
TestErrPrintf("Read different values than written at index %d,%d,0,%d,%d,0,0,0\n", i, j, k, l);
}
/* ****** Case 3: ******
* Testing two unadjacent full selections in the middle dimensions */
- did = H5Dopen2(file, "multiple_ends", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
@@ -384,13 +582,13 @@ static void test_multiple_ends(hid_t file)
for(j=0; j<3; j++)
for(k=0; k<3; k++)
for(l=0; l<6; l++)
- if(da_buffer[0][i][j][0][0][k][l][0] != mem3_buffer[0][i][j][0][0][k][l][0]) {
+ if(data_buf[0][i][j][0][0][k][l][0] != mem3_buffer[0][i][j][0][0][k][l][0]) {
TestErrPrintf("Read different values than written at index 0,%d,%d,0,0,%d,%d,0\n", i, j, k, l);
}
/* ****** Case 4: ******
* Testing the full selections in the fastest-growing end and the slowest-growing end */
- did = H5Dopen2(file, "multiple_ends", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
@@ -416,7 +614,7 @@ static void test_multiple_ends(hid_t file)
for(j=0; j<5; j++)
for(k=0; k<6; k++)
for(l=0; l<2; l++)
- if(da_buffer[i][j][0][0][0][0][k][l] != mem4_buffer[i][j][0][0][0][0][k][l]) {
+ if(data_buf[i][j][0][0][0][0][k][l] != mem4_buffer[i][j][0][0][0][0][k][l]) {
TestErrPrintf("Read different values than written at index %d,%d,0,0,0,0,%d,%d\n", i, j, k, l);
}
@@ -424,7 +622,7 @@ static void test_multiple_ends(hid_t file)
/* ****** Case 5: ******
* Testing the full selections in the fastest-growing end and the slowest-growing end,
* and also in the middle dimensions */
- did = H5Dopen2(file, "multiple_ends", H5P_DEFAULT);
+ did = H5Dopen2(file, dset_name, H5P_DEFAULT);
CHECK(did, FAIL, "H5Dopen");
/* Select the elements in the dataset */
@@ -452,7 +650,7 @@ static void test_multiple_ends(hid_t file)
for(l=0; l<2; l++)
for(m=0; m<6; m++)
for(n=0; n<2; n++)
- if(da_buffer[i][j][0][k][l][0][m][n] != mem5_buffer[i][j][0][k][l][0][m][n]) {
+ if(data_buf[i][j][0][k][l][0][m][n] != mem5_buffer[i][j][0][k][l][0][m][n]) {
TestErrPrintf("Read different values than written at index %d,%d,0,%d,%d,0,%d,%d\n", i, j, k, l, m, n);
}
@@ -472,14 +670,24 @@ static void test_multiple_ends(hid_t file)
****************************************************************/
void test_coords(void)
{
- hid_t fid;
- herr_t ret; /* Generic error return */
+ hid_t fid;
+ int i;
+ hbool_t is_chunk;
+ herr_t ret; /* Generic error return */
fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
CHECK(fid, FAIL, "H5Fcreate");
- test_single_end(fid);
- test_multiple_ends(fid);
+ for(i=0, is_chunk=FALSE; i<2; i++, is_chunk++) {
+ /* Test H5Sselect_elements with selection of one block of data */
+ test_singleEnd_selElements(fid, is_chunk);
+
+ /* Test H5Sselect_hyperslab with selection of one block of data */
+ test_singleEnd_selHyperslab(fid, is_chunk);
+
+ /* Test H5Sselect_hyperslab with selection of multiple blocks of data */
+ test_multiple_ends(fid, is_chunk);
+ }
ret = H5Fclose(fid);
CHECK(ret, FAIL, "H5Fclose");