summaryrefslogtreecommitdiffstats
path: root/testpar
diff options
context:
space:
mode:
Diffstat (limited to 'testpar')
-rw-r--r--testpar/t_filters_parallel.c614
-rw-r--r--testpar/t_select_io_dset.c641
2 files changed, 770 insertions, 485 deletions
diff --git a/testpar/t_filters_parallel.c b/testpar/t_filters_parallel.c
index 7dfb8bc..6c05408 100644
--- a/testpar/t_filters_parallel.c
+++ b/testpar/t_filters_parallel.c
@@ -69,10 +69,11 @@ typedef enum num_chunks_written_t {
typedef void (*test_func)(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id, hid_t dcpl_id,
hid_t dxpl_id, test_mode_t test_mode);
-static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
-static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
- num_chunks_written_t chunks_written);
-static void verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id);
+static herr_t set_dcpl_filter(hid_t dcpl_id, H5Z_filter_t filter_id, filter_options_t *filter_options);
+static void verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
+ num_chunks_written_t chunks_written);
+static void verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id);
static const char *test_mode_to_string(test_mode_t test_mode);
static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t type_id, hid_t filespace_id,
@@ -80,9 +81,11 @@ static void create_datasets(hid_t parent_obj_id, const char *dset_name, hid_t ty
static void open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test_mode_t test_mode,
hid_t *dset_ids);
static void write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
- hid_t *fspace_ids, hid_t dxpl_id, const void **bufs, test_mode_t test_mode);
+ hid_t *fspace_ids, hid_t dcpl_id, hid_t dxpl_id, const void **bufs,
+ test_mode_t test_mode, bool any_io, bool collective, bool overwrite);
static void read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode);
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool all_uninit_read);
static void select_hyperslab(size_t num_dsets, hid_t *dset_ids, hsize_t *start, hsize_t *stride,
hsize_t *count, hsize_t *block, hid_t *fspace_ids);
@@ -471,11 +474,15 @@ verify_space_alloc_status(size_t num_dsets, hid_t *dset_ids, hid_t dcpl_id,
* I/O was performed.
*/
static void
-verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
+verify_chunk_opt_status(size_t num_dsets, test_mode_t test_mode, bool any_io, bool any_filters,
+ bool collective, bool unalloc_read, bool did_alloc, hid_t dxpl_id)
{
H5D_mpio_actual_chunk_opt_mode_t chunk_opt_mode;
H5D_selection_io_mode_t sel_io_mode;
+ uint32_t actual_sel_io_mode;
+ uint32_t actual_sel_io_mode_reduced;
uint32_t no_sel_io_cause = 0;
+ int mpi_code;
herr_t ret;
if (H5P_DEFAULT != dxpl_id) {
@@ -528,6 +535,95 @@ verify_chunk_opt_status(size_t num_dsets, hid_t dxpl_id)
"verified I/O optimization was linked-chunk I/O");
}
}
+
+ /* Verify actual selection I/O mode */
+ ret = H5Pget_actual_selection_io_mode(dxpl_id, &actual_sel_io_mode);
+ VRFY((ret >= 0), "H5Pget_actual_selection_io_mode succeeded");
+
+ /* Reduce results to process 0 (bitwise OR so we get all I/O types) */
+ mpi_code =
+ MPI_Reduce(&actual_sel_io_mode, &actual_sel_io_mode_reduced, 1, MPI_UINT32_T, MPI_BOR, 0, comm);
+ VRFY((MPI_SUCCESS == mpi_code), "MPI_Reduce succeeded");
+
+ /* Verify selection I/O mode on rank 0 */
+ if (mpi_rank == 0) {
+ /* No actual I/O performed, only reported I/O will be from allocation, even if "no" datasets were
+ * involved (num_dsets == 0 implies the call was expected to fail, but it fails after allocation).
+ * Also if the test mode is mixed filtered and unfiltered and the call did not fail, then there
+ * will always be an I/O callback made with raw data. This is because unfiltered datasets fall
+ * back to scalar I/O when mixed with filtered, and scalar I/O reports an I/O call was made even
+ * with a size of 0 bytes, while vector I/O does not report I/O was made if passed 0 vector
+ * elements (because no elements were raw data), which is what happens when performing I/O on a
+ * filtered dataset with no selection. Vector I/O does report an I/O call was made if passed a raw
+ * data element of size 0, so this is consistent. */
+ if (!any_io) {
+ if (did_alloc || (num_dsets > 0 && test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED))
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ }
+ /* No filters, library should have used selection I/O if enabled, scalar I/O otherwise */
+ else if (!any_filters) {
+ assert(!unalloc_read && !did_alloc);
+ if (sel_io_mode == H5D_SELECTION_IO_MODE_DEFAULT || sel_io_mode == H5D_SELECTION_IO_MODE_ON)
+ VRFY(H5D_SELECTION_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was selection I/O");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ /* Independent I/O, library should have done no I/O if reading from unallocated datasets, scalar
+ * I/O otherwise, since filtered I/O is only supported with scalar I/O in independent/serial */
+ else if (!collective) {
+ if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ }
+ else
+ switch (test_mode) {
+ case USE_SINGLE_DATASET:
+ case USE_MULTIPLE_DATASETS:
+ /* Collective case with only filtered datasets. If we performed allocation then there
+ * should be scalar I/O for allocation in addition to vector I/O for the actual data.
+ * If we're reading from an unallocated dataset then there should be no actual I/O.
+ * Otherwise there should only be vector I/O. */
+ if (did_alloc)
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ else if (unalloc_read)
+ VRFY(0 == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was 0 (no I/O)");
+ else
+ VRFY(H5D_VECTOR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was vector I/O");
+ break;
+
+ case USE_MULTIPLE_DATASETS_MIXED_FILTERED:
+ /* Collective case with mixed filtered and unfiltered datasets. If we're reading from
+ * a unallocated datasets then there should be scalar I/O from reading the unfilitered
+ * datasets, since they are always allocated in parallel. Otherwise there should be
+ * vector I/O from the filtered datasets and scalar I/O from the unfiltered datasets.
+ */
+ if (unalloc_read)
+ VRFY(H5D_SCALAR_IO == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar I/O");
+ else
+ VRFY((H5D_SCALAR_IO | H5D_VECTOR_IO) == actual_sel_io_mode_reduced,
+ "verified actual selection I/O mode was scalar and vector I/O");
+ break;
+
+ case TEST_MODE_SENTINEL:
+ default:
+ printf("Invalid test mode\n");
+ fflush(stdout);
+ MPI_Abort(MPI_COMM_WORLD, -1);
+ }
+ }
}
}
@@ -707,10 +803,12 @@ open_datasets(hid_t parent_obj_id, const char *dset_name, size_t num_dsets, test
*/
static void
write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t *fspace_ids,
- hid_t dxpl_id, const void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, const void **bufs, test_mode_t test_mode, bool any_io,
+ bool collective, bool overwrite)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -738,7 +836,11 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (!overwrite)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective, false,
+ !overwrite && (alloc_time == H5D_ALLOC_TIME_LATE), dxpl_id);
}
/*
@@ -747,11 +849,13 @@ write_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id
*/
static void
read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id, hid_t fspace_id,
- hid_t dxpl_id, void **bufs, test_mode_t test_mode)
+ hid_t dcpl_id, hid_t dxpl_id, void **bufs, test_mode_t test_mode, bool any_io, bool collective,
+ bool all_uninit_read)
{
- hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
- hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_type_ids[MAX_NUM_DSETS_MULTI];
+ hid_t mem_space_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_space_ids[MAX_NUM_DSETS_MULTI];
+ H5D_alloc_time_t alloc_time = H5D_ALLOC_TIME_DEFAULT;
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
mem_type_ids[dset_idx] = type_id;
@@ -780,7 +884,13 @@ read_datasets(size_t num_dsets, hid_t *dset_ids, hid_t type_id, hid_t mspace_id,
MPI_Abort(MPI_COMM_WORLD, -1);
}
- verify_chunk_opt_status(num_dsets, dxpl_id);
+ if (all_uninit_read)
+ VRFY(H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0, "H5Pget_alloc_time succeeded");
+
+ verify_chunk_opt_status(num_dsets, test_mode, any_io, true, collective,
+ all_uninit_read &&
+ (alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE),
+ false, dxpl_id);
}
static void
@@ -954,8 +1064,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -987,7 +1097,8 @@ test_write_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t fil
(C_DATATYPE)dset_idx;
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1108,8 +1219,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1138,7 +1249,8 @@ test_write_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fi
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1265,8 +1377,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1303,7 +1415,8 @@ test_write_filtered_dataset_no_overlap_partial(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1424,8 +1537,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -1456,7 +1569,8 @@ test_write_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filte
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -1593,8 +1707,8 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1608,8 +1722,8 @@ test_write_filtered_dataset_single_unlim_dim_no_overlap(const char *parent_group
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -1759,8 +1873,8 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1774,8 +1888,8 @@ test_write_filtered_dataset_single_unlim_dim_overlap(const char *parent_group, H
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -1931,8 +2045,8 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -1946,8 +2060,8 @@ test_write_filtered_dataset_multi_unlim_dim_no_overlap(const char *parent_group,
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -2106,8 +2220,8 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -2121,8 +2235,8 @@ test_write_filtered_dataset_multi_unlim_dim_overlap(const char *parent_group, H5
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Verify the correct data was written */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -2175,28 +2289,31 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
hid_t fapl_id, hid_t dcpl_id, hid_t dxpl_id,
test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t sel_dims[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t start[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t stride[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t count[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t block[WRITE_SINGLE_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with a single process having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2276,8 +2393,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, mpi_size > 1, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2317,7 +2434,8 @@ test_write_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fi
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, mpi_size == 1 && alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2355,23 +2473,26 @@ static void
test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id,
hid_t dcpl_id, hid_t dxpl_id, test_mode_t test_mode)
{
- C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
- const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
- void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
- void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
- hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
- size_t data_size, correct_buf_size;
- size_t num_dsets;
- hid_t dset_ids[MAX_NUM_DSETS_MULTI];
- hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
- hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
- hid_t group_id = H5I_INVALID_HID;
- hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
+ C_DATATYPE *correct_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ const void *data_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ void *data_bufs_nc[MAX_NUM_DSETS_MULTI] = {0}; /* non-const buffer pointers for freeing */
+ void *read_bufs[MAX_NUM_DSETS_MULTI] = {0};
+ hsize_t dataset_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ hsize_t chunk_dims[WRITE_ALL_NO_SELECTION_FILTERED_CHUNKS_DATASET_DIMS];
+ size_t data_size, correct_buf_size;
+ size_t num_dsets;
+ hid_t dset_ids[MAX_NUM_DSETS_MULTI];
+ hid_t fspace_ids[MAX_NUM_DSETS_MULTI];
+ hid_t file_id = H5I_INVALID_HID, plist_id = H5I_INVALID_HID;
+ hid_t group_id = H5I_INVALID_HID;
+ hid_t filespace = H5I_INVALID_HID;
if (MAINPROCESS)
puts("Testing write to filtered chunks with all processes having no selection");
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
file_id = H5Fopen(filenames[0], H5F_ACC_RDWR, fapl_id);
VRFY((file_id >= 0), "Test file open succeeded");
@@ -2428,8 +2549,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2453,7 +2574,8 @@ test_write_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filte
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, alloc_time == H5D_ALLOC_TIME_INCR);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2570,8 +2692,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2603,7 +2725,8 @@ test_write_filtered_dataset_point_selection(const char *parent_group, H5Z_filter
dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2729,8 +2852,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2771,7 +2894,8 @@ test_write_filtered_dataset_interleaved_write(const char *parent_group, H5Z_filt
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -2908,8 +3032,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
/* Set data transform expression */
VRFY((H5Pset_data_transform(plist_id, "x") >= 0), "Set data transform expression succeeded");
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, plist_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, plist_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -2943,7 +3067,8 @@ test_write_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z
(j / (dataset_dims[0] / (hsize_t)mpi_size * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3072,8 +3197,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3102,7 +3227,8 @@ test_write_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_grou
(C_DATATYPE)((j % (hsize_t)mpi_size) + (j / (hsize_t)mpi_size) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3232,8 +3358,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3262,7 +3388,8 @@ test_write_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3389,8 +3516,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3436,7 +3563,8 @@ test_write_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fi
+ dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3580,7 +3708,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3613,7 +3742,8 @@ test_write_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3758,7 +3888,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id, data_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -3794,7 +3925,8 @@ test_write_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group,
}
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -3853,6 +3985,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to unshared filtered chunks in Compound Datatype dataset with Datatype "
@@ -3887,6 +4020,9 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -3971,7 +4107,7 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -4014,9 +4150,10 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -4042,7 +4179,11 @@ test_write_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_gro
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4122,6 +4263,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
hid_t group_id = H5I_INVALID_HID;
hid_t filetype = H5I_INVALID_HID, memtype = H5I_INVALID_HID;
hid_t filespace = H5I_INVALID_HID;
+ H5D_alloc_time_t alloc_time;
if (MAINPROCESS)
puts("Testing write to shared filtered chunks in Compound Datatype dataset with Datatype conversion");
@@ -4155,6 +4297,9 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
dataset_dims, NULL);
VRFY((filespace >= 0), "File dataspace creation succeeded");
+ /* Retrieve allocation time */
+ VRFY((H5Pget_alloc_time(dcpl_id, &alloc_time) >= 0), "H5Pget_alloc_time succeeded");
+
/* Create chunked dataset */
plist_id = H5Pcopy(dcpl_id);
VRFY((plist_id >= 0), "DCPL copy succeeded");
@@ -4239,7 +4384,7 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
* of the H5Dwrite loop:
*/
/* write_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids,
- dxpl_id, data_bufs, test_mode); */
+ dcpl_id, dxpl_id, data_bufs, test_mode, true, true, false); */
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
herr_t expected = FAIL;
herr_t ret;
@@ -4282,9 +4427,10 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(0, test_mode, false, true, true, false, alloc_time == H5D_ALLOC_TIME_LATE,
+ dxpl_id);
}
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
@@ -4310,7 +4456,11 @@ test_write_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ /* If some writes succeeded (due to mixed filtered mode) or if allocation time is late, then there is data
+ * on disk to be read */
+ read_datasets(num_dsets, dset_ids, memtype, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs, test_mode,
+ true, false,
+ !(test_mode == USE_MULTIPLE_DATASETS_MIXED_FILTERED || alloc_time == H5D_ALLOC_TIME_LATE));
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
hid_t dset_dcpl;
@@ -4475,8 +4625,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4531,8 +4681,8 @@ test_read_one_chunk_filtered_dataset(const char *parent_group, H5Z_filter_t filt
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4695,8 +4845,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4751,8 +4901,8 @@ test_read_filtered_dataset_no_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -4917,8 +5067,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -4973,8 +5123,8 @@ test_read_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5163,8 +5313,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5229,8 +5379,8 @@ test_read_filtered_dataset_single_no_selection(const char *parent_group, H5Z_fil
}
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, mpi_size > 1 ? true : false, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5394,8 +5544,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5438,8 +5588,8 @@ test_read_filtered_dataset_all_no_selection(const char *parent_group, H5Z_filter
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(data_bufs_nc[dset_idx], 0, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, false, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -5582,8 +5732,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5639,8 +5789,8 @@ test_read_filtered_dataset_point_selection(const char *parent_group, H5Z_filter_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -5837,8 +5987,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -5895,8 +6045,8 @@ test_read_filtered_dataset_interleaved_read(const char *parent_group, H5Z_filter
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6078,8 +6228,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6142,8 +6292,8 @@ test_read_3d_filtered_dataset_no_overlap_separate_pages(const char *parent_group
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6335,8 +6485,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
VRFY((H5Pclose(plist_id) >= 0), "DXPL close succeeded");
@@ -6402,8 +6552,8 @@ test_read_transformed_filtered_dataset_no_overlap(const char *parent_group, H5Z_
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6571,8 +6721,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6634,8 +6784,8 @@ test_read_3d_filtered_dataset_no_overlap_same_pages(const char *parent_group, H5
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -6818,8 +6968,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -6879,8 +7029,8 @@ test_read_3d_filtered_dataset_overlap(const char *parent_group, H5Z_filter_t fil
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7088,7 +7238,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7144,7 +7295,8 @@ test_read_cmpd_filtered_dataset_no_conversion_unshared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7338,7 +7490,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7394,7 +7547,8 @@ test_read_cmpd_filtered_dataset_no_conversion_shared(const char *parent_group, H
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7591,7 +7745,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7647,7 +7802,8 @@ test_read_cmpd_filtered_dataset_type_conversion_unshared(const char *parent_grou
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -7850,7 +8006,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs, test_mode);
+ write_datasets(num_dsets, dset_ids, memtype, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT, data_bufs,
+ test_mode, true, false, false);
/* Verify space allocation status */
plist_id = H5Dget_create_plist(dset_ids[0]);
@@ -7906,7 +8063,8 @@ test_read_cmpd_filtered_dataset_type_conversion_shared(const char *parent_group,
VRFY((NULL != read_bufs[dset_idx]), "calloc succeeded");
}
- read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, memtype, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, false, false);
/* Collect each piece of data from all ranks into a global buffer on all ranks */
global_buf = calloc(1, data_size);
@@ -8059,8 +8217,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
select_all(num_dsets, dset_ids, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, H5P_DEFAULT, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, fspace_ids, dcpl_id, H5P_DEFAULT,
+ data_bufs, test_mode, true, false, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8104,7 +8262,8 @@ test_write_serial_read_parallel(const char *parent_group, H5Z_filter_t filter_id
open_datasets(group_id, WRITE_SERIAL_READ_PARALLEL_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8230,8 +8389,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
free(data_bufs_nc[dset_idx]);
@@ -8281,8 +8440,8 @@ test_write_parallel_read_serial(const char *parent_group, H5Z_filter_t filter_id
(j / (dataset_dims[0] * dataset_dims[1])) + dset_idx);
}
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, H5P_DEFAULT, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, H5P_DEFAULT,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], correct_bufs[dset_idx], correct_buf_size)),
@@ -8425,8 +8584,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, i > 0);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -8440,8 +8599,8 @@ test_shrinking_growing_chunks(const char *parent_group, H5Z_filter_t filter_id,
}
}
- read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, H5T_NATIVE_DOUBLE, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8570,8 +8729,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8584,8 +8743,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
/* Verify the correct data was written */
open_datasets(group_id, WRITE_UNSHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8635,8 +8794,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id,
@@ -8652,8 +8811,8 @@ test_edge_chunks_no_overlap(const char *parent_group, H5Z_filter_t filter_id, hi
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8782,8 +8941,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
read_bufs[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8794,8 +8953,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
/* Verify the correct data was written */
open_datasets(group_id, WRITE_SHARED_FILTERED_EDGE_CHUNKS_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8846,8 +9005,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -8861,8 +9020,8 @@ test_edge_chunks_overlap(const char *parent_group, H5Z_filter_t filter_id, hid_t
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
memset(read_bufs[dset_idx], 255, data_size);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids[0], dcpl_id, dxpl_id,
+ read_bufs, test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((0 == memcmp(read_bufs[dset_idx], data_bufs[dset_idx], data_size)),
@@ -8973,7 +9132,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
}
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -9015,8 +9175,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9027,7 +9187,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
/*
* Each MPI rank communicates their written piece of data
@@ -9075,8 +9236,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9087,7 +9248,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9120,7 +9282,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
VRFY((H5Sclose(filespace) >= 0), "File dataspace close succeeded");
/* Read entire dataset and verify that the fill value is returned */
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
for (size_t j = 0; j < read_buf_size / sizeof(C_DATATYPE); j++)
@@ -9155,8 +9318,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
tmp_buf[j] = (C_DATATYPE)(GEN_DATA(j) + dset_idx);
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9167,7 +9330,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t i = 0; i < (size_t)mpi_size; i++) {
recvcounts[i] = (int)(count[1] * block[1]);
@@ -9209,8 +9373,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9221,7 +9385,8 @@ test_fill_values(const char *parent_group, H5Z_filter_t filter_id, hid_t fapl_id
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUES_TEST_DATASET_NAME2, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
@@ -9360,8 +9525,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
* allocation in parallel, so the read should succeed in that case.
*/
if (alloc_time == H5D_ALLOC_TIME_EARLY) {
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs,
- test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
}
else {
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
@@ -9399,9 +9564,11 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
VRFY((ret == expected), "Dataset write");
if (expected == SUCCEED)
- verify_chunk_opt_status(1, dxpl_id);
+ verify_chunk_opt_status(1, test_mode, true, false, true, false, false, dxpl_id);
else
- verify_chunk_opt_status(0, dxpl_id);
+ verify_chunk_opt_status(
+ 0, test_mode, false, true, true,
+ alloc_time == H5D_ALLOC_TIME_INCR || alloc_time == H5D_ALLOC_TIME_LATE, false, dxpl_id);
}
}
@@ -9435,8 +9602,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9446,7 +9613,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9470,8 +9638,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, true);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9482,7 +9650,8 @@ test_fill_value_undefined(const char *parent_group, H5Z_filter_t filter_id, hid_
/* Verify correct data was written */
open_datasets(group_id, FILL_VALUE_UNDEFINED_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
free(data_bufs_nc[dset_idx]);
@@ -9634,7 +9803,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
* yet, because there's no guarantee as to what may have been
* read from the dataset.
*/
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, true);
/*
* Write to part of the first chunk in the dataset with
@@ -9669,8 +9839,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
data_bufs_nc[dset_idx] = tmp_buf;
}
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, SOME_CHUNKS_WRITTEN);
@@ -9681,7 +9851,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++)
VRFY((H5Sclose(fspace_ids[dset_idx]) >= 0), "File dataspace close succeeded");
@@ -9705,8 +9876,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
select_hyperslab(num_dsets, dset_ids, start, stride, count, block, fspace_ids);
- write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dxpl_id, data_bufs,
- test_mode);
+ write_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_BLOCK, fspace_ids, dcpl_id, dxpl_id,
+ data_bufs, test_mode, true, true, false);
/* Verify space allocation status */
verify_space_alloc_status(num_dsets, dset_ids, plist_id, ALL_CHUNKS_WRITTEN);
@@ -9717,7 +9888,8 @@ test_fill_time_never(const char *parent_group, H5Z_filter_t filter_id, hid_t fap
/* Verify correct data was written */
open_datasets(group_id, FILL_TIME_NEVER_TEST_DATASET_NAME, num_dsets, test_mode, dset_ids);
- read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dxpl_id, read_bufs, test_mode);
+ read_datasets(num_dsets, dset_ids, HDF5_DATATYPE_NAME, H5S_ALL, H5S_ALL, dcpl_id, dxpl_id, read_bufs,
+ test_mode, true, true, false);
for (size_t dset_idx = 0; dset_idx < num_dsets; dset_idx++) {
C_DATATYPE *tmp_buf = read_bufs[dset_idx];
diff --git a/testpar/t_select_io_dset.c b/testpar/t_select_io_dset.c
index 2e6839e..2be2b40 100644
--- a/testpar/t_select_io_dset.c
+++ b/testpar/t_select_io_dset.c
@@ -159,7 +159,7 @@ set_dxpl(hid_t dxpl, H5D_selection_io_mode_t select_io_mode, H5FD_mpio_xfer_t mp
} /* set_dxpl() */
/*
- * Helper routine to check actual I/O mode on a dxpl
+ * Helper routine to check actual parallel I/O mode on a dxpl
*/
static void
check_io_mode(hid_t dxpl, unsigned chunked)
@@ -186,29 +186,65 @@ check_io_mode(hid_t dxpl, unsigned chunked)
} /* check_io_mode() */
+static void
+testing_check_io_mode(hid_t dxpl, H5D_mpio_actual_io_mode_t exp_io_mode)
+{
+ H5D_mpio_actual_io_mode_t actual_io_mode;
+
+ if (H5Pget_mpio_actual_io_mode(dxpl, &actual_io_mode) < 0)
+ P_TEST_ERROR;
+
+ if (actual_io_mode != exp_io_mode) {
+ nerrors++;
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect I/O mode (expected/actual) %u:%u", (unsigned)exp_io_mode,
+ (unsigned)actual_io_mode);
+ }
+
+} /* testing_check_io_mode() */
+
+/*
+ * Helper routine to check actual selection I/O mode on a dxpl
+ */
+static void
+check_actual_selection_io_mode(hid_t dxpl, uint32_t sel_io_mode_expected)
+{
+ uint32_t actual_sel_io_mode;
+
+ if (H5Pget_actual_selection_io_mode(dxpl, &actual_sel_io_mode) < 0)
+ P_TEST_ERROR;
+ if (actual_sel_io_mode != sel_io_mode_expected) {
+ if (MAINPROCESS)
+ printf("\n Failed: Incorrect selection I/O mode (expected/actual) %u:%u",
+ (unsigned)sel_io_mode_expected, (unsigned)actual_sel_io_mode);
+ P_TEST_ERROR;
+ }
+}
+
/*
* Case 1: single dataset read/write, no type conversion (null case)
*/
static void
-test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- int wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- int trans_wbuf[DSET_SELECT_DIM];
- int rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2*x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ int wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ int trans_wbuf[DSET_SELECT_DIM];
+ int rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2*x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -224,11 +260,13 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
cdims[0] = DSET_SELECT_CHUNK_DIM;
if (H5Pset_chunk(dcpl, 1, cdims) < 0)
P_TEST_ERROR;
+ if (!dtrans && H5Pset_deflate(dcpl, 2) < 0)
+ P_TEST_ERROR;
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_tconv_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -262,7 +300,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -284,7 +323,14 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (!dtrans || select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+ testing_check_io_mode(dxpl, exp_io_mode);
+
+ if (chunked && !dtrans)
+ check_actual_selection_io_mode(dxpl, H5D_VECTOR_IO);
+ else
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_INT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -327,6 +373,8 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
P_TEST_ERROR;
if (H5Pclose(dxpl) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Pclose(ntrans_dxpl) < 0)
P_TEST_ERROR;
@@ -339,7 +387,7 @@ test_no_type_conv(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
* Case 2: single dataset read/write, no size change, no background buffer
*/
static void
-test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -356,6 +404,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
char *rbuf = NULL;
char dset_name[DSET_NAME_LEN];
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
+
curr_nerrors = nerrors;
if ((wbuf = (char *)malloc((size_t)(4 * DSET_SELECT_DIM))) == NULL)
@@ -379,8 +429,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "no_size_change_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_STD_I32BE, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -416,7 +466,8 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -430,7 +481,11 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (mwbuf)
memcpy(wbuf, wbuf_bak, (size_t)(4 * DSET_SELECT_DIM));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read the data from the dataset with little endian */
if (H5Dread(did, H5T_STD_I32LE, mspace_id, fspace_id, dxpl, rbuf) < 0)
@@ -489,25 +544,26 @@ test_no_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 3: single dataset read/write, larger mem type, no background buffer
*/
static void
-test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- long wbuf[DSET_SELECT_DIM];
- long wbuf_bak[DSET_SELECT_DIM];
- long trans_wbuf[DSET_SELECT_DIM];
- long long rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "100 - x";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ long wbuf[DSET_SELECT_DIM];
+ long wbuf_bak[DSET_SELECT_DIM];
+ long trans_wbuf[DSET_SELECT_DIM];
+ long long rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "100 - x";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -525,8 +581,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "larger_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -560,7 +616,8 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -582,7 +639,11 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_LLONG, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -637,25 +698,26 @@ test_larger_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsign
* Case 4: single dataset reader/write, smaller mem type, no background buffer
*/
static void
-test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
- int i;
- hid_t did = H5I_INVALID_HID;
- hid_t sid = H5I_INVALID_HID;
- hid_t dcpl = H5I_INVALID_HID;
- hid_t dxpl = H5I_INVALID_HID;
- hid_t ntrans_dxpl = H5I_INVALID_HID;
- hid_t fspace_id = H5I_INVALID_HID;
- hid_t mspace_id = H5I_INVALID_HID;
- hsize_t dims[1];
- hsize_t cdims[1];
- hsize_t start[1], stride[1], count[1], block[1];
- short wbuf[DSET_SELECT_DIM];
- int wbuf_bak[DSET_SELECT_DIM];
- short trans_wbuf[DSET_SELECT_DIM];
- short rbuf[DSET_SELECT_DIM];
- char dset_name[DSET_NAME_LEN];
- const char *expr = "2 * (10 + x)";
+ int i;
+ hid_t did = H5I_INVALID_HID;
+ hid_t sid = H5I_INVALID_HID;
+ hid_t dcpl = H5I_INVALID_HID;
+ hid_t dxpl = H5I_INVALID_HID;
+ hid_t ntrans_dxpl = H5I_INVALID_HID;
+ hid_t fspace_id = H5I_INVALID_HID;
+ hid_t mspace_id = H5I_INVALID_HID;
+ hsize_t dims[1];
+ hsize_t cdims[1];
+ hsize_t start[1], stride[1], count[1], block[1];
+ short wbuf[DSET_SELECT_DIM];
+ int wbuf_bak[DSET_SELECT_DIM];
+ short trans_wbuf[DSET_SELECT_DIM];
+ short rbuf[DSET_SELECT_DIM];
+ char dset_name[DSET_NAME_LEN];
+ const char *expr = "2 * (10 + x)";
+ H5D_mpio_actual_io_mode_t exp_io_mode = H5D_MPIO_NO_COLLECTIVE;
curr_nerrors = nerrors;
@@ -673,8 +735,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "smaller_no_bkg_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d chunked dataset with/without data transform */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -708,7 +770,8 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -731,7 +794,11 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
if (mwbuf)
memcpy(wbuf, wbuf_bak, sizeof(wbuf));
- check_io_mode(dxpl, chunked);
+ if (select)
+ exp_io_mode = chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+
+ testing_check_io_mode(dxpl, exp_io_mode);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread(did, H5T_NATIVE_SHORT, mspace_id, fspace_id, ntrans_dxpl, rbuf) < 0)
@@ -804,7 +871,7 @@ test_smaller_mem_type_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsig
* Verify the values read
*/
static void
-test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -870,8 +937,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
/* Case 5(a) */
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s", chunked ? "chunked" : "contig",
- mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "cmpd_with_bkg_%s_%s_%s", chunked ? "chunked" : "contig",
+ select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create 1d dataset */
if ((did = H5Dcreate2(fid, dset_name, s1_tid, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -907,7 +974,8 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Copy wbuf if the library will be modifying it */
if (mwbuf)
@@ -917,12 +985,12 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dwrite(did, s1_tid, mspace_id, fspace_id, dxpl, s1_wbuf) < 0)
P_TEST_ERROR;
+ check_io_mode(dxpl, chunked);
+
/* Restore wbuf from backup if the library modified it */
if (mwbuf)
memcpy(s1_wbuf, s1_wbuf_bak, sizeof(s1_t) * DSET_SELECT_DIM);
- check_io_mode(dxpl, chunked);
-
/* Read all the data from the dataset */
memset(s1_rbuf, 0, sizeof(s1_t) * DSET_SELECT_DIM);
if (H5Dread(did, s1_tid, mspace_id, fspace_id, dxpl, s1_rbuf) < 0)
@@ -1094,6 +1162,10 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
if (H5Tclose(ss_bc_tid) < 0)
P_TEST_ERROR;
+ if (H5Pclose(dxpl) < 0)
+ P_TEST_ERROR;
+ if (H5Pclose(dcpl) < 0)
+ P_TEST_ERROR;
if (H5Dclose(did) < 0)
P_TEST_ERROR;
@@ -1115,7 +1187,7 @@ test_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Case 6: Type conversions + some processes have null/empty selections in datasets
*/
static void
-test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
int i;
hid_t did = H5I_INVALID_HID;
@@ -1158,8 +1230,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
}
/* Generate dataset name */
- snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s", chunked ? "chunked" : "contig",
- dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_name, sizeof(dset_name), "tconv_sel_empty_%s_%s_%s_%s", chunked ? "chunked" : "contig",
+ dtrans ? "xform" : "noxform", select ? "sel" : "nosel", mwbuf ? "mwbuf" : "nomwbuf");
/* Create dataset */
if ((did = H5Dcreate2(fid, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
@@ -1170,7 +1242,8 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1210,7 +1283,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
/* Create a memory dataspace */
if ((mspace_id = H5Screate_simple(1, block, NULL)) < 0)
P_TEST_ERROR;
- if (mpi_rank) {
+ if (!MAINPROCESS) {
if (H5Sselect_none(mspace_id) < 0)
P_TEST_ERROR;
}
@@ -1227,7 +1300,13 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
if (mwbuf)
memcpy(lwbuf, lwbuf_bak, sizeof(lwbuf));
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+
+ /* If not using selection I/O then the main process will do scalar I/O and others will do none */
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : (MAINPROCESS ? H5D_SCALAR_IO : 0));
/* Read the data from the dataset: type conversion int-->long */
/* If dtrans, without data transform set in dxpl */
@@ -1395,7 +1474,7 @@ test_type_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned
* Datatype for all datasets: H5T_NATIVE_LONG
*/
static void
-test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -1410,6 +1489,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
hid_t mem_sids[MULTI_NUM_DSETS];
hid_t mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv = false;
+
char dset_names[MULTI_NUM_DSETS][DSET_NAME_LEN];
hid_t dset_dids[MULTI_NUM_DSETS];
@@ -1457,7 +1538,8 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -1469,17 +1551,24 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
/* Set up file space ids and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
+ bool tconv;
+
if ((file_sids[i] = H5Screate_simple(1, dims, NULL)) < 0)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
+
+ /* Flip a coin to see if we're doing type conversion */
+ tconv = HDrandom() % 2;
+ if (tconv)
+ any_tconv = true;
/* Create ith dataset */
- if ((dset_dids[i] =
- H5Dcreate2(fid, dset_names[i], ((HDrandom() % 2) ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
- file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+ if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], (tconv ? H5T_NATIVE_LONG : H5T_NATIVE_INT),
+ file_sids[i], H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
@@ -1555,7 +1644,12 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, ndsets * DSET_SELECT_DIM * sizeof(int));
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion or transform and not using selection I/O there will be no collective I/O,
+ * since type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, ((any_tconv || dtrans) && !select)
+ ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset (if dtrans, without data transform set in dxpl) */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, ntrans_dxpl, rbufs) < 0)
@@ -1708,7 +1802,7 @@ test_multi_dsets_no_bkg(hid_t fid, unsigned chunked, unsigned dtrans, unsigned m
* --Verify values read
*/
static void
-test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -1769,7 +1863,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Each process takes x number of elements */
block[0] = dims[0] / (hsize_t)mpi_size;
@@ -1794,8 +1889,8 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_cmpd_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] =
@@ -1860,6 +1955,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
@@ -2164,7 +2260,7 @@ test_multi_dsets_cmpd_with_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* Datatype for all datasets: H5T_STD_I16BE
*/
static void
-test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2222,7 +2318,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set up file space ids, mem space ids, and dataset ids */
for (i = 0; i < (int)ndsets; i++) {
@@ -2230,8 +2327,8 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_size_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect", mwbuf ? "mwbuf" : "nomwbuf");
/* Create ith dataset */
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_STD_I32BE, file_sids[i], H5P_DEFAULT, dcpl,
@@ -2301,6 +2398,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
check_io_mode(dxpl, chunked);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Read data from the dataset */
if (H5Dread_multi(ndsets, dset_dids, mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
@@ -2510,7 +2608,7 @@ test_multi_dsets_size_change_no_bkg(hid_t fid, unsigned chunked, unsigned mwbuf)
* --this will trigger type conversion for (a), (b) & (c)
*/
static void
-test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned mwbuf)
+test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j;
@@ -2568,7 +2666,8 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
if ((ntrans_dxpl = H5Pcopy(dxpl)) < 0)
P_TEST_ERROR;
@@ -2584,8 +2683,9 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
P_TEST_ERROR;
/* Generate dataset name */
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s", i,
- chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_sel_dset%d_%s_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", dtrans ? "xform" : "noxform", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if (i == 0) {
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
@@ -2769,7 +2869,11 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
if (mwbuf)
memcpy(total_wbuf, total_wbuf_bak, buf_size);
- check_io_mode(dxpl, chunked);
+ /* If not using selection I/O there will be no collective I/O, since type conversion is unsupported by
+ * legacy collective I/O */
+ testing_check_io_mode(
+ dxpl, select ? (chunked ? H5D_MPIO_CHUNK_COLLECTIVE : H5D_MPIO_CONTIGUOUS_COLLECTIVE) : 0);
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Initialize buffer indices */
for (i = 0; i < (int)ndsets; i++) {
@@ -2903,7 +3007,7 @@ test_multi_dsets_conv_sel_empty(hid_t fid, unsigned chunked, unsigned dtrans, un
* --fields 'b' and 'd' are (DSET_SELECT_DIM + j + start[0])
*/
static void
-test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
+test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned select, unsigned mwbuf)
{
size_t ndsets;
int i, j, mm;
@@ -2920,6 +3024,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
hid_t mem_tids[MULTI_NUM_DSETS];
hid_t r_mem_tids[MULTI_NUM_DSETS];
+ bool any_tconv;
+
multi_dset_type_t dset_types[MULTI_NUM_DSETS];
hid_t s1_tid = H5I_INVALID_HID;
@@ -2978,7 +3084,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
P_TEST_ERROR;
/* Set selection I/O mode, type of I/O and type of collective I/O */
- set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, mwbuf);
+ set_dxpl(dxpl, select ? H5D_SELECTION_IO_MODE_ON : H5D_SELECTION_IO_MODE_OFF, H5FD_MPIO_COLLECTIVE,
+ H5FD_MPIO_COLLECTIVE_IO, mwbuf);
/* Set dataset layout: contiguous or chunked */
dims[0] = DSET_SELECT_DIM;
@@ -3039,24 +3146,27 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mm = HDrandom() % (int)ndsets;
if (mm == 0) {
dset_types[i] = DSET_WITH_NO_CONV;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_nconv_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_INT, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else if (mm == 1) {
dset_types[i] = DSET_WITH_CONV_AND_NO_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_nbkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], H5T_NATIVE_LONG, file_sids[i], H5P_DEFAULT,
dcpl, H5P_DEFAULT)) < 0)
P_TEST_ERROR;
}
else {
dset_types[i] = DSET_WITH_CONV_AND_BKG;
- snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s", i,
- chunked ? "chunked" : "contig", mwbuf ? "mwbuf" : "nomwbuf");
+ snprintf(dset_names[i], sizeof(dset_names[i]), "multi_all_conv_bkg_dset%d_%s_%s_%s", i,
+ chunked ? "chunked" : "contig", select ? "select" : "noselect",
+ mwbuf ? "mwbuf" : "nomwbuf");
if ((dset_dids[i] = H5Dcreate2(fid, dset_names[i], s1_tid, file_sids[i], H5P_DEFAULT, dcpl,
H5P_DEFAULT)) < 0)
P_TEST_ERROR;
@@ -3119,6 +3229,8 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
/* Test with s settings for ndsets */
for (s = SETTING_A; s <= SETTING_B; s++) {
+ any_tconv = false;
+
/* for i ndsets */
for (i = 0; i < (int)ndsets; i++) {
@@ -3171,6 +3283,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
mem_tids[i] = H5T_NATIVE_LONG;
r_mem_tids[i] = H5T_NATIVE_SHORT;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
break;
@@ -3194,6 +3309,9 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
}
mem_tids[i] = s1_tid;
r_mem_tids[i] = s3_tid;
+
+ /* There is type conversion in the read op */
+ any_tconv = true;
}
else if (s == SETTING_B) {
/* Initialize buffer indices */
@@ -3246,7 +3364,12 @@ test_multi_dsets_all(int niter, hid_t fid, unsigned chunked, unsigned mwbuf)
if (H5Dread_multi(ndsets, dset_dids, r_mem_tids, mem_sids, file_sids, dxpl, rbufs) < 0)
P_TEST_ERROR;
- check_io_mode(dxpl, chunked);
+ /* If doing type conversion and not using selection I/O there will be no collective I/O, since
+ * type conversion is unsupported by legacy collective I/O */
+ testing_check_io_mode(dxpl, (any_tconv && !select) ? 0
+ : (chunked ? H5D_MPIO_CHUNK_COLLECTIVE
+ : H5D_MPIO_CONTIGUOUS_COLLECTIVE));
+ check_actual_selection_io_mode(dxpl, select ? H5D_SELECTION_IO : H5D_SCALAR_IO);
/* Verify result read */
/* for i ndsets */
@@ -3422,6 +3545,8 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
P_TEST_ERROR;
+ set_dxpl(dxpl, H5D_SELECTION_IO_MODE_ON, H5FD_MPIO_COLLECTIVE, H5FD_MPIO_COLLECTIVE_IO, false);
+
if ((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
P_TEST_ERROR;
@@ -3442,20 +3567,12 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
/* Datatype conversion */
if (test_mode & TEST_DATATYPE_CONVERSION) {
- /* With one exception, all will land at H5FD__mpio_read/write_selection().
- * As the xfer mode is H5FD_MPIO_INDEPENDENT, this will call
- * H5FD__read/write_from_selection() triggering H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB.
- */
- no_selection_io_cause_read_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ /* With one exception, all will land at H5FD__mpio_read/write_selection() */
- /* Exception case: This will turn off selection I/O landing at H5FD__mpio_write() */
- if ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))
- no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
- else
- no_selection_io_cause_write_expected |= H5D_SEL_IO_NO_VECTOR_OR_SELECTION_IO_CB;
+ if (test_mode & TEST_IN_PLACE_TCONV)
+ if (H5Pset_modify_write_buf(dxpl, true) < 0)
+ P_TEST_ERROR;
- if (H5Pset_selection_io(dxpl, H5D_SELECTION_IO_MODE_ON) < 0)
- P_TEST_ERROR;
tid = H5T_NATIVE_UINT;
/* If we're testing a too small tconv buffer, set the buffer to be too small */
@@ -3463,11 +3580,13 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Pset_buffer(dxpl, sizeof(int), NULL, NULL) < 0)
P_TEST_ERROR;
- if (test_mode & TEST_IN_PLACE_TCONV) {
- if (H5Pset_modify_write_buf(dxpl, true) < 0)
- P_TEST_ERROR;
- }
- /* In-place type conversion for read doesn't require modify_write_buf */
+ /* Exception case: When the type conversion buffer is too small and we're not allowing the library
+ * to modify the write buffer, the library will fall back to scalar independent I/O since the
+ * selection I/O path with type conversion requires a full size conversion buffer */
+ if (!(test_mode & TEST_IN_PLACE_TCONV))
+ /* In-place type conversion for read doesn't require modify_write_buf, so the read will still
+ * use selection I/O */
+ no_selection_io_cause_write_expected |= H5D_SEL_IO_TCONV_BUF_TOO_SMALL;
}
}
@@ -3493,6 +3612,10 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
if (H5Dwrite(did, tid, H5S_ALL, H5S_ALL, dxpl, wbuf) < 0)
P_TEST_ERROR;
+ if (!(test_mode & TEST_DISABLE_BY_API || test_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET ||
+ ((test_mode & TEST_TCONV_BUF_TOO_SMALL) && !(test_mode & TEST_IN_PLACE_TCONV))))
+ check_actual_selection_io_mode(dxpl, H5D_SELECTION_IO);
+
if (H5Pget_no_selection_io_cause(dxpl, &no_selection_io_cause_write) < 0)
P_TEST_ERROR;
@@ -3535,9 +3658,6 @@ test_no_selection_io_cause_mode(const char *filename, hid_t fapl, uint32_t test_
static void
test_get_no_selection_io_cause(const char *filename, hid_t fapl)
{
- hid_t dxpl = H5I_INVALID_HID;
- H5D_selection_io_mode_t selection_io_mode;
-
if (MAINPROCESS) {
printf("\n");
TESTING("for H5Pget_no_selection_io_cause()");
@@ -3545,21 +3665,6 @@ test_get_no_selection_io_cause(const char *filename, hid_t fapl)
curr_nerrors = nerrors;
- if ((dxpl = H5Pcreate(H5P_DATASET_XFER)) < 0)
- P_TEST_ERROR;
- if (H5Pget_selection_io(dxpl, &selection_io_mode) < 0)
- P_TEST_ERROR;
- if (H5Pclose(dxpl) < 0)
- P_TEST_ERROR;
-
- /* The following tests are based on H5D_SELECTION_IO_MODE_DEFAULT as the
- * default setting in the library; skip the tests if that is not true */
- if (selection_io_mode != H5D_SELECTION_IO_MODE_DEFAULT) {
- if (MAINPROCESS)
- SKIPPED();
- return;
- }
-
test_no_selection_io_cause_mode(filename, fapl, TEST_DISABLE_BY_API);
test_no_selection_io_cause_mode(filename, fapl, TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET);
test_no_selection_io_cause_mode(filename, fapl, TEST_DATATYPE_CONVERSION);
@@ -3952,6 +4057,7 @@ main(int argc, char *argv[])
int test_select_config;
unsigned chunked;
unsigned dtrans;
+ unsigned select;
unsigned mwbuf;
h5_reset();
@@ -3978,163 +4084,170 @@ main(int argc, char *argv[])
/* therefore, not all tests are run with data transform */
for (dtrans = false; dtrans <= true; dtrans++) {
- /* Test with and without modify_write_buf turned on */
- for (mwbuf = false; mwbuf <= true; mwbuf++) {
-
- if (MAINPROCESS) {
- /* Print configuration message */
- printf("Testing for selection I/O ");
- if (chunked)
- printf("with chunked dataset, ");
- else
- printf("with contiguous dataset, ");
- if (dtrans)
- printf("data transform, ");
- else
- printf("without data transform, ");
- if (mwbuf)
- printf("and with modifying write buffers\n");
- else
- printf("and without modifying write buffers\n");
- }
+ for (select = false; select <= true; select++) {
+
+ /* Test with and without modify_write_buf turned on */
+ for (mwbuf = false; mwbuf <= true; mwbuf++) {
+
+ if (MAINPROCESS) {
+ /* Print configuration message */
+ printf("Testing for selection I/O ");
+ if (chunked)
+ printf("with chunked dataset, ");
+ else
+ printf("with contiguous dataset, ");
+ if (dtrans)
+ printf("data transform, ");
+ else
+ printf("without data transform, ");
+ if (select)
+ printf("selection I/O ON, ");
+ else
+ printf("selection I/O OFF, ");
+ if (mwbuf)
+ printf("and with modifying write buffers\n");
+ else
+ printf("and without modifying write buffers\n");
+ }
+
+ for (test_select_config = (int)TEST_NO_TYPE_CONV;
+ test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+
+ switch (test_select_config) {
+
+ case TEST_NO_TYPE_CONV: /* case 1 */
+ if (MAINPROCESS)
+ TESTING_2("No type conversion (null case)");
- for (test_select_config = (int)TEST_NO_TYPE_CONV;
- test_select_config < (int)TEST_SELECT_NTESTS; test_select_config++) {
+ test_no_type_conv(fid, chunked, dtrans, select, mwbuf);
- switch (test_select_config) {
+ break;
- case TEST_NO_TYPE_CONV: /* case 1 */
- if (MAINPROCESS)
- TESTING_2("No type conversion (null case)");
+ case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
+ if (MAINPROCESS)
+ TESTING_2("No size change, no background buffer");
- test_no_type_conv(fid, chunked, dtrans, mwbuf);
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_no_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_NO_SIZE_CHANGE_NO_BKG: /* case 2 */
- if (MAINPROCESS)
- TESTING_2("No size change, no background buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_LARGER_MEM_NO_BKG: /* case 3 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_no_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("Larger memory type, no background buffer");
- break;
+ test_larger_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_LARGER_MEM_NO_BKG: /* case 3 */
- if (MAINPROCESS)
- TESTING_2("Larger memory type, no background buffer");
-
- test_larger_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
-
- break;
+ break;
- case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
- if (MAINPROCESS)
- TESTING_2("Smaller memory type, no background buffer");
+ case TEST_SMALLER_MEM_NO_BKG: /* case 4 */
+ if (MAINPROCESS)
+ TESTING_2("Smaller memory type, no background buffer");
- test_smaller_mem_type_no_bkg(fid, chunked, dtrans, mwbuf);
+ test_smaller_mem_type_no_bkg(fid, chunked, dtrans, select, mwbuf);
- break;
+ break;
- case TEST_CMPD_WITH_BKG: /* case 5 */
- if (MAINPROCESS)
- TESTING_2("Compound types with background buffer");
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_CMPD_WITH_BKG: /* case 5 */
if (MAINPROCESS)
- SKIPPED();
- continue;
- }
-
- test_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("Compound types with background buffer");
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ continue;
+ }
- break;
+ test_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
- if (MAINPROCESS)
- TESTING_2("Empty selections + Type conversion");
+ break;
- test_type_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_TYPE_CONV_SEL_EMPTY: /* case 6 */
+ if (MAINPROCESS)
+ TESTING_2("Empty selections + Type conversion");
- break;
+ test_type_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_NO_BKG: /* case 7 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + no bkg buffer");
+ break;
- test_multi_dsets_no_bkg(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_NO_BKG: /* case 7 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + no bkg buffer");
- break;
+ test_multi_dsets_no_bkg(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_CONV_BKG: /* case 8 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_BKG: /* case 8 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_cmpd_with_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_cmpd_with_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_CONV_SIZE_CHANGE: /* case 9 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_size_change_no_bkg(fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: type conv + size change + no bkg buffer");
- break;
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_size_change_no_bkg(fid, chunked, select, mwbuf);
- case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: type conv + empty selections");
+ break;
- test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, mwbuf);
+ case TEST_MULTI_CONV_SEL_EMPTY: /* case 10 */
+ if (MAINPROCESS)
+ TESTING_2("multi-datasets: type conv + empty selections");
- break;
+ test_multi_dsets_conv_sel_empty(fid, chunked, dtrans, select, mwbuf);
- case TEST_MULTI_ALL: /* case 11 */
- if (MAINPROCESS)
- TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+ break;
- /* Data transforms does not apply to the dataset datatype for this test */
- if (dtrans) {
+ case TEST_MULTI_ALL: /* case 11 */
if (MAINPROCESS)
- SKIPPED();
- }
- else
- test_multi_dsets_all(2, fid, chunked, mwbuf);
+ TESTING_2("multi-datasets: no conv + conv without bkg + conv with bkg");
+
+ /* Data transforms does not apply to the dataset datatype for this test */
+ if (dtrans) {
+ if (MAINPROCESS)
+ SKIPPED();
+ }
+ else
+ test_multi_dsets_all(2, fid, chunked, select, mwbuf);
- break;
+ break;
- case TEST_SELECT_NTESTS:
- default:
- P_TEST_ERROR;
- break;
+ case TEST_SELECT_NTESTS:
+ default:
+ P_TEST_ERROR;
+ break;
- } /* end switch */
+ } /* end switch */
- } /* end for test_select_config */
+ } /* end for test_select_config */
- } /* end mwbuf */
+ } /* end mwbuf */
- } /* end dtrans */
- } /* end chunked */
+ } /* end select */
+ } /* end dtrans */
+ } /* end chunked */
if (H5Fclose(fid) < 0)
P_TEST_ERROR;