mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-13 16:47:58 +08:00
[svn-r15703] Description:
Further progress on extensible array implementation - add support for more data blocks from index block. Tested on: Mac OS X/32 10.5.4 (amazon) in debug mode Mac OS X/32 10.5.4 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
This commit is contained in:
parent
6a1614de3e
commit
f9f71a001b
22
src/H5EA.c
22
src/H5EA.c
@ -355,7 +355,7 @@ HDfprintf(stderr, "%s: Index block address not defined!\n", FUNC, idx);
|
||||
H5E_THROW(H5E_CANTCREATE, "unable to create index block")
|
||||
|
||||
/* Increment count of elements "realized" */
|
||||
hdr->stats.nelmts += hdr->idx_blk_elmts;
|
||||
hdr->stats.nelmts += hdr->cparam.idx_blk_elmts;
|
||||
|
||||
/* Mark the header dirty */
|
||||
hdr_dirty = TRUE;
|
||||
@ -369,9 +369,9 @@ HDfprintf(stderr, "%s: Index block address is: %a\n", FUNC, hdr->idx_blk_addr);
|
||||
H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu", (unsigned long_long)hdr->idx_blk_addr)
|
||||
|
||||
/* Check if element is in index block */
|
||||
if(idx < hdr->idx_blk_elmts) {
|
||||
if(idx < hdr->cparam.idx_blk_elmts) {
|
||||
/* Set element in index block */
|
||||
HDmemcpy(((uint8_t *)iblock->elmts) + (hdr->cls->nat_elmt_size * idx), elmt, hdr->cls->nat_elmt_size);
|
||||
HDmemcpy(((uint8_t *)iblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx), elmt, hdr->cparam.cls->nat_elmt_size);
|
||||
iblock_cache_flags |= H5AC__DIRTIED_FLAG;
|
||||
} /* end if */
|
||||
else {
|
||||
@ -382,7 +382,7 @@ HDfprintf(stderr, "%s: Index block address is: %a\n", FUNC, hdr->idx_blk_addr);
|
||||
sblk_idx = H5EA__dblock_sblk_idx(hdr, idx);
|
||||
|
||||
/* Adjust index to offset in super block */
|
||||
elmt_idx = idx - hdr->idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx;
|
||||
elmt_idx = idx - hdr->cparam.idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx;
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: after adjusting for super block elements, elmt_idx = %Hu\n", FUNC, elmt_idx);
|
||||
#endif /* QAK */
|
||||
@ -428,7 +428,7 @@ HDfprintf(stderr, "%s: dblk_idx = %u\n", FUNC, dblk_idx);
|
||||
elmt_idx %= hdr->sblk_info[sblk_idx].dblk_nelmts;
|
||||
|
||||
/* Set element in data block */
|
||||
HDmemcpy(((uint8_t *)dblock->elmts) + (hdr->cls->nat_elmt_size * elmt_idx), elmt, hdr->cls->nat_elmt_size);
|
||||
HDmemcpy(((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx), elmt, hdr->cparam.cls->nat_elmt_size);
|
||||
dblock_cache_flags |= H5AC__DIRTIED_FLAG;
|
||||
} /* end if */
|
||||
else {
|
||||
@ -503,7 +503,7 @@ HDfprintf(stderr, "%s: Index %Hu\n", FUNC, idx);
|
||||
HDfprintf(stderr, "%s: Element beyond max. index set, hdr->stats.max_idx_set = %Hu, idx = %Hu\n", FUNC, hdr->stats.max_idx_set, idx);
|
||||
#endif /* QAK */
|
||||
/* Call the class's 'fill' callback */
|
||||
if((hdr->cls->fill)(elmt, (size_t)1) < 0)
|
||||
if((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
|
||||
H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
|
||||
} /* end if */
|
||||
else {
|
||||
@ -516,9 +516,9 @@ HDfprintf(stderr, "%s: Index block address is: %a\n", FUNC, hdr->idx_blk_addr);
|
||||
H5E_THROW(H5E_CANTPROTECT, "unable to protect extensible array index block, address = %llu", (unsigned long_long)hdr->idx_blk_addr)
|
||||
|
||||
/* Check if element is in index block */
|
||||
if(idx < hdr->idx_blk_elmts) {
|
||||
if(idx < hdr->cparam.idx_blk_elmts) {
|
||||
/* Get element from index block */
|
||||
HDmemcpy(elmt, ((uint8_t *)iblock->elmts) + (hdr->cls->nat_elmt_size * idx), hdr->cls->nat_elmt_size);
|
||||
HDmemcpy(elmt, ((uint8_t *)iblock->elmts) + (hdr->cparam.cls->nat_elmt_size * idx), hdr->cparam.cls->nat_elmt_size);
|
||||
} /* end if */
|
||||
else {
|
||||
unsigned sblk_idx; /* Which superblock does this index fall in? */
|
||||
@ -528,7 +528,7 @@ HDfprintf(stderr, "%s: Index block address is: %a\n", FUNC, hdr->idx_blk_addr);
|
||||
sblk_idx = H5EA__dblock_sblk_idx(hdr, idx);
|
||||
|
||||
/* Adjust index to offset in super block */
|
||||
elmt_idx = idx - hdr->idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx;
|
||||
elmt_idx = idx - hdr->cparam.idx_blk_elmts + hdr->sblk_info[sblk_idx].start_idx;
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: after adjusting for super block elements, elmt_idx = %Hu\n", FUNC, elmt_idx);
|
||||
#endif /* QAK */
|
||||
@ -550,7 +550,7 @@ HDfprintf(stderr, "%s: dblk_idx = %u\n", FUNC, dblk_idx);
|
||||
/* Check if the data block has been allocated on disk yet */
|
||||
if(!H5F_addr_defined(iblock->dblk_addrs[dblk_idx])) {
|
||||
/* Call the class's 'fill' callback */
|
||||
if((hdr->cls->fill)(elmt, (size_t)1) < 0)
|
||||
if((hdr->cparam.cls->fill)(elmt, (size_t)1) < 0)
|
||||
H5E_THROW(H5E_CANTSET, "can't set element to class's fill value")
|
||||
} /* end if */
|
||||
else {
|
||||
@ -562,7 +562,7 @@ HDfprintf(stderr, "%s: dblk_idx = %u\n", FUNC, dblk_idx);
|
||||
elmt_idx %= hdr->sblk_info[sblk_idx].dblk_nelmts;
|
||||
|
||||
/* Retrieve element from data block */
|
||||
HDmemcpy(elmt, ((uint8_t *)dblock->elmts) + (hdr->cls->nat_elmt_size * elmt_idx), hdr->cls->nat_elmt_size);
|
||||
HDmemcpy(elmt, ((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * elmt_idx), hdr->cparam.cls->nat_elmt_size);
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
else {
|
||||
|
@ -213,11 +213,11 @@ H5EA__cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_cls,
|
||||
H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
|
||||
|
||||
/* General array creation/configuration information */
|
||||
hdr->raw_elmt_size = *p++; /* Element size in file (in bytes) */
|
||||
hdr->max_nelmts_bits = *p++; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
|
||||
hdr->idx_blk_elmts = *p++; /* # of elements to store in index block */
|
||||
hdr->data_blk_min_elmts = *p++; /* Min. # of elements per data block */
|
||||
hdr->sup_blk_min_data_ptrs = *p++; /* Min. # of data block pointers for a super block */
|
||||
hdr->cparam.raw_elmt_size = *p++; /* Element size in file (in bytes) */
|
||||
hdr->cparam.max_nelmts_bits = *p++; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
|
||||
hdr->cparam.idx_blk_elmts = *p++; /* # of elements to store in index block */
|
||||
hdr->cparam.data_blk_min_elmts = *p++; /* Min. # of elements per data block */
|
||||
hdr->cparam.sup_blk_min_data_ptrs = *p++; /* Min. # of data block pointers for a super block */
|
||||
|
||||
/* Internal information */
|
||||
H5F_addr_decode(f, &p, &hdr->idx_blk_addr); /* Address of index block */
|
||||
@ -318,14 +318,14 @@ H5EA__cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
|
||||
*p++ = H5EA_HDR_VERSION;
|
||||
|
||||
/* Extensible array type */
|
||||
*p++ = hdr->cls->id;
|
||||
*p++ = hdr->cparam.cls->id;
|
||||
|
||||
/* General array creation/configuration information */
|
||||
*p++ = hdr->raw_elmt_size; /* Element size in file (in bytes) */
|
||||
*p++ = hdr->max_nelmts_bits; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
|
||||
*p++ = hdr->idx_blk_elmts; /* # of elements to store in index block */
|
||||
*p++ = hdr->data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
*p++ = hdr->sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
*p++ = hdr->cparam.raw_elmt_size; /* Element size in file (in bytes) */
|
||||
*p++ = hdr->cparam.max_nelmts_bits; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
|
||||
*p++ = hdr->cparam.idx_blk_elmts; /* # of elements to store in index block */
|
||||
*p++ = hdr->cparam.data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
*p++ = hdr->cparam.sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
|
||||
/* Internal information */
|
||||
H5F_addr_encode(f, &p, hdr->idx_blk_addr); /* Address of index block */
|
||||
@ -525,17 +525,17 @@ H5EA__cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
H5E_THROW(H5E_VERSION, "wrong extensible array index block version")
|
||||
|
||||
/* Extensible array type */
|
||||
if(*p++ != (uint8_t)hdr->cls->id)
|
||||
if(*p++ != (uint8_t)hdr->cparam.cls->id)
|
||||
H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
|
||||
|
||||
/* Internal information */
|
||||
|
||||
/* Decode elements in index block */
|
||||
if(hdr->idx_blk_elmts > 0) {
|
||||
if(hdr->cparam.idx_blk_elmts > 0) {
|
||||
/* Convert from raw elements on disk into native elements in memory */
|
||||
if((hdr->cls->decode)(p, iblock->elmts, (size_t)hdr->idx_blk_elmts) < 0)
|
||||
if((hdr->cparam.cls->decode)(p, iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts) < 0)
|
||||
H5E_THROW(H5E_CANTDECODE, "can't decode extensible array index elements")
|
||||
p += (hdr->idx_blk_elmts * hdr->raw_elmt_size);
|
||||
p += (hdr->cparam.idx_blk_elmts * hdr->cparam.raw_elmt_size);
|
||||
} /* end if */
|
||||
|
||||
/* Decode data block addresses in index block */
|
||||
@ -647,16 +647,16 @@ H5EA__cache_iblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
|
||||
*p++ = H5EA_IBLOCK_VERSION;
|
||||
|
||||
/* Extensible array type */
|
||||
*p++ = iblock->hdr->cls->id;
|
||||
*p++ = iblock->hdr->cparam.cls->id;
|
||||
|
||||
/* Internal information */
|
||||
|
||||
/* Encode elements in index block */
|
||||
if(iblock->hdr->idx_blk_elmts > 0) {
|
||||
if(iblock->hdr->cparam.idx_blk_elmts > 0) {
|
||||
/* Convert from native elements in memory into raw elements on disk */
|
||||
if((iblock->hdr->cls->encode)(p, iblock->elmts, (size_t)iblock->hdr->idx_blk_elmts) < 0)
|
||||
if((iblock->hdr->cparam.cls->encode)(p, iblock->elmts, (size_t)iblock->hdr->cparam.idx_blk_elmts) < 0)
|
||||
H5E_THROW(H5E_CANTENCODE, "can't encode extensible array index elements")
|
||||
p += (iblock->hdr->idx_blk_elmts * iblock->hdr->raw_elmt_size);
|
||||
p += (iblock->hdr->cparam.idx_blk_elmts * iblock->hdr->cparam.raw_elmt_size);
|
||||
} /* end if */
|
||||
|
||||
/* Encode data block addresses in index block */
|
||||
@ -869,16 +869,16 @@ H5EA__cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
H5E_THROW(H5E_VERSION, "wrong extensible array data block version")
|
||||
|
||||
/* Extensible array type */
|
||||
if(*p++ != (uint8_t)hdr->cls->id)
|
||||
if(*p++ != (uint8_t)hdr->cparam.cls->id)
|
||||
H5E_THROW(H5E_BADTYPE, "incorrect extensible array class")
|
||||
|
||||
/* Internal information */
|
||||
|
||||
/* Decode elements in data block */
|
||||
/* Convert from raw elements on disk into native elements in memory */
|
||||
if((hdr->cls->decode)(p, dblock->elmts, *nelmts) < 0)
|
||||
if((hdr->cparam.cls->decode)(p, dblock->elmts, *nelmts) < 0)
|
||||
H5E_THROW(H5E_CANTDECODE, "can't decode extensible array data elements")
|
||||
p += (*nelmts * hdr->raw_elmt_size);
|
||||
p += (*nelmts * hdr->cparam.raw_elmt_size);
|
||||
|
||||
/* Sanity check */
|
||||
/* (allow for checksum not decoded yet) */
|
||||
@ -971,16 +971,16 @@ H5EA__cache_dblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
|
||||
*p++ = H5EA_DBLOCK_VERSION;
|
||||
|
||||
/* Extensible array type */
|
||||
*p++ = dblock->hdr->cls->id;
|
||||
*p++ = dblock->hdr->cparam.cls->id;
|
||||
|
||||
/* Internal information */
|
||||
|
||||
/* Encode elements in data block */
|
||||
|
||||
/* Convert from native elements in memory into raw elements on disk */
|
||||
if((dblock->hdr->cls->encode)(p, dblock->elmts, dblock->nelmts) < 0)
|
||||
if((dblock->hdr->cparam.cls->encode)(p, dblock->elmts, dblock->nelmts) < 0)
|
||||
H5E_THROW(H5E_CANTENCODE, "can't encode extensible array data elements")
|
||||
p += (dblock->nelmts * dblock->hdr->raw_elmt_size);
|
||||
p += (dblock->nelmts * dblock->hdr->cparam.raw_elmt_size);
|
||||
|
||||
/* Compute metadata checksum */
|
||||
metadata_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
|
||||
|
@ -119,26 +119,26 @@ H5EA__hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
|
||||
/* Print the values */
|
||||
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
|
||||
"Array class ID:",
|
||||
(hdr->cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
(hdr->cparam.cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
"Unknown!"));
|
||||
HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
|
||||
"Header size:",
|
||||
hdr->size);
|
||||
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
|
||||
"Raw Element Size:",
|
||||
(unsigned)hdr->raw_elmt_size);
|
||||
(unsigned)hdr->cparam.raw_elmt_size);
|
||||
HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
|
||||
"Native Element Size (on this platform):",
|
||||
hdr->cls->nat_elmt_size);
|
||||
hdr->cparam.cls->nat_elmt_size);
|
||||
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
|
||||
"# of elements in index block:",
|
||||
(unsigned)hdr->idx_blk_elmts);
|
||||
(unsigned)hdr->cparam.idx_blk_elmts);
|
||||
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
|
||||
"Min. # of elements per data block:",
|
||||
(unsigned)hdr->data_blk_min_elmts);
|
||||
(unsigned)hdr->cparam.data_blk_min_elmts);
|
||||
HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
|
||||
"Min. # of data block pointers for a super block:",
|
||||
(unsigned)hdr->sup_blk_min_data_ptrs);
|
||||
(unsigned)hdr->cparam.sup_blk_min_data_ptrs);
|
||||
HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
|
||||
"Highest element index stored (+1):",
|
||||
hdr->stats.max_idx_set);
|
||||
@ -210,7 +210,7 @@ H5EA__iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
|
||||
/* Print the values */
|
||||
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
|
||||
"Array class ID:",
|
||||
(hdr->cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
(hdr->cparam.cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
"Unknown!"));
|
||||
HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
|
||||
"Index Block size:",
|
||||
@ -223,16 +223,16 @@ H5EA__iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
|
||||
iblock->nsblk_addrs);
|
||||
|
||||
/* Check if there are any elements in index block */
|
||||
if(hdr->idx_blk_elmts > 0) {
|
||||
if(hdr->cparam.idx_blk_elmts > 0) {
|
||||
unsigned u; /* Local index variable */
|
||||
|
||||
/* Print the elements in the index block */
|
||||
HDfprintf(stream, "%*sElements in Index Block:\n", indent, "");
|
||||
for(u = 0; u < hdr->idx_blk_elmts; u++) {
|
||||
for(u = 0; u < hdr->cparam.idx_blk_elmts; u++) {
|
||||
/* Call the class's 'debug' callback */
|
||||
if((hdr->cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)),
|
||||
if((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)),
|
||||
(hsize_t)u,
|
||||
((uint8_t *)iblock->elmts) + (hdr->cls->nat_elmt_size * u)) < 0)
|
||||
((uint8_t *)iblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
|
||||
H5E_THROW(H5E_CANTGET, "can't get element for debugging")
|
||||
} /* end for */
|
||||
} /* end if */
|
||||
@ -325,7 +325,7 @@ H5EA__dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
|
||||
/* Print the values */
|
||||
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
|
||||
"Array class ID:",
|
||||
(hdr->cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
(hdr->cparam.cls->id == H5EA_CLS_TEST_ID ? "H5EA_CLS_TEST_ID" :
|
||||
"Unknown!"));
|
||||
HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
|
||||
"Data Block size:",
|
||||
@ -336,9 +336,9 @@ H5EA__dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int inde
|
||||
HDfprintf(stream, "%*sElements:\n", indent, "");
|
||||
for(u = 0; u < dblk_nelmts; u++) {
|
||||
/* Call the class's 'debug' callback */
|
||||
if((hdr->cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)),
|
||||
if((hdr->cparam.cls->debug)(stream, (indent + 3), MAX(0, (fwidth - 3)),
|
||||
(hsize_t)u,
|
||||
((uint8_t *)dblock->elmts) + (hdr->cls->nat_elmt_size * u)) < 0)
|
||||
((uint8_t *)dblock->elmts) + (hdr->cparam.cls->nat_elmt_size * u)) < 0)
|
||||
H5E_THROW(H5E_CANTGET, "can't get element for debugging")
|
||||
} /* end for */
|
||||
|
||||
|
@ -176,11 +176,11 @@ HDfprintf(stderr, "%s: dblock->size = %Zu\n", FUNC, dblock->size);
|
||||
#endif /* QAK */
|
||||
|
||||
/* Allocate space for the data block on disk */
|
||||
if(HADDR_UNDEF == (dblock->addr = H5MF_alloc(iblock->hdr->f, H5FD_MEM_EARRAY_DBLOCK, dxpl_id, dblock->size)))
|
||||
if(HADDR_UNDEF == (dblock->addr = H5MF_alloc(iblock->hdr->f, H5FD_MEM_EARRAY_DBLOCK, dxpl_id, (hsize_t)dblock->size)))
|
||||
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array data block")
|
||||
|
||||
/* Clear any elements in index block to fill value */
|
||||
if((iblock->hdr->cls->fill)(dblock->elmts, (size_t)dblock->nelmts) < 0)
|
||||
if((iblock->hdr->cparam.cls->fill)(dblock->elmts, (size_t)dblock->nelmts) < 0)
|
||||
H5E_THROW(H5E_CANTSET, "can't set extensible array data block elements to class's fill value")
|
||||
|
||||
/* Cache the new extensible array data block */
|
||||
@ -228,13 +228,13 @@ H5EA__dblock_sblk_idx(const H5EA_hdr_t *hdr, hsize_t idx))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
HDassert(idx >= hdr->idx_blk_elmts);
|
||||
HDassert(idx >= hdr->cparam.idx_blk_elmts);
|
||||
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: Entering - idx = %Hu\n", FUNC, idx);
|
||||
#endif /* QAK */
|
||||
/* Adjust index for elements in index block */
|
||||
idx -= hdr->idx_blk_elmts;
|
||||
idx -= hdr->cparam.idx_blk_elmts;
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: after adjusting for index block elements, idx = %Hu\n", FUNC, idx);
|
||||
#endif /* QAK */
|
||||
@ -242,9 +242,9 @@ HDfprintf(stderr, "%s: after adjusting for index block elements, idx = %Hu\n", F
|
||||
/* Determine the superblock information for the index */
|
||||
H5_CHECK_OVERFLOW(idx, /*From:*/hsize_t, /*To:*/uint64_t);
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: hdr->data_blk_min_elmts = %u\n", FUNC, (unsigned)hdr->data_blk_min_elmts);
|
||||
HDfprintf(stderr, "%s: hdr->cparam.data_blk_min_elmts = %u\n", FUNC, (unsigned)hdr->cparam.data_blk_min_elmts);
|
||||
#endif /* QAK */
|
||||
sblk_idx = H5V_log2_gen((uint64_t)((idx / hdr->data_blk_min_elmts) + 1));
|
||||
sblk_idx = H5V_log2_gen((uint64_t)((idx / hdr->cparam.data_blk_min_elmts) + 1));
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: sblk_idx = %u\n", FUNC, sblk_idx);
|
||||
HDfprintf(stderr, "%s: hdr->sblk_info[%u] = {%Hu, %Zu, %Hu, %Hu}\n", FUNC, sblk_idx, hdr->sblk_info[sblk_idx].ndblks, hdr->sblk_info[sblk_idx].dblk_nelmts, hdr->sblk_info[sblk_idx].start_idx, hdr->sblk_info[sblk_idx].start_dblk);
|
||||
|
@ -131,7 +131,7 @@ H5EA__hdr_alloc(H5F_t *f, const H5EA_class_t *cls))
|
||||
hdr->sizeof_size = H5F_SIZEOF_SIZE(f);
|
||||
|
||||
/* Set the class of the array */
|
||||
hdr->cls = cls;
|
||||
hdr->cparam.cls = cls;
|
||||
|
||||
/* Set the return value */
|
||||
ret_value = hdr;
|
||||
@ -191,12 +191,12 @@ H5EA__hdr_init(H5EA_hdr_t *hdr))
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(hdr);
|
||||
HDassert(hdr->max_nelmts_bits);
|
||||
HDassert(hdr->data_blk_min_elmts);
|
||||
HDassert(hdr->sup_blk_min_data_ptrs);
|
||||
HDassert(hdr->cparam.max_nelmts_bits);
|
||||
HDassert(hdr->cparam.data_blk_min_elmts);
|
||||
HDassert(hdr->cparam.sup_blk_min_data_ptrs);
|
||||
|
||||
/* Compute general information */
|
||||
hdr->nsblks = 1 + (hdr->max_nelmts_bits - H5V_log2_of2(hdr->data_blk_min_elmts));
|
||||
hdr->nsblks = 1 + (hdr->cparam.max_nelmts_bits - H5V_log2_of2(hdr->cparam.data_blk_min_elmts));
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: hdr->nsblks = %Zu\n", FUNC, hdr->nsblks);
|
||||
#endif /* QAK */
|
||||
@ -210,7 +210,7 @@ HDfprintf(stderr, "%s: hdr->nsblks = %Zu\n", FUNC, hdr->nsblks);
|
||||
start_dblk = 0;
|
||||
for(u = 0; u < hdr->nsblks; u++) {
|
||||
hdr->sblk_info[u].ndblks = (hsize_t)H5_EXP2(u / 2);
|
||||
hdr->sblk_info[u].dblk_nelmts = (size_t)H5_EXP2((u + 1) / 2) * hdr->data_blk_min_elmts;
|
||||
hdr->sblk_info[u].dblk_nelmts = (size_t)H5_EXP2((u + 1) / 2) * hdr->cparam.data_blk_min_elmts;
|
||||
hdr->sblk_info[u].start_idx = start_idx;
|
||||
hdr->sblk_info[u].start_dblk = start_dblk;
|
||||
#ifdef QAK
|
||||
@ -257,7 +257,7 @@ H5EA__hdr_alloc_elmts(H5EA_hdr_t *hdr, size_t nelmts))
|
||||
|
||||
/* Compute the index of the element buffer factory */
|
||||
H5_CHECK_OVERFLOW(nelmts, /*From:*/size_t, /*To:*/uint32_t);
|
||||
idx = H5V_log2_of2((uint32_t)nelmts) - H5V_log2_of2((uint32_t)hdr->data_blk_min_elmts);
|
||||
idx = H5V_log2_of2((uint32_t)nelmts) - H5V_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: nelmts = %Zu, hdr->data_blk_min_elmts = %u, idx = %u\n", FUNC, nelmts, (unsigned)hdr->data_blk_min_elmts, idx);
|
||||
#endif /* QAK */
|
||||
@ -281,7 +281,7 @@ HDfprintf(stderr, "%s: nelmts = %Zu, hdr->data_blk_min_elmts = %u, idx = %u\n",
|
||||
|
||||
/* Check for un-initialized factory at index */
|
||||
if(NULL == hdr->elmt_fac.fac[idx]) {
|
||||
if(NULL == (hdr->elmt_fac.fac[idx] = H5FL_fac_init(nelmts * (size_t)hdr->cls->nat_elmt_size)))
|
||||
if(NULL == (hdr->elmt_fac.fac[idx] = H5FL_fac_init(nelmts * (size_t)hdr->cparam.cls->nat_elmt_size)))
|
||||
H5E_THROW(H5E_CANTINIT, "can't create data block data element buffer factory")
|
||||
} /* end if */
|
||||
|
||||
@ -327,7 +327,7 @@ H5EA__hdr_free_elmts(H5EA_hdr_t *hdr, size_t nelmts, void *elmts))
|
||||
|
||||
/* Compute the index of the element buffer factory */
|
||||
H5_CHECK_OVERFLOW(nelmts, /*From:*/size_t, /*To:*/uint32_t);
|
||||
idx = H5V_log2_of2((uint32_t)nelmts) - H5V_log2_of2((uint32_t)hdr->data_blk_min_elmts);
|
||||
idx = H5V_log2_of2((uint32_t)nelmts) - H5V_log2_of2((uint32_t)hdr->cparam.data_blk_min_elmts);
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: nelmts = %Zu, hdr->data_blk_min_elmts = %u, idx = %u\n", FUNC, nelmts, (unsigned)hdr->data_blk_min_elmts, idx);
|
||||
#endif /* QAK */
|
||||
@ -392,18 +392,14 @@ HDfprintf(stderr, "%s: Called\n", FUNC);
|
||||
hdr->idx_blk_addr = HADDR_UNDEF;
|
||||
|
||||
/* Set the creation parameters for the array */
|
||||
hdr->raw_elmt_size = cparam->raw_elmt_size;
|
||||
hdr->max_nelmts_bits = cparam->max_nelmts_bits;
|
||||
hdr->idx_blk_elmts = cparam->idx_blk_elmts;
|
||||
hdr->sup_blk_min_data_ptrs = cparam->sup_blk_min_data_ptrs;
|
||||
hdr->data_blk_min_elmts = cparam->data_blk_min_elmts;
|
||||
HDmemcpy(&hdr->cparam, cparam, sizeof(hdr->cparam));
|
||||
|
||||
/* Finish initializing extensible array header */
|
||||
if(H5EA__hdr_init(hdr) < 0)
|
||||
H5E_THROW(H5E_CANTINIT, "initialization failed for extensible array header")
|
||||
|
||||
/* Allocate space for the header on disk */
|
||||
if(HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_EARRAY_HDR, dxpl_id, hdr->size)))
|
||||
if(HADDR_UNDEF == (hdr->addr = H5MF_alloc(f, H5FD_MEM_EARRAY_HDR, dxpl_id, (hsize_t)hdr->size)))
|
||||
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array header")
|
||||
|
||||
/* Cache the new extensible array header */
|
||||
|
@ -123,8 +123,8 @@ H5EA__iblock_alloc(H5EA_hdr_t *hdr))
|
||||
iblock->addr = HADDR_UNDEF;
|
||||
|
||||
/* Compute information */
|
||||
iblock->nsblks = 2 * H5V_log2_of2((uint32_t)hdr->sup_blk_min_data_ptrs);
|
||||
iblock->ndblk_addrs = 2 * ((size_t)hdr->sup_blk_min_data_ptrs - 1);
|
||||
iblock->nsblks = 2 * H5V_log2_of2((uint32_t)hdr->cparam.sup_blk_min_data_ptrs);
|
||||
iblock->ndblk_addrs = 2 * ((size_t)hdr->cparam.sup_blk_min_data_ptrs - 1);
|
||||
iblock->nsblk_addrs = hdr->nsblks - iblock->nsblks;
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "%s: iblock->nsblks = %u\n", FUNC, iblock->nsblks);
|
||||
@ -133,8 +133,8 @@ HDfprintf(stderr, "%s: iblock->nsblk_addrs = %Zu\n", FUNC, iblock->nsblk_addrs);
|
||||
#endif /* QAK */
|
||||
|
||||
/* Allocate buffer for elements in index block */
|
||||
if(hdr->idx_blk_elmts > 0)
|
||||
if(NULL == (iblock->elmts = H5FL_BLK_MALLOC(idx_blk_elmt_buf, (size_t)(hdr->idx_blk_elmts * hdr->cls->nat_elmt_size))))
|
||||
if(hdr->cparam.idx_blk_elmts > 0)
|
||||
if(NULL == (iblock->elmts = H5FL_BLK_MALLOC(idx_blk_elmt_buf, (size_t)(hdr->cparam.idx_blk_elmts * hdr->cparam.cls->nat_elmt_size))))
|
||||
H5E_THROW(H5E_CANTALLOC, "memory allocation failed for index block data element buffer")
|
||||
|
||||
/* Allocate buffer for data block addresses in index block */
|
||||
@ -201,13 +201,13 @@ HDfprintf(stderr, "%s: iblock->size = %Zu\n", FUNC, iblock->size);
|
||||
#endif /* QAK */
|
||||
|
||||
/* Allocate space for the index block on disk */
|
||||
if(HADDR_UNDEF == (iblock->addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, dxpl_id, iblock->size)))
|
||||
if(HADDR_UNDEF == (iblock->addr = H5MF_alloc(hdr->f, H5FD_MEM_EARRAY_IBLOCK, dxpl_id, (hsize_t)iblock->size)))
|
||||
H5E_THROW(H5E_CANTALLOC, "file allocation failed for extensible array index block")
|
||||
|
||||
/* Clear any elements in index block to fill value */
|
||||
if(hdr->idx_blk_elmts > 0) {
|
||||
if(hdr->cparam.idx_blk_elmts > 0) {
|
||||
/* Call the class's 'fill' callback */
|
||||
if((hdr->cls->fill)(iblock->elmts, (size_t)hdr->idx_blk_elmts) < 0)
|
||||
if((hdr->cparam.cls->fill)(iblock->elmts, (size_t)hdr->cparam.idx_blk_elmts) < 0)
|
||||
H5E_THROW(H5E_CANTSET, "can't set extensible array index block elements to class's fill value")
|
||||
} /* end if */
|
||||
|
||||
@ -431,7 +431,7 @@ H5EA__iblock_dest(H5F_t *f, H5EA_iblock_t *iblock))
|
||||
iblock->hdr->f = f;
|
||||
|
||||
/* Check if we've got elements in the index block */
|
||||
if(iblock->hdr->idx_blk_elmts > 0) {
|
||||
if(iblock->hdr->cparam.idx_blk_elmts > 0) {
|
||||
/* Free buffer for index block elements */
|
||||
HDassert(iblock->elmts);
|
||||
(void)H5FL_BLK_FREE(idx_blk_elmt_buf, iblock->elmts);
|
||||
|
@ -386,7 +386,7 @@ func_init_failed: \
|
||||
H5EA_METADATA_PREFIX_SIZE(TRUE) \
|
||||
\
|
||||
/* Extensible Array Index Block specific fields */ \
|
||||
+ ((size_t)(i)->hdr->idx_blk_elmts * (size_t)(i)->hdr->raw_elmt_size) /* Elements in index block */ \
|
||||
+ ((size_t)(i)->hdr->cparam.idx_blk_elmts * (size_t)(i)->hdr->cparam.raw_elmt_size) /* Elements in index block */ \
|
||||
+ ((i)->ndblk_addrs * (i)->hdr->sizeof_addr) /* Data block addresses in index block */ \
|
||||
+ ((i)->nsblk_addrs * (i)->hdr->sizeof_addr) /* Super block addresses in index block */ \
|
||||
)
|
||||
@ -397,7 +397,7 @@ func_init_failed: \
|
||||
H5EA_METADATA_PREFIX_SIZE(TRUE) \
|
||||
\
|
||||
/* Extensible Array Data Block specific fields */ \
|
||||
+ ((d)->nelmts * (size_t)(d)->hdr->raw_elmt_size) /* Elements in index block */ \
|
||||
+ ((d)->nelmts * (size_t)(d)->hdr->cparam.raw_elmt_size) /* Elements in index block */ \
|
||||
)
|
||||
|
||||
|
||||
@ -422,11 +422,7 @@ typedef struct H5EA_hdr_t {
|
||||
H5AC_info_t cache_info;
|
||||
|
||||
/* Extensible array configuration/creation parameters (stored) */
|
||||
uint8_t raw_elmt_size; /* Element size in file (in bytes) */
|
||||
uint8_t max_nelmts_bits; /* Log2(Max. # of elements in array) - i.e. # of bits needed to store max. # of elements */
|
||||
uint8_t idx_blk_elmts; /* # of elements to store in index block */
|
||||
uint8_t data_blk_min_elmts; /* Min. # of elements per data block */
|
||||
uint8_t sup_blk_min_data_ptrs; /* Min. # of data block pointers for a super block */
|
||||
H5EA_create_t cparam; /* Creation parameters for extensible array */
|
||||
|
||||
/* Index block information (stored in header) */
|
||||
haddr_t idx_blk_addr; /* Address of index block in header */
|
||||
@ -453,9 +449,6 @@ typedef struct H5EA_hdr_t {
|
||||
/* Super block information (not stored) */
|
||||
size_t nsblks; /* Number of superblocks needed for array */
|
||||
H5EA_sblk_info_t *sblk_info; /* Array of information for each super block */
|
||||
|
||||
/* Memory data structures (not stored directly) */
|
||||
const H5EA_class_t *cls; /* Pointer to class for array */
|
||||
} H5EA_hdr_t;
|
||||
|
||||
/* The extensible array index block information */
|
||||
|
@ -262,11 +262,11 @@ H5EA_get_cparam_test(const H5EA_t *ea, H5EA_create_t *cparam))
|
||||
HDassert(cparam);
|
||||
|
||||
/* Get extensible array creation parameters */
|
||||
cparam->raw_elmt_size = ea->hdr->raw_elmt_size;
|
||||
cparam->max_nelmts_bits = ea->hdr->max_nelmts_bits;
|
||||
cparam->idx_blk_elmts = ea->hdr->idx_blk_elmts;
|
||||
cparam->sup_blk_min_data_ptrs = ea->hdr->sup_blk_min_data_ptrs;
|
||||
cparam->data_blk_min_elmts = ea->hdr->data_blk_min_elmts;
|
||||
cparam->raw_elmt_size = ea->hdr->cparam.raw_elmt_size;
|
||||
cparam->max_nelmts_bits = ea->hdr->cparam.max_nelmts_bits;
|
||||
cparam->idx_blk_elmts = ea->hdr->cparam.idx_blk_elmts;
|
||||
cparam->sup_blk_min_data_ptrs = ea->hdr->cparam.sup_blk_min_data_ptrs;
|
||||
cparam->data_blk_min_elmts = ea->hdr->cparam.data_blk_min_elmts;
|
||||
|
||||
END_FUNC(PRIV) /* end H5EA_get_cparam_test() */
|
||||
|
||||
|
655
test/earray.c
655
test/earray.c
@ -28,6 +28,7 @@
|
||||
|
||||
/* Other private headers that this test requires */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5Vprivate.h" /* Vectors and arrays */
|
||||
|
||||
|
||||
/* Local macros */
|
||||
@ -73,6 +74,10 @@ typedef enum {
|
||||
typedef struct earray_test_param_t {
|
||||
earray_test_type_t reopen_array; /* Whether to re-open the array during the test */
|
||||
earray_test_comp_t comp; /* Whether to compress the blocks or not */
|
||||
|
||||
/* Super block information */
|
||||
size_t nsblks; /* Number of superblocks needed for array */
|
||||
H5EA_sblk_info_t *sblk_info; /* Array of information for each super block */
|
||||
} earray_test_param_t;
|
||||
|
||||
/* Extensible array state information */
|
||||
@ -129,6 +134,80 @@ init_cparam(H5EA_create_t *cparam)
|
||||
return(0);
|
||||
} /* init_cparam() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: init_tparam
|
||||
*
|
||||
* Purpose: Initialize array testing parameter structure
|
||||
*
|
||||
* Note: This initialization is the same as that in H5EA_hdr_init()
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, September 25, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
init_tparam(earray_test_param_t *tparam, const H5EA_create_t *cparam)
|
||||
{
|
||||
hsize_t start_idx; /* First element index for each super block */
|
||||
hsize_t start_dblk; /* First data block index for each super block */
|
||||
size_t u; /* Local index variable */
|
||||
|
||||
/* Wipe out background */
|
||||
HDmemset(tparam, 0, sizeof(*tparam));
|
||||
|
||||
/* Compute general information */
|
||||
tparam->nsblks = 1 + (cparam->max_nelmts_bits - H5V_log2_of2(cparam->data_blk_min_elmts));
|
||||
|
||||
/* Allocate information for each super block */
|
||||
tparam->sblk_info = (H5EA_sblk_info_t *)HDmalloc(sizeof(H5EA_sblk_info_t) * tparam->nsblks);
|
||||
HDassert(tparam->sblk_info);
|
||||
|
||||
/* Compute information about each super block */
|
||||
start_idx = 0;
|
||||
start_dblk = 0;
|
||||
for(u = 0; u < tparam->nsblks; u++) {
|
||||
tparam->sblk_info[u].ndblks = (hsize_t)H5_EXP2(u / 2);
|
||||
tparam->sblk_info[u].dblk_nelmts = (size_t)H5_EXP2((u + 1) / 2) * cparam->data_blk_min_elmts;
|
||||
tparam->sblk_info[u].start_idx = start_idx;
|
||||
tparam->sblk_info[u].start_dblk = start_dblk;
|
||||
|
||||
/* Advance starting indices for next super block */
|
||||
start_idx += tparam->sblk_info[u].ndblks * tparam->sblk_info[u].dblk_nelmts;
|
||||
start_dblk += tparam->sblk_info[u].ndblks;
|
||||
} /* end for */
|
||||
|
||||
return(0);
|
||||
} /* init_tparam() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: finish_tparam
|
||||
*
|
||||
* Purpose: Close down array testing parameter structure
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, September 25, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
finish_tparam(earray_test_param_t *tparam)
|
||||
{
|
||||
/* Release super block information */
|
||||
HDfree(tparam->sblk_info);
|
||||
tparam->sblk_info = NULL;
|
||||
|
||||
return(0);
|
||||
} /* finish_tparam() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: create_file
|
||||
@ -870,379 +949,9 @@ error:
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_set_first
|
||||
* Function: test_set_elmts
|
||||
*
|
||||
* Purpose: Set first element in extensible array
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 28, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_set_first(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
H5EA_t *ea = NULL; /* Extensible array wrapper */
|
||||
earray_state_t state; /* State of extensible array */
|
||||
uint64_t welmt; /* Element to write */
|
||||
uint64_t relmt; /* Element to read */
|
||||
hsize_t nelmts; /* Highest element written in array */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("setting first element of array");
|
||||
|
||||
/* Check for elements in index block */
|
||||
if(cparam->idx_blk_elmts > 0) {
|
||||
/* Create file & retrieve pointer to internal file object */
|
||||
if(create_file(fapl, &file, &f) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create array */
|
||||
if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify the creation parameters */
|
||||
if(verify_cparam(ea, cparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Check for closing & re-opening the file */
|
||||
if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, cparam->cls, tparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve first element of array (not set yet) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)0, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is fill value for array */
|
||||
if(relmt != H5EA_TEST_FILL)
|
||||
TEST_ERROR
|
||||
|
||||
/* Set first element of array */
|
||||
welmt = (uint64_t)7;
|
||||
if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)0, &welmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 1)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
state.max_idx_set = 1;
|
||||
state.nelmts = (hsize_t)cparam->idx_blk_elmts;
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve first element of array (set now) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)0, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is value written */
|
||||
if(relmt != welmt)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close array, delete array, close file & verify file is empty */
|
||||
if(finish(file, f, ea, ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* All tests passed */
|
||||
PASSED()
|
||||
} /* end if */
|
||||
else {
|
||||
SKIPPED();
|
||||
puts(" No elements stored in index block");
|
||||
} /* end else */
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
if(ea)
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_set_first() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_set_iblock
|
||||
*
|
||||
* Purpose: Set all elements in extensible array's index block
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, September 11, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_set_iblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
H5EA_t *ea = NULL; /* Extensible array wrapper */
|
||||
earray_state_t state; /* State of extensible array */
|
||||
uint64_t welmt; /* Element to write */
|
||||
uint64_t relmt; /* Element to read */
|
||||
hsize_t nelmts; /* Highest element written in array */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("setting index block elements of array");
|
||||
|
||||
/* Check for elements in index block */
|
||||
if(cparam->idx_blk_elmts > 0) {
|
||||
unsigned u; /* Local index variable */
|
||||
|
||||
/* Create file & retrieve pointer to internal file object */
|
||||
if(create_file(fapl, &file, &f) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create array */
|
||||
if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify the creation parameters */
|
||||
if(verify_cparam(ea, cparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Check for closing & re-opening the file */
|
||||
if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, cparam->cls, tparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve elements of array in index block (not set yet) */
|
||||
for(u = 0; u < cparam->idx_blk_elmts; u++) {
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)u, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is fill value for array */
|
||||
if(relmt != H5EA_TEST_FILL)
|
||||
TEST_ERROR
|
||||
} /* end for */
|
||||
|
||||
/* Set elements of array in index block */
|
||||
for(u = 0; u < cparam->idx_blk_elmts; u++) {
|
||||
welmt = (uint64_t)(7 + u);
|
||||
if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)u, &welmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != (u + 1))
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
state.max_idx_set = u + 1;
|
||||
state.nelmts = (hsize_t)cparam->idx_blk_elmts;
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve first element of array (set now) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)u, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is value written */
|
||||
if(relmt != welmt)
|
||||
TEST_ERROR
|
||||
} /* end for */
|
||||
|
||||
/* Close array, delete array, close file & verify file is empty */
|
||||
if(finish(file, f, ea, ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* All tests passed */
|
||||
PASSED()
|
||||
} /* end if */
|
||||
else {
|
||||
SKIPPED();
|
||||
puts(" No elements stored in index block");
|
||||
} /* end else */
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
if(ea)
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_set_iblock() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_set_first_dblock_first
|
||||
*
|
||||
* Purpose: Set first element in extensible array's first data block
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, September 11, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_set_first_dblock_first(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
H5EA_t *ea = NULL; /* Extensible array wrapper */
|
||||
earray_state_t state; /* State of extensible array */
|
||||
uint64_t welmt; /* Element to write */
|
||||
uint64_t relmt; /* Element to read */
|
||||
hsize_t nelmts; /* Highest element written in array */
|
||||
hsize_t idx; /* Index value of first element of first data block */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("setting first element of array's first data block");
|
||||
|
||||
/* Create file & retrieve pointer to internal file object */
|
||||
if(create_file(fapl, &file, &f) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create array */
|
||||
if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify the creation parameters */
|
||||
if(verify_cparam(ea, cparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Check for closing & re-opening the file */
|
||||
if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, cparam->cls, tparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Compute index of first element of first data block */
|
||||
idx = cparam->idx_blk_elmts;
|
||||
|
||||
/* Retrieve first element of first data block of array (not set yet) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is fill value for array */
|
||||
if(relmt != H5EA_TEST_FILL)
|
||||
TEST_ERROR
|
||||
|
||||
/* Set first element of first data block */
|
||||
welmt = (uint64_t)7;
|
||||
if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != (idx + 1))
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
state.max_idx_set = idx + 1;
|
||||
state.ndata_blks = 1;
|
||||
state.nelmts = (hsize_t)(cparam->idx_blk_elmts + cparam->data_blk_min_elmts);
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve first element of array (set now) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify first element is value written */
|
||||
if(relmt != welmt)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close array, delete array, close file & verify file is empty */
|
||||
if(finish(file, f, ea, ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* All tests passed */
|
||||
PASSED()
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
if(ea)
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_set_first_dblock_first() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_set_first_dblock
|
||||
*
|
||||
* Purpose: Set all elements in extensible array's first data block
|
||||
* Purpose: Set all elements from 0 through 'nelmts' in extensible array
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
@ -1253,7 +962,8 @@ error:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_set_first_dblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
|
||||
test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam,
|
||||
hsize_t nelmts, const char *test_str)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
@ -1261,15 +971,14 @@ test_set_first_dblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tp
|
||||
earray_state_t state; /* State of extensible array */
|
||||
uint64_t welmt; /* Element to write */
|
||||
uint64_t relmt; /* Element to read */
|
||||
hsize_t nelmts; /* Highest element written in array */
|
||||
hsize_t nelmts_written; /* Highest element written in array */
|
||||
hsize_t idx; /* Index value of first element of first data block */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */
|
||||
unsigned u; /* Local index variable */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("setting all elements of array's first data block");
|
||||
TESTING(test_str);
|
||||
|
||||
/* Create file & retrieve pointer to internal file object */
|
||||
if(create_file(fapl, &file, &f) < 0)
|
||||
@ -1288,10 +997,10 @@ test_set_first_dblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tp
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
nelmts_written = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts_written) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 0)
|
||||
if(nelmts_written != 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
@ -1300,11 +1009,8 @@ test_set_first_dblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tp
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve elements of array in data block (not set yet) */
|
||||
for(u = 0; u < cparam->data_blk_min_elmts; u++) {
|
||||
/* Compute index of element of first data block */
|
||||
idx = cparam->idx_blk_elmts + u;
|
||||
|
||||
/* Retrieve element of first data block of array (not set yet) */
|
||||
for(idx = 0; idx < nelmts; idx++) {
|
||||
/* Retrieve element of array (not set yet) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
@ -1314,28 +1020,48 @@ test_set_first_dblock(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tp
|
||||
TEST_ERROR
|
||||
} /* end for */
|
||||
|
||||
/* Set elements of array in index block */
|
||||
for(u = 0; u < cparam->data_blk_min_elmts; u++) {
|
||||
/* Compute index of element of first data block */
|
||||
idx = cparam->idx_blk_elmts + u;
|
||||
|
||||
/* Set elements of array */
|
||||
for(idx = 0; idx < nelmts; idx++) {
|
||||
/* Set element of first data block */
|
||||
welmt = (uint64_t)7 + u;
|
||||
welmt = (uint64_t)7 + idx;
|
||||
if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
nelmts_written = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts_written) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != (idx + 1))
|
||||
if(nelmts_written != (idx + 1))
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
state.max_idx_set = idx + 1;
|
||||
state.ndata_blks = 1;
|
||||
state.nelmts = (hsize_t)(cparam->idx_blk_elmts + cparam->data_blk_min_elmts);
|
||||
if(idx < cparam->idx_blk_elmts)
|
||||
state.nelmts = (hsize_t)cparam->idx_blk_elmts;
|
||||
else {
|
||||
unsigned sblk_idx; /* Which superblock does this index fall in? */
|
||||
|
||||
/* Compute super block index for element index */
|
||||
/* (same eqn. as in H5EA__dblock_sblk_idx()) */
|
||||
sblk_idx = H5V_log2_gen((uint64_t)(((idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1));
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "idx = %Hu, tparam->sblk_info[%u] = {%Hu, %Zu, %Hu, %Hu}\n", idx, sblk_idx, tparam->sblk_info[sblk_idx].ndblks, tparam->sblk_info[sblk_idx].dblk_nelmts, tparam->sblk_info[sblk_idx].start_idx, tparam->sblk_info[sblk_idx].start_dblk);
|
||||
#endif /* QAK */
|
||||
|
||||
state.nelmts = (hsize_t)(cparam->idx_blk_elmts +
|
||||
tparam->sblk_info[sblk_idx].start_idx +
|
||||
((1 + ((idx - (cparam->idx_blk_elmts + tparam->sblk_info[sblk_idx].start_idx)) / tparam->sblk_info[sblk_idx].dblk_nelmts))
|
||||
* tparam->sblk_info[sblk_idx].dblk_nelmts));
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "state.nelmts = %Hu\n", state.nelmts);
|
||||
#endif /* QAK */
|
||||
state.ndata_blks = 1 + tparam->sblk_info[sblk_idx].start_dblk +
|
||||
((idx - cparam->idx_blk_elmts) / tparam->sblk_info[sblk_idx].dblk_nelmts);
|
||||
#ifdef QAK
|
||||
HDfprintf(stderr, "state.ndata_blks = %Hu\n", state.ndata_blks);
|
||||
#endif /* QAK */
|
||||
} /* end else */
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
@ -1366,127 +1092,7 @@ error:
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_set_first_dblock() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_set_second_dblock_first
|
||||
*
|
||||
* Purpose: Set first element in extensible array's second data block
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: 1
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, September 22, 2008
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static unsigned
|
||||
test_set_second_dblock_first(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam)
|
||||
{
|
||||
hid_t file = -1; /* File ID */
|
||||
H5F_t *f = NULL; /* Internal file object pointer */
|
||||
H5EA_t *ea = NULL; /* Extensible array wrapper */
|
||||
earray_state_t state; /* State of extensible array */
|
||||
uint64_t welmt; /* Element to write */
|
||||
uint64_t relmt; /* Element to read */
|
||||
hsize_t nelmts; /* Highest element written in array */
|
||||
hsize_t idx; /* Index value of first element of first data block */
|
||||
haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */
|
||||
|
||||
/*
|
||||
* Display testing message
|
||||
*/
|
||||
TESTING("setting first element of array's second data block");
|
||||
|
||||
/* Create file & retrieve pointer to internal file object */
|
||||
if(create_file(fapl, &file, &f) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Create array */
|
||||
if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify the creation parameters */
|
||||
if(verify_cparam(ea, cparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Check for closing & re-opening the file */
|
||||
if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, cparam->cls, tparam) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Compute index of first element of second data block */
|
||||
idx = (hsize_t)(cparam->idx_blk_elmts + cparam->data_blk_min_elmts);
|
||||
|
||||
/* Retrieve element from array (not set yet) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify element is fill value for array */
|
||||
if(relmt != H5EA_TEST_FILL)
|
||||
TEST_ERROR
|
||||
|
||||
/* Set element of array */
|
||||
welmt = (uint64_t)7;
|
||||
if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify high-water # of elements written */
|
||||
nelmts = (hsize_t)ULLONG_MAX;
|
||||
if(H5EA_get_nelmts(ea, &nelmts) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(nelmts != (idx + 1))
|
||||
TEST_ERROR
|
||||
|
||||
/* Verify array state */
|
||||
HDmemset(&state, 0, sizeof(state));
|
||||
state.max_idx_set = idx + 1;
|
||||
state.ndata_blks = 1;
|
||||
state.nelmts = (hsize_t)(cparam->idx_blk_elmts + cparam->data_blk_min_elmts * 2);
|
||||
if(check_stats(ea, &state))
|
||||
TEST_ERROR
|
||||
|
||||
/* Retrieve element of array (set now) */
|
||||
relmt = (uint64_t)0;
|
||||
if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Verify element is value written */
|
||||
if(relmt != welmt)
|
||||
TEST_ERROR
|
||||
|
||||
/* Close array, delete array, close file & verify file is empty */
|
||||
if(finish(file, f, ea, ea_addr) < 0)
|
||||
TEST_ERROR
|
||||
|
||||
/* All tests passed */
|
||||
PASSED()
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
if(ea)
|
||||
H5EA_close(ea, H5P_DATASET_XFER_DEFAULT);
|
||||
H5Fclose(file);
|
||||
} H5E_END_TRY;
|
||||
|
||||
return 1;
|
||||
} /* test_set_second_dblock_first() */
|
||||
} /* test_set_elmts() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1552,8 +1158,8 @@ main(void)
|
||||
/* Iterate over the testing parameters */
|
||||
for(curr_test = EARRAY_TEST_NORMAL; curr_test < EARRAY_TEST_NTESTS; curr_test++) {
|
||||
|
||||
/* Clear the testing parameters */
|
||||
HDmemset(&tparam, 0, sizeof(tparam));
|
||||
/* Initialize the testing parameters */
|
||||
init_tparam(&tparam, &cparam);
|
||||
|
||||
/* Set appropriate testing parameters for each test */
|
||||
switch(curr_test) {
|
||||
@ -1580,11 +1186,14 @@ main(void)
|
||||
nerrors += test_delete_open(fapl, &cparam, &tparam);
|
||||
|
||||
/* Basic capacity tests */
|
||||
nerrors += test_set_first(fapl, &cparam, &tparam);
|
||||
nerrors += test_set_iblock(fapl, &cparam, &tparam);
|
||||
nerrors += test_set_first_dblock_first(fapl, &cparam, &tparam);
|
||||
nerrors += test_set_first_dblock(fapl, &cparam, &tparam);
|
||||
nerrors += test_set_second_dblock_first(fapl, &cparam, &tparam);
|
||||
nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)0, "setting first element of array");
|
||||
nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)cparam.idx_blk_elmts, "setting index block elements of array");
|
||||
nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + 1), "setting first element of array's first data block");
|
||||
nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + cparam.data_blk_min_elmts), "setting all elements of array's first data block");
|
||||
nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + cparam.data_blk_min_elmts + 1), "setting first element of array's second data block");
|
||||
|
||||
/* Close down testing parameters */
|
||||
finish_tparam(&tparam);
|
||||
} /* end for */
|
||||
|
||||
if(nerrors)
|
||||
|
Loading…
x
Reference in New Issue
Block a user