mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r13937] Description:
A few more cleanups for testing [atomic] fill values and extending datasets Tested on: Mac OS X/32 10.4.10 (amazon) Linux/32 2.6 (chicago) Linux/64 2.6 (chicago2)
This commit is contained in:
parent
4af566ef23
commit
2bc42b17fb
@ -1177,10 +1177,12 @@ test_rdwr(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
|||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
test_extend_cases(hid_t file, hid_t _dcpl, const char *dset_name,
|
||||||
int *fillval)
|
hsize_t *start_size, hsize_t *max_size, hid_t dtype, int *fillval)
|
||||||
{
|
{
|
||||||
hid_t fspace = -1, mspace = -1, dset = -1;
|
hid_t fspace = -1, mspace = -1; /* File & memory dataspaces */
|
||||||
|
hid_t dset = -1; /* Dataset ID */
|
||||||
|
hid_t dcpl = -1; /* Dataset creation property list */
|
||||||
hsize_t one[5] = {1, 1, 1, 1, 1};
|
hsize_t one[5] = {1, 1, 1, 1, 1};
|
||||||
hsize_t hs_size[5], hs_stride[5];
|
hsize_t hs_size[5], hs_stride[5];
|
||||||
hsize_t hs_offset[5], nelmts;
|
hsize_t hs_offset[5], nelmts;
|
||||||
@ -1188,20 +1190,34 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
int i, j, *buf = NULL, odd;
|
int i, j, *buf = NULL, odd;
|
||||||
unsigned u;
|
unsigned u;
|
||||||
|
|
||||||
/* Create a dataspace */
|
/* Make copy of dataset creation property list */
|
||||||
if((fspace = H5Screate_simple(5, cur_size, max_size))<0) TEST_ERROR
|
if((dcpl = H5Pcopy(_dcpl)) < 0) TEST_ERROR
|
||||||
|
|
||||||
|
#ifndef NO_FILLING
|
||||||
|
if(H5Pset_fill_value(dcpl, dtype, fillval) < 0) TEST_ERROR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Create a dataspace */
|
||||||
|
if((fspace = H5Screate_simple(5, start_size, max_size)) < 0) TEST_ERROR
|
||||||
|
|
||||||
|
/* Create dataset */
|
||||||
|
if((dset = H5Dcreate(file, dset_name, dtype, fspace, dcpl)) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Create a file and dataset */
|
|
||||||
if((dset = H5Dcreate(file, "dset", H5T_NATIVE_INT, fspace, dcpl)) < 0) TEST_ERROR
|
|
||||||
|
|
||||||
/* Read some data and make sure it's the fill value */
|
/* Read some data and make sure it's the fill value */
|
||||||
if((mspace = H5Screate_simple(5, one, NULL)) < 0) TEST_ERROR
|
if((mspace = H5Screate_simple(5, one, NULL)) < 0) TEST_ERROR
|
||||||
for(i = 0; i < 1000; i++) {
|
for(i = 0; i < 1000; i++) {
|
||||||
|
/* Set offset for random element */
|
||||||
for(j = 0; j < 5; j++)
|
for(j = 0; j < 5; j++)
|
||||||
hs_offset[j] = rand() % cur_size[j];
|
hs_offset[j] = rand() % start_size[j];
|
||||||
|
|
||||||
|
/* Select the random element */
|
||||||
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
||||||
if(H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
|
||||||
|
/* Read the random element */
|
||||||
|
if(H5Dread(dset, dtype, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
||||||
|
|
||||||
|
/* Verify the element read in */
|
||||||
if(val_rd != *fillval) {
|
if(val_rd != *fillval) {
|
||||||
H5_FAILED();
|
H5_FAILED();
|
||||||
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
|
HDfprintf(stdout, "%u: Value read was not a fill value.\n", (unsigned)__LINE__);
|
||||||
@ -1215,18 +1231,16 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
} /* end for */
|
} /* end for */
|
||||||
if(H5Sclose(mspace) < 0) TEST_ERROR
|
if(H5Sclose(mspace) < 0) TEST_ERROR
|
||||||
|
|
||||||
|
|
||||||
/* Initialize dataspace & hyperslab info */
|
/* Initialize dataspace & hyperslab info */
|
||||||
for(i = 0, nelmts = 1; i < 5; i++) {
|
for(i = 0, nelmts = 1; i < 5; i++) {
|
||||||
hs_size[i] = cur_size[i] / 2;
|
hs_size[i] = start_size[i] / 2;
|
||||||
hs_offset[i] = 0;
|
hs_offset[i] = 0;
|
||||||
hs_stride[i] = 2;
|
hs_stride[i] = 2;
|
||||||
nelmts *= hs_size[i];
|
nelmts *= hs_size[i];
|
||||||
} /* end for */
|
} /* end for */
|
||||||
|
|
||||||
/* Create dataspace describing memory buffer */
|
/* Check for overflow */
|
||||||
if((mspace = H5Screate_simple(5, hs_size, hs_size)) < 0) TEST_ERROR
|
|
||||||
|
|
||||||
/*check for overflow*/
|
|
||||||
assert((nelmts * sizeof(int)) == (hsize_t)((size_t)(nelmts * sizeof(int))));
|
assert((nelmts * sizeof(int)) == (hsize_t)((size_t)(nelmts * sizeof(int))));
|
||||||
|
|
||||||
/* Allocate & initialize buffer */
|
/* Allocate & initialize buffer */
|
||||||
@ -1234,11 +1248,14 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
for(u = 0; u < nelmts; u++)
|
for(u = 0; u < nelmts; u++)
|
||||||
buf[u] = 9999;
|
buf[u] = 9999;
|
||||||
|
|
||||||
|
/* Create dataspace describing memory buffer */
|
||||||
|
if((mspace = H5Screate_simple(5, hs_size, hs_size)) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Select elements within file dataspace */
|
/* Select elements within file dataspace */
|
||||||
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, hs_stride, hs_size, NULL) < 0) TEST_ERROR
|
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, hs_stride, hs_size, NULL) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Write to all odd data locations */
|
/* Write to all odd data locations */
|
||||||
if(H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, buf) < 0) TEST_ERROR
|
if(H5Dwrite(dset, dtype, mspace, fspace, H5P_DEFAULT, buf) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Close memory dataspace */
|
/* Close memory dataspace */
|
||||||
if(H5Sclose(mspace) < 0) TEST_ERROR
|
if(H5Sclose(mspace) < 0) TEST_ERROR
|
||||||
@ -1247,12 +1264,13 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
HDfree(buf);
|
HDfree(buf);
|
||||||
buf = NULL;
|
buf = NULL;
|
||||||
|
|
||||||
|
|
||||||
/* Read some data and make sure it's the right value */
|
/* Read some data and make sure it's the right value */
|
||||||
if((mspace = H5Screate_simple(5, one, NULL)) < 0) TEST_ERROR
|
if((mspace = H5Screate_simple(5, one, NULL)) < 0) TEST_ERROR
|
||||||
for(i = 0; i < 1000; i++) {
|
for(i = 0; i < 1000; i++) {
|
||||||
/* Set offset for random element */
|
/* Set offset for random element */
|
||||||
for(j = 0, odd = 0; j < 5; j++) {
|
for(j = 0, odd = 0; j < 5; j++) {
|
||||||
hs_offset[j] = rand() % cur_size[j];
|
hs_offset[j] = rand() % start_size[j];
|
||||||
odd += (int)(hs_offset[j]%2);
|
odd += (int)(hs_offset[j]%2);
|
||||||
} /* end for */
|
} /* end for */
|
||||||
|
|
||||||
@ -1260,7 +1278,7 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Read the random element */
|
/* Read the random element */
|
||||||
if(H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
if(H5Dread(dset, dtype, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Verify the element read in */
|
/* Verify the element read in */
|
||||||
should_be = odd ? *fillval : 9999;
|
should_be = odd ? *fillval : 9999;
|
||||||
@ -1277,8 +1295,9 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
} /* end for */
|
} /* end for */
|
||||||
if(H5Sclose(mspace) < 0) TEST_ERROR
|
if(H5Sclose(mspace) < 0) TEST_ERROR
|
||||||
|
|
||||||
|
|
||||||
/* Extend the dataset */
|
/* Extend the dataset */
|
||||||
if (H5Dextend(dset, max_size) < 0) TEST_ERROR
|
if(H5Dextend(dset, max_size) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Re-open file dataspace */
|
/* Re-open file dataspace */
|
||||||
if(H5Sclose(fspace) < 0) TEST_ERROR
|
if(H5Sclose(fspace) < 0) TEST_ERROR
|
||||||
@ -1290,7 +1309,7 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
/* Set offset for random element */
|
/* Set offset for random element */
|
||||||
for(j = 0, odd = 0; j < 5; j++) {
|
for(j = 0, odd = 0; j < 5; j++) {
|
||||||
hs_offset[j] = rand() % max_size[j];
|
hs_offset[j] = rand() % max_size[j];
|
||||||
if((hsize_t)hs_offset[j] >= cur_size[j])
|
if((hsize_t)hs_offset[j] >= start_size[j])
|
||||||
odd = 1;
|
odd = 1;
|
||||||
else
|
else
|
||||||
odd += (int)(hs_offset[j]%2);
|
odd += (int)(hs_offset[j]%2);
|
||||||
@ -1300,7 +1319,7 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Read the random element */
|
/* Read the random element */
|
||||||
if(H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
if(H5Dread(dset, dtype, mspace, fspace, H5P_DEFAULT, &val_rd) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Verify the element read in */
|
/* Verify the element read in */
|
||||||
should_be = odd ? *fillval : 9999;
|
should_be = odd ? *fillval : 9999;
|
||||||
@ -1318,13 +1337,17 @@ test_extend_cases(hid_t file, hid_t dcpl, hsize_t *cur_size, hsize_t *max_size,
|
|||||||
if(H5Sclose(mspace) < 0) TEST_ERROR
|
if(H5Sclose(mspace) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
|
if(H5Pclose(dcpl) < 0) TEST_ERROR
|
||||||
if(H5Dclose(dset) < 0) TEST_ERROR
|
if(H5Dclose(dset) < 0) TEST_ERROR
|
||||||
if(H5Sclose(fspace) < 0) TEST_ERROR
|
if(H5Sclose(fspace) < 0) TEST_ERROR
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
if(buf)
|
||||||
|
HDfree(buf);
|
||||||
H5E_BEGIN_TRY {
|
H5E_BEGIN_TRY {
|
||||||
|
H5Pclose(dcpl);
|
||||||
H5Dclose(dset);
|
H5Dclose(dset);
|
||||||
H5Sclose(fspace);
|
H5Sclose(fspace);
|
||||||
H5Sclose(mspace);
|
H5Sclose(mspace);
|
||||||
@ -1354,7 +1377,7 @@ static int
|
|||||||
test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
||||||
{
|
{
|
||||||
hid_t file = -1, dcpl = -1;
|
hid_t file = -1, dcpl = -1;
|
||||||
hsize_t cur_size[5] = {32, 16, 8, 4, 2};
|
hsize_t start_size[5] = {32, 16, 8, 4, 2};
|
||||||
hsize_t max_size[5] = {128, 64, 32, 16, 8};
|
hsize_t max_size[5] = {128, 64, 32, 16, 8};
|
||||||
hsize_t ch_size[5] = {1, 16, 8, 4, 2};
|
hsize_t ch_size[5] = {1, 16, 8, 4, 2};
|
||||||
#ifdef NO_FILLING
|
#ifdef NO_FILLING
|
||||||
@ -1375,10 +1398,6 @@ test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
|||||||
if(H5D_CHUNKED == layout)
|
if(H5D_CHUNKED == layout)
|
||||||
if(H5Pset_chunk(dcpl, 5, ch_size) < 0) TEST_ERROR
|
if(H5Pset_chunk(dcpl, 5, ch_size) < 0) TEST_ERROR
|
||||||
|
|
||||||
#ifndef NO_FILLING
|
|
||||||
if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
/*
|
/*
|
||||||
* Remove this once contiguous datasets can support extensions in other
|
* Remove this once contiguous datasets can support extensions in other
|
||||||
@ -1391,13 +1410,13 @@ test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
|||||||
* below.
|
* below.
|
||||||
*/
|
*/
|
||||||
if (H5D_CONTIGUOUS==layout) {
|
if (H5D_CONTIGUOUS==layout) {
|
||||||
max_size[0] = (max_size[0]*max_size[1]*max_size[2]*
|
max_size[0] = (max_size[0] * max_size[1] * max_size[2] *
|
||||||
max_size[3]*max_size[4]) /
|
max_size[3] * max_size[4]) /
|
||||||
(cur_size[1]*cur_size[2]*cur_size[3]*cur_size[4]);
|
(start_size[1] * start_size[2] * start_size[3] * start_size[4]);
|
||||||
max_size[1] = cur_size[1];
|
max_size[1] = start_size[1];
|
||||||
max_size[2] = cur_size[2];
|
max_size[2] = start_size[2];
|
||||||
max_size[3] = cur_size[3];
|
max_size[3] = start_size[3];
|
||||||
max_size[4] = cur_size[4];
|
max_size[4] = start_size[4];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1436,28 +1455,28 @@ test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
|||||||
|
|
||||||
/* Create a file and dataset */
|
/* Create a file and dataset */
|
||||||
h5_fixname(base_name, fapl, filename, sizeof filename);
|
h5_fixname(base_name, fapl, filename, sizeof filename);
|
||||||
if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
|
||||||
goto error;
|
|
||||||
|
|
||||||
/* Test integer datatype case */
|
/* Test integer datatype case */
|
||||||
if(test_extend_cases(file, dcpl, cur_size, max_size, &fillval) < 0) TEST_ERROR
|
if(test_extend_cases(file, dcpl, "dset", start_size, max_size,
|
||||||
|
H5T_NATIVE_INT, &fillval) < 0) TEST_ERROR
|
||||||
|
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
if(H5Pclose(dcpl) < 0) goto error;
|
if(H5Pclose(dcpl) < 0) TEST_ERROR
|
||||||
if(H5Fclose(file) < 0) goto error;
|
if(H5Fclose(file) < 0) TEST_ERROR
|
||||||
|
|
||||||
PASSED();
|
PASSED();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
H5E_BEGIN_TRY {
|
H5E_BEGIN_TRY {
|
||||||
H5Pclose(dcpl);
|
H5Pclose(dcpl);
|
||||||
H5Fclose(file);
|
H5Fclose(file);
|
||||||
} H5E_END_TRY;
|
} H5E_END_TRY;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
skip:
|
skip:
|
||||||
H5E_BEGIN_TRY {
|
H5E_BEGIN_TRY {
|
||||||
H5Pclose(dcpl);
|
H5Pclose(dcpl);
|
||||||
H5Fclose(file);
|
H5Fclose(file);
|
||||||
@ -1465,6 +1484,7 @@ test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
|
|||||||
return 0;
|
return 0;
|
||||||
} /* end test_extend() */
|
} /* end test_extend() */
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
* Function: test_compatible
|
* Function: test_compatible
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user