From 9742792f8ca9af30c7de2d479337389678c33f59 Mon Sep 17 00:00:00 2001 From: Vailin Choi Date: Tue, 11 Apr 2017 11:59:27 -0500 Subject: Fix for H5Dset_extent test failure with extensive array indexing (HDFFV-9771) 1) Calculate chunk index for extensive array index based on swizzled max chunks when unlim_dim > 0 2) Minor fixes to test/fheap.c that somehow were missed from last check in. See pull request #396 review comments. --- src/H5Dearray.c | 15 +++++++++++--- src/H5Oprivate.h | 1 + test/fheap.c | 62 +++++++++++++++++++++++++++---------------------------- test/set_extent.c | 18 ---------------- 4 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/H5Dearray.c b/src/H5Dearray.c index e9dbd0d..240afb7 100644 --- a/src/H5Dearray.c +++ b/src/H5Dearray.c @@ -1137,7 +1137,7 @@ H5D__earray_idx_get_addr(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *uda H5VM_swizzle_coords(hsize_t, swizzled_coords, idx_info->layout->u.earray.unlim_dim); /* Calculate the index of this chunk */ - idx = H5VM_chunk_index(ndims, swizzled_coords, idx_info->layout->u.earray.swizzled_dim, idx_info->layout->u.earray.swizzled_down_chunks); + idx = H5VM_chunk_index(ndims, swizzled_coords, idx_info->layout->u.earray.swizzled_dim, idx_info->layout->u.earray.swizzled_max_down_chunks); } /* end if */ else { /* Calculate the index of this chunk */ @@ -1202,7 +1202,8 @@ H5D__earray_idx_resize(H5O_layout_chunk_t *layout) /* "Swizzle" constant dimensions for this dataset */ if(layout->u.earray.unlim_dim > 0) { - hsize_t swizzled_chunks[H5O_LAYOUT_NDIMS]; /* Swizzled form of # of chunks in each dimension */ + hsize_t swizzled_chunks[H5O_LAYOUT_NDIMS]; /* Swizzled form of # of chunks in each dimension */ + hsize_t swizzled_max_chunks[H5O_LAYOUT_NDIMS]; /* Swizzled form of max # of chunks in each dimension */ /* Get the swizzled chunk dimensions */ HDmemcpy(layout->u.earray.swizzled_dim, layout->dim, (layout->ndims - 1) * sizeof(layout->dim[0])); @@ -1215,6 +1216,14 @@ H5D__earray_idx_resize(H5O_layout_chunk_t *layout) /* Get the swizzled "down" sizes for each dimension */ if(H5VM_array_down((layout->ndims - 1), swizzled_chunks, layout->u.earray.swizzled_down_chunks) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't compute swizzled 'down' chunk size value") + + /* Get the swizzled max number of chunks in each dimension */ + HDmemcpy(swizzled_max_chunks, layout->max_chunks, (layout->ndims - 1) * sizeof(swizzled_max_chunks[0])); + H5VM_swizzle_coords(hsize_t, swizzled_max_chunks, layout->u.earray.unlim_dim); + + /* Get the swizzled max "down" sizes for each dimension */ + if(H5VM_array_down((layout->ndims - 1), swizzled_max_chunks, layout->u.earray.swizzled_max_down_chunks) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't compute swizzled 'down' chunk size value") } /* end if */ done: @@ -1414,7 +1423,7 @@ H5D__earray_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t H5VM_swizzle_coords(hsize_t, swizzled_coords, idx_info->layout->u.earray.unlim_dim); /* Calculate the index of this chunk */ - idx = H5VM_chunk_index(ndims, swizzled_coords, idx_info->layout->u.earray.swizzled_dim, idx_info->layout->u.earray.swizzled_down_chunks); + idx = H5VM_chunk_index(ndims, swizzled_coords, idx_info->layout->u.earray.swizzled_dim, idx_info->layout->u.earray.swizzled_max_down_chunks); } /* end if */ else { /* Calculate the index of this chunk */ diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index f0fbe72..0a4ed74 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -584,6 +584,7 @@ typedef struct H5O_layout_chunk_earray_t { unsigned unlim_dim; /* Rank of unlimited dimension for dataset */ uint32_t swizzled_dim[H5O_LAYOUT_NDIMS]; /* swizzled chunk dimensions */ hsize_t swizzled_down_chunks[H5O_LAYOUT_NDIMS]; /* swizzled "down" size of number of chunks in each dimension */ + hsize_t swizzled_max_down_chunks[H5O_LAYOUT_NDIMS]; /* swizzled max "down" size of number of chunks in each dimension */ } H5O_layout_chunk_earray_t; typedef struct H5O_layout_chunk_bt2_t { diff --git a/test/fheap.c b/test/fheap.c index 77de4a8..d2a7900 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -553,7 +553,7 @@ begin_test(fheap_test_param_t *tparam, const char *base_desc, del_str = get_del_string(tparam); HDassert(del_str); test_desc = (char *)H5MM_malloc(HDstrlen(del_str) + HDstrlen(base_desc)); - sprintf(test_desc, base_desc, del_str); + HDsprintf(test_desc, base_desc, del_str); TESTING(test_desc); H5MM_xfree(del_str); H5MM_xfree(test_desc); @@ -7683,10 +7683,10 @@ test_man_incr_insert_remove(hid_t fapl, H5HF_create_t *cparam, fheap_test_param_ TESTING("incremental object insertion and removal") for(i = 0; i < 100; i++) { - sprintf(obj1.b, "%s%d", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", i); + HDsprintf(obj1.b, "%s%d", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", i); for(j = 0; j < i; j++) { - sprintf(obj2.b, "%s%d", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", j); + HDsprintf(obj2.b, "%s%d", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", j); if(H5HF_remove(fh, dxpl, heap_id[j]) < 0) FAIL_STACK_ERROR @@ -16393,7 +16393,7 @@ main(void) * running time will be long. */ if(ExpressMode > 1) - printf("***Express test mode on. Some tests may be skipped\n"); + HDprintf("***Express test mode on. Some tests may be skipped\n"); else if(ExpressMode == 0) num_pb_fs = NUM_PB_FS; @@ -16475,12 +16475,12 @@ main(void) switch(curr_test) { /* "Normal" testing parameters */ case FHEAP_TEST_NORMAL: - puts("Testing with normal parameters"); + HDputs("Testing with normal parameters"); break; /* "Re-open heap" testing parameters */ case FHEAP_TEST_REOPEN: - puts("Testing with reopen heap flag set"); + HDputs("Testing with reopen heap flag set"); tparam.reopen_heap = FHEAP_TEST_REOPEN; break; @@ -16512,12 +16512,12 @@ main(void) switch(fill) { /* "Bulk fill" heap blocks with 'large' objects */ case FHEAP_TEST_FILL_LARGE: - puts("Bulk-filling blocks w/large objects"); + HDputs("Bulk-filling blocks w/large objects"); break; /* "Bulk fill" heap blocks with 'single' objects */ case FHEAP_TEST_FILL_SINGLE: - puts("Bulk-filling blocks w/single object"); + HDputs("Bulk-filling blocks w/single object"); break; /* An unknown test? */ @@ -16568,25 +16568,25 @@ main(void) * level of complexity gradually. -QAK */ if(ExpressMode > 1) - printf("***Express test mode on. test_man_start_5th_recursive_indirect is skipped\n"); + HDprintf("***Express test mode on. test_man_start_5th_recursive_indirect is skipped\n"); else nerrors += test_man_start_5th_recursive_indirect(fapl, &small_cparam, &tparam); /* * Test fractal heap object deletion */ - /* Simple removal */ - nerrors += test_man_remove_bogus(fapl, &small_cparam, &tparam); - nerrors += test_man_remove_one(fapl, &small_cparam, &tparam); - nerrors += test_man_remove_two(fapl, &small_cparam, &tparam); - nerrors += test_man_remove_one_larger(fapl, &small_cparam, &tparam); - tparam.del_dir = FHEAP_DEL_FORWARD; - nerrors += test_man_remove_two_larger(fapl, &small_cparam, &tparam); - tparam.del_dir = FHEAP_DEL_REVERSE; - nerrors += test_man_remove_two_larger(fapl, &small_cparam, &tparam); - tparam.del_dir = FHEAP_DEL_FORWARD; - nerrors += test_man_remove_three_larger(fapl, &small_cparam, &tparam); - tparam.del_dir = FHEAP_DEL_REVERSE; + /* Simple removal */ + nerrors += test_man_remove_bogus(fapl, &small_cparam, &tparam); + nerrors += test_man_remove_one(fapl, &small_cparam, &tparam); + nerrors += test_man_remove_two(fapl, &small_cparam, &tparam); + nerrors += test_man_remove_one_larger(fapl, &small_cparam, &tparam); + tparam.del_dir = FHEAP_DEL_FORWARD; + nerrors += test_man_remove_two_larger(fapl, &small_cparam, &tparam); + tparam.del_dir = FHEAP_DEL_REVERSE; + nerrors += test_man_remove_two_larger(fapl, &small_cparam, &tparam); + tparam.del_dir = FHEAP_DEL_FORWARD; + nerrors += test_man_remove_three_larger(fapl, &small_cparam, &tparam); + tparam.del_dir = FHEAP_DEL_REVERSE; nerrors += test_man_remove_three_larger(fapl, &small_cparam, &tparam); /* Incremental insert & removal */ @@ -16613,7 +16613,7 @@ main(void) nerrors += test_man_remove_first_two_rows(fapl, &small_cparam, &tparam); nerrors += test_man_remove_first_four_rows(fapl, &small_cparam, &tparam); if(ExpressMode > 1) - printf("***Express test mode on. Some tests skipped\n"); + HDprintf("***Express test mode on. Some tests skipped\n"); else { nerrors += test_man_remove_all_root_direct(fapl, &small_cparam, &tparam); nerrors += test_man_remove_2nd_indirect(fapl, &small_cparam, &tparam); @@ -16643,7 +16643,7 @@ main(void) nerrors += test_man_fill_3rd_direct_less_one_fill_direct_wrap_start_block_add_skipped(fapl, &small_cparam, &tparam); nerrors += test_man_fill_1st_row_3rd_direct_fill_2nd_direct_less_one_wrap_start_block_add_skipped(fapl, &small_cparam, &tparam); if(ExpressMode > 1) - printf("***Express test mode on. Some tests skipped\n"); + HDprintf("***Express test mode on. Some tests skipped\n"); else { nerrors += test_man_fill_3rd_direct_fill_direct_skip_start_block_add_skipped(fapl, &small_cparam, &tparam); nerrors += test_man_fill_3rd_direct_fill_2nd_direct_fill_direct_skip_3rd_indirect_start_block_add_skipped(fapl, &small_cparam, &tparam); @@ -16684,12 +16684,12 @@ main(void) switch(id_len) { /* Use "normal" form for 'huge' object's heap IDs */ case 0: - puts("Using 'normal' heap ID format for 'huge' objects"); + HDputs("Using 'normal' heap ID format for 'huge' objects"); break; /* Use "direct" form for 'huge' object's heap IDs */ case 1: - puts("Using 'direct' heap ID format for 'huge' objects"); + HDputs("Using 'direct' heap ID format for 'huge' objects"); /* Adjust actual length of heap IDs for directly storing 'huge' object's file offset & length in heap ID */ tparam.actual_id_len = 17; /* 1 + 8 (file address size) + 8 (file length size) */ @@ -16698,7 +16698,7 @@ main(void) /* Use "direct" storage for 'huge' objects and larger IDs for 'tiny' objects */ case 2: small_cparam.id_len = 37; - puts("Using 'direct' heap ID format for 'huge' objects and larger IDs for 'tiny' objects"); + HDputs("Using 'direct' heap ID format for 'huge' objects and larger IDs for 'tiny' objects"); tparam.actual_id_len = 37; break; @@ -16756,10 +16756,10 @@ main(void) /* Random object insertion & deletion */ if(ExpressMode > 1) - printf("***Express test mode on. Some tests skipped\n"); + HDprintf("***Express test mode on. Some tests skipped\n"); else { /* Random tests using "small" heap creation parameters */ - puts("Using 'small' heap creation parameters"); + HDputs("Using 'small' heap creation parameters"); /* (reduce size of tests when re-opening each time) */ /* XXX: Try to speed things up enough that these tests don't have to be reduced when re-opening */ @@ -16772,7 +16772,7 @@ main(void) nerrors += test_random_pow2((curr_test == FHEAP_TEST_NORMAL ? (hsize_t)(100*1000*1000) : (hsize_t)(4*1000*1000)), fapl, &small_cparam, &tparam); /* Random tests using "large" heap creation parameters */ - puts("Using 'large' heap creation parameters"); + HDputs("Using 'large' heap creation parameters"); tparam.actual_id_len = LARGE_HEAP_ID_LEN; /* (reduce size of tests when re-opening each time) */ @@ -16818,7 +16818,7 @@ main(void) if(nerrors) goto error; - puts("All fractal heap tests passed."); + HDputs("All fractal heap tests passed."); /* Release space for the shared objects */ H5MM_xfree(shared_wobj_g); @@ -16840,7 +16840,7 @@ HDfprintf(stderr, "Uncomment cleanup!\n"); return 0; error: - puts("*** TESTS FAILED ***"); + HDputs("*** TESTS FAILED ***"); H5E_BEGIN_TRY { H5MM_xfree(shared_wobj_g); H5MM_xfree(shared_robj_g); diff --git a/test/set_extent.c b/test/set_extent.c index 949120b..052a35a 100644 --- a/test/set_extent.c +++ b/test/set_extent.c @@ -2603,15 +2603,6 @@ static int test_random_rank4( hid_t fapl, hid_t dcpl, hbool_t do_fillvalue, volatile unsigned i, j, k, l, m; /* Local indices */ char filename[NAME_BUF_SIZE]; - /* *** FIXME *** - * Skip the test if an extensible array index is requested, as resizing - * them is broken. - * - * Remove these lines as appropriate when these problems are fixed. - */ - if(index_type == RANK4_INDEX_EARRAY) - return 0; - /* create a new file */ h5_fixname(FILENAME[4], fapl, filename, sizeof filename); if ((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) @@ -2816,15 +2807,6 @@ static int test_random_rank4_vl( hid_t fapl, hid_t dcpl, hbool_t do_fillvalue, volatile unsigned i, j, k, l, m; /* Local indices */ char filename[NAME_BUF_SIZE]; - /* *** FIXME *** - * Skip the test if an extensible array index is requested, as resizing - * them is broken. - * - * Remove these lines as appropriate when these problems are fixed. - */ - if(index_type == RANK4_INDEX_EARRAY) - return 0; - /* Initialize fill value buffers so they aren't freed in case of an error */ fill_value.len = 0; fill_value.p = NULL; -- cgit v0.12 From e3d8dacaadbbb886b5bca52ff27f4aac5c5ea0a8 Mon Sep 17 00:00:00 2001 From: "M. Scot Breitenfeld" Date: Tue, 11 Apr 2017 12:18:49 -0500 Subject: Combined the README_DEVEL and README, and removed out-dated README material --- fortran/src/README | 260 ++++++++++++---------------------------- fortran/src/README_DEVELOPEMENT | 38 ------ 2 files changed, 78 insertions(+), 220 deletions(-) delete mode 100644 fortran/src/README_DEVELOPEMENT diff --git a/fortran/src/README b/fortran/src/README index 7af5df3..a258e07 100644 --- a/fortran/src/README +++ b/fortran/src/README @@ -1,122 +1,18 @@ +=================================== +README for the Fortran APIs to HDF5 +=================================== - README for the FORTRAN90 Prototype APIs to HDF5 - - -This distribution contains the HDF5 FORTRAN90 APIs source code (prototype) -based on the HDF5 1.2.2 release (ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current), -tests and examples. - -This prototype supports a selected subset of the HDF5 Library functionality. -A complete list of the Fortran subroutines can be found in the HDF5 -Reference Manual provided with this release. -Check the online documentation at http://hdf.ncsa.uiuc.edu/HDF5/doc (select -the "HDF5 Fortran90 Docs" link at the bottom of the left-hand column) or -H5_F90.R1.2.2.RefMan.tar at ftp://hdf.ncsa.uiuc.edu/HDF5/fortran . - -Changes since last release (October 1999) -========================================= -* Support for Linux -* Support for parallel features (tested on O2K platform only) -* Most of the functions from the H5R, H5P, H5T, H5E and H5I interfaces were - implemented. See Reference Manual for complete list. The new functions - include support for object and dataset region references, and for - compound datatypes. -* This prototype supports more predefined types. See list below in - the "About the Fortran APIs" section. -* This prototype supports T3E and T3E with mpt 1.3. One has to modify - H5Dff.f90, H5Aff.f90, H5Pff.f90 to comment lines with the module procedures for - double precision datatypes. See source code. - -Supported platforms -=================== -The FORTRAN90 APIs provided here are known to work with the -following platforms and compilers: - - * SunOS 5.6 with WorkshopCompilers 4.2 Fortran 90 1.2 - * SunOS 5.7 with WorkshopCompilers 5.0 Fortran 90 2.0 - * OSF1 V4.0 with Digital Fortran 90 4.1 - * Linux RedHat 6.1, Kernel 2.2.12 with PGF90 - * T3E with Cray Fortran: Version 3.4.0.0 - with mpt 1.3 - -Compilation -=========== - -1. Install HDF5 Release 1.2.2 on your system - (ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current). If you are using a - binary distribution provided by the HDF group, make sure that a GZIP - library is installed on your system. If you do not have a GZIP library, - you may copy it from the HDF FTP server. - -2. In the src directory copy H5fortran_types.f90_ to - H5fortran_types.f90, where is one of the following: - - solaris - digunix - linux - - Example: On Digital Unix systems use the following command - cp H5fortran_types.f90_digunix H5fortran_types.f90 - -3. Edit Makefile_in the src/, test/ and examples/ directories - to specify the locations of the HDF5 C Library, the GZIP Library, and the - corresponding include files on your system. - -4. In the src directory, run make to create the HDF5 FORTRAN90 library - hdf5_fortran.a - make -f Makefile_ - - Example: On Solaris run - make -f Makefile_solaris - - The Fortran library hdf5_fortran.a will be created. - -5. In the test directory, build tests by running - make -f Makefile_ - This command will build fortranlib_test, fflush1 and fflush2 executables. - Run those executables to make sure that the library works on your system. - -6. In the examples directory, run - make -f Makefile_ - to build the following examples: - - fileexample - creates an HDF5 file - dsetexample - creates an empty dataset of integers - rwdsetexample - writes and reads to the dataset created by dsetexample - groupexample - creates a group in the file - grpsexample - creates groups using absolute and relative names - grpdsetexample - creates datasets in the groups - hyperslabexample - writes and reads a hyperslab - selectele - writes element selections - attrexample - creates and writes a dataset attribute - compound - creates, writes and reads one dim array of structures - mountexample - shows how to use mounting files to access a dataset - refobjexample - creates and stores references to the objects - refregexample - creates and stores references to the dataset regions - - The script run_example.sh runs the examples in the appropriate order. - - Use the HDF5 utility, h5dump, to see the content of the created HDF5 files. - -7. Install the HDF5 Reference Manual (in HTML format). The manual - can be found in the Unix tar file H5_F90.R1.2.2.RefMan.tar - on the ftp server and is served over the Web from - http://hdf.ncsa.uiuc.edu/HDF5/doc/ (select the "HDF5 Fortran90 Docs" - link at the bottom of the left-hand column). - - -8. Send bug reports and comments to hdfhelp@ncsa.uiuc.edu - -User's Guide Notes -+++++++++++++++++++ +This directory contains Fortran APIs for HDF5 Library functionality. +A complete list of implemented Fortran subroutines can be found in the HDF5 +Reference Manual. About the source code organization ================================== The Fortran APIs are organized in modules parallel to the HDF5 Interfaces. -Each module is in a separate file with the name H5*ff.f. Corresponding C +Each module is in a separate file with the name H5*ff.F90. Corresponding C stubs are in the H5*f.c files. For example, the Fortran File APIs are in -the file H5Fff.f and the corresponding C stubs are in the file H5Ff.c. +the file H5Fff.F90 and the corresponding C stubs are in the file H5Ff.c. Each module contains Fortran definitions of the constants, interfaces to the subroutines if needed, and the subroutines themselves. @@ -124,31 +20,29 @@ the subroutines if needed, and the subroutines themselves. Users must use constant names in their programs instead of the numerical values, as the numerical values are subject to change without notice. -About the Fortran APIs -======================= +Quick overview of the Fortran APIs +============================================== + +* An in-depth description of each Fortran API and its parameters can + be found in the HDF5 Reference Manual. * The Fortran APIs come in the form of Fortran subroutines. * Each Fortran subroutine name is derived from the corresponding C function name by adding "_f" to the name. For example, the name of the C function to create an HDF5 file is H5Fcreate; the corresponding Fortran subroutine - is h5fcreate_f. - -* A description of each Fortran subroutine and its parameters can be found - following the description of the corresponding C function in the - Reference Manual provided with this release. The manual can be found in - the Unix tar file H5_F90.R1.2.2.tar in this directory and - is served over the Web from http://hdf.ncsa.uiuc.edu/HDF5/doc/ (select - the "HDF5 Fortran90 Docs" link at the bottom of the left-hand column). + is h5fcreate_f. -* The parameter list for each Fortran subroutine has two more parameters - than the corresponding C function. These additional parameters hold +* The parameter list for each Fortran subroutine usually has two more parameters + than the corresponding C function. These additional parameters typically hold the return value and an error code. The order of the Fortran subroutine - parameters may differ from the order of the C function parameters. - The Fortran subroutine parameters are listed in the following order: + parameters may differ from the order of the C function parameters. + + The Fortran subroutine parameters are usually listed in the following order: -- required input parameters, -- output parameters, including return value and error code, and - -- optional input parameters. + optional input parameters. + For example, the C function to create a dataset has the following prototype: @@ -158,72 +52,35 @@ About the Fortran APIs The corresponding Fortran subroutine has the following form: - SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, - hdferr, creation_prp) - + SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & + hdferr, dset_creation_prp, link_creation_prp, dset_access_prop) + The first four parameters of the Fortran subroutine correspond to the C function parameters. The fifth parameter dset_id is an output parameter and contains a valid dataset identifier if the value of the - sixth output parameter hdferr indicates successful completion. + sixth output parameter, hdferr, indicates successful completion. (Error code descriptions are provided with the subroutine descriptions - in the Reference Manual.) The seventh input parameter creation_prp - is optional, and may be omitted when the default creation property - list is used. - (XXX: Update this! - QAK) - -* Parameters to the Fortran subroutines have one of the following - predefined datatypes (see the file H5fortran_types.f90 for KIND - definitions): + in the Reference Manual.) The last three input parameters are optional + and may be omitted, resulting in default values being used. + +* Parameters to the Fortran subroutines typically include + predefined datatypes (see the build-time generated file + H5fortran_types.F90 for a complete listing): INTEGER(HID_T) compares with hid_t type in HDF5 C APIs INTEGER(HSIZE_T) compares with hsize_t in HDF5 C APIs INTEGER(HSSIZE_T) compares with hssize_t in HDF5 C APIs INTEGER(SIZE_T) compares with the C size_t type + These integer types usually correspond to 4 or 8 byte integers, - depending on the FORTRAN90 compiler and corresponding HDF5 + depending on the Fortran compiler and corresponding HDF5 C library definitions. - The H5R module defines two types: - TYPE(HOBJ_REF_T_F) compares to the hobj_ref_t in HDF5 C API - TYPE(HDSET_REG_REF_T_F) compares to hdset_reg_ref_t in HDF5 C API - These types are represented by character arrays now. - The internal representation can be changed in the future. - -* Each Fortran application must call the h5init_types subroutine to +* Each Fortran application must call the h5open_f subroutine to initialize the Fortran predefined datatypes before calling the HDF5 Fortran - subroutines. The application must call the h5close_types subroutine - after all calls to the HDF5 Fortran Library. - -* The following predefined types are implemented in this prototype: - - H5T_NATIVE_INTEGER - H5T_NATIVE_REAL - H5T_NATIVE_DOUBLE - H5T_NATIVE_CHARACTER - H5T_STD_REF_OBJ - H5T_STD_REF_DSETREG - H5T_IEEE_F32BE - H5T_IEEE_F32LE - H5T_IEEE_F64BE - H5T_IEEE_F64LE - H5T_STD_I8BE - H5T_STD_I8LE - H5T_STD_I16BE - H5T_STD_I16LE - H5T_STD_I32BE - H5T_STD_I32LE - H5T_STD_I64BE - H5T_STD_I64LE - H5T_STD_U8BE - H5T_STD_U8LE - H5T_STD_U16BE - H5T_STD_U16LE - H5T_STD_U32BE - H5T_STD_U32LE - H5T_STD_U64BE - H5T_STD_U64LE - - + subroutines. The application should call the h5close_f subroutine + after all calls to the HDF5 Fortran Library. + * When a C application reads data stored from a Fortran program, the data will appear to be transposed due to the difference in the C - Fortran storage order. For example, if Fortran writes a 4x6 two-dimensional dataset @@ -233,6 +90,45 @@ About the Fortran APIs * Fortran indices are 1 based. -* Compound datatype datasets can be written or read by atomic fields only. +============================ +FOR DEVELOPERS +============================ + +Procedure to add a new function +---------------------------------- + +(1) Edit the fortran/src/H5*ff.F90 file +(2) Edit the fortran/src/H5*f.c file +(3) Edit the fortran/src/H5f90proto.h file +(4) Add the new function to fortran/src/hdf5_fortrandll.def.in + +Procedure for passing C variables to Fortran +--------------------------------------------- + +(1) Find the C struct name you are interested in: + (a) src/H5public.h if it is a generic type, i.e. H5_* + or + (b) src/H5*public.h if is a specific type, i.e. H5*_ + +(2) Put that structure into an array that will be passed to fortran in: + (a) fortran/src/H5_f.c (add to nh5init_flags_c subroutine) + (b) edit fortran/src/H5f90proto.h and edit nh5init_flags_c interface call + +(3) Edit the function call in fortran/src/H5_ff.F90 + (a) edit the call: FUNCTION h5init_flags_c + (b) edit h5init_flags_c call in h5open_f to match the number of arguments passing + +(4) add the size of the array and array to fortran/src/H5f90global.F90 + - must match the size found it H5_f.c + +NOTE: To just add a default C value argument, do steps (2a) and (4) + + +Procedure for adding a new file to the repository +-------------------------------------------------- + +Add the name of the file to the: + (1) Makefile.am located in the same directory as the newfile + (2) CMakeLists.txt located in the same directory as the newfile + (3) MANIFEST located in the top level directory -Not all of the APIs provided with this prototype have been fully tested. diff --git a/fortran/src/README_DEVELOPEMENT b/fortran/src/README_DEVELOPEMENT deleted file mode 100644 index 43982e1..0000000 --- a/fortran/src/README_DEVELOPEMENT +++ /dev/null @@ -1,38 +0,0 @@ -Procedure to add a new function ---------------------------------- - -(1) Edit the fortran/src/H5*ff.f90 file -(2) Edit the fortran/src/H5*f.c file -(3) Edit the fortran/src/H5f90proto.h file -(4) Add the new function to fortran/src/hdf5_fortrandll.def.in - -Procedure for passing C variables to Fortran ---------------------------------------------- - -(1) Find the C struct name you are interested in: - (a) src/H5public.h if it is a generic type, i.e. H5_* - or - (b) src/H5*public.h if is a specific type, i.e. H5*_ - -(2) Put that structure into an array that will be passed to fortran in: - (a) fortran/src/H5_f.c (add to nh5init_flags_c subroutine) - (b) edit fortran/src/H5f90proto.h and edit nh5init_flags_c interface call - -(3) Edit the function call in fortran/src/H5_ff.f90 - (a) edit the call: FUNCTION h5init_flags_c - (b) edit h5init_flags_c call in h5open_f to match the number of arguments passing - -(4) add the size of the array and array to fortran/src/H5f90global.f90 - - must match the size found it H5_f.c - -NOTE: To just add a default C value argument, do steps (2a) and (4) - - -Procedure for adding a new file to the repository --------------------------------------------------- - -Add the name of the file to the: - (1) Makefile.am located in the same directory as the newfile - (2) CMakeLists.txt located in the same directory as the newfile - (3) MANIFEST located in the top level directory - -- cgit v0.12 From a79ab2d39ecc699d600edda628c6a195429bf74e Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 11 Apr 2017 12:57:19 -0500 Subject: DAILYTEST-250 change test props to reduce timeout --- test/CMakeTests.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake index f372acf..cbab6fe 100644 --- a/test/CMakeTests.cmake +++ b/test/CMakeTests.cmake @@ -750,7 +750,7 @@ if (NOT CYGWIN) endif () set_tests_properties (H5TEST-cache PROPERTIES DEPENDS H5TEST-clear-cache-objects - ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST;HDF5TestExpress=${HDF_TEST_EXPRESS}" + ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST;HDF5TestExpress=3" WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST ) set_tests_properties (H5TEST-cache PROPERTIES TIMEOUT 1800) @@ -768,7 +768,7 @@ add_test ( add_test (NAME H5TEST-cache_image COMMAND $) set_tests_properties (H5TEST-cache_image PROPERTIES DEPENDS H5TEST-clear-cache_image-objects - ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST" + ENVIRONMENT "srcdir=${HDF5_TEST_BINARY_DIR}/H5TEST;HDF5TestExpress=3" WORKING_DIRECTORY ${HDF5_TEST_BINARY_DIR}/H5TEST ) -- cgit v0.12 From 265950a83a68ea55b5bc8dcbefa2d09b4f8110be Mon Sep 17 00:00:00 2001 From: "M. Scot Breitenfeld" Date: Tue, 11 Apr 2017 13:16:16 -0500 Subject: updated with README changes --- MANIFEST | 1 - 1 file changed, 1 deletion(-) diff --git a/MANIFEST b/MANIFEST index b312cab..5710f6c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -247,7 +247,6 @@ ./fortran/src/HDF5.F90 ./fortran/src/Makefile.am ./fortran/src/README -./fortran/src/README_DEVELOPEMENT _DO_NOT_DISTRIBUTE_ ./fortran/src/h5fc.in ./fortran/src/hdf5_fortrandll.def.in -- cgit v0.12 From 8a9e4b94c3938f4c42ad9399737afc6478ded160 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Tue, 11 Apr 2017 15:10:02 -0500 Subject: Fix URL name --- java/src/jni/exceptionImp.c | 2 +- java/src/jni/h5Constants.c | 2 +- java/src/jni/h5Imp.c | 2 +- java/src/jni/h5aImp.c | 2 +- java/src/jni/h5dImp.c | 2 +- java/src/jni/h5eImp.c | 2 +- java/src/jni/h5fImp.c | 2 +- java/src/jni/h5gImp.c | 2 +- java/src/jni/h5iImp.c | 2 +- java/src/jni/h5jni.h | 2 +- java/src/jni/h5lImp.c | 2 +- java/src/jni/h5oImp.c | 2 +- java/src/jni/h5pImp.c | 2 +- java/src/jni/h5plImp.c | 2 +- java/src/jni/h5rImp.c | 2 +- java/src/jni/h5sImp.c | 2 +- java/src/jni/h5tImp.c | 2 +- java/src/jni/h5util.c | 2 +- java/src/jni/h5util.h | 2 +- java/src/jni/h5zImp.c | 2 +- java/src/jni/nativeData.c | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/java/src/jni/exceptionImp.c b/java/src/jni/exceptionImp.c index 28eec21..d0e7790 100644 --- a/java/src/jni/exceptionImp.c +++ b/java/src/jni/exceptionImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5Constants.c b/java/src/jni/h5Constants.c index c6aa16c..ddca853 100644 --- a/java/src/jni/h5Constants.c +++ b/java/src/jni/h5Constants.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5Imp.c b/java/src/jni/h5Imp.c index 7a24b6f..e548363 100644 --- a/java/src/jni/h5Imp.c +++ b/java/src/jni/h5Imp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5aImp.c b/java/src/jni/h5aImp.c index 5af8aae..5445904 100644 --- a/java/src/jni/h5aImp.c +++ b/java/src/jni/h5aImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c index ed1db41..9765dc8 100644 --- a/java/src/jni/h5dImp.c +++ b/java/src/jni/h5dImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5eImp.c b/java/src/jni/h5eImp.c index 6e05515..05a7848 100644 --- a/java/src/jni/h5eImp.c +++ b/java/src/jni/h5eImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5fImp.c b/java/src/jni/h5fImp.c index 058ba26..4f0e569 100644 --- a/java/src/jni/h5fImp.c +++ b/java/src/jni/h5fImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5gImp.c b/java/src/jni/h5gImp.c index c40ed64..d724475 100644 --- a/java/src/jni/h5gImp.c +++ b/java/src/jni/h5gImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5iImp.c b/java/src/jni/h5iImp.c index 71e1b71..9c946df 100644 --- a/java/src/jni/h5iImp.c +++ b/java/src/jni/h5iImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5jni.h b/java/src/jni/h5jni.h index 9414d31..cef3bd0 100644 --- a/java/src/jni/h5jni.h +++ b/java/src/jni/h5jni.h @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5lImp.c b/java/src/jni/h5lImp.c index 473b1c7..f7a9df1 100644 --- a/java/src/jni/h5lImp.c +++ b/java/src/jni/h5lImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5oImp.c b/java/src/jni/h5oImp.c index 24f6988..a33d1d7 100644 --- a/java/src/jni/h5oImp.c +++ b/java/src/jni/h5oImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5pImp.c b/java/src/jni/h5pImp.c index f39f0e6..c9bd4aa 100644 --- a/java/src/jni/h5pImp.c +++ b/java/src/jni/h5pImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5plImp.c b/java/src/jni/h5plImp.c index 34d6f8b..09a1032 100644 --- a/java/src/jni/h5plImp.c +++ b/java/src/jni/h5plImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5rImp.c b/java/src/jni/h5rImp.c index 647f973..3dcbb8d 100644 --- a/java/src/jni/h5rImp.c +++ b/java/src/jni/h5rImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ #ifdef __cplusplus diff --git a/java/src/jni/h5sImp.c b/java/src/jni/h5sImp.c index d996ae5..929f6d6 100644 --- a/java/src/jni/h5sImp.c +++ b/java/src/jni/h5sImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5tImp.c b/java/src/jni/h5tImp.c index 1467b41..26f9b5c 100644 --- a/java/src/jni/h5tImp.c +++ b/java/src/jni/h5tImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5util.c b/java/src/jni/h5util.c index 0d2999a..17ed35e 100644 --- a/java/src/jni/h5util.c +++ b/java/src/jni/h5util.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5util.h b/java/src/jni/h5util.h index f690e8b..6194378 100644 --- a/java/src/jni/h5util.h +++ b/java/src/jni/h5util.h @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/h5zImp.c b/java/src/jni/h5zImp.c index 2c8d8c3..247d1cc 100644 --- a/java/src/jni/h5zImp.c +++ b/java/src/jni/h5zImp.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ diff --git a/java/src/jni/nativeData.c b/java/src/jni/nativeData.c index 8388c99..a123e0f 100644 --- a/java/src/jni/nativeData.c +++ b/java/src/jni/nativeData.c @@ -15,7 +15,7 @@ /* * For details of the HDF libraries, see the HDF Documentation at: - * http://hdfdfgroup.org/HDF5/doc/ + * http://hdfgroup.org/HDF5/doc/ * */ /* -- cgit v0.12 From 606529f5e0cffcea26af66106f094fbe350c5bac Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Wed, 12 Apr 2017 17:21:43 -0500 Subject: Due to HDFVIEW-19 add read VL as string function --- java/src/hdf/hdf5lib/H5.java | 3 ++ java/src/jni/h5dImp.c | 91 ++++++++++++++++++++++++++++++++++++++++++++ java/src/jni/h5dImp.h | 9 +++++ 3 files changed, 103 insertions(+) diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index 0c11846..23e2a34 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -1798,6 +1798,9 @@ public class H5 implements java.io.Serializable { return H5Dread_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true); } + public synchronized static native int H5DreadVL(long dataset_id, long mem_type_id, long mem_space_id, + long file_space_id, long xfer_plist_id, Object[] buf) throws HDF5LibraryException, NullPointerException; + public synchronized static native int H5Dread_string(long dataset_id, long mem_type_id, long mem_space_id, long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException; diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c index 9765dc8..0bb015e 100644 --- a/java/src/jni/h5dImp.c +++ b/java/src/jni/h5dImp.c @@ -55,6 +55,7 @@ extern jobject visit_callback; /* Local Prototypes */ /********************/ +static herr_t H5DreadVL_asstr (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf); static herr_t H5DreadVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf); static herr_t H5DreadVL_array (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf); static herr_t H5DwriteVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf); @@ -994,6 +995,96 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1double /* * Class: hdf_hdf5lib_H5 + * Method: H5DreadVL + * Signature: (JJJJJ[Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL +Java_hdf_hdf5lib_H5_H5DreadVL + (JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id, + jlong file_space_id, jlong xfer_plist_id, jobjectArray buf) +{ + herr_t status = -1; + htri_t isVlenStr=0; + + if (buf == NULL) { + h5nullArgument(env, "H5DreadVL: buf is NULL"); + } /* end if */ + else { + isVlenStr = H5Tdetect_class((hid_t)mem_type_id, H5T_STRING); + + if (isVlenStr) + h5badArgument(env, "H5DreadVL: type is not variable length non-string"); + else + status = H5DreadVL_asstr(env, (hid_t)dataset_id, (hid_t)mem_type_id, + (hid_t)mem_space_id, (hid_t)file_space_id, + (hid_t)xfer_plist_id, buf); + } /* end else */ + + return (jint)status; +} /* end Java_hdf_hdf5lib_H5_H5Dread_1VLStrings */ + +herr_t +H5DreadVL_asstr + (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf) +{ + jint i; + jint n; + jstring jstr; + h5str_t h5str; + hvl_t *rdata; + size_t size; + size_t max_len = 0; + herr_t status = -1; + + n = ENVPTR->GetArrayLength(ENVPAR buf); + rdata = (hvl_t*)HDcalloc((size_t)n, sizeof(hvl_t)); + if (rdata == NULL) { + h5JNIFatalError(env, "H5DreadVL_notstr: failed to allocate buff for read"); + } /* end if */ + else { + status = H5Dread(did, tid, mem_sid, file_sid, xfer_plist_id, rdata); + + if (status < 0) { + H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata); + HDfree(rdata); + h5JNIFatalError(env, "H5DreadVL_notstr: failed to read data"); + } /* end if */ + else { + max_len = 1; + for (i=0; i < n; i++) { + if ((rdata + i)->len > max_len) + max_len = (rdata + i)->len; + } + + size = H5Tget_size(tid) * max_len; + HDmemset(&h5str, 0, sizeof(h5str_t)); + h5str_new(&h5str, 4 * size); + + if (h5str.s == NULL) { + H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata); + HDfree(rdata); + h5JNIFatalError(env, "H5DreadVL_notstr: failed to allocate buf"); + } /* end if */ + else { + for (i=0; i < n; i++) { + h5str.s[0] = '\0'; + h5str_sprintf(&h5str, did, tid, rdata+i, 0); + jstr = ENVPTR->NewStringUTF(ENVPAR h5str.s); + ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr); + } /* end for */ + h5str_free(&h5str); + + H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata); + HDfree(rdata); + } /* end else */ + } /* end else */ + } /* end else */ + + return status; +} + +/* + * Class: hdf_hdf5lib_H5 * Method: H5Dread_string * Signature: (JJJJJ[Ljava/lang/String;)I */ diff --git a/java/src/jni/h5dImp.h b/java/src/jni/h5dImp.h index eb26265..e79c590 100644 --- a/java/src/jni/h5dImp.h +++ b/java/src/jni/h5dImp.h @@ -206,6 +206,15 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1double /* * Class: hdf_hdf5lib_H5 + * Method: H5DreadVL + * Signature: (JJJJJ[Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL +Java_hdf_hdf5lib_H5_H5DreadVL +(JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray); + +/* + * Class: hdf_hdf5lib_H5 * Method: H5Dread_string * Signature: (JJJJJ[Ljava/lang/String;)I */ -- cgit v0.12 From 3d1b227a67b557da247f6b683f58617b6d75bfdb Mon Sep 17 00:00:00 2001 From: Vailin Choi Date: Thu, 13 Apr 2017 02:47:23 -0500 Subject: Skip tests for page buffering in test/fheap.c for parallel build Skip the two tests for page buffering in test/fheap.c because this feature is disabled in parallel. Activate full testing when this feature is re-enabled in the future for parallel build. --- test/fheap.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/fheap.c b/test/fheap.c index d2a7900..e741aad 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -16388,14 +16388,23 @@ main(void) /* * Caution when turning on ExpressMode 0: - * It will activate testing with different combinations of + * It will activate testing with different combinations of * page buffering and file space strategy and the * running time will be long. + * For parallel build, the last two tests for page buffering + * are skipped because this feature is disabled in parallel. + * Activate full testing when this feature is re-enabled + * in the future for parallel build. */ if(ExpressMode > 1) HDprintf("***Express test mode on. Some tests may be skipped\n"); - else if(ExpressMode == 0) + else if(ExpressMode == 0) { +#ifdef H5_HAVE_PARALLEL + num_pb_fs = NUM_PB_FS - 2; +#else num_pb_fs = NUM_PB_FS; +#endif + } /* Initialize heap creation parameters */ init_small_cparam(&small_cparam); -- cgit v0.12