diff options
Diffstat (limited to 'test/earray.c')
| -rw-r--r-- | test/earray.c | 2831 |
1 files changed, 1240 insertions, 1591 deletions
diff --git a/test/earray.c b/test/earray.c index 132913b..cc79987 100644 --- a/test/earray.c +++ b/test/earray.c @@ -1,19 +1,16 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/* Programmer: Quincey Koziol <koziol@hdfgroup.org> +/* Programmer: Quincey Koziol * Tuesday, June 17, 2008 */ #include "h5test.h" @@ -22,92 +19,97 @@ * This file needs to access private datatypes from the H5EA package. * This file also needs to access the extensible array testing code. */ -#define H5EA_PACKAGE +#define H5EA_FRIEND /*suppress error about including H5EApkg */ #define H5EA_TESTING -#include "H5EApkg.h" /* Extensible Arrays */ +#include "H5EApkg.h" /* Extensible Arrays */ /* Other private headers that this test requires */ -#include "H5Iprivate.h" /* IDs */ -#include "H5Vprivate.h" /* Vectors and arrays */ - +#include "H5CXprivate.h" /* API Contexts */ +#include "H5Iprivate.h" /* IDs */ +#include "H5VLprivate.h" /* Virtual Object Layer */ +#include "H5VMprivate.h" /* Vectors and arrays */ /* Local macros */ /* Max. testfile name length */ -#define EARRAY_FILENAME_LEN 1024 +#define EARRAY_FILENAME_LEN 1024 /* Extensible array creation values */ -#define ELMT_SIZE sizeof(uint64_t) -#define MAX_NELMTS_BITS 32 /* i.e. 4 giga-elements */ -#define IDX_BLK_ELMTS 4 -#define SUP_BLK_MIN_DATA_PTRS 4 -#define DATA_BLK_MIN_ELMTS 16 -#define MAX_DBLOCK_PAGE_NELMTS_BITS 10 /* i.e. 1024 elements per data block page */ +#define ELMT_SIZE sizeof(uint64_t) +#define MAX_NELMTS_BITS 32 /* i.e. 4 giga-elements */ +#define IDX_BLK_ELMTS 4 +#define SUP_BLK_MIN_DATA_PTRS 4 +#define DATA_BLK_MIN_ELMTS 16 +#define MAX_DBLOCK_PAGE_NELMTS_BITS 10 /* i.e. 1024 elements per data block page */ /* Convenience macros for computing earray state */ -#define EA_HDR_SIZE 72 /* (hard-coded, current size) */ -#define EA_IBLOCK_SIZE 298 /* (hard-coded, current size) */ -#define EA_NELMTS(cparam, tparam, idx, sblk_idx) \ - (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)) -#define EA_NDATA_BLKS(cparam, tparam, idx, sblk_idx) \ - (1 + tparam->sblk_info[sblk_idx].start_dblk + \ - ((idx - (cparam->idx_blk_elmts + tparam->sblk_info[sblk_idx].start_idx)) / tparam->sblk_info[sblk_idx].dblk_nelmts)) +#define EA_HDR_SIZE 72 /* (hard-coded, current size) */ +#define EA_IBLOCK_SIZE 298 /* (hard-coded, current size) */ +#define EA_NELMTS(cparam, tparam, idx, sblk_idx) \ + (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)) +#define EA_NDATA_BLKS(cparam, tparam, idx, sblk_idx) \ + (1 + tparam->sblk_info[sblk_idx].start_dblk + \ + ((idx - (cparam->idx_blk_elmts + tparam->sblk_info[sblk_idx].start_idx)) / \ + tparam->sblk_info[sblk_idx].dblk_nelmts)) /* Iterator parameter values */ -#define EA_RND2_SCALE 100 -#define EA_CYC_COUNT 4 +#define EA_RND2_SCALE 100 +#define EA_CYC_COUNT 4 /* Local typedefs */ /* Types of tests to perform */ typedef enum { - EARRAY_TEST_NORMAL, /* "Normal" test, with no testing parameters set */ - EARRAY_TEST_REOPEN, /* Set the reopen_array flag */ - EARRAY_TEST_NTESTS /* The number of test types, must be last */ + EARRAY_TEST_NORMAL, /* "Normal" test, with no testing parameters set */ + EARRAY_TEST_REOPEN, /* Set the reopen_array flag */ + EARRAY_TEST_NTESTS /* The number of test types, must be last */ } earray_test_type_t; /* Types of iteration to perform */ typedef enum { - EARRAY_ITER_FW, /* "Forward" iteration */ - EARRAY_ITER_RV, /* "Reverse" iteration */ - EARRAY_ITER_RND, /* "Random" iteration */ - EARRAY_ITER_CYC, /* "Cyclic" iteration */ - EARRAY_ITER_RND2, /* "Random #2" iteration */ - EARRAY_ITER_NITERS /* The number of iteration types, must be last */ + EARRAY_ITER_FW, /* "Forward" iteration */ + EARRAY_ITER_RV, /* "Reverse" iteration */ + EARRAY_ITER_RND, /* "Random" iteration */ + EARRAY_ITER_CYC, /* "Cyclic" iteration */ + EARRAY_ITER_RND2, /* "Random #2" iteration */ + EARRAY_ITER_NITERS /* The number of iteration types, must be last */ } earray_iter_type_t; /* Orders to operate on entries */ typedef enum { - EARRAY_DIR_FORWARD, /* Insert objects from 0 -> nobjs */ - EARRAY_DIR_RANDOM, /* Insert objects randomly from 0 - nobjs */ - EARRAY_DIR_CYCLIC, /* Insert every n'th object cyclicly: 0, n, 2n, 3n, ..., nobjs/n, 1+nobjs/n, 1+n+nobjs/n, 1+2n+nobjs/n, ..., nobjs */ - EARRAY_DIR_REVERSE, /* Insert objects from nobjs -> 0 */ - EARRAY_DIR_INWARD, /* Insert objects from outside to in: 0, nobjs, 1, nobjs-1, 2, nobjs-2, ..., nobjs/2 */ - EARRAY_DIR_OUTWARD, /* Insert objects from inside to out: nobjs/2, (nobjs/2)-1, (nobjs/2)+1, ..., 0, nobjs */ - EARRAY_DIR_NDIRS /* The number of different insertion orders, must be last */ + EARRAY_DIR_FORWARD, /* Insert objects from 0 -> nobjs */ + EARRAY_DIR_RANDOM, /* Insert objects randomly from 0 - nobjs */ + EARRAY_DIR_CYCLIC, /* Insert every n'th object cyclicly: 0, n, 2n, 3n, ..., nobjs/n, 1+nobjs/n, + 1+n+nobjs/n, 1+2n+nobjs/n, ..., nobjs */ + EARRAY_DIR_REVERSE, /* Insert objects from nobjs -> 0 */ + EARRAY_DIR_INWARD, /* Insert objects from outside to in: 0, nobjs, 1, nobjs-1, 2, nobjs-2, ..., nobjs/2 */ + EARRAY_DIR_OUTWARD, /* Insert objects from inside to out: nobjs/2, (nobjs/2)-1, (nobjs/2)+1, ..., 0, nobjs + */ + EARRAY_DIR_NDIRS /* The number of different insertion orders, must be last */ } earray_test_dir_t; /* Whether to compress data blocks */ typedef enum { - EARRAY_TEST_NO_COMPRESS, /* Don't compress data blocks */ - EARRAY_TEST_COMPRESS, /* Compress data blocks */ - EARRAY_TEST_COMP_N /* The number of different ways to test compressing array blocks, must be last */ + EARRAY_TEST_NO_COMPRESS, /* Don't compress data blocks */ + EARRAY_TEST_COMPRESS, /* Compress data blocks */ + EARRAY_TEST_COMP_N /* The number of different ways to test compressing array blocks, must be last */ } earray_test_comp_t; /* Extensible array state information */ typedef struct earray_state_t { - hsize_t hdr_size; /* Size of header */ - hsize_t nindex_blks; /* # of index blocks */ - hsize_t index_blk_size; /* Size of index blocks */ - hsize_t nsuper_blks; /* # of super blocks */ - hsize_t super_blk_size; /* Size of super blocks */ - hsize_t ndata_blks; /* # of data blocks */ - hsize_t data_blk_size; /* Size of data blocks */ - hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with be '1', if no elements have been stored, this value will be '0') */ - hsize_t nelmts; /* # of elements "realized" */ + hsize_t hdr_size; /* Size of header */ + hsize_t nindex_blks; /* # of index blocks */ + hsize_t index_blk_size; /* Size of index blocks */ + hsize_t nsuper_blks; /* # of super blocks */ + hsize_t super_blk_size; /* Size of super blocks */ + hsize_t ndata_blks; /* # of data blocks */ + hsize_t data_blk_size; /* Size of data blocks */ + hsize_t max_idx_set; /* Highest element index stored (+1 - i.e. if element 0 has been set, this value with + be '1', if no elements have been stored, this value will be '0') */ + hsize_t nelmts; /* # of elements "realized" */ } earray_state_t; /* Forward decl. */ @@ -116,34 +118,34 @@ typedef struct earray_test_param_t earray_test_param_t; /* Extensible array iterator class */ typedef struct earray_iter_t { void *(*init)(const H5EA_create_t *cparam, const earray_test_param_t *tparam, - hsize_t cnt); /* Initialize/allocate iterator private info */ - hssize_t (*next)(void *info); /* Get the next element to test */ - hssize_t (*max_elem)(const void *info); /* Get the max. element set */ - int (*state)(void *_eiter, const H5EA_create_t *cparam, - const earray_test_param_t *tparam, earray_state_t *state, hsize_t idx); /* Get the state of the extensible array */ - herr_t (*term)(void *info); /* Shutdown/free iterator private info */ + hsize_t cnt); /* Initialize/allocate iterator private info */ + hssize_t (*next)(void *info); /* Get the next element to test */ + hssize_t (*max_elem)(const void *info); /* Get the max. element set */ + int (*state)(void *in_eiter, const H5EA_create_t *cparam, const earray_test_param_t *tparam, + earray_state_t *state, hsize_t idx); /* Get the state of the extensible array */ + herr_t (*term)(void *info); /* Shutdown/free iterator private info */ } earray_iter_t; /* Testing parameters */ 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 */ - const earray_iter_t *eiter; /* Iterator to use for this test */ + 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 */ + const earray_iter_t *eiter; /* Iterator to use for this test */ /* 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 */ + size_t nsblks; /* Number of superblocks needed for array */ + H5EA_sblk_info_t *sblk_info; /* Array of information for each super block */ }; /* Flush depend test context */ typedef struct earray_flush_depend_ctx_t { - hbool_t base_obj; /* Flag to indicate that base object has been flushed */ - hbool_t idx0_obj; /* Flag to indicate that index 0's object has been flushed */ - hbool_t idx0_elem; /* Flag to indicate that index 0's element has been flushed */ - hbool_t idx1_obj; /* Flag to indicate that index 1's object has been flushed */ - hbool_t idx1_elem; /* Flag to indicate that index 1's element has been flushed */ - hbool_t idx10000_obj; /* Flag to indicate that index 10000's object has been flushed */ - hbool_t idx10000_elem; /* Flag to indicate that index 10000's element has been flushed */ + hbool_t base_obj; /* Flag to indicate that base object has been flushed */ + hbool_t idx0_obj; /* Flag to indicate that index 0's object has been flushed */ + hbool_t idx0_elem; /* Flag to indicate that index 0's element has been flushed */ + hbool_t idx1_obj; /* Flag to indicate that index 1's object has been flushed */ + hbool_t idx1_elem; /* Flag to indicate that index 1's element has been flushed */ + hbool_t idx10000_obj; /* Flag to indicate that index 10000's object has been flushed */ + hbool_t idx10000_elem; /* Flag to indicate that index 10000's element has been flushed */ } earray_flush_depend_ctx_t; /* Extensible array test cache object */ @@ -152,26 +154,14 @@ typedef struct earray_test_t { H5AC_info_t cache_info; /* Entry information */ - uint64_t idx; /* Index that entry corresponds to */ + uint64_t idx; /* Index that entry corresponds to */ earray_flush_depend_ctx_t *fd_info; /* Context information for flush depend test */ } earray_test_t; - /* Local prototypes */ -/* Metadata cache (H5AC) callbacks */ -static earray_test_t *earray_cache_test_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata, void *udata2); -static herr_t earray_cache_test_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, earray_test_t *test, unsigned * flags_ptr); -static herr_t earray_cache_test_clear(H5F_t *f, earray_test_t *test, hbool_t destroy); -static herr_t earray_cache_test_size(const H5F_t *f, const earray_test_t *test, size_t *size_ptr); -static herr_t earray_cache_test_dest(H5F_t *f, earray_test_t *test); - - /* Local variables */ -const char *FILENAME[] = { - "earray", - NULL -}; +const char *FILENAME[] = {"earray", "earray_tmp", NULL}; /* Filename to use for all tests */ char filename_g[EARRAY_FILENAME_LEN]; @@ -179,28 +169,15 @@ char filename_g[EARRAY_FILENAME_LEN]; /* Empty file size */ h5_stat_size_t empty_size_g; -/* H5EA test object inherits cache-like properties from H5AC */ -const H5AC_class_t H5AC_EARRAY_TEST[1] = {{ - H5AC_TEST_ID, - (H5AC_load_func_t)earray_cache_test_load, - (H5AC_flush_func_t)earray_cache_test_flush, - (H5AC_dest_func_t)earray_cache_test_dest, - (H5AC_clear_func_t)earray_cache_test_clear, - (H5AC_notify_func_t)NULL, - (H5AC_size_func_t)earray_cache_test_size, -}}; - - - /*------------------------------------------------------------------------- - * Function: init_cparam + * Function: init_cparam * - * Purpose: Initialize array creation parameter structure + * Purpose: Initialize array creation parameter structure * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 21, 2008 * *------------------------------------------------------------------------- @@ -212,29 +189,28 @@ init_cparam(H5EA_create_t *cparam) HDmemset(cparam, 0, sizeof(*cparam)); /* General parameters */ - cparam->cls = H5EA_CLS_TEST; - cparam->raw_elmt_size = ELMT_SIZE; - cparam->max_nelmts_bits = MAX_NELMTS_BITS; - cparam->idx_blk_elmts = IDX_BLK_ELMTS; - cparam->sup_blk_min_data_ptrs = SUP_BLK_MIN_DATA_PTRS; - cparam->data_blk_min_elmts = DATA_BLK_MIN_ELMTS; + cparam->cls = H5EA_CLS_TEST; + cparam->raw_elmt_size = ELMT_SIZE; + cparam->max_nelmts_bits = MAX_NELMTS_BITS; + cparam->idx_blk_elmts = IDX_BLK_ELMTS; + cparam->sup_blk_min_data_ptrs = SUP_BLK_MIN_DATA_PTRS; + cparam->data_blk_min_elmts = DATA_BLK_MIN_ELMTS; cparam->max_dblk_page_nelmts_bits = MAX_DBLOCK_PAGE_NELMTS_BITS; - return(0); + return (0); } /* init_cparam() */ - /*------------------------------------------------------------------------- - * Function: init_tparam + * Function: init_tparam * - * Purpose: Initialize array testing parameter structure + * Purpose: Initialize array testing parameter structure * - * Note: This initialization is the same as that in H5EA_hdr_init() + * Note: This initialization is the same as that in H5EA_hdr_init() * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, September 25, 2008 * *------------------------------------------------------------------------- @@ -242,47 +218,46 @@ init_cparam(H5EA_create_t *cparam) 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 */ + 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)); + tparam->nsblks = 1 + (cparam->max_nelmts_bits - H5VM_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_idx = 0; start_dblk = 0; - for(u = 0; u < tparam->nsblks; u++) { - tparam->sblk_info[u].ndblks = (size_t)H5_EXP2(u / 2); + for (u = 0; u < tparam->nsblks; u++) { + tparam->sblk_info[u].ndblks = (size_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; + 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 += (hsize_t)tparam->sblk_info[u].ndblks * (hsize_t)tparam->sblk_info[u].dblk_nelmts; start_dblk += (hsize_t)tparam->sblk_info[u].ndblks; } /* end for */ - return(0); + return (0); } /* init_tparam() */ - /*------------------------------------------------------------------------- - * Function: finish_tparam + * Function: finish_tparam * - * Purpose: Close down array testing parameter structure + * Purpose: Close down array testing parameter structure * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, September 25, 2008 * *------------------------------------------------------------------------- @@ -294,56 +269,53 @@ finish_tparam(earray_test_param_t *tparam) HDfree(tparam->sblk_info); tparam->sblk_info = NULL; - return(0); + return (0); } /* finish_tparam() */ - /*------------------------------------------------------------------------- - * Function: create_file + * Function: create_file * - * Purpose: Create file and retrieve pointer to internal file object + * Purpose: Create file and retrieve pointer to internal file object * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- */ static int -create_file(hid_t fapl, hid_t *file, H5F_t **f) +create_file(unsigned flags, hid_t fapl, hid_t *file, H5F_t **f) { /* Create the file to work on */ - if((*file = H5Fcreate(filename_g, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) - FAIL_STACK_ERROR + if ((*file = H5Fcreate(filename_g, flags, H5P_DEFAULT, fapl)) < 0) + FAIL_STACK_ERROR; /* Get a pointer to the internal file object */ - if(NULL == (*f = (H5F_t *)H5I_object(*file))) - FAIL_STACK_ERROR + if (NULL == (*f = (H5F_t *)H5VL_object(*file))) + FAIL_STACK_ERROR; /* Ignore metadata tags in the file's cache */ - if(H5AC_ignore_tags(*f) < 0) { - FAIL_STACK_ERROR - } + if (H5AC_ignore_tags(*f) < 0) + FAIL_STACK_ERROR; /* Success */ - return(0); + return (0); error: - return(-1); + return (-1); } /* create_file() */ - /*------------------------------------------------------------------------- - * Function: check_stats + * Function: check_stats * - * Purpose: Verify stats for an extensible array + * Purpose: Verify stats for an extensible array * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 21, 2008 * *------------------------------------------------------------------------- @@ -351,185 +323,197 @@ error: static int check_stats(const H5EA_t *ea, const earray_state_t *state) { - H5EA_stat_t earray_stats; /* Statistics about the array */ + H5EA_stat_t earray_stats; /* Statistics about the array */ /* Get statistics for extensible array and verify they are correct */ - if(H5EA_get_stats(ea, &earray_stats) < 0) - FAIL_STACK_ERROR + if (H5EA_get_stats(ea, &earray_stats) < 0) + FAIL_STACK_ERROR; /* Compare information */ - if(earray_stats.stored.max_idx_set != state->max_idx_set) { - HDfprintf(stdout, "earray_stats.stored.max_idx_set = %Hu, state->max_idx_set = %Hu\n", earray_stats.stored.max_idx_set, state->max_idx_set); - TEST_ERROR + if (earray_stats.stored.max_idx_set != state->max_idx_set) { + HDfprintf(stdout, + "earray_stats.stored.max_idx_set = %" PRIuHSIZE ", state->max_idx_set = %" PRIuHSIZE "\n", + earray_stats.stored.max_idx_set, state->max_idx_set); + TEST_ERROR; } /* end if */ - if(earray_stats.stored.nelmts != state->nelmts) { - HDfprintf(stdout, "earray_stats.stored.nelmts = %Hu, state->nelmts = %Hu\n", earray_stats.stored.nelmts, state->nelmts); - TEST_ERROR + if (earray_stats.stored.nelmts != state->nelmts) { + HDfprintf(stdout, "earray_stats.stored.nelmts = %" PRIuHSIZE ", state->nelmts = %" PRIuHSIZE "\n", + earray_stats.stored.nelmts, state->nelmts); + TEST_ERROR; } /* end if */ - if(earray_stats.computed.hdr_size != state->hdr_size) { - HDfprintf(stdout, "earray_stats.computed.hdr_size = %Hu, state->hdr_size = %Hu\n", earray_stats.computed.hdr_size, state->hdr_size); - TEST_ERROR + if (earray_stats.computed.hdr_size != state->hdr_size) { + HDfprintf(stdout, + "earray_stats.computed.hdr_size = %" PRIuHSIZE ", state->hdr_size = %" PRIuHSIZE "\n", + earray_stats.computed.hdr_size, state->hdr_size); + TEST_ERROR; } /* end if */ - if(earray_stats.computed.nindex_blks != state->nindex_blks) { - HDfprintf(stdout, "earray_stats.computed.nindex_blks = %Hu, state->nindex_blks = %Hu\n", earray_stats.computed.nindex_blks, state->nindex_blks); - TEST_ERROR + if (earray_stats.computed.nindex_blks != state->nindex_blks) { + HDfprintf(stdout, + "earray_stats.computed.nindex_blks = %" PRIuHSIZE ", state->nindex_blks = %" PRIuHSIZE "\n", + earray_stats.computed.nindex_blks, state->nindex_blks); + TEST_ERROR; } /* end if */ - if(earray_stats.computed.index_blk_size != state->index_blk_size) { - HDfprintf(stdout, "earray_stats.computed.index_blk_size = %Hu, state->index_blk_size = %Hu\n", earray_stats.computed.index_blk_size, state->index_blk_size); - TEST_ERROR + if (earray_stats.computed.index_blk_size != state->index_blk_size) { + HDfprintf(stdout, + "earray_stats.computed.index_blk_size = %" PRIuHSIZE ", state->index_blk_size = %" PRIuHSIZE + "\n", + earray_stats.computed.index_blk_size, state->index_blk_size); + TEST_ERROR; } /* end if */ - if(earray_stats.stored.ndata_blks != state->ndata_blks) { - HDfprintf(stdout, "earray_stats.stored.ndata_blks = %Hu, state->ndata_blks = %Hu\n", earray_stats.stored.ndata_blks, state->ndata_blks); - TEST_ERROR + if (earray_stats.stored.ndata_blks != state->ndata_blks) { + HDfprintf(stdout, + "earray_stats.stored.ndata_blks = %" PRIuHSIZE ", state->ndata_blks = %" PRIuHSIZE "\n", + earray_stats.stored.ndata_blks, state->ndata_blks); + TEST_ERROR; } /* end if */ /* Don't compare this currently, it's very hard to compute */ #ifdef NOT_YET - if(earray_stats.stored.data_blk_size != state->data_blk_size) { - HDfprintf(stdout, "earray_stats.stored.data_blk_size = %Hu, state->data_blk_size = %Hu\n", earray_stats.stored.data_blk_size, state->data_blk_size); - TEST_ERROR - } /* end if */ + if (earray_stats.stored.data_blk_size != state->data_blk_size) { + HDfprintf(stdout, + "earray_stats.stored.data_blk_size = %" PRIuHSIZE ", state->data_blk_size = %" PRIuHSIZE + "\n", + earray_stats.stored.data_blk_size, state->data_blk_size); + TEST_ERROR; + } /* end if */ #endif /* NOT_YET */ - if(earray_stats.stored.nsuper_blks != state->nsuper_blks) { - HDfprintf(stdout, "earray_stats.stored.nsuper_blks = %Hu, state->nsuper_blks = %Hu\n", earray_stats.stored.nsuper_blks, state->nsuper_blks); - TEST_ERROR + if (earray_stats.stored.nsuper_blks != state->nsuper_blks) { + HDfprintf(stdout, + "earray_stats.stored.nsuper_blks = %" PRIuHSIZE ", state->nsuper_blks = %" PRIuHSIZE "\n", + earray_stats.stored.nsuper_blks, state->nsuper_blks); + TEST_ERROR; } /* end if */ /* Don't compare this currently, it's very hard to compute */ #ifdef NOT_YET - if(earray_stats.stored.super_blk_size != state->super_blk_size) { - HDfprintf(stdout, "earray_stats.stored.super_blk_size = %Hu, state->super_blk_size = %Hu\n", earray_stats.stored.super_blk_size, state->super_blk_size); - TEST_ERROR - } /* end if */ + if (earray_stats.stored.super_blk_size != state->super_blk_size) { + HDfprintf(stdout, + "earray_stats.stored.super_blk_size = %" PRIuHSIZE ", state->super_blk_size = %" PRIuHSIZE + "\n", + earray_stats.stored.super_blk_size, state->super_blk_size); + TEST_ERROR; + } /* end if */ #endif /* NOT_YET */ -#ifdef QAK -HDfprintf(stderr, "nelmts = %Hu, total EA size = %Hu\n", earray_stats.stored.nelmts, - (earray_stats.computed.hdr_size + earray_stats.computed.index_blk_size + earray_stats.stored.super_blk_size + earray_stats.stored.data_blk_size)); -#endif /* QAK */ /* All tests passed */ - return(0); + return (0); error: - return(-1); + return (-1); } /* check_stats() */ - /*------------------------------------------------------------------------- - * Function: reopen_file + * Function: reopen_file * - * Purpose: Perform common "re-open" operations on file & array for testing + * Purpose: Perform common "re-open" operations on file & array for testing * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- */ static int -reopen_file(hid_t *file, H5F_t **f, hid_t fapl, hid_t dxpl, - H5EA_t **ea, haddr_t ea_addr, const earray_test_param_t *tparam) +reopen_file(hid_t *file, H5F_t **f, hid_t fapl, H5EA_t **ea, haddr_t ea_addr, + const earray_test_param_t *tparam) { /* Check for closing & re-opening the array */ /* (actually will close & re-open the file as well) */ - if(tparam->reopen_array) { + if (tparam->reopen_array) { /* Close array, if given */ - if(ea) { - if(H5EA_close(*ea, dxpl) < 0) - FAIL_STACK_ERROR + if (ea && *ea) { + if (H5EA_close(*ea) < 0) + FAIL_STACK_ERROR; *ea = NULL; } /* end if */ /* Close file */ - if(H5Fclose(*file) < 0) - FAIL_STACK_ERROR - *file = (-1); - *f = NULL; + if (*file) { + if (H5Fclose(*file) < 0) + FAIL_STACK_ERROR; + *file = (-1); + *f = NULL; + } /* end if */ /* Re-open the file */ - if((*file = H5Fopen(filename_g, H5F_ACC_RDWR, fapl)) < 0) - FAIL_STACK_ERROR + if ((*file = H5Fopen(filename_g, H5F_ACC_RDWR, fapl)) < 0) + FAIL_STACK_ERROR; /* Get a pointer to the internal file object */ - if(NULL == (*f = (H5F_t *)H5I_object(*file))) - FAIL_STACK_ERROR + if (NULL == (*f = (H5F_t *)H5VL_object(*file))) + FAIL_STACK_ERROR; /* Ignore metadata tags in the file's cache */ - if(H5AC_ignore_tags(*f) < 0) { - FAIL_STACK_ERROR - } + if (H5AC_ignore_tags(*f) < 0) + FAIL_STACK_ERROR; /* Re-open array, if given */ - if(ea) { - if(NULL == (*ea = H5EA_open(*f, dxpl, ea_addr, NULL))) - FAIL_STACK_ERROR - } /* end if */ + if (ea) + if (NULL == (*ea = H5EA_open(*f, ea_addr, NULL))) + FAIL_STACK_ERROR; } /* end if */ /* Success */ - return(0); + return (0); error: - return(-1); + return (-1); } /* reopen_file() */ - /*------------------------------------------------------------------------- - * Function: create_array + * Function: create_array * - * Purpose: Create an extensible array and perform initial checks + * Purpose: Create an extensible array and perform initial checks * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- */ static int -create_array(H5F_t *f, hid_t dxpl, const H5EA_create_t *cparam, - H5EA_t **ea, haddr_t *ea_addr, H5EA__ctx_cb_t *cb) +create_array(H5F_t *f, const H5EA_create_t *cparam, H5EA_t **ea, haddr_t *ea_addr, H5EA__ctx_cb_t *cb) { - hsize_t nelmts; /* Number of elements in array */ - earray_state_t state; /* State of extensible array */ + hsize_t nelmts; /* Number of elements in array */ + earray_state_t state; /* State of extensible array */ /* Create array */ - if(NULL == (*ea = H5EA_create(f, dxpl, cparam, cb))) - FAIL_STACK_ERROR + if (NULL == (*ea = H5EA_create(f, cparam, cb))) + FAIL_STACK_ERROR; /* Check status of array */ nelmts = (hsize_t)ULLONG_MAX; - if(H5EA_get_nelmts(*ea, &nelmts) < 0) - FAIL_STACK_ERROR - if(nelmts > 0) - TEST_ERROR - if(H5EA_get_addr(*ea, ea_addr) < 0) - FAIL_STACK_ERROR - if(!H5F_addr_defined(*ea_addr)) - TEST_ERROR + if (H5EA_get_nelmts(*ea, &nelmts) < 0) + FAIL_STACK_ERROR; + if (nelmts > 0) + TEST_ERROR; + if (H5EA_get_addr(*ea, ea_addr) < 0) + FAIL_STACK_ERROR; + if (!H5F_addr_defined(*ea_addr)) + TEST_ERROR; HDmemset(&state, 0, sizeof(state)); state.hdr_size = EA_HDR_SIZE; - if(check_stats(*ea, &state)) - TEST_ERROR + if (check_stats(*ea, &state)) + TEST_ERROR; /* Success */ - return(0); + return (0); error: - return(-1); + return (-1); } /* create_array() */ - /*------------------------------------------------------------------------- - * Function: verify_cparam + * Function: verify_cparam * - * Purpose: Verify creation parameters are correct + * Purpose: Verify creation parameters are correct * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- @@ -537,35 +521,34 @@ error: static int verify_cparam(const H5EA_t *ea, const H5EA_create_t *cparam) { - H5EA_create_t test_cparam; /* Creation parameters for array */ + H5EA_create_t test_cparam; /* Creation parameters for array */ /* Retrieve creation parameters */ HDmemset(&test_cparam, 0, sizeof(H5EA_create_t)); - if(H5EA_get_cparam_test(ea, &test_cparam) < 0) - FAIL_STACK_ERROR + if (H5EA__get_cparam_test(ea, &test_cparam) < 0) + FAIL_STACK_ERROR; /* Verify creation parameters */ - if(H5EA_cmp_cparam_test(cparam, &test_cparam)) - TEST_ERROR + if (H5EA__cmp_cparam_test(cparam, &test_cparam)) + TEST_ERROR; /* Success */ - return(0); + return SUCCEED; error: - return(-1); + return FAIL; } /* verify_cparam() */ - /*------------------------------------------------------------------------- - * Function: finish + * Function: finish * - * Purpose: Close array, delete array, close file and verify that file + * Purpose: Close array, delete array, close file and verify that file * is empty size * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- @@ -573,260 +556,59 @@ error: static int finish(hid_t file, hid_t fapl, H5F_t *f, H5EA_t *ea, haddr_t ea_addr) { - h5_stat_size_t file_size; /* File size, after deleting array */ + h5_stat_size_t file_size; /* File size, after deleting array */ /* Close the extensible array */ - if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR - -#ifdef QAK -HDfprintf(stderr, "ea_addr = %a\n", ea_addr); -H5Fflush(file, H5F_SCOPE_GLOBAL); -HDsystem("cp earray.h5 earray.h5.save"); -#endif /* QAK */ + if (H5EA_close(ea) < 0) + FAIL_STACK_ERROR; /* Delete array */ - if(H5EA_delete(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL) < 0) - FAIL_STACK_ERROR + if (H5EA_delete(f, ea_addr, NULL) < 0) + FAIL_STACK_ERROR; /* Close the file */ - if(H5Fclose(file) < 0) - FAIL_STACK_ERROR - + if (H5Fclose(file) < 0) + FAIL_STACK_ERROR; /* Get the size of the file */ - if((file_size = h5_get_file_size(filename_g, fapl)) < 0) - TEST_ERROR + if ((file_size = h5_get_file_size(filename_g, fapl)) < 0) + TEST_ERROR; /* Verify the file is correct size */ - if(file_size != empty_size_g) - TEST_ERROR + if (file_size != empty_size_g) + TEST_ERROR; /* Success */ - return(0); + return (0); error: - return(-1); + return (-1); } /* finish() */ - -/*------------------------------------------------------------------------- - * Function: earray_cache_test_load - * - * Purpose: Loads an extensible array test object from the disk. - * - * Return: Success: Pointer to a new extensible array test object - * Failure: NULL - * - * Programmer: Quincey Koziol - * koziol@hdfgroup.org - * May 26 2009 - * - *------------------------------------------------------------------------- - */ -static earray_test_t * -earray_cache_test_load(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t UNUSED addr, const void UNUSED *udata1, void UNUSED *udata2) -{ - /* Check arguments */ - HDassert(f); - HDassert(H5F_addr_defined(addr)); - - /* Should never be called */ - HDassert(0 && "Can't be called!"); - - return(NULL); -} /* end earray_cache_test_load() */ - - -/*------------------------------------------------------------------------- - * Function: earray_cache_test_flush - * - * Purpose: Flushes a dirty extensible array test object to disk. - * - * Return: Non-negative on success/Negative on failure - * - * Programmer: Quincey Koziol - * koziol@hdfgroup.org - * May 26 2009 - * - *------------------------------------------------------------------------- - */ -static herr_t -earray_cache_test_flush(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, hbool_t destroy, haddr_t UNUSED addr, earray_test_t *test, unsigned UNUSED * flags_ptr) -{ - /* check arguments */ - HDassert(f); - HDassert(H5F_addr_defined(addr)); - HDassert(test); - - if(test->cache_info.is_dirty) { - /* Check for out of order flush */ - if(test->fd_info->base_obj) - TEST_ERROR - - /* Check which index this entry corresponds to */ - if((uint64_t)0 == test->idx) { - /* Check for out of order flush */ - if(test->fd_info->idx0_obj || test->fd_info->idx0_elem) - TEST_ERROR - - /* Set flag for object flush */ - test->fd_info->idx0_obj = TRUE; - } /* end if */ - else if((uint64_t)1 == test->idx) { - /* Check for out of order flush */ - if(test->fd_info->idx1_obj || test->fd_info->idx1_elem) - TEST_ERROR - - /* Set flag for object flush */ - test->fd_info->idx1_obj = TRUE; - } /* end if */ - else if((uint64_t)10000 == test->idx) { - /* Check for out of order flush */ - if(test->fd_info->idx10000_obj || test->fd_info->idx10000_elem) - TEST_ERROR - - /* Set flag for object flush */ - test->fd_info->idx10000_obj = TRUE; - } /* end if */ - else if((uint64_t)-1 == test->idx) { - /* Set flag for object flush */ - test->fd_info->base_obj = TRUE; - } /* end if */ - - /* Mark the entry as clean */ - test->cache_info.is_dirty = FALSE; - } /* end if */ - - if(destroy) - if(earray_cache_test_dest(f, test) < 0) - TEST_ERROR - - return(SUCCEED); - -error: - return(FAIL); -} /* earray_cache_test_flush() */ - - -/*------------------------------------------------------------------------- - * Function: earray_cache_test_dest - * - * Purpose: Destroys an extensible array test object in memory. - * - * Return: Non-negative on success/Negative on failure - * - * Programmer: Quincey Koziol - * koziol@hdfgroup.org - * May 26 2009 - * - *------------------------------------------------------------------------- - */ -herr_t -earray_cache_test_dest(H5F_t UNUSED *f, earray_test_t *test) -{ - /* - * Check arguments. - */ - HDassert(test); - - /* Free the shared info itself */ - HDfree(test); - - return(SUCCEED); -} /* end earray_cache_test_dest() */ - - -/*------------------------------------------------------------------------- - * Function: earray_cache_test_clear - * - * Purpose: Mark an extensible array test object in memory as non-dirty. - * - * Return: Non-negative on success/Negative on failure - * - * Programmer: Quincey Koziol - * koziol@hdfgroup.org - * May 26 2009 - * - *------------------------------------------------------------------------- - */ -static herr_t -earray_cache_test_clear(H5F_t *f, earray_test_t *test, hbool_t destroy) -{ - /* - * Check arguments. - */ - HDassert(test); - - /* Reset the dirty flag. */ - test->cache_info.is_dirty = FALSE; - - if(destroy) - if(earray_cache_test_dest(f, test) < 0) - TEST_ERROR - - return(SUCCEED); - -error: - return(FAIL); -} /* end earray_cache_test_clear() */ - - -/*------------------------------------------------------------------------- - * Function: earray_cache_test_size - * - * Purpose: Compute the size in bytes of an extensible array test object - * on disk, and return it in *size_ptr. On failure, - * the value of *size_ptr is undefined. - * - * Return: Non-negative on success/Negative on failure - * - * Programmer: Quincey Koziol - * koziol@hdfgroup.org - * May 26 2009 - * - *------------------------------------------------------------------------- - */ -static herr_t -earray_cache_test_size(const H5F_t UNUSED *f, const earray_test_t UNUSED *test, size_t *size_ptr) -{ - /* check arguments */ - HDassert(f); - HDassert(test); - HDassert(size_ptr); - - /* Set size value */ - /* (hard-code to 1) */ - *size_ptr = 1; - - return(SUCCEED); -} /* earray_cache_test_size() */ - - /*------------------------------------------------------------------------- - * Function: test_create + * Function: test_create * - * Purpose: Test creating extensible array + * Purpose: Test creating extensible array * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 7, 2008 * *------------------------------------------------------------------------- */ static unsigned -test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t UNUSED *tparam) +test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t H5_ATTR_UNUSED *tparam) { - hid_t file = -1; /* File ID */ - H5F_t *f = NULL; /* Internal file object pointer */ - H5EA_t *ea = NULL; /* Extensible array wrapper */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + hid_t file = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* * Display testing message @@ -834,157 +616,179 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t UNUSED *tpara TESTING("invalid extensible array creation parameters"); #ifndef NDEBUG -{ - H5EA_create_t test_cparam; /* Creation parameters for array */ - - /* Set invalid element size */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.raw_elmt_size = 0; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; - - /* Indicate error */ - TEST_ERROR - } /* end if */ + { + H5EA_create_t test_cparam; /* Creation parameters for array */ - /* Set invalid max. # of elements bits */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.max_nelmts_bits = 0; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Set invalid element size */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.raw_elmt_size = 0; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.max_nelmts_bits = 65; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Set invalid max. # of elements bits */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.max_nelmts_bits = 0; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ - /* Set invalid min. # of data block pointers in super blocks */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.sup_blk_min_data_ptrs = 0; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.max_nelmts_bits = 65; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.sup_blk_min_data_ptrs = 1; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Indicate error */ + TEST_ERROR; + } /* end if */ - /* Indicate error */ - TEST_ERROR - } /* end if */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.sup_blk_min_data_ptrs = 6; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Set invalid min. # of data block pointers in super blocks */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.sup_blk_min_data_ptrs = 0; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.sup_blk_min_data_ptrs = 1; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Set invalid min. # of elements per data block */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.data_blk_min_elmts = 0; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Indicate error */ + TEST_ERROR; + } /* end if */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.sup_blk_min_data_ptrs = 6; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ - /* Set invalid max. # of elements per data block page bits */ - if(test_cparam.idx_blk_elmts > 0) { + /* Set invalid min. # of elements per data block */ HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.max_dblk_page_nelmts_bits = H5V_log2_gen((uint64_t)test_cparam.idx_blk_elmts) - 1; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { + test_cparam.data_blk_min_elmts = 0; + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); + H5EA_close(ea); ea = NULL; /* Indicate error */ - TEST_ERROR + TEST_ERROR; } /* end if */ - } /* end if */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.max_dblk_page_nelmts_bits = 4; /* corresponds to 16 elements in data block page, which is less than the 64 elements for the default settings */ - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ - HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); - test_cparam.max_dblk_page_nelmts_bits = test_cparam.max_nelmts_bits + 1; - H5E_BEGIN_TRY { - ea = H5EA_create(f, H5P_DATASET_XFER_DEFAULT, &test_cparam, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened extensible array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - ea = NULL; + /* Set invalid max. # of elements per data block page bits */ + if (test_cparam.idx_blk_elmts > 0) { + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.max_dblk_page_nelmts_bits = + (uint8_t)(H5VM_log2_gen((uint64_t)test_cparam.idx_blk_elmts) - 1); + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; + + /* Indicate error */ + TEST_ERROR; + } /* end if */ + } /* end if */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.max_dblk_page_nelmts_bits = 4; /* corresponds to 16 elements in data block page, which is + less than the 64 elements for the default settings */ + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ + HDmemcpy(&test_cparam, cparam, sizeof(test_cparam)); + test_cparam.max_dblk_page_nelmts_bits = (uint8_t)(test_cparam.max_nelmts_bits + 1); + H5E_BEGIN_TRY + { + ea = H5EA_create(f, &test_cparam, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened extensible array */ + H5EA_close(ea); + ea = NULL; - PASSED() -} -#else /* NDEBUG */ + /* Indicate error */ + TEST_ERROR; + } /* end if */ + + PASSED(); + } +#else /* NDEBUG */ SKIPPED(); - puts(" Not tested when assertions are disabled"); + HDputs(" Not tested when assertions are disabled"); #endif /* NDEBUG */ /* @@ -993,47 +797,48 @@ test_create(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t UNUSED *tpara TESTING("extensible array creation"); /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; - PASSED() + PASSED(); /* Verify the creation parameters */ TESTING("verify array creation parameters"); /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; /* Close array, delete array, close file & verify file is empty */ - if(finish(file, fapl, f, ea, ea_addr) < 0) - TEST_ERROR + if (finish(file, fapl, f, ea, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + H5Fclose(file); + } + H5E_END_TRY; return 1; } /* end test_create() */ - /*------------------------------------------------------------------------- - * Function: test_reopen + * Function: test_reopen * - * Purpose: Create & reopen an extensible array + * Purpose: Create & reopen an extensible array * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- @@ -1041,14 +846,14 @@ error: static unsigned test_reopen(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 */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + hid_t file = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* * Display testing message @@ -1056,54 +861,55 @@ test_reopen(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam) TESTING("create, close & reopen extensible array"); /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; /* Close the extensible array */ - if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + if (H5EA_close(ea) < 0) + FAIL_STACK_ERROR; /* Check for closing & re-opening the file */ - if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0) - TEST_ERROR + if (reopen_file(&file, &f, fapl, NULL, HADDR_UNDEF, tparam) < 0) + TEST_ERROR; /* Re-open the array */ - if(NULL == (ea = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL))) - FAIL_STACK_ERROR + if (NULL == (ea = H5EA_open(f, ea_addr, NULL))) + FAIL_STACK_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; /* Close array, delete array, close file & verify file is empty */ - if(finish(file, fapl, f, ea, ea_addr) < 0) - TEST_ERROR + if (finish(file, fapl, f, ea, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + H5Fclose(file); + } + H5E_END_TRY; return 1; } /* test_reopen() */ - /*------------------------------------------------------------------------- - * Function: test_open_twice + * Function: test_open_twice * - * Purpose: Open an extensible array twice + * Purpose: Open an extensible array twice * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, August 28, 2008 * *------------------------------------------------------------------------- @@ -1111,17 +917,17 @@ error: static unsigned test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam) { - hid_t file = -1; /* File ID */ - hid_t file2 = -1; /* File ID */ - H5F_t *f = NULL; /* Internal file object pointer */ - H5F_t *f2 = NULL; /* Internal file object pointer */ - H5EA_t *ea = NULL; /* Extensible array wrapper */ - H5EA_t *ea2 = NULL; /* Extensible array wrapper */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + hid_t file = -1; /* File ID */ + hid_t file2 = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5F_t *f2 = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + H5EA_t *ea2 = NULL; /* Extensible array wrapper */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* * Display testing message @@ -1129,543 +935,400 @@ test_open_twice(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam) TESTING("open extensible array twice"); /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; /* Open the array again, through the first file handle */ - if(NULL == (ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL))) - FAIL_STACK_ERROR + if (NULL == (ea2 = H5EA_open(f, ea_addr, NULL))) + FAIL_STACK_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR - if(verify_cparam(ea2, cparam) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; + if (verify_cparam(ea2, cparam) < 0) + TEST_ERROR; /* Close the second extensible array wrapper */ - if(H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + if (H5EA_close(ea2) < 0) + FAIL_STACK_ERROR; ea2 = NULL; /* Check for closing & re-opening the file */ - if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, &ea, ea_addr, tparam) < 0) - TEST_ERROR + if (reopen_file(&file, &f, fapl, &ea, ea_addr, tparam) < 0) + TEST_ERROR; /* Re-open the file */ - if((file2 = H5Freopen(file)) < 0) - FAIL_STACK_ERROR + if ((file2 = H5Freopen(file)) < 0) + FAIL_STACK_ERROR; /* Get a pointer to the internal file object */ - if(NULL == (f2 = (H5F_t *)H5I_object(file2))) - FAIL_STACK_ERROR + if (NULL == (f2 = (H5F_t *)H5VL_object(file2))) + FAIL_STACK_ERROR; /* Open the extensible array through the second file handle */ - if(NULL == (ea2 = H5EA_open(f2, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL))) - FAIL_STACK_ERROR + if (NULL == (ea2 = H5EA_open(f2, ea_addr, NULL))) + FAIL_STACK_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; /* Close the first extensible array wrapper */ - if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + if (H5EA_close(ea) < 0) + FAIL_STACK_ERROR; ea = NULL; /* Close the first file */ /* (close before second file, to detect error on internal array header's * shared file information) */ - if(H5Fclose(file) < 0) - FAIL_STACK_ERROR + if (H5Fclose(file) < 0) + FAIL_STACK_ERROR; /* Close array, delete array, close file & verify file is empty */ - if(finish(file2, fapl, f2, ea2, ea_addr) < 0) - TEST_ERROR + if (finish(file2, fapl, f2, ea2, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - if(ea2) - H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - H5Fclose(file2); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + if (ea2) + H5EA_close(ea2); + H5Fclose(file); + H5Fclose(file2); + } + H5E_END_TRY; return 1; } /* test_open_twice() */ - /*------------------------------------------------------------------------- - * Function: test_delete_open + * Function: test_open_twice_diff * - * Purpose: Delete opened extensible array (& open deleted array) + * Purpose: Open an extensible array twice, through different "top" file + * handles, with an intermediate file open that takes the "shared" + * file handle from the first extensible array's file pointer. * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol - * Thursday, August 28, 2008 + * Programmer: Quincey Koziol + * Friday, December 18, 2015 * *------------------------------------------------------------------------- */ static unsigned -test_delete_open(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam) +test_open_twice_diff(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 */ - H5EA_t *ea2 = NULL; /* Extensible array wrapper */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ - h5_stat_size_t file_size; /* File size, after deleting array */ + char filename_tmp[EARRAY_FILENAME_LEN]; /* Temporary file name */ + hid_t file = -1; /* File ID */ + hid_t file2 = -1; /* File ID */ + hid_t file0 = -1; /* File ID */ + hid_t file00 = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5F_t *f2 = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + H5EA_t *ea2 = NULL; /* Extensible array wrapper */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* * Display testing message */ - TESTING("deleting open extensible array"); + TESTING("open extensible array twice, through different file handles"); /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR - - /* Open the array again */ - if(NULL == (ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL))) - FAIL_STACK_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; - /* Request that the array be deleted */ - if(H5EA_delete(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL) < 0) - FAIL_STACK_ERROR + /* Open the array again, through the first file handle */ + if (NULL == (ea2 = H5EA_open(f, ea_addr, NULL))) + FAIL_STACK_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR - if(verify_cparam(ea2, cparam) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; + if (verify_cparam(ea2, cparam) < 0) + TEST_ERROR; /* Close the second extensible array wrapper */ - if(H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + if (H5EA_close(ea2) < 0) + FAIL_STACK_ERROR; ea2 = NULL; - /* Try re-opening the array again (should fail, as array will be deleted) */ - H5E_BEGIN_TRY { - ea2 = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL); - } H5E_END_TRY; - if(ea2) { - /* Close opened array */ - H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT); + /* Re-open the file */ + /* (So that there is something holding the file open when the extensible + * array is closed) + */ + if ((file0 = H5Fopen(filename_g, H5F_ACC_RDWR, fapl)) < 0) + FAIL_STACK_ERROR; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Check for closing & re-opening the file */ + if (reopen_file(&file, &f, fapl, &ea, ea_addr, tparam) < 0) + TEST_ERROR; + + /* Verify the creation parameters */ + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; /* Close the first extensible array wrapper */ - if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + if (H5EA_close(ea) < 0) + FAIL_STACK_ERROR; ea = NULL; - /* Check for closing & re-opening the file */ - if(reopen_file(&file, &f, fapl, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, tparam) < 0) - TEST_ERROR + /* Close the first file */ + /* (close before second file, to detect error on internal array header's + * shared file information) + */ + if (H5Fclose(file) < 0) + FAIL_STACK_ERROR; + file = -1; + + /* Open a different file */ + /* (This re-allocates the 'top' file pointer and assigns it a different + * 'shared' file pointer, making the file pointer in the extensible array's + * header stale) + */ + h5_fixname(FILENAME[1], fapl, filename_tmp, sizeof(filename_tmp)); + if ((file00 = H5Fcreate(filename_tmp, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + FAIL_STACK_ERROR; - /* Try re-opening the array again (should fail, as array is now deleted) */ - H5E_BEGIN_TRY { - ea = H5EA_open(f, H5P_DATASET_XFER_DEFAULT, ea_addr, NULL); - } H5E_END_TRY; - if(ea) { - /* Close opened array */ - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); + /* Re-open the file with the extensible array */ + if ((file2 = H5Fopen(filename_g, H5F_ACC_RDWR, fapl)) < 0) + FAIL_STACK_ERROR; - /* Indicate error */ - TEST_ERROR - } /* end if */ + /* Get a pointer to the internal file object */ + if (NULL == (f2 = (H5F_t *)H5VL_object(file2))) + FAIL_STACK_ERROR; - /* Close the file */ - if(H5Fclose(file) < 0) - FAIL_STACK_ERROR + /* Open the extensible array through the second file handle */ + if (NULL == (ea2 = H5EA_open(f2, ea_addr, NULL))) + FAIL_STACK_ERROR; - /* Get the size of the file */ - if((file_size = h5_get_file_size(filename_g, fapl)) < 0) - TEST_ERROR + /* Verify the creation parameters */ + if (verify_cparam(ea2, cparam) < 0) + TEST_ERROR; - /* Verify the file is correct size */ - if(file_size != empty_size_g) - TEST_ERROR + /* Close the extra file handles */ + if (H5Fclose(file0) < 0) + FAIL_STACK_ERROR; + if (H5Fclose(file00) < 0) + FAIL_STACK_ERROR; + + /* Close array, delete array, close file & verify file is empty */ + if (finish(file2, fapl, f2, ea2, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - if(ea2) - H5EA_close(ea2, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + if (ea2) + H5EA_close(ea2); + H5Fclose(file); + H5Fclose(file2); + H5Fclose(file0); + H5Fclose(file00); + } + H5E_END_TRY; return 1; -} /* test_delete_open() */ +} /* test_open_twice_diff() */ - /*------------------------------------------------------------------------- - * Function: test_flush_depend_cb - * - * Purpose: Callback for flush dependency 'depend'/'undepend' and - * 'support'/'unsupport' routines + * Function: test_delete_open * - * Return: Success: 0 - * Failure: 1 + * Purpose: Delete opened extensible array (& open deleted array) * - * Programmer: Quincey Koziol - * Tuesday, May 26, 2009 + * Return: Success: 0 + * Failure: 1 * - *------------------------------------------------------------------------- - */ -static herr_t -test_flush_depend_cb(const void *_elmt, size_t nelmts, void *udata) -{ - earray_flush_depend_ctx_t *ctx = (earray_flush_depend_ctx_t *)udata; - const uint64_t *elmt = (const uint64_t *)_elmt; /* Convenience pointer to native elements */ - - /* Check for out of order flush */ - if(ctx->base_obj) - return(FAIL); - - /* Look for magic values */ - while(nelmts > 0) { - /* Check for elements of interest */ - if((uint64_t)0 == *elmt) { - /* Check for out-of-order flush */ - if(!ctx->idx0_obj) - return(FAIL); - - /* Indicate that the element was flushed */ - ctx->idx0_elem = TRUE; - } /* end if */ - else if((uint64_t)1 == *elmt) { - /* Check for out-of-order flush */ - if(!ctx->idx1_obj) - return(FAIL); - - /* Indicate that the element was flushed */ - ctx->idx1_elem = TRUE; - } /* end if */ - else if((uint64_t)10000 == *elmt) { - /* Check for out-of-order flush */ - if(!ctx->idx10000_obj) - return(FAIL); - - /* Indicate that the element was flushed */ - ctx->idx10000_elem = TRUE; - } /* end if */ - - /* Decrement elements left to inspect */ - nelmts--; - elmt++; - } /* end while */ - - return(SUCCEED); -} /* end test_flush_depend_cb() */ - - -/*------------------------------------------------------------------------- - * Function: test_flush_depend - * - * Purpose: Exercise flush dependency 'depend'/'undepend' routines - * - * Return: Success: 0 - * Failure: 1 - * - * Programmer: Quincey Koziol - * Thursday, May 21, 2009 + * Programmer: Quincey Koziol + * Thursday, August 28, 2008 * *------------------------------------------------------------------------- */ static unsigned -test_flush_depend(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t UNUSED *tparam) +test_delete_open(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 */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ - H5EA__ctx_cb_t cb; /* Extensible array context action info */ - earray_flush_depend_ctx_t fd_info; /* Context information for flush depend test */ - haddr_t base_addr; /* Base test entry address */ - earray_test_t *base_entry; /* Pointer to base test entry */ - haddr_t addr1; /* Test entry #1 address */ - earray_test_t *entry1; /* Pointer to test entry #1 */ - haddr_t addr2; /* Test entry #2 address */ - earray_test_t *entry2; /* Pointer to test entry #2 */ - haddr_t addr3; /* Test entry #3 address */ - earray_test_t *entry3; /* Pointer to test entry #3 */ - uint64_t welmt; /* Element to write */ - hsize_t idx; /* Index value of element */ + hid_t file = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + H5EA_t *ea2 = NULL; /* Extensible array wrapper */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + h5_stat_size_t file_size; /* File size, after deleting array */ /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* * Display testing message */ - TESTING("flush dependencies on array metadata"); + TESTING("deleting open extensible array"); /* Create array */ - cb.encode = test_flush_depend_cb; - HDmemset(&fd_info, 0, sizeof(earray_flush_depend_ctx_t)); - cb.udata = &fd_info; - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, &cb) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; + + /* Open the array again */ + if (NULL == (ea2 = H5EA_open(f, ea_addr, NULL))) + FAIL_STACK_ERROR; + + /* Request that the array be deleted */ + if (H5EA_delete(f, ea_addr, NULL) < 0) + FAIL_STACK_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR - - /* Create base entry to insert */ - if(NULL == (base_entry = (earray_test_t *)HDmalloc(sizeof(earray_test_t)))) - TEST_ERROR - HDmemset(base_entry, 0, sizeof(earray_test_t)); - base_entry->idx = (uint64_t)-1; - base_entry->fd_info = &fd_info; - - /* Insert test entry into cache */ - base_addr = HADDR_MAX; - if(H5AC_insert_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, base_addr, base_entry, H5AC__PIN_ENTRY_FLAG) < 0) - TEST_ERROR - - /* Set the base entry as a flush dependency for the array */ - if(H5EA_depend((H5AC_info_t *)base_entry, ea) < 0) - TEST_ERROR - - /* Create entry #1 to insert */ - if(NULL == (entry1 = (earray_test_t *)HDmalloc(sizeof(earray_test_t)))) - TEST_ERROR - HDmemset(entry1, 0, sizeof(earray_test_t)); - entry1->fd_info = &fd_info; - - /* Insert test entry into cache */ - addr1 = HADDR_MAX - 1; - if(H5AC_insert_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr1, entry1, H5AC__PIN_ENTRY_FLAG) < 0) - TEST_ERROR - - /* Set the test entry as a flush dependency for 0th index in the array */ - if(H5EA_support(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)0, (H5AC_info_t *)entry1) < 0) - TEST_ERROR + if (verify_cparam(ea, cparam) < 0) + TEST_ERROR; + if (verify_cparam(ea2, cparam) < 0) + TEST_ERROR; - /* Set element of array */ - welmt = (uint64_t)0; - idx = 0; - if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0) - FAIL_STACK_ERROR - - /* Create entry #2 to insert */ - if(NULL == (entry2 = (earray_test_t *)HDmalloc(sizeof(earray_test_t)))) - TEST_ERROR - HDmemset(entry2, 0, sizeof(earray_test_t)); - entry2->idx = (uint64_t)1; - entry2->fd_info = &fd_info; - - /* Insert test entry into cache */ - addr2 = HADDR_MAX - 2; - if(H5AC_insert_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr2, entry2, H5AC__PIN_ENTRY_FLAG) < 0) - TEST_ERROR - - /* Set the test entry as a flush dependency for 1st index in the array */ - if(H5EA_support(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)1, (H5AC_info_t *)entry2) < 0) - TEST_ERROR + /* Close the second extensible array wrapper */ + if (H5EA_close(ea2) < 0) + FAIL_STACK_ERROR; + ea2 = NULL; - /* Set element of array */ - welmt = (uint64_t)1; - idx = 1; - if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0) - FAIL_STACK_ERROR - - /* Create entry #3 to insert */ - if(NULL == (entry3 = (earray_test_t *)HDmalloc(sizeof(earray_test_t)))) - TEST_ERROR - HDmemset(entry3, 0, sizeof(earray_test_t)); - entry3->idx = (uint64_t)10000; - entry3->fd_info = &fd_info; - - /* Insert test entry into cache */ - addr3 = HADDR_MAX - 3; - if(H5AC_insert_entry(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr3, entry3, H5AC__PIN_ENTRY_FLAG) < 0) - TEST_ERROR - - /* Set the test entry as a flush dependency for 10,000th index in the array */ - if(H5EA_support(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)10000, (H5AC_info_t *)entry3) < 0) - TEST_ERROR + /* Try re-opening the array again (should fail, as array will be deleted) */ + H5E_BEGIN_TRY + { + ea2 = H5EA_open(f, ea_addr, NULL); + } + H5E_END_TRY; + if (ea2) { + /* Close opened array */ + H5EA_close(ea2); - /* Set element of array */ - welmt = (uint64_t)10000; - idx = 10000; - if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0) - FAIL_STACK_ERROR - - - /* Flush the cache */ - if(H5Fflush(file, H5F_SCOPE_GLOBAL) < 0) - TEST_ERROR - - /* Check that all callback flags have been set */ - if(!fd_info.base_obj) - TEST_ERROR - if(!fd_info.idx0_obj) - TEST_ERROR - if(!fd_info.idx0_elem) - TEST_ERROR - if(!fd_info.idx1_obj) - TEST_ERROR - if(!fd_info.idx1_elem) - TEST_ERROR - if(!fd_info.idx10000_obj) - TEST_ERROR - if(!fd_info.idx10000_elem) - TEST_ERROR - - - /* Remove the base entry as a flush dependency for the array */ - if(H5EA_undepend((H5AC_info_t *)base_entry, ea) < 0) - TEST_ERROR - - /* Protect the base entry */ - if(NULL == (base_entry = (earray_test_t *)H5AC_protect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, base_addr, NULL, H5AC_WRITE))) - TEST_ERROR - - /* Unprotect & unpin the base entry */ - if(H5AC_unprotect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, base_addr, base_entry, (H5AC__UNPIN_ENTRY_FLAG | H5AC__DELETED_FLAG)) < 0) - TEST_ERROR - - /* Remove the test entry as a flush dependency for 0th index in the array */ - if(H5EA_unsupport(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)0, (H5AC_info_t *)entry1) < 0) - TEST_ERROR - - /* Protect the test entry */ - if(NULL == (entry1 = (earray_test_t *)H5AC_protect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr1, NULL, H5AC_WRITE))) - TEST_ERROR - - /* Unprotect & unpin the test entry */ - if(H5AC_unprotect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr1, entry1, (H5AC__UNPIN_ENTRY_FLAG | H5AC__DELETED_FLAG)) < 0) - TEST_ERROR - - /* Remove the test entry as a flush dependency for 1st index in the array */ - if(H5EA_unsupport(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)1, (H5AC_info_t *)entry2) < 0) - TEST_ERROR - - /* Protect the test entry */ - if(NULL == (entry2 = (earray_test_t *)H5AC_protect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr2, NULL, H5AC_WRITE))) - TEST_ERROR - - /* Unprotect & unpin the test entry */ - if(H5AC_unprotect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr2, entry2, (H5AC__UNPIN_ENTRY_FLAG | H5AC__DELETED_FLAG)) < 0) - TEST_ERROR - - /* Remove the test entry as a flush dependency for 10,000th index in the array */ - if(H5EA_unsupport(ea, H5P_DATASET_XFER_DEFAULT, (hsize_t)10000, (H5AC_info_t *)entry3) < 0) - TEST_ERROR - - /* Protect the test entry */ - if(NULL == (entry3 = (earray_test_t *)H5AC_protect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr3, NULL, H5AC_WRITE))) - TEST_ERROR - - /* Unprotect & unpin the test entry */ - if(H5AC_unprotect(f, H5P_DATASET_XFER_DEFAULT, H5AC_EARRAY_TEST, addr3, entry3, (H5AC__UNPIN_ENTRY_FLAG | H5AC__DELETED_FLAG)) < 0) - TEST_ERROR + /* Indicate error */ + TEST_ERROR; + } /* end if */ - /* Close the extensible array */ - if(H5EA_close(ea, H5P_DATASET_XFER_DEFAULT) < 0) - FAIL_STACK_ERROR + /* Close the first extensible array wrapper */ + if (H5EA_close(ea) < 0) + FAIL_STACK_ERROR; ea = NULL; + /* Check for closing & re-opening the file */ + if (reopen_file(&file, &f, fapl, NULL, HADDR_UNDEF, tparam) < 0) + TEST_ERROR; + + /* Try re-opening the array again (should fail, as array is now deleted) */ + H5E_BEGIN_TRY + { + ea = H5EA_open(f, ea_addr, NULL); + } + H5E_END_TRY; + if (ea) { + /* Close opened array */ + H5EA_close(ea); + + /* Indicate error */ + TEST_ERROR; + } /* end if */ + /* Close the file */ - if(H5Fclose(file) < 0) - FAIL_STACK_ERROR + if (H5Fclose(file) < 0) + FAIL_STACK_ERROR; + + /* Get the size of the file */ + if ((file_size = h5_get_file_size(filename_g, fapl)) < 0) + TEST_ERROR; + + /* Verify the file is correct size */ + if (file_size != empty_size_g) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + if (ea2) + H5EA_close(ea2); + H5Fclose(file); + } + H5E_END_TRY; return 1; -} /* test_flush_depend() */ +} /* test_delete_open() */ /* Extensible array iterator info for forward iteration */ typedef struct eiter_fw_t { - hsize_t idx; /* Index of next array location */ - unsigned base_sblk_idx; /* Starting index for actual superblocks */ + hsize_t idx; /* Index of next array location */ + unsigned base_sblk_idx; /* Starting index for actual superblocks */ } eiter_fw_t; - /*------------------------------------------------------------------------- - * Function: eiter_fw_init + * Function: eiter_fw_init * - * Purpose: Initialize element interator (forward iteration) + * Purpose: Initialize element iterator (forward iteration) * - * Return: Success: Pointer to iteration status object - * Failure: NULL + * Return: Success: Pointer to iteration status object + * Failure: NULL * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, October 2, 2008 * *------------------------------------------------------------------------- */ static void * -eiter_fw_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam, - hsize_t UNUSED cnt) +eiter_fw_init(const H5EA_create_t H5_ATTR_UNUSED *cparam, const earray_test_param_t H5_ATTR_UNUSED *tparam, + hsize_t H5_ATTR_UNUSED cnt) { - eiter_fw_t *eiter; /* Forward element iteration object */ + eiter_fw_t *eiter; /* Forward element iteration object */ /* Allocate space for the element iteration object */ eiter = (eiter_fw_t *)HDmalloc(sizeof(eiter_fw_t)); HDassert(eiter); /* Initialize the element iteration object */ - eiter->idx = 0; + eiter->idx = 0; eiter->base_sblk_idx = UINT_MAX; /* Return iteration object */ - return(eiter); + return (eiter); } /* end eiter_fw_init() */ - /*------------------------------------------------------------------------- - * Function: eiter_fw_next + * Function: eiter_fw_next * - * Purpose: Get next element index (forward iteration) + * Purpose: Get next element index (forward iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ static hssize_t -eiter_fw_next(void *_eiter) +eiter_fw_next(void *in_eiter) { - eiter_fw_t *eiter = (eiter_fw_t *)_eiter; - hssize_t ret_val; + eiter_fw_t *eiter = (eiter_fw_t *)in_eiter; + hssize_t ret_val; /* Sanity check */ HDassert(eiter); @@ -1673,54 +1336,52 @@ eiter_fw_next(void *_eiter) /* Get the next array index to test */ ret_val = (hssize_t)eiter->idx++; - return(ret_val); + return (ret_val); } /* end eiter_fw_next() */ - /*------------------------------------------------------------------------- - * Function: eiter_fw_max + * Function: eiter_fw_max * - * Purpose: Get max. element index (forward iteration) + * Purpose: Get max. element index (forward iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ -static hssize_t -eiter_fw_max(const void *_eiter) +static H5_ATTR_PURE hssize_t +eiter_fw_max(const void *in_eiter) { - const eiter_fw_t *eiter = (const eiter_fw_t *)_eiter; + const eiter_fw_t *eiter = (const eiter_fw_t *)in_eiter; /* Sanity check */ HDassert(eiter); /* Return the max. array index used */ - return((hssize_t)(eiter->idx - 1)); + return ((hssize_t)(eiter->idx - 1)); } /* end eiter_fw_max() */ - /*------------------------------------------------------------------------- - * Function: eiter_fw_state + * Function: eiter_fw_state * - * Purpose: Get extensible array state (forward iteration) + * Purpose: Get extensible array state (forward iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ static int -eiter_fw_state(void *_eiter, const H5EA_create_t *cparam, - const earray_test_param_t *tparam, earray_state_t *state, hsize_t idx) +eiter_fw_state(void *in_eiter, const H5EA_create_t *cparam, const earray_test_param_t *tparam, + earray_state_t *state, hsize_t idx) { - eiter_fw_t *eiter = (eiter_fw_t *)_eiter; + eiter_fw_t *eiter = (eiter_fw_t *)in_eiter; /* Sanity check */ HDassert(eiter); @@ -1729,63 +1390,49 @@ eiter_fw_state(void *_eiter, const H5EA_create_t *cparam, HDassert(state); /* Compute the state of the extensible array */ - state->hdr_size = EA_HDR_SIZE; - state->nindex_blks = 1; + state->hdr_size = EA_HDR_SIZE; + state->nindex_blks = 1; state->index_blk_size = EA_IBLOCK_SIZE; - state->max_idx_set = idx + 1; - if(idx < cparam->idx_blk_elmts) { - state->nelmts = (hsize_t)cparam->idx_blk_elmts; + state->max_idx_set = idx + 1; + if (idx < cparam->idx_blk_elmts) { + state->nelmts = (hsize_t)cparam->idx_blk_elmts; state->nsuper_blks = state->ndata_blks = (hsize_t)0; state->super_blk_size = state->data_blk_size = (hsize_t)0; } /* end if */ else { - unsigned sblk_idx; /* Which superblock does this index fall in? */ + 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] = {%Zu, %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 = EA_NELMTS(cparam, tparam, idx, sblk_idx); -#ifdef QAK -HDfprintf(stderr, "state->nelmts = %Hu\n", state->nelmts); -#endif /* QAK */ - + sblk_idx = + H5VM_log2_gen((uint64_t)(((idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); + state->nelmts = EA_NELMTS(cparam, tparam, idx, sblk_idx); state->ndata_blks = EA_NDATA_BLKS(cparam, tparam, idx, sblk_idx); -#ifdef QAK -HDfprintf(stderr, "state->ndata_blks = %Hu\n", state->ndata_blks); -#endif /* QAK */ /* Check if we have any super blocks yet */ - if(tparam->sblk_info[sblk_idx].ndblks >= cparam->sup_blk_min_data_ptrs) { + if (tparam->sblk_info[sblk_idx].ndblks >= cparam->sup_blk_min_data_ptrs) { /* Check if this is the first superblock */ - if(sblk_idx < eiter->base_sblk_idx) + if (sblk_idx < eiter->base_sblk_idx) eiter->base_sblk_idx = sblk_idx; state->nsuper_blks = (sblk_idx - eiter->base_sblk_idx) + 1; -#ifdef QAK -HDfprintf(stderr, "state->nsuper_blks = %Hu\n", state->nsuper_blks); -#endif /* QAK */ } /* end if */ else state->nsuper_blks = 0; } /* end else */ - return(0); + return (0); } /* end eiter_fw_state() */ - /*------------------------------------------------------------------------- - * Function: eiter_fw_term + * Function: eiter_fw_term * - * Purpose: Shut down element interator (forward iteration) + * Purpose: Shut down element iterator (forward iteration) * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, October 2, 2008 * *------------------------------------------------------------------------- @@ -1799,47 +1446,45 @@ eiter_fw_term(void *eiter) /* Free iteration object */ HDfree(eiter); - return(0); + return (0); } /* end eiter_fw_term() */ /* Extensible array iterator class for forward iteration */ static const earray_iter_t ea_iter_fw = { - eiter_fw_init, /* Iterator init */ - eiter_fw_next, /* Next array index */ - eiter_fw_max, /* Max. array index */ - eiter_fw_state, /* State of the extensible array */ - eiter_fw_term /* Iterator term */ + eiter_fw_init, /* Iterator init */ + eiter_fw_next, /* Next array index */ + eiter_fw_max, /* Max. array index */ + eiter_fw_state, /* State of the extensible array */ + eiter_fw_term /* Iterator term */ }; /* Extensible array iterator info for reverse iteration */ typedef struct eiter_rv_t { - hsize_t idx; /* Index of next array location */ - hsize_t max; /* Index of max. array location */ - hsize_t max_sblk_idx; /* Which superblock does the max. array location fall in? */ - hsize_t max_nelmts; /* Max. # of elements for array */ - hsize_t max_ndata_blks; /* Max. # of data blocks for array */ - hsize_t idx_blk_nsblks; /* Number of superblocks directly pointed to in the index block */ + hsize_t idx; /* Index of next array location */ + hsize_t max; /* Index of max. array location */ + hsize_t max_sblk_idx; /* Which superblock does the max. array location fall in? */ + hsize_t max_nelmts; /* Max. # of elements for array */ + hsize_t max_ndata_blks; /* Max. # of data blocks for array */ + hsize_t idx_blk_nsblks; /* Number of superblocks directly pointed to in the index block */ } eiter_rv_t; - /*------------------------------------------------------------------------- - * Function: eiter_rv_init + * Function: eiter_rv_init * - * Purpose: Initialize element interator (reverse iteration) + * Purpose: Initialize element iterator (reverse iteration) * - * Return: Success: Pointer to iteration status object - * Failure: NULL + * Return: Success: Pointer to iteration status object + * Failure: NULL * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ static void * -eiter_rv_init(const H5EA_create_t *cparam, const earray_test_param_t *tparam, - hsize_t cnt) +eiter_rv_init(const H5EA_create_t *cparam, const earray_test_param_t *tparam, hsize_t cnt) { - eiter_rv_t *eiter; /* Reverse element iteration object */ + eiter_rv_t *eiter; /* Reverse element iteration object */ /* Allocate space for the element iteration object */ eiter = (eiter_rv_t *)HDmalloc(sizeof(eiter_rv_t)); @@ -1848,42 +1493,42 @@ eiter_rv_init(const H5EA_create_t *cparam, const earray_test_param_t *tparam, /* Initialize reverse iteration info */ eiter->idx = cnt - 1; eiter->max = cnt - 1; - if(cnt > cparam->idx_blk_elmts) { - eiter->max_sblk_idx = H5V_log2_gen((uint64_t)(((eiter->max - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); - eiter->max_nelmts = EA_NELMTS(cparam, tparam, eiter->max, eiter->max_sblk_idx); + if (cnt > cparam->idx_blk_elmts) { + eiter->max_sblk_idx = H5VM_log2_gen( + (uint64_t)(((eiter->max - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); + eiter->max_nelmts = EA_NELMTS(cparam, tparam, eiter->max, eiter->max_sblk_idx); eiter->max_ndata_blks = EA_NDATA_BLKS(cparam, tparam, eiter->max, eiter->max_sblk_idx); - eiter->idx_blk_nsblks = 2 * H5V_log2_of2((uint32_t)cparam->sup_blk_min_data_ptrs); + eiter->idx_blk_nsblks = 2 * H5VM_log2_of2((uint32_t)cparam->sup_blk_min_data_ptrs); } /* end if */ else { - eiter->max_sblk_idx = (hsize_t)0; - eiter->max_nelmts = (hsize_t)0; + eiter->max_sblk_idx = (hsize_t)0; + eiter->max_nelmts = (hsize_t)0; eiter->max_ndata_blks = (hsize_t)0; eiter->idx_blk_nsblks = (hsize_t)0; } /* end else */ /* Return iteration object */ - return(eiter); + return (eiter); } /* end eiter_rv_init() */ - /*------------------------------------------------------------------------- - * Function: eiter_rv_next + * Function: eiter_rv_next * - * Purpose: Get next element index (reverse iteration) + * Purpose: Get next element index (reverse iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ static hssize_t -eiter_rv_next(void *_eiter) +eiter_rv_next(void *in_eiter) { - eiter_rv_t *eiter = (eiter_rv_t *)_eiter; - hssize_t ret_val; + eiter_rv_t *eiter = (eiter_rv_t *)in_eiter; + hssize_t ret_val; /* Sanity check */ HDassert(eiter); @@ -1891,54 +1536,52 @@ eiter_rv_next(void *_eiter) /* Get the next array index to test */ ret_val = (hssize_t)eiter->idx--; - return(ret_val); + return (ret_val); } /* end eiter_rv_next() */ - /*------------------------------------------------------------------------- - * Function: eiter_rv_max + * Function: eiter_rv_max * - * Purpose: Get max. element index (reverse iteration) + * Purpose: Get max. element index (reverse iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ -static hssize_t -eiter_rv_max(const void *_eiter) +static H5_ATTR_PURE hssize_t +eiter_rv_max(const void *in_eiter) { - const eiter_rv_t *eiter = (const eiter_rv_t *)_eiter; + const eiter_rv_t *eiter = (const eiter_rv_t *)in_eiter; /* Sanity check */ HDassert(eiter); /* Return the max. array index used */ - return((hssize_t)eiter->max); + return ((hssize_t)eiter->max); } /* end eiter_rv_max() */ - /*------------------------------------------------------------------------- - * Function: eiter_rv_state + * Function: eiter_rv_state * - * Purpose: Get extensible array state (reverse iteration) + * Purpose: Get extensible array state (reverse iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- */ static int -eiter_rv_state(void *_eiter, const H5EA_create_t *cparam, - const earray_test_param_t *tparam, earray_state_t *state, hsize_t idx) +eiter_rv_state(void *in_eiter, const H5EA_create_t *cparam, const earray_test_param_t *tparam, + earray_state_t *state, hsize_t idx) { - eiter_rv_t *eiter = (eiter_rv_t *)_eiter; + eiter_rv_t *eiter = (eiter_rv_t *)in_eiter; /* Sanity check */ HDassert(eiter); @@ -1947,87 +1590,74 @@ eiter_rv_state(void *_eiter, const H5EA_create_t *cparam, HDassert(state); /* Compute the state of the extensible array */ - state->hdr_size = EA_HDR_SIZE; - state->nindex_blks = 1; + state->hdr_size = EA_HDR_SIZE; + state->nindex_blks = 1; state->index_blk_size = EA_IBLOCK_SIZE; - state->max_idx_set = eiter->max + 1; - if(eiter->max < cparam->idx_blk_elmts) { - state->nelmts = (hsize_t)cparam->idx_blk_elmts; + state->max_idx_set = eiter->max + 1; + if (eiter->max < cparam->idx_blk_elmts) { + state->nelmts = (hsize_t)cparam->idx_blk_elmts; state->nsuper_blks = state->ndata_blks = (hsize_t)0; } /* end if */ else { - hsize_t idx_nelmts; /* # of elements for array index */ - hsize_t idx_ndata_blks; /* # of data blocks for array index */ - hsize_t loc_idx = 0; /* Local index, for computing an offset in next lower data block */ - unsigned idx_sblk_idx; /* Which superblock does this index fall in? */ - unsigned loc_sblk_idx = 0; /* Which superblock does the local index fall in? */ + hsize_t idx_nelmts; /* # of elements for array index */ + hsize_t idx_ndata_blks; /* # of data blocks for array index */ + hsize_t loc_idx = 0; /* Local index, for computing an offset in next lower data block */ + unsigned idx_sblk_idx; /* Which superblock does this index fall in? */ + unsigned loc_sblk_idx = 0; /* Which superblock does the local index fall in? */ /* Compute super block index for element index */ /* (same eqn. as in H5EA__dblock_sblk_idx()) */ - if(idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) + if (idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) idx_sblk_idx = 0; else { - hsize_t tmp_idx; /* Temporary index in superblock */ - hsize_t dblk_idx; /* Index of data block within superblock */ + hsize_t tmp_idx; /* Temporary index in superblock */ + hsize_t dblk_idx; /* Index of data block within superblock */ - idx_sblk_idx = H5V_log2_gen((uint64_t)(((idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); - tmp_idx = idx - (cparam->idx_blk_elmts + tparam->sblk_info[idx_sblk_idx].start_idx); + idx_sblk_idx = + H5VM_log2_gen((uint64_t)(((idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); + tmp_idx = idx - (cparam->idx_blk_elmts + tparam->sblk_info[idx_sblk_idx].start_idx); dblk_idx = tmp_idx / tparam->sblk_info[idx_sblk_idx].dblk_nelmts; - if(dblk_idx > 0) + if (dblk_idx > 0) loc_idx = idx - tparam->sblk_info[idx_sblk_idx].dblk_nelmts; else loc_idx = cparam->idx_blk_elmts + tparam->sblk_info[idx_sblk_idx].start_idx - 1; - loc_sblk_idx = H5V_log2_gen((uint64_t)(((loc_idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); + loc_sblk_idx = H5VM_log2_gen( + (uint64_t)(((loc_idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); } /* end else */ -#ifdef QAK -HDfprintf(stderr, "idx = %Hu, loc_idx = %Hu, eiter->max_sblk_idx = %u, idx_sblk_idx = %u, loc_sblk_idx = %u\n", idx, loc_idx, eiter->max_sblk_idx, idx_sblk_idx, loc_sblk_idx); -HDfprintf(stderr, "tparam->sblk_info[%u] = {%Zu, %Zu, %Hu, %Hu}\n", idx_sblk_idx, tparam->sblk_info[idx_sblk_idx].ndblks, tparam->sblk_info[idx_sblk_idx].dblk_nelmts, tparam->sblk_info[idx_sblk_idx].start_idx, tparam->sblk_info[idx_sblk_idx].start_dblk); -HDfprintf(stderr, "tparam->sblk_info[%u] = {%Zu, %Zu, %Hu, %Hu}\n", eiter->max_sblk_idx, tparam->sblk_info[eiter->max_sblk_idx].ndblks, tparam->sblk_info[eiter->max_sblk_idx].dblk_nelmts, tparam->sblk_info[eiter->max_sblk_idx].start_idx, tparam->sblk_info[eiter->max_sblk_idx].start_dblk); -#endif /* QAK */ - if(idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) + if (idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) idx_nelmts = (hsize_t)cparam->idx_blk_elmts; else idx_nelmts = EA_NELMTS(cparam, tparam, loc_idx, loc_sblk_idx); state->nelmts = (eiter->max_nelmts - idx_nelmts) + cparam->idx_blk_elmts; -#ifdef QAK -HDfprintf(stderr, "eiter->max_nelmts = %Hu, idx_nelmts = %Hu, state->nelmts = %Hu\n", eiter->max_nelmts, idx_nelmts, state->nelmts); -#endif /* QAK */ - if(idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) + if (idx < cparam->idx_blk_elmts + cparam->data_blk_min_elmts) idx_ndata_blks = 0; else idx_ndata_blks = EA_NDATA_BLKS(cparam, tparam, loc_idx, loc_sblk_idx); state->ndata_blks = eiter->max_ndata_blks - idx_ndata_blks; -#ifdef QAK -HDfprintf(stderr, "eiter->max_ndata_blks = %Hu, idx_ndata_blks = %Hu, state->ndata_blks = %Hu\n", eiter->max_ndata_blks, idx_ndata_blks, state->ndata_blks); -#endif /* QAK */ /* Check if we have any super blocks yet */ - if(tparam->sblk_info[eiter->max_sblk_idx].ndblks >= cparam->sup_blk_min_data_ptrs) { - if(idx_sblk_idx > eiter->idx_blk_nsblks) + if (tparam->sblk_info[eiter->max_sblk_idx].ndblks >= cparam->sup_blk_min_data_ptrs) { + if (idx_sblk_idx > eiter->idx_blk_nsblks) state->nsuper_blks = (eiter->max_sblk_idx - idx_sblk_idx) + 1; else state->nsuper_blks = (eiter->max_sblk_idx - eiter->idx_blk_nsblks) + 1; -#ifdef QAK -HDfprintf(stderr, "eiter->idx_blk_nsblks = %Hu, state->nsuper_blks = %Hu\n", eiter->idx_blk_nsblks, state->nsuper_blks); -#endif /* QAK */ } /* end if */ - } /* end else */ + } /* end else */ - return(0); + return (0); } /* end eiter_rv_state() */ - /*------------------------------------------------------------------------- - * Function: eiter_rv_term + * Function: eiter_rv_term * - * Purpose: Shut down element interator (reverse iteration) + * Purpose: Shut down element iterator (reverse iteration) * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 4, 2008 * *------------------------------------------------------------------------- @@ -2041,45 +1671,44 @@ eiter_rv_term(void *eiter) /* Free iteration object */ HDfree(eiter); - return(0); + return (0); } /* end eiter_rv_term() */ /* Extensible array iterator class for reverse iteration */ static const earray_iter_t ea_iter_rv = { - eiter_rv_init, /* Iterator init */ - eiter_rv_next, /* Next array index */ - eiter_rv_max, /* Max. array index written */ - eiter_rv_state, /* State of the extensible array */ - eiter_rv_term /* Iterator term */ + eiter_rv_init, /* Iterator init */ + eiter_rv_next, /* Next array index */ + eiter_rv_max, /* Max. array index written */ + eiter_rv_state, /* State of the extensible array */ + eiter_rv_term /* Iterator term */ }; /* Extensible array iterator info for random iteration */ typedef struct eiter_rnd_t { - hsize_t max; /* Max. array index used */ - hsize_t pos; /* Position in shuffled array */ - hsize_t *idx; /* Array of shuffled indices */ + hsize_t max; /* Max. array index used */ + hsize_t pos; /* Position in shuffled array */ + hsize_t *idx; /* Array of shuffled indices */ } eiter_rnd_t; - /*------------------------------------------------------------------------- - * Function: eiter_rnd_init + * Function: eiter_rnd_init * - * Purpose: Initialize element interator (random iteration) + * Purpose: Initialize element iterator (random iteration) * - * Return: Success: Pointer to iteration status object - * Failure: NULL + * Return: Success: Pointer to iteration status object + * Failure: NULL * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, November 6, 2008 * *------------------------------------------------------------------------- */ static void * -eiter_rnd_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam, - hsize_t cnt) +eiter_rnd_init(const H5EA_create_t H5_ATTR_UNUSED *cparam, const earray_test_param_t H5_ATTR_UNUSED *tparam, + hsize_t cnt) { - eiter_rnd_t *eiter; /* Random element iteration object */ - size_t u; /* Local index variable */ + eiter_rnd_t *eiter; /* Random element iteration object */ + size_t u; /* Local index variable */ /* Allocate space for the element iteration object */ eiter = (eiter_rnd_t *)HDmalloc(sizeof(eiter_rnd_t)); @@ -2092,45 +1721,44 @@ eiter_rnd_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNU /* Initialize reverse iteration info */ eiter->max = 0; eiter->pos = 0; - for(u = 0; u < (size_t)cnt; u++) + for (u = 0; u < (size_t)cnt; u++) eiter->idx[u] = (hsize_t)u; /* Randomly shuffle array indices */ - if(cnt > 1) { - for(u = 0; u < (size_t)cnt; u++) { - size_t swap_idx; /* Location to swap with when shuffling */ - hsize_t temp_idx; /* Temporary index */ - - swap_idx = ((size_t)HDrandom() % ((size_t)cnt - u)) + u; - temp_idx = eiter->idx[u]; - eiter->idx[u] = eiter->idx[swap_idx]; + if (cnt > 1) { + for (u = 0; u < (size_t)cnt; u++) { + size_t swap_idx; /* Location to swap with when shuffling */ + hsize_t temp_idx; /* Temporary index */ + + swap_idx = ((size_t)HDrandom() % ((size_t)cnt - u)) + u; + temp_idx = eiter->idx[u]; + eiter->idx[u] = eiter->idx[swap_idx]; eiter->idx[swap_idx] = temp_idx; } /* end for */ - } /* end if */ + } /* end if */ /* Return iteration object */ - return(eiter); + return (eiter); } /* end eiter_rnd_init() */ - /*------------------------------------------------------------------------- - * Function: eiter_rnd_next + * Function: eiter_rnd_next * - * Purpose: Get next element index (random iteration) + * Purpose: Get next element index (random iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, November 6, 2008 * *------------------------------------------------------------------------- */ static hssize_t -eiter_rnd_next(void *_eiter) +eiter_rnd_next(void *in_eiter) { - eiter_rnd_t *eiter = (eiter_rnd_t *)_eiter; - hssize_t ret_val; + eiter_rnd_t *eiter = (eiter_rnd_t *)in_eiter; + hssize_t ret_val; /* Sanity check */ HDassert(eiter); @@ -2140,56 +1768,54 @@ eiter_rnd_next(void *_eiter) eiter->pos++; /* Check for new max. value */ - if((hsize_t)ret_val > eiter->max) + if ((hsize_t)ret_val > eiter->max) eiter->max = (hsize_t)ret_val; - return(ret_val); + return (ret_val); } /* end eiter_rnd_next() */ - /*------------------------------------------------------------------------- - * Function: eiter_rnd_max + * Function: eiter_rnd_max * - * Purpose: Get max. element index (random iteration) + * Purpose: Get max. element index (random iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 6, 2008 * *------------------------------------------------------------------------- */ -static hssize_t -eiter_rnd_max(const void *_eiter) +static H5_ATTR_PURE hssize_t +eiter_rnd_max(const void *in_eiter) { - const eiter_rnd_t *eiter = (const eiter_rnd_t *)_eiter; + const eiter_rnd_t *eiter = (const eiter_rnd_t *)in_eiter; /* Sanity check */ HDassert(eiter); /* Return the max. array index used */ - return((hssize_t)eiter->max); + return ((hssize_t)eiter->max); } /* end eiter_rnd_max() */ - /*------------------------------------------------------------------------- - * Function: eiter_rnd_term + * Function: eiter_rnd_term * - * Purpose: Shut down element interator (random iteration) + * Purpose: Shut down element iterator (random iteration) * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 6, 2008 * *------------------------------------------------------------------------- */ static int -eiter_rnd_term(void *_eiter) +eiter_rnd_term(void *in_eiter) { - eiter_rnd_t *eiter = (eiter_rnd_t *)_eiter; + eiter_rnd_t *eiter = (eiter_rnd_t *)in_eiter; /* Sanity check */ HDassert(eiter); @@ -2201,38 +1827,37 @@ eiter_rnd_term(void *_eiter) /* Free iteration object */ HDfree(eiter); - return(0); + return (0); } /* end eiter_rnd_term() */ /* Extensible array iterator class for random iteration */ static const earray_iter_t ea_iter_rnd = { - eiter_rnd_init, /* Iterator init */ - eiter_rnd_next, /* Next array index */ - eiter_rnd_max, /* Max. array index written */ - NULL, /* State of the extensible array */ - eiter_rnd_term /* Iterator term */ + eiter_rnd_init, /* Iterator init */ + eiter_rnd_next, /* Next array index */ + eiter_rnd_max, /* Max. array index written */ + NULL, /* State of the extensible array */ + eiter_rnd_term /* Iterator term */ }; - /*------------------------------------------------------------------------- - * Function: eiter_rnd2_init + * Function: eiter_rnd2_init * - * Purpose: Initialize element interator (random #2 iteration) + * Purpose: Initialize element iterator (random #2 iteration) * - * Return: Success: Pointer to iteration status object - * Failure: NULL + * Return: Success: Pointer to iteration status object + * Failure: NULL * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, November 11, 2008 * *------------------------------------------------------------------------- */ static void * -eiter_rnd2_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam, - hsize_t cnt) +eiter_rnd2_init(const H5EA_create_t H5_ATTR_UNUSED *cparam, const earray_test_param_t H5_ATTR_UNUSED *tparam, + hsize_t cnt) { - eiter_rnd_t *eiter; /* Random element iteration object */ - size_t u; /* Local index variable */ + eiter_rnd_t *eiter; /* Random element iteration object */ + size_t u; /* Local index variable */ /* Allocate space for the element iteration object */ eiter = (eiter_rnd_t *)HDmalloc(sizeof(eiter_rnd_t)); @@ -2247,24 +1872,24 @@ eiter_rnd2_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UN eiter->pos = 0; /* Randomly shuffle array indices */ - if(cnt > 1) { - hsize_t *tmp_idx; /* Temporary index array */ - hsize_t sparse_cnt = (hsize_t)(cnt * EA_RND2_SCALE); /* Sparse range to choose from */ + if (cnt > 1) { + hsize_t *tmp_idx; /* Temporary index array */ + hsize_t sparse_cnt = (hsize_t)(cnt * EA_RND2_SCALE); /* Sparse range to choose from */ /* Allocate temporary index array */ tmp_idx = (hsize_t *)HDmalloc(sizeof(hsize_t) * (size_t)sparse_cnt); HDassert(tmp_idx); /* Initialize temporary index array, for shuffling */ - for(u = 0; u < (size_t)sparse_cnt; u++) + for (u = 0; u < (size_t)sparse_cnt; u++) tmp_idx[u] = (hsize_t)u; /* Shuffle index elements & store in final array */ - for(u = 0; u < (size_t)cnt; u++) { - size_t swap_idx; /* Location to swap with when shuffling */ + for (u = 0; u < (size_t)cnt; u++) { + size_t swap_idx; /* Location to swap with when shuffling */ - swap_idx = ((size_t)HDrandom() % ((size_t)sparse_cnt - u)) + u; - eiter->idx[u] = tmp_idx[swap_idx]; + swap_idx = ((size_t)HDrandom() % ((size_t)sparse_cnt - u)) + u; + eiter->idx[u] = tmp_idx[swap_idx]; tmp_idx[swap_idx] = tmp_idx[u]; } /* end for */ @@ -2272,50 +1897,49 @@ eiter_rnd2_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UN HDfree(tmp_idx); } /* end if */ else { - for(u = 0; u < (size_t)cnt; u++) + for (u = 0; u < (size_t)cnt; u++) eiter->idx[u] = (hsize_t)u; } /* end else */ /* Return iteration object */ - return(eiter); + return (eiter); } /* end eiter_rnd2_init() */ /* Extensible array iterator class for random iteration */ static const earray_iter_t ea_iter_rnd2 = { - eiter_rnd2_init, /* Iterator init */ - eiter_rnd_next, /* Next array index */ - eiter_rnd_max, /* Max. array index written */ - NULL, /* State of the extensible array */ - eiter_rnd_term /* Iterator term */ + eiter_rnd2_init, /* Iterator init */ + eiter_rnd_next, /* Next array index */ + eiter_rnd_max, /* Max. array index written */ + NULL, /* State of the extensible array */ + eiter_rnd_term /* Iterator term */ }; /* Extensible array iterator info for cyclic iteration */ typedef struct eiter_cyc_t { - hsize_t max; /* Max. array index used */ - hsize_t pos; /* Position in shuffled array */ - hsize_t cnt; /* # of elements to store */ - hsize_t cyc; /* Cycle of elements to choose from */ + hsize_t max; /* Max. array index used */ + hsize_t pos; /* Position in shuffled array */ + hsize_t cnt; /* # of elements to store */ + hsize_t cyc; /* Cycle of elements to choose from */ } eiter_cyc_t; - /*------------------------------------------------------------------------- - * Function: eiter_cyc_init + * Function: eiter_cyc_init * - * Purpose: Initialize element interator (cyclic iteration) + * Purpose: Initialize element iterator (cyclic iteration) * - * Return: Success: Pointer to iteration status object - * Failure: NULL + * Return: Success: Pointer to iteration status object + * Failure: NULL * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 11, 2008 * *------------------------------------------------------------------------- */ static void * -eiter_cyc_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNUSED *tparam, - hsize_t cnt) +eiter_cyc_init(const H5EA_create_t H5_ATTR_UNUSED *cparam, const earray_test_param_t H5_ATTR_UNUSED *tparam, + hsize_t cnt) { - eiter_cyc_t *eiter; /* Cyclic element iteration object */ + eiter_cyc_t *eiter; /* Cyclic element iteration object */ /* Allocate space for the element iteration object */ eiter = (eiter_cyc_t *)HDmalloc(sizeof(eiter_cyc_t)); @@ -2328,28 +1952,27 @@ eiter_cyc_init(const H5EA_create_t UNUSED *cparam, const earray_test_param_t UNU eiter->cyc = 0; /* Return iteration object */ - return(eiter); + return (eiter); } /* end eiter_cyc_init() */ - /*------------------------------------------------------------------------- - * Function: eiter_cyc_next + * Function: eiter_cyc_next * - * Purpose: Get next element index (cyclic iteration) + * Purpose: Get next element index (cyclic iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 11, 2008 * *------------------------------------------------------------------------- */ static hssize_t -eiter_cyc_next(void *_eiter) +eiter_cyc_next(void *in_eiter) { - eiter_cyc_t *eiter = (eiter_cyc_t *)_eiter; - hssize_t ret_val; + eiter_cyc_t *eiter = (eiter_cyc_t *)in_eiter; + hssize_t ret_val; /* Sanity check */ HDassert(eiter); @@ -2357,60 +1980,58 @@ eiter_cyc_next(void *_eiter) /* Get the next array index to test */ ret_val = (hssize_t)eiter->pos; eiter->pos += EA_CYC_COUNT; - if(eiter->pos >= eiter->cnt) + if (eiter->pos >= eiter->cnt) eiter->pos = ++eiter->cyc; /* Check for new max. value */ - if((hsize_t)ret_val > eiter->max) + if ((hsize_t)ret_val > eiter->max) eiter->max = (hsize_t)ret_val; - return(ret_val); + return (ret_val); } /* end eiter_cyc_next() */ - /*------------------------------------------------------------------------- - * Function: eiter_cyc_max + * Function: eiter_cyc_max * - * Purpose: Get max. element index (cyclic iteration) + * Purpose: Get max. element index (cyclic iteration) * - * Return: Success: Non-negative - * Failure: Negative + * Return: Success: Non-negative + * Failure: Negative * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 11, 2008 * *------------------------------------------------------------------------- */ -static hssize_t -eiter_cyc_max(const void *_eiter) +static H5_ATTR_PURE hssize_t +eiter_cyc_max(const void *in_eiter) { - const eiter_cyc_t *eiter = (const eiter_cyc_t *)_eiter; + const eiter_cyc_t *eiter = (const eiter_cyc_t *)in_eiter; /* Sanity check */ HDassert(eiter); /* Return the max. array index used */ - return((hssize_t)eiter->max); + return ((hssize_t)eiter->max); } /* end eiter_cyc_max() */ - /*------------------------------------------------------------------------- - * Function: eiter_cyc_term + * Function: eiter_cyc_term * - * Purpose: Shut down element interator (cyclic iteration) + * Purpose: Shut down element iterator (cyclic iteration) * - * Return: Success: 0 - * Failure: -1 + * Return: Success: 0 + * Failure: -1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 11, 2008 * *------------------------------------------------------------------------- */ static int -eiter_cyc_term(void *_eiter) +eiter_cyc_term(void *in_eiter) { - eiter_cyc_t *eiter = (eiter_cyc_t *)_eiter; + eiter_cyc_t *eiter = (eiter_cyc_t *)in_eiter; /* Sanity check */ HDassert(eiter); @@ -2418,50 +2039,49 @@ eiter_cyc_term(void *_eiter) /* Free iteration object */ HDfree(eiter); - return(0); + return (0); } /* end eiter_cyc_term() */ /* Extensible array iterator class for cyclic iteration */ static const earray_iter_t ea_iter_cyc = { - eiter_cyc_init, /* Iterator init */ - eiter_cyc_next, /* Next array index */ - eiter_cyc_max, /* Max. array index written */ - NULL, /* State of the extensible array */ - eiter_cyc_term /* Iterator term */ + eiter_cyc_init, /* Iterator init */ + eiter_cyc_next, /* Next array index */ + eiter_cyc_max, /* Max. array index written */ + NULL, /* State of the extensible array */ + eiter_cyc_term /* Iterator term */ }; - /*------------------------------------------------------------------------- - * Function: test_set_elmts + * Function: test_set_elmts * - * Purpose: Set all elements from 0 through 'nelmts' in extensible array + * Purpose: Set all elements from 0 through 'nelmts' in extensible array * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Thursday, September 22, 2008 * *------------------------------------------------------------------------- */ static unsigned -test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam, - hsize_t nelmts, const char *test_str) +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 */ - H5EA_t *ea = NULL; /* Extensible array wrapper */ - void *eiter_info; /* Extensible array iterator info */ - earray_state_t state; /* State of extensible array */ - uint64_t welmt; /* Element to write */ - uint64_t relmt; /* Element to read */ - hsize_t nelmts_written; /* Highest element written in array */ - hsize_t cnt; /* Count of array indices */ - hssize_t smax; /* Index value of max. element set */ - hsize_t max; /* Index value of max. element set */ - hssize_t sidx; /* Index value of first element of first data block */ - hsize_t idx; /* Index value of first element of first data block */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + hid_t file = -1; /* File ID */ + H5F_t *f = NULL; /* Internal file object pointer */ + H5EA_t *ea = NULL; /* Extensible array wrapper */ + void *eiter_info; /* Extensible array iterator info */ + earray_state_t state; /* State of extensible array */ + uint64_t welmt; /* Element to write */ + uint64_t relmt; /* Element to read */ + hsize_t nelmts_written; /* Highest element written in array */ + hsize_t cnt; /* Count of array indices */ + hssize_t smax; /* Index value of max. element set */ + hsize_t max; /* Index value of max. element set */ + hssize_t sidx; /* Index value of first element of first data block */ + 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 @@ -2469,173 +2089,173 @@ test_set_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam, TESTING(test_str); /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR + 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, tparam) < 0) - TEST_ERROR + if (reopen_file(&file, &f, fapl, &ea, ea_addr, tparam) < 0) + TEST_ERROR; /* Verify high-water # of elements written */ nelmts_written = (hsize_t)ULLONG_MAX; - if(H5EA_get_nelmts(ea, &nelmts_written) < 0) - FAIL_STACK_ERROR - if(nelmts_written != 0) - TEST_ERROR + if (H5EA_get_nelmts(ea, &nelmts_written) < 0) + FAIL_STACK_ERROR; + if (nelmts_written != 0) + TEST_ERROR; /* Verify array state */ HDmemset(&state, 0, sizeof(state)); state.hdr_size = EA_HDR_SIZE; - if(check_stats(ea, &state)) - TEST_ERROR + if (check_stats(ea, &state)) + TEST_ERROR; /* Get all elements from empty array */ /* Initialize iterator */ - if(NULL == (eiter_info = tparam->eiter->init(cparam, tparam, nelmts))) - TEST_ERROR + if (NULL == (eiter_info = tparam->eiter->init(cparam, tparam, nelmts))) + TEST_ERROR; /* Get elements of array */ - for(cnt = 0; cnt < nelmts; cnt++) { + for (cnt = 0; cnt < nelmts; cnt++) { /* Get the array index */ - if((sidx = tparam->eiter->next(eiter_info)) < 0) - TEST_ERROR + if ((sidx = tparam->eiter->next(eiter_info)) < 0) + TEST_ERROR; idx = (hsize_t)sidx; /* 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 + if (H5EA_get(ea, idx, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is fill value for array */ - if(relmt != H5EA_TEST_FILL) - TEST_ERROR + if (relmt != H5EA_TEST_FILL) + TEST_ERROR; } /* end for */ /* Shutdown iterator */ - if(tparam->eiter->term(eiter_info) < 0) - TEST_ERROR - + if (tparam->eiter->term(eiter_info) < 0) + TEST_ERROR; /* Set (& get) all elements from empty array */ /* Initialize iterator */ - if(NULL == (eiter_info = tparam->eiter->init(cparam, tparam, nelmts))) - TEST_ERROR + if (NULL == (eiter_info = tparam->eiter->init(cparam, tparam, nelmts))) + TEST_ERROR; /* Set elements of array */ - for(cnt = 0; cnt < nelmts; cnt++) { + for (cnt = 0; cnt < nelmts; cnt++) { /* Get the array index */ - if((sidx = tparam->eiter->next(eiter_info)) < 0) - TEST_ERROR + if ((sidx = tparam->eiter->next(eiter_info)) < 0) + TEST_ERROR; idx = (hsize_t)sidx; /* 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 + if (H5EA_get(ea, idx, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is fill value for array */ - if(relmt != H5EA_TEST_FILL) - TEST_ERROR + if (relmt != H5EA_TEST_FILL) + TEST_ERROR; /* Set element of array */ welmt = (uint64_t)7 + idx; - if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0) - FAIL_STACK_ERROR + if (H5EA_set(ea, idx, &welmt) < 0) + FAIL_STACK_ERROR; /* Get the max. array index */ - if((smax = tparam->eiter->max_elem(eiter_info)) < 0) - TEST_ERROR + if ((smax = tparam->eiter->max_elem(eiter_info)) < 0) + TEST_ERROR; max = (hsize_t)smax; /* Verify high-water # of elements written */ nelmts_written = (hsize_t)ULLONG_MAX; - if(H5EA_get_nelmts(ea, &nelmts_written) < 0) - FAIL_STACK_ERROR - if(nelmts_written != (max + 1)) - TEST_ERROR + if (H5EA_get_nelmts(ea, &nelmts_written) < 0) + FAIL_STACK_ERROR; + if (nelmts_written != (max + 1)) + TEST_ERROR; /* Check if array state is available */ - if(tparam->eiter->state) { + if (tparam->eiter->state) { /* Get the extensible array state */ - if(tparam->eiter->state(eiter_info, cparam, tparam, &state, idx) < 0) - TEST_ERROR + if (tparam->eiter->state(eiter_info, cparam, tparam, &state, idx) < 0) + TEST_ERROR; /* Verify array state */ - if(check_stats(ea, &state)) - TEST_ERROR + if (check_stats(ea, &state)) + TEST_ERROR; } /* end if */ /* Retrieve element of array (set now) */ relmt = (uint64_t)0; - if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, idx, &relmt) < 0) - FAIL_STACK_ERROR + if (H5EA_get(ea, idx, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is value written */ - if(relmt != welmt) - TEST_ERROR + if (relmt != welmt) + TEST_ERROR; } /* end for */ /* Shutdown iterator */ - if(tparam->eiter->term(eiter_info) < 0) - TEST_ERROR + if (tparam->eiter->term(eiter_info) < 0) + TEST_ERROR; /* Close array, delete array, close file & verify file is empty */ - if(finish(file, fapl, f, ea, ea_addr) < 0) - TEST_ERROR + if (finish(file, fapl, f, ea, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + H5Fclose(file); + } + H5E_END_TRY; return 1; } /* test_set_elmts() */ - /*------------------------------------------------------------------------- - * Function: test_skip_elmts + * Function: test_skip_elmts * - * Purpose: Skip some elements when writing element + * Purpose: Skip some elements when writing element * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, November 11, 2008 * *------------------------------------------------------------------------- */ static unsigned -test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam, - hsize_t skip_elmts, const char *test_str) +test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam, hsize_t skip_elmts, + const char *test_str) { - 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_written; /* Highest element written in array */ - hsize_t idx; /* Index value of element to get */ - hsize_t cnt; /* Count of array indices */ - haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ + 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_written; /* Highest element written in array */ + hsize_t idx; /* Index value of element to get */ + hsize_t cnt; /* Count of array indices */ + haddr_t ea_addr = HADDR_UNDEF; /* Array address in file */ /* * Display testing message @@ -2643,138 +2263,140 @@ test_skip_elmts(hid_t fapl, H5EA_create_t *cparam, earray_test_param_t *tparam, TESTING(test_str); /* Create file & retrieve pointer to internal file object */ - if(create_file(fapl, &file, &f) < 0) - TEST_ERROR + if (create_file(H5F_ACC_TRUNC, fapl, &file, &f) < 0) + TEST_ERROR; /* Create array */ - if(create_array(f, H5P_DATASET_XFER_DEFAULT, cparam, &ea, &ea_addr, NULL) < 0) - TEST_ERROR + if (create_array(f, cparam, &ea, &ea_addr, NULL) < 0) + TEST_ERROR; /* Verify the creation parameters */ - if(verify_cparam(ea, cparam) < 0) - TEST_ERROR + 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, tparam) < 0) - TEST_ERROR + if (reopen_file(&file, &f, fapl, &ea, ea_addr, tparam) < 0) + TEST_ERROR; /* Verify high-water # of elements written */ nelmts_written = (hsize_t)ULLONG_MAX; - if(H5EA_get_nelmts(ea, &nelmts_written) < 0) - FAIL_STACK_ERROR - if(nelmts_written != 0) - TEST_ERROR + if (H5EA_get_nelmts(ea, &nelmts_written) < 0) + FAIL_STACK_ERROR; + if (nelmts_written != 0) + TEST_ERROR; /* Verify array state */ HDmemset(&state, 0, sizeof(state)); state.hdr_size = EA_HDR_SIZE; - if(check_stats(ea, &state)) - TEST_ERROR + if (check_stats(ea, &state)) + TEST_ERROR; /* Set (& get) element after skipping elements */ idx = skip_elmts; /* 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 + if (H5EA_get(ea, idx, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is fill value for array */ - if(relmt != H5EA_TEST_FILL) - TEST_ERROR + if (relmt != H5EA_TEST_FILL) + TEST_ERROR; /* Set element of array */ welmt = (uint64_t)7 + idx; - if(H5EA_set(ea, H5P_DATASET_XFER_DEFAULT, idx, &welmt) < 0) - FAIL_STACK_ERROR + if (H5EA_set(ea, idx, &welmt) < 0) + FAIL_STACK_ERROR; /* Verify high-water # of elements written */ nelmts_written = (hsize_t)ULLONG_MAX; - if(H5EA_get_nelmts(ea, &nelmts_written) < 0) - FAIL_STACK_ERROR - if(nelmts_written != (idx + 1)) - TEST_ERROR + if (H5EA_get_nelmts(ea, &nelmts_written) < 0) + FAIL_STACK_ERROR; + if (nelmts_written != (idx + 1)) + TEST_ERROR; /* Set array state */ HDmemset(&state, 0, sizeof(state)); - state.hdr_size = EA_HDR_SIZE; - state.nindex_blks = 1; + state.hdr_size = EA_HDR_SIZE; + state.nindex_blks = 1; state.index_blk_size = EA_IBLOCK_SIZE; - state.max_idx_set = idx + 1; - if(1 == skip_elmts) { - state.nelmts = (hsize_t)cparam->idx_blk_elmts; + state.max_idx_set = idx + 1; + if (1 == skip_elmts) { + state.nelmts = (hsize_t)cparam->idx_blk_elmts; state.nsuper_blks = state.ndata_blks = (hsize_t)0; } /* end if */ - else if(cparam->idx_blk_elmts == skip_elmts) { - state.nelmts = (hsize_t)cparam->idx_blk_elmts + cparam->data_blk_min_elmts; - state.ndata_blks = (hsize_t)1; + else if (cparam->idx_blk_elmts == skip_elmts) { + state.nelmts = (hsize_t)cparam->idx_blk_elmts + cparam->data_blk_min_elmts; + state.ndata_blks = (hsize_t)1; state.nsuper_blks = (hsize_t)0; } /* end if */ else { - unsigned sblk_idx; /* Which superblock does this index fall in? */ + 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)); - state.nelmts = (hsize_t)cparam->idx_blk_elmts + tparam->sblk_info[sblk_idx].dblk_nelmts; - state.ndata_blks = (hsize_t)1; + sblk_idx = + H5VM_log2_gen((uint64_t)(((idx - cparam->idx_blk_elmts) / cparam->data_blk_min_elmts) + 1)); + state.nelmts = (hsize_t)cparam->idx_blk_elmts + tparam->sblk_info[sblk_idx].dblk_nelmts; + state.ndata_blks = (hsize_t)1; state.nsuper_blks = (hsize_t)1; } /* end if */ /* Verify array state */ - if(check_stats(ea, &state)) - TEST_ERROR + 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 + if (H5EA_get(ea, idx, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is value written */ - if(relmt != welmt) - TEST_ERROR + if (relmt != welmt) + TEST_ERROR; /* Get unset elements of array */ - for(cnt = 0; cnt < skip_elmts; cnt++) { + for (cnt = 0; cnt < skip_elmts; cnt++) { /* Retrieve element of array (not set yet) */ relmt = (uint64_t)0; - if(H5EA_get(ea, H5P_DATASET_XFER_DEFAULT, cnt, &relmt) < 0) - FAIL_STACK_ERROR + if (H5EA_get(ea, cnt, &relmt) < 0) + FAIL_STACK_ERROR; /* Verify element is fill value for array */ - if(relmt != H5EA_TEST_FILL) - TEST_ERROR + if (relmt != H5EA_TEST_FILL) + TEST_ERROR; } /* end for */ /* Close array, delete array, close file & verify file is empty */ - if(finish(file, fapl, f, ea, ea_addr) < 0) - TEST_ERROR + if (finish(file, fapl, f, ea, ea_addr) < 0) + TEST_ERROR; /* All tests passed */ - PASSED() + PASSED(); return 0; error: - H5E_BEGIN_TRY { - if(ea) - H5EA_close(ea, H5P_DATASET_XFER_DEFAULT); - H5Fclose(file); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + if (ea) + H5EA_close(ea); + H5Fclose(file); + } + H5E_END_TRY; return 1; } /* test_skip_elmts() */ - /*------------------------------------------------------------------------- - * Function: main + * Function: main * - * Purpose: Test the extensible array code + * Purpose: Test the extensible array code * - * Return: Success: 0 - * Failure: 1 + * Return: Success: 0 + * Failure: 1 * - * Programmer: Quincey Koziol + * Programmer: Quincey Koziol * Tuesday, June 17, 2008 * *------------------------------------------------------------------------- @@ -2782,65 +2404,70 @@ error: int main(void) { - H5EA_create_t cparam; /* Creation parameters for extensible array */ - earray_test_param_t tparam; /* Testing parameters */ - earray_test_type_t curr_test; /* Current test being worked on */ - earray_iter_type_t curr_iter; /* Current iteration type being worked on */ - hid_t fapl = -1; /* File access property list for data files */ - unsigned nerrors = 0; /* Cumulative error count */ - time_t curr_time; /* Current time, for seeding random number generator */ - int ExpressMode; /* Test express value */ + H5EA_create_t cparam; /* Creation parameters for extensible array */ + earray_test_param_t tparam; /* Testing parameters */ + earray_test_type_t curr_test; /* Current test being worked on */ + earray_iter_type_t curr_iter; /* Current iteration type being worked on */ + hid_t fapl = -1; /* File access property list for data files */ + unsigned nerrors = 0; /* Cumulative error count */ + time_t curr_time; /* Current time, for seeding random number generator */ + int ExpressMode; /* Test express value */ + hbool_t api_ctx_pushed = FALSE; /* Whether API context pushed */ /* Reset library */ h5_reset(); - fapl = h5_fileaccess(); + fapl = h5_fileaccess(); ExpressMode = GetTestExpress(); - if(ExpressMode > 1) - printf("***Express test mode on. Some tests may be skipped\n"); + if (ExpressMode > 1) + HDprintf("***Express test mode on. Some tests may be skipped\n"); /* Set the filename to use for this test (dependent on fapl) */ h5_fixname(FILENAME[0], fapl, filename_g, sizeof(filename_g)); + /* Push API context */ + if (H5CX_push() < 0) + FAIL_STACK_ERROR; + api_ctx_pushed = TRUE; + /* Seed random #'s */ curr_time = HDtime(NULL); - HDsrandom((unsigned long)curr_time); + HDsrandom((unsigned)curr_time); /* Create an empty file to retrieve size */ { - hid_t file; /* File ID */ + hid_t file; /* File ID */ - if((file = H5Fcreate(filename_g, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) - FAIL_STACK_ERROR + if ((file = H5Fcreate(filename_g, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) + FAIL_STACK_ERROR; /* Close file */ - if(H5Fclose(file) < 0) - FAIL_STACK_ERROR + if (H5Fclose(file) < 0) + FAIL_STACK_ERROR; /* Get the size of a file w/no array */ - if((empty_size_g = h5_get_file_size(filename_g, fapl)) < 0) - TEST_ERROR + if ((empty_size_g = h5_get_file_size(filename_g, fapl)) < 0) + TEST_ERROR; } - /* Initialize extensible array creation parameters */ init_cparam(&cparam); /* Iterate over the testing parameters */ - for(curr_test = EARRAY_TEST_NORMAL; curr_test < EARRAY_TEST_NTESTS; curr_test++) { + for (curr_test = EARRAY_TEST_NORMAL; curr_test < EARRAY_TEST_NTESTS; curr_test++) { /* Initialize the testing parameters */ init_tparam(&tparam, &cparam); /* Set appropriate testing parameters for each test */ - switch(curr_test) { + switch (curr_test) { /* "Normal" testing parameters */ case EARRAY_TEST_NORMAL: - puts("Testing with normal parameters"); + HDputs("Testing with normal parameters"); break; /* "Re-open array" testing parameters */ case EARRAY_TEST_REOPEN: - puts("Testing with reopen array flag set"); + HDputs("Testing with reopen array flag set"); tparam.reopen_array = EARRAY_TEST_REOPEN; break; @@ -2854,46 +2481,46 @@ main(void) nerrors += test_create(fapl, &cparam, &tparam); nerrors += test_reopen(fapl, &cparam, &tparam); nerrors += test_open_twice(fapl, &cparam, &tparam); + nerrors += test_open_twice_diff(fapl, &cparam, &tparam); nerrors += test_delete_open(fapl, &cparam, &tparam); - nerrors += test_flush_depend(fapl, &cparam, &tparam); /* Iterate over the type of capacity tests */ - for(curr_iter = EARRAY_ITER_FW; curr_iter < EARRAY_ITER_NITERS; curr_iter++) { - hsize_t sblk; /* Super block index */ - hsize_t dblk; /* Data block index */ - hsize_t nelmts; /* # of elements to test */ - char test_str[128]; /* String for describing test */ - hsize_t ndblks; /* # of data blocks tested */ + for (curr_iter = EARRAY_ITER_FW; curr_iter < EARRAY_ITER_NITERS; curr_iter++) { + hsize_t sblk; /* Super block index */ + hsize_t dblk; /* Data block index */ + hsize_t nelmts; /* # of elements to test */ + char test_str[128]; /* String for describing test */ + hsize_t ndblks; /* # of data blocks tested */ /* Set appropriate parameters for each type of iteration */ - switch(curr_iter) { + switch (curr_iter) { /* "Forward" testing parameters */ case EARRAY_ITER_FW: - puts("Testing with forward iteration"); + HDputs("Testing with forward iteration"); tparam.eiter = &ea_iter_fw; break; /* "Reverse" testing parameters */ case EARRAY_ITER_RV: - puts("Testing with reverse iteration"); + HDputs("Testing with reverse iteration"); tparam.eiter = &ea_iter_rv; break; /* "Random" testing parameters */ case EARRAY_ITER_RND: - puts("Testing with random iteration"); + HDputs("Testing with random iteration"); tparam.eiter = &ea_iter_rnd; break; /* "Random #2" testing parameters */ case EARRAY_ITER_RND2: - puts("Testing with random #2 iteration"); + HDputs("Testing with random #2 iteration"); tparam.eiter = &ea_iter_rnd2; break; /* "Cyclic" testing parameters */ case EARRAY_ITER_CYC: - puts("Testing with cyclic iteration"); + HDputs("Testing with cyclic iteration"); tparam.eiter = &ea_iter_cyc; break; @@ -2905,40 +2532,53 @@ main(void) /* Basic capacity tests */ nerrors += test_set_elmts(fapl, &cparam, &tparam, (hsize_t)1, "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, + "setting index block elements of array"); /* Super Block capacity tests */ ndblks = 0; - for(sblk = 0; sblk < 9; sblk++) { - for(dblk = 0; dblk < tparam.sblk_info[sblk].ndblks; dblk ++) { + for (sblk = 0; sblk < 9; sblk++) { + for (dblk = 0; dblk < tparam.sblk_info[sblk].ndblks; dblk++) { /* Test first element in data block */ - nelmts = (hsize_t)((hsize_t)1 + cparam.idx_blk_elmts + - tparam.sblk_info[sblk].start_idx + - (tparam.sblk_info[sblk].dblk_nelmts * dblk)); - sprintf(test_str, "setting first element of array's data block #%llu", (unsigned long long)ndblks); + nelmts = (hsize_t)((hsize_t)1 + cparam.idx_blk_elmts + tparam.sblk_info[sblk].start_idx + + (tparam.sblk_info[sblk].dblk_nelmts * dblk)); + HDsnprintf(test_str, sizeof(test_str), + "setting first element of array's data block #%llu", + (unsigned long long)ndblks); nerrors += test_set_elmts(fapl, &cparam, &tparam, nelmts, test_str); /* Test all elements in data block */ - nelmts = (hsize_t)(cparam.idx_blk_elmts + - tparam.sblk_info[sblk].start_idx + - (tparam.sblk_info[sblk].dblk_nelmts * (dblk + 1))); - sprintf(test_str, "setting all elements of array's data block #%llu", (unsigned long long)ndblks); + nelmts = (hsize_t)(cparam.idx_blk_elmts + tparam.sblk_info[sblk].start_idx + + (tparam.sblk_info[sblk].dblk_nelmts * (dblk + 1))); + HDsnprintf(test_str, sizeof(test_str), "setting all elements of array's data block #%llu", + (unsigned long long)ndblks); nerrors += test_set_elmts(fapl, &cparam, &tparam, nelmts, test_str); /* Increment data block being tested */ ndblks++; } /* end for */ - } /* end for */ - } /* end for */ + } /* end for */ + } /* end for */ /* Check skipping elements */ nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)1, "skipping 1st element"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)cparam.idx_blk_elmts, "skipping index block elements"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + (15 * cparam.data_blk_min_elmts) + 1), "skipping index block & data block elements"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + (31 * cparam.data_blk_min_elmts) + 1), "skipping 1st super block elements"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + (63 * cparam.data_blk_min_elmts) + 1), "skipping 2nd super block elements"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + (127 * cparam.data_blk_min_elmts) + 1), "skipping 3rd super block elements"); - nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)(cparam.idx_blk_elmts + (255 * cparam.data_blk_min_elmts) + 1), "skipping 4th super block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, (hsize_t)cparam.idx_blk_elmts, + "skipping index block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, + (hsize_t)(cparam.idx_blk_elmts + (15 * cparam.data_blk_min_elmts) + 1), + "skipping index block & data block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, + (hsize_t)(cparam.idx_blk_elmts + (31 * cparam.data_blk_min_elmts) + 1), + "skipping 1st super block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, + (hsize_t)(cparam.idx_blk_elmts + (63 * cparam.data_blk_min_elmts) + 1), + "skipping 2nd super block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, + (hsize_t)(cparam.idx_blk_elmts + (127 * cparam.data_blk_min_elmts) + 1), + "skipping 3rd super block elements"); + nerrors += test_skip_elmts(fapl, &cparam, &tparam, + (hsize_t)(cparam.idx_blk_elmts + (255 * cparam.data_blk_min_elmts) + 1), + "skipping 4th super block elements"); /* Close down testing parameters */ finish_tparam(&tparam); @@ -2947,9 +2587,14 @@ main(void) /* Verify symbol table messages are cached */ nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); - if(nerrors) + /* Pop API context */ + if (api_ctx_pushed && H5CX_pop(FALSE) < 0) + FAIL_STACK_ERROR; + api_ctx_pushed = FALSE; + + if (nerrors) goto error; - puts("All extensible array tests passed."); + HDputs("All extensible array tests passed."); /* Clean up file used */ h5_cleanup(FILENAME, fapl); @@ -2957,12 +2602,16 @@ main(void) return 0; error: - puts("*** TESTS FAILED ***"); + HDputs("*** TESTS FAILED ***"); - H5E_BEGIN_TRY { - H5Pclose(fapl); - } H5E_END_TRY; + H5E_BEGIN_TRY + { + H5Pclose(fapl); + } + H5E_END_TRY; + + if (api_ctx_pushed) + H5CX_pop(FALSE); return 1; } /* end main() */ - |
