mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r2099] Added test to check for correct staggered hyperslab iteration.
This commit is contained in:
parent
14352705ed
commit
423d36e616
137
test/tselect.c
137
test/tselect.c
@ -2125,6 +2125,142 @@ test_select_hyper_union(void)
|
||||
free(rbuf);
|
||||
} /* test_select_hyper_union() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_select_hyper_union_stagger(): Test basic H5S (dataspace) selection code.
|
||||
** Tests unions of staggered hyperslabs
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_select_hyper_union_stagger(void)
|
||||
{
|
||||
hid_t file_id; /* File ID */
|
||||
hid_t dset_id; /* Dataset ID */
|
||||
hid_t dataspace; /* File dataspace ID */
|
||||
hid_t memspace; /* Memory dataspace ID */
|
||||
hsize_t dimsm[2]={7,7}; /* Memory array dimensions */
|
||||
hsize_t dimsf[2]={6,5}; /* File array dimensions */
|
||||
hsize_t count[2]={3,1}; /* 1st Hyperslab size */
|
||||
hsize_t count2[2]={3,1}; /* 2nd Hyperslab size */
|
||||
hsize_t count3[2]={2,1}; /* 3rd Hyperslab size */
|
||||
hssize_t offset[2]={0,0}; /* 1st Hyperslab offset */
|
||||
hssize_t offset2[2]={2,1}; /* 2nd Hyperslab offset */
|
||||
hssize_t offset3[2]={4,2}; /* 3rd Hyperslab offset */
|
||||
hsize_t count_out[2]={4,2}; /* Hyperslab size in memory */
|
||||
hssize_t offset_out[2]={0,3}; /* Hyperslab offset in memory */
|
||||
int data[6][5]; /* Data to write */
|
||||
int data_out[7][7]; /* Data read in */
|
||||
int input_loc[8][2]={{0,0},
|
||||
{1,0},
|
||||
{2,0},
|
||||
{2,1},
|
||||
{3,1},
|
||||
{4,1},
|
||||
{4,2},
|
||||
{5,2}};
|
||||
int output_loc[8][2]={{0,3},
|
||||
{0,4},
|
||||
{1,3},
|
||||
{1,4},
|
||||
{2,3},
|
||||
{2,4},
|
||||
{3,3},
|
||||
{3,4}};
|
||||
int dsetrank=2; /* File Dataset rank */
|
||||
int memrank=2; /* Memory Dataset rank */
|
||||
int rank;
|
||||
int i,j; /* Local counting variables */
|
||||
herr_t error;
|
||||
hsize_t stride[2]={1,1};
|
||||
hsize_t block[2]={1,1};
|
||||
|
||||
/* Initialize data to write */
|
||||
for(i=0; i<6; i++)
|
||||
for(j=0; j<5; j++)
|
||||
data[i][j] = j*10 + i;
|
||||
|
||||
/* Create file */
|
||||
file_id=H5Fcreate(FILENAME,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
|
||||
CHECK(file_id, FAIL, "H5Fcreate");
|
||||
|
||||
/* Create File Dataspace */
|
||||
dataspace=H5Screate_simple(dsetrank,dimsf,NULL);
|
||||
CHECK(dataspace, FAIL, "H5Screate_simple");
|
||||
|
||||
/* Create File Dataset */
|
||||
dset_id=H5Dcreate(file_id,"IntArray",H5T_NATIVE_INT,dataspace,H5P_DEFAULT);
|
||||
CHECK(dset_id, FAIL, "H5Dcreate");
|
||||
|
||||
/* Write File Dataset */
|
||||
error=H5Dwrite(dset_id,H5T_NATIVE_INT,dataspace,dataspace,H5P_DEFAULT,data);
|
||||
CHECK(error, FAIL, "H5Dwrite");
|
||||
|
||||
/* Close things */
|
||||
error=H5Sclose(dataspace);
|
||||
CHECK(error, FAIL, "H5Sclose");
|
||||
error=H5Dclose(dset_id);
|
||||
CHECK(error, FAIL, "H5Dclose");
|
||||
error=H5Fclose(file_id);
|
||||
CHECK(error, FAIL, "H5Fclose");
|
||||
|
||||
/* Initialize intput buffer */
|
||||
memset(data_out,0,7*7*sizeof(int));
|
||||
|
||||
/* Open file */
|
||||
file_id=H5Fopen(FILENAME,H5F_ACC_RDONLY,H5P_DEFAULT);
|
||||
CHECK(file_id, FAIL, "H5Fopen");
|
||||
|
||||
/* Open dataset */
|
||||
dset_id=H5Dopen(file_id,"IntArray");
|
||||
CHECK(dset_id, FAIL, "H5Dopen");
|
||||
|
||||
/* Get the dataspace */
|
||||
dataspace=H5Dget_space(dset_id);
|
||||
CHECK(dataspace, FAIL, "H5Dget_space");
|
||||
|
||||
/* Select the hyperslabs */
|
||||
error=H5Sselect_hyperslab(dataspace,H5S_SELECT_SET,offset,stride,count,block);
|
||||
CHECK(error, FAIL, "H5Sselect_hyperslab");
|
||||
error=H5Sselect_hyperslab(dataspace,H5S_SELECT_OR,offset2,stride,count2,block);
|
||||
CHECK(error, FAIL, "H5Sselect_hyperslab");
|
||||
error=H5Sselect_hyperslab(dataspace,H5S_SELECT_OR,offset3,stride,count3,block);
|
||||
CHECK(error, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
/* Create Memory Dataspace */
|
||||
memspace=H5Screate_simple(memrank,dimsm,NULL);
|
||||
CHECK(memspace, FAIL, "H5Screate_simple");
|
||||
|
||||
/* Select hyperslab in memory */
|
||||
error=H5Sselect_hyperslab(memspace,H5S_SELECT_SET,offset_out,stride,count_out,block);
|
||||
CHECK(error, FAIL, "H5Sselect_hyperslab");
|
||||
|
||||
/* Read File Dataset */
|
||||
error=H5Dread(dset_id,H5T_NATIVE_INT,memspace,dataspace,H5P_DEFAULT,data_out);
|
||||
CHECK(error, FAIL, "H5Dread");
|
||||
|
||||
/* Verify input data */
|
||||
for(i=0; i<8; i++) {
|
||||
if(data[input_loc[i][0]][input_loc[i][1]]!=data_out[output_loc[i][0]][output_loc[i][1]]) {
|
||||
printf("input data #%d is wrong!\n",i);
|
||||
printf("input_loc=[%d][%d]\n",input_loc[i][0],input_loc[i][1]);
|
||||
printf("output_loc=[%d][%d]\n",output_loc[i][0],output_loc[i][1]);
|
||||
printf("data=%d\n",data[input_loc[i][0]][input_loc[i][1]]);
|
||||
printf("data_out=%d\n",data_out[output_loc[i][0]][output_loc[i][1]]);
|
||||
num_errs++;
|
||||
} /* end if */
|
||||
} /* end for */
|
||||
|
||||
/* Close things */
|
||||
error=H5Sclose(dataspace);
|
||||
CHECK(error, FAIL, "H5Sclose");
|
||||
error=H5Sclose(memspace);
|
||||
CHECK(error, FAIL, "H5Sclose");
|
||||
error=H5Dclose(dset_id);
|
||||
CHECK(error, FAIL, "H5Dclose");
|
||||
error=H5Fclose(file_id);
|
||||
CHECK(error, FAIL, "H5Fclose");
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_select_hyper_union_3d(): Test basic H5S (dataspace) selection code.
|
||||
@ -2340,6 +2476,7 @@ test_select(void)
|
||||
test_select_hyper_offset(); /* Test selection offset code with hyperslabs */
|
||||
test_select_point_offset(); /* Test selection offset code with elements */
|
||||
test_select_hyper_union(); /* Test hyperslab union code */
|
||||
test_select_hyper_union_stagger(); /* Test hyperslab union code for staggered slabs */
|
||||
test_select_hyper_union_3d(); /* Test hyperslab union code for 3-D dataset */
|
||||
|
||||
} /* test_select() */
|
||||
|
Loading…
Reference in New Issue
Block a user