mirror of https://gitee.com/openkylin/hdf5.git
307 lines
15 KiB
C
307 lines
15 KiB
C
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
|
* Copyright by The HDF Group. *
|
||
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
||
|
* All rights reserved. *
|
||
|
* *
|
||
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||
|
* terms governing use, modification, and redistribution, is contained in *
|
||
|
* the COPYING file, which can be found at the root of the source code *
|
||
|
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
||
|
* If you do not have access to either file, you may request a copy from *
|
||
|
* help@hdfgroup.org. *
|
||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
|
||
|
/* common definitions used by all parallel hdf5 test programs. */
|
||
|
|
||
|
#ifndef PHDF5TEST_H
|
||
|
#define PHDF5TEST_H
|
||
|
|
||
|
#include "testpar.h"
|
||
|
|
||
|
enum H5TEST_COLL_CHUNK_API {API_NONE=0,API_LINK_HARD,
|
||
|
API_MULTI_HARD,API_LINK_TRUE,API_LINK_FALSE,
|
||
|
API_MULTI_COLL,API_MULTI_IND};
|
||
|
|
||
|
#ifndef FALSE
|
||
|
#define FALSE 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef TRUE
|
||
|
#define TRUE 1
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* Constants definitions */
|
||
|
#define DIM0 600 /* Default dataset sizes. */
|
||
|
#define DIM1 1200 /* Values are from a monitor pixel sizes */
|
||
|
#define ROW_FACTOR 8 /* Nominal row factor for dataset size */
|
||
|
#define COL_FACTOR 16 /* Nominal column factor for dataset size */
|
||
|
#define RANK 2
|
||
|
#define DATASETNAME1 "Data1"
|
||
|
#define DATASETNAME2 "Data2"
|
||
|
#define DATASETNAME3 "Data3"
|
||
|
#define DATASETNAME4 "Data4"
|
||
|
#define DATASETNAME5 "Data5"
|
||
|
#define DATASETNAME6 "Data6"
|
||
|
#define DATASETNAME7 "Data7"
|
||
|
#define DATASETNAME8 "Data8"
|
||
|
#define DATASETNAME9 "Data9"
|
||
|
|
||
|
/* point selection order */
|
||
|
#define IN_ORDER 1
|
||
|
#define OUT_OF_ORDER 2
|
||
|
|
||
|
/* Hyperslab layout styles */
|
||
|
#define BYROW 1 /* divide into slabs of rows */
|
||
|
#define BYCOL 2 /* divide into blocks of columns */
|
||
|
#define ZROW 3 /* same as BYCOL except process 0 gets 0 rows */
|
||
|
#define ZCOL 4 /* same as BYCOL except process 0 gets 0 columns */
|
||
|
|
||
|
/* File_Access_type bits */
|
||
|
#define FACC_DEFAULT 0x0 /* default */
|
||
|
#define FACC_MPIO 0x1 /* MPIO */
|
||
|
#define FACC_SPLIT 0x2 /* Split File */
|
||
|
|
||
|
#define DXFER_COLLECTIVE_IO 0x1 /* Collective IO*/
|
||
|
#define DXFER_INDEPENDENT_IO 0x2 /* Independent IO collectively */
|
||
|
/*Constants for collective chunk definitions */
|
||
|
#define SPACE_DIM1 24
|
||
|
#define SPACE_DIM2 4
|
||
|
#define BYROW_CONT 1
|
||
|
#define BYROW_DISCONT 2
|
||
|
#define BYROW_SELECTNONE 3
|
||
|
#define BYROW_SELECTUNBALANCE 4
|
||
|
#define BYROW_SELECTINCHUNK 5
|
||
|
|
||
|
#define DIMO_NUM_CHUNK 4
|
||
|
#define DIM1_NUM_CHUNK 2
|
||
|
#define LINK_TRUE_NUM_CHUNK 2
|
||
|
#define LINK_FALSE_NUM_CHUNK 6
|
||
|
#define MULTI_TRUE_PERCENT 50
|
||
|
#define LINK_TRUE_CHUNK_NAME "h5_link_chunk_true"
|
||
|
#define LINK_FALSE_CHUNK_NAME "h5_link_chunk_false"
|
||
|
#define LINK_HARD_CHUNK_NAME "h5_link_chunk_hard"
|
||
|
#define MULTI_HARD_CHUNK_NAME "h5_multi_chunk_hard"
|
||
|
#define MULTI_COLL_CHUNK_NAME "h5_multi_chunk_coll"
|
||
|
#define MULTI_INDP_CHUNK_NAME "h5_multi_chunk_indp"
|
||
|
|
||
|
#define DSET_COLLECTIVE_CHUNK_NAME "coll_chunk_name"
|
||
|
|
||
|
|
||
|
/*Constants for MPI derived data type generated from span tree */
|
||
|
|
||
|
#define MSPACE1_RANK 1 /* Rank of the first dataset in memory */
|
||
|
#define MSPACE1_DIM 27000 /* Dataset size in memory */
|
||
|
#define FSPACE_RANK 2 /* Dataset rank as it is stored in the file */
|
||
|
#define FSPACE_DIM1 9 /* Dimension sizes of the dataset as it is stored in the file */
|
||
|
#define FSPACE_DIM2 3600 /* We will read dataset back from the file to the dataset in memory with these dataspace parameters. */
|
||
|
#define MSPACE_RANK 2
|
||
|
#define MSPACE_DIM1 9
|
||
|
#define MSPACE_DIM2 3600
|
||
|
#define FHCOUNT0 1 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define FHCOUNT1 768 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define FHSTRIDE0 4 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define FHSTRIDE1 3 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define FHBLOCK0 3 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define FHBLOCK1 2 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define FHSTART0 0 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define FHSTART1 1 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
#define SHCOUNT0 1 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define SHCOUNT1 1 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define SHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define SHSTRIDE1 1 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define SHBLOCK0 3 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define SHBLOCK1 768 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define SHSTART0 4 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define SHSTART1 0 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
#define MHCOUNT0 6912 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define MHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define MHBLOCK0 1 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define MHSTART0 1 /* start of the first dimension of the first hyperslab selection*/
|
||
|
|
||
|
|
||
|
|
||
|
#define RFFHCOUNT0 3 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define RFFHCOUNT1 768 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define RFFHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define RFFHSTRIDE1 1 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define RFFHBLOCK0 1 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define RFFHBLOCK1 1 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define RFFHSTART0 1 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define RFFHSTART1 2 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
|
||
|
#define RFSHCOUNT0 3 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define RFSHCOUNT1 1536 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define RFSHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define RFSHSTRIDE1 1 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define RFSHBLOCK0 1 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define RFSHBLOCK1 1 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define RFSHSTART0 2 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define RFSHSTART1 4 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
|
||
|
#define RMFHCOUNT0 3 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define RMFHCOUNT1 768 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define RMFHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define RMFHSTRIDE1 1 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define RMFHBLOCK0 1 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define RMFHBLOCK1 1 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define RMFHSTART0 0 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define RMFHSTART1 0 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
#define RMSHCOUNT0 3 /* Count of the first dimension of the first hyperslab selection*/
|
||
|
#define RMSHCOUNT1 1536 /* Count of the second dimension of the first hyperslab selection*/
|
||
|
#define RMSHSTRIDE0 1 /* Stride of the first dimension of the first hyperslab selection*/
|
||
|
#define RMSHSTRIDE1 1 /* Stride of the second dimension of the first hyperslab selection*/
|
||
|
#define RMSHBLOCK0 1 /* Block of the first dimension of the first hyperslab selection*/
|
||
|
#define RMSHBLOCK1 1 /* Block of the second dimension of the first hyperslab selection*/
|
||
|
#define RMSHSTART0 1 /* start of the first dimension of the first hyperslab selection*/
|
||
|
#define RMSHSTART1 2 /* start of the second dimension of the first hyperslab selection*/
|
||
|
|
||
|
|
||
|
#define NPOINTS 4 /* Number of points that will be selected
|
||
|
and overwritten */
|
||
|
|
||
|
/* Definitions of the selection mode for the test_actual_io_function. */
|
||
|
#define TEST_ACTUAL_IO_NO_COLLECTIVE 0
|
||
|
#define TEST_ACTUAL_IO_RESET 1
|
||
|
#define TEST_ACTUAL_IO_MULTI_CHUNK_IND 2
|
||
|
#define TEST_ACTUAL_IO_MULTI_CHUNK_COL 3
|
||
|
#define TEST_ACTUAL_IO_MULTI_CHUNK_MIX 4
|
||
|
#define TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE 5
|
||
|
#define TEST_ACTUAL_IO_DIRECT_MULTI_CHUNK_IND 6
|
||
|
#define TEST_ACTUAL_IO_DIRECT_MULTI_CHUNK_COL 7
|
||
|
#define TEST_ACTUAL_IO_LINK_CHUNK 8
|
||
|
#define TEST_ACTUAL_IO_CONTIGUOUS 9
|
||
|
|
||
|
/* Definitions of the selection mode for the no_collective_cause_tests function. */
|
||
|
#define TEST_COLLECTIVE 0x001
|
||
|
#define TEST_SET_INDEPENDENT 0x002
|
||
|
#define TEST_DATATYPE_CONVERSION 0x004
|
||
|
#define TEST_DATA_TRANSFORMS 0x008
|
||
|
#define TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES 0x010
|
||
|
#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT 0x020
|
||
|
#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL 0x040
|
||
|
#define TEST_FILTERS 0x080
|
||
|
/* TEST_FILTERS will take place of this after supporting mpio + filter for
|
||
|
* H5Dcreate and H5Dwrite */
|
||
|
#define TEST_FILTERS_READ 0x100
|
||
|
|
||
|
/* Don't erase these lines, they are put here for debugging purposes */
|
||
|
/*
|
||
|
#define MSPACE1_RANK 1
|
||
|
#define MSPACE1_DIM 50
|
||
|
#define MSPACE2_RANK 1
|
||
|
#define MSPACE2_DIM 4
|
||
|
#define FSPACE_RANK 2
|
||
|
#define FSPACE_DIM1 8
|
||
|
#define FSPACE_DIM2 12
|
||
|
#define MSPACE_RANK 2
|
||
|
#define MSPACE_DIM1 8
|
||
|
#define MSPACE_DIM2 9
|
||
|
#define NPOINTS 4
|
||
|
*/ /* end of debugging macro */
|
||
|
|
||
|
|
||
|
/* type definitions */
|
||
|
typedef struct H5Ptest_param_t /* holds extra test parameters */
|
||
|
{
|
||
|
char *name;
|
||
|
int count;
|
||
|
} H5Ptest_param_t;
|
||
|
|
||
|
/* Dataset data type. Int's can be easily octo dumped. */
|
||
|
typedef int DATATYPE;
|
||
|
|
||
|
/* Shape Same Tests Definitions */
|
||
|
typedef enum {
|
||
|
IND_CONTIG, /* Independent IO on contigous datasets */
|
||
|
COL_CONTIG, /* Collective IO on contigous datasets */
|
||
|
IND_CHUNKED, /* Independent IO on chunked datasets */
|
||
|
COL_CHUNKED /* Collective IO on chunked datasets */
|
||
|
} ShapeSameTestMethods;
|
||
|
|
||
|
/* Shared global variables */
|
||
|
extern int dim0, dim1; /*Dataset dimensions */
|
||
|
extern int chunkdim0, chunkdim1; /*Chunk dimensions */
|
||
|
extern int nerrors; /*errors count */
|
||
|
extern H5E_auto2_t old_func; /* previous error handler */
|
||
|
extern void *old_client_data; /*previous error handler arg.*/
|
||
|
extern int facc_type; /*Test file access type */
|
||
|
extern int dxfer_coll_type;
|
||
|
|
||
|
/* Test program prototypes */
|
||
|
void test_plist_ed(void);
|
||
|
void zero_dim_dset(void);
|
||
|
void test_file_properties(void);
|
||
|
void multiple_dset_write(void);
|
||
|
void multiple_group_write(void);
|
||
|
void multiple_group_read(void);
|
||
|
void collective_group_write(void);
|
||
|
void independent_group_read(void);
|
||
|
void test_fapl_mpio_dup(void);
|
||
|
void test_split_comm_access(void);
|
||
|
void test_page_buffer_access(void);
|
||
|
void dataset_atomicity(void);
|
||
|
void dataset_writeInd(void);
|
||
|
void dataset_writeAll(void);
|
||
|
void extend_writeInd(void);
|
||
|
void extend_writeInd2(void);
|
||
|
void extend_writeAll(void);
|
||
|
void dataset_readInd(void);
|
||
|
void dataset_readAll(void);
|
||
|
void extend_readInd(void);
|
||
|
void extend_readAll(void);
|
||
|
void none_selection_chunk(void);
|
||
|
void actual_io_mode_tests(void);
|
||
|
void no_collective_cause_tests(void);
|
||
|
void test_chunk_alloc(void);
|
||
|
void test_filter_read(void);
|
||
|
void compact_dataset(void);
|
||
|
void null_dataset(void);
|
||
|
void big_dataset(void);
|
||
|
void dataset_fillvalue(void);
|
||
|
void coll_chunk1(void);
|
||
|
void coll_chunk2(void);
|
||
|
void coll_chunk3(void);
|
||
|
void coll_chunk4(void);
|
||
|
void coll_chunk5(void);
|
||
|
void coll_chunk6(void);
|
||
|
void coll_chunk7(void);
|
||
|
void coll_chunk8(void);
|
||
|
void coll_chunk9(void);
|
||
|
void coll_chunk10(void);
|
||
|
void coll_irregular_cont_read(void);
|
||
|
void coll_irregular_cont_write(void);
|
||
|
void coll_irregular_simple_chunk_read(void);
|
||
|
void coll_irregular_simple_chunk_write(void);
|
||
|
void coll_irregular_complex_chunk_read(void);
|
||
|
void coll_irregular_complex_chunk_write(void);
|
||
|
void io_mode_confusion(void);
|
||
|
void rr_obj_hdr_flush_confusion(void);
|
||
|
void rr_obj_hdr_flush_confusion_reader(MPI_Comm comm);
|
||
|
void rr_obj_hdr_flush_confusion_writer(MPI_Comm comm);
|
||
|
void chunk_align_bug_1(void);
|
||
|
void lower_dim_size_comp_test(void);
|
||
|
void link_chunk_collective_io_test(void);
|
||
|
void contig_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type);
|
||
|
void checker_board_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type);
|
||
|
void file_image_daisy_chain_test(void);
|
||
|
#ifdef H5_HAVE_FILTER_DEFLATE
|
||
|
void compress_readAll(void);
|
||
|
#endif /* H5_HAVE_FILTER_DEFLATE */
|
||
|
void test_dense_attr(void);
|
||
|
void test_partial_no_selection_coll_md_read(void);
|
||
|
|
||
|
/* commonly used prototypes */
|
||
|
hid_t create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type);
|
||
|
MPI_Offset h5_mpi_get_file_size(const char *filename, MPI_Comm comm, MPI_Info info);
|
||
|
int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[],
|
||
|
hsize_t block[], DATATYPE *dataset, DATATYPE *original);
|
||
|
void point_set (hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[],
|
||
|
size_t num_points, hsize_t coords[], int order);
|
||
|
#endif /* PHDF5TEST_H */
|