mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-21 07:51:46 +08:00
1199ab1f48
Commit progress through 1610 CST 2/17/15
453 lines
14 KiB
C
453 lines
14 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 files COPYING and Copyright.html. COPYING can be found at the root *
|
||
* of the source code distribution tree; Copyright.html can be found at the *
|
||
* root level of an installed copy of the electronic HDF5 document set and *
|
||
* is linked from the top-level documents page. It can also be found at *
|
||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
/*
|
||
* Programmer: Neil Fortner <nfortne2@hdfgroup.org>
|
||
* Monday, February 16, 2015
|
||
*
|
||
* Purpose: Tests datasets with virtual layout.
|
||
*/
|
||
#include "h5test.h"
|
||
#include "H5srcdir.h"
|
||
|
||
const char *FILENAME[] = {
|
||
"vds_1",
|
||
"vds_2",
|
||
"vds_3",
|
||
"vds_4",
|
||
NULL
|
||
};
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: test_api
|
||
*
|
||
* Purpose: Tests API functions related to virtual datasets.
|
||
*
|
||
* Return: Success: 0
|
||
*
|
||
* Failure: number of errors
|
||
*
|
||
* Programmer: Neil Fortner
|
||
* Monday, February 16, 2015
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static int
|
||
test_api(void)
|
||
{
|
||
hid_t dcpl = -1; /* Dataset creation property list */
|
||
hid_t src_space[4] = {-1, -1, -1, -1}; /* Source dataspaces */
|
||
hid_t vspace[4] = {-1, -1, -1, -1}; /* Virtual dset dataspaces */
|
||
char *src_file[4] = {"src_file1", "src_file2.", "src_file3..", "src_file4..."}; /* Source file names (different lengths) */
|
||
char *src_dset[4] = {"src_dset1....", "src_dset2.....", "src_dset3......", "src_dset4......."}; /* Source dataset names (different lengths) */
|
||
hsize_t dims[2] = {10, 20}; /* Data space current size */
|
||
hsize_t start[2]; /* Hyperslab start */
|
||
hsize_t stride[2]; /* Hyperslab stride */
|
||
hsize_t count[2]; /* Hyperslab count */
|
||
hsize_t block[2]; /* Hyperslab block */
|
||
size_t size_out;
|
||
ssize_t ssize_out;
|
||
hid_t space_out = -1;
|
||
char name_out[32];
|
||
unsigned i;
|
||
|
||
TESTING("virtual dataset API functions");
|
||
|
||
/* Create DCPL */
|
||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
|
||
TEST_ERROR
|
||
|
||
/*
|
||
* Test 1: All - all selection
|
||
*/
|
||
/* Create source dataspace */
|
||
if((src_space[0] = H5Screate_simple(2, dims, NULL)) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Create virtual dataspace */
|
||
if((vspace[0] = H5Screate_simple(2, dims, NULL)) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Select all (should not be necessary, but just to be sure) */
|
||
if(H5Sselect_all(src_space[0]) < 0)
|
||
TEST_ERROR
|
||
if(H5Sselect_all(vspace[0]) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Add virtual layout mapping */
|
||
if(H5Pset_virtual(dcpl, vspace[0], src_file[0], src_dset[0], src_space[0]) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_count */
|
||
if(H5Pget_virtual_count(dcpl, &size_out) < 0)
|
||
TEST_ERROR
|
||
if(size_out != 1)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_vspace */
|
||
if((space_out = H5Pget_virtual_vspace(dcpl, 0)) < 0)
|
||
TEST_ERROR
|
||
if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
|
||
TEST_ERROR
|
||
if(H5Sclose(space_out) < 0)
|
||
TEST_ERROR
|
||
space_out = -1;
|
||
|
||
/* Test H5Pget_virtual_srcspace */
|
||
if((space_out = H5Pget_virtual_srcspace(dcpl, 0)) < 0)
|
||
TEST_ERROR
|
||
if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
|
||
TEST_ERROR
|
||
if(H5Sclose(space_out) < 0)
|
||
TEST_ERROR
|
||
space_out = -1;
|
||
|
||
/* Test H5Pget_virtual_filename */
|
||
if((ssize_out = H5Pget_virtual_filename(dcpl, 0, NULL, 0)) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_file[0]))
|
||
TEST_ERROR
|
||
HDassert((size_t)ssize_out < sizeof(name_out));
|
||
if((ssize_out = H5Pget_virtual_filename(dcpl, 0, name_out, sizeof(name_out))) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_file[0]))
|
||
TEST_ERROR
|
||
if(HDstrncmp(name_out, src_file[0], (size_t)ssize_out + 1) != 0)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_dsetname */
|
||
if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, NULL, 0)) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_dset[0]))
|
||
TEST_ERROR
|
||
HDassert((size_t)ssize_out < sizeof(name_out));
|
||
if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, name_out, sizeof(name_out))) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_dset[0]))
|
||
TEST_ERROR
|
||
if(HDstrncmp(name_out, src_dset[0], (size_t)ssize_out + 1) != 0)
|
||
TEST_ERROR
|
||
|
||
/* Close */
|
||
if(H5Sclose(src_space[0]) < 0)
|
||
TEST_ERROR
|
||
src_space[0] = -1;
|
||
if(H5Sclose(vspace[0]) < 0)
|
||
TEST_ERROR
|
||
vspace[0] = -1;
|
||
|
||
|
||
/* Close */
|
||
if(H5Pclose(dcpl) < 0)
|
||
TEST_ERROR
|
||
dcpl = -1;
|
||
|
||
PASSED();
|
||
return 0;
|
||
|
||
error:
|
||
H5E_BEGIN_TRY {
|
||
for(i = 0; i < (sizeof(src_space) / sizeof(src_space[0])); i++) {
|
||
if(src_space[i] >= 0)
|
||
(void)H5Sclose(src_space[i]);
|
||
if(vspace[i] >= 0)
|
||
(void)H5Sclose(vspace[i]);
|
||
} /* end for */
|
||
if(space_out >= 0)
|
||
(void)H5Sclose(space_out);
|
||
if(dcpl >= 0)
|
||
(void)H5Pclose(dcpl);
|
||
} H5E_END_TRY;
|
||
|
||
return 1;
|
||
} /* end test_api() */
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Tests datasets with virtual layout
|
||
*
|
||
* Return: Success: exit(0)
|
||
*
|
||
* Failure: exit(1)
|
||
*
|
||
* Programmer: Neil Fortner
|
||
* Tuesday, February 17, 2015
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
char filename[FILENAME_BUF_SIZE];
|
||
hid_t file, grp, fapl;
|
||
int nerrors = 0;
|
||
|
||
/* Testing setup */
|
||
h5_reset();
|
||
fapl = h5_fileaccess();
|
||
|
||
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
||
|
||
nerrors += test_api();
|
||
|
||
/* Verify symbol table messages are cached */
|
||
//nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); VDSINC
|
||
|
||
if(nerrors)
|
||
goto error;
|
||
printf("All virtual dataset tests passed.\n");
|
||
//h5_cleanup(FILENAME, fapl); VDSINC
|
||
|
||
return 0;
|
||
|
||
error:
|
||
nerrors = MAX(1, nerrors);
|
||
printf("***** %d VIRTUAL DATASET TEST%s FAILED! *****\n",
|
||
nerrors, 1 == nerrors ? "" : "S");
|
||
return 1;
|
||
}
|
||
|
||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
* Copyright by The HDF Group. *
|
||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||
* All rights reserved. *
|
||
* *
|
||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||
* terms governing use, modification, and redistribution, is contained in *
|
||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||
* of the source code distribution tree; Copyright.html can be found at the *
|
||
* root level of an installed copy of the electronic HDF5 document set and *
|
||
* is linked from the top-level documents page. It can also be found at *
|
||
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
||
* access to either file, you may request a copy from help@hdfgroup.org. *
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
/*
|
||
* Programmer: Neil Fortner <nfortne2@hdfgroup.org>
|
||
* Monday, February 16, 2015
|
||
*
|
||
* Purpose: Tests datasets with virtual layout.
|
||
*/
|
||
#include "h5test.h"
|
||
#include "H5srcdir.h"
|
||
|
||
const char *FILENAME[] = {
|
||
"vds_1",
|
||
"vds_2",
|
||
"vds_3",
|
||
"vds_4",
|
||
NULL
|
||
};
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: test_api
|
||
*
|
||
* Purpose: Tests API functions related to virtual datasets.
|
||
*
|
||
* Return: Success: 0
|
||
*
|
||
* Failure: number of errors
|
||
*
|
||
* Programmer: Neil Fortner
|
||
* Monday, February 16, 2015
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static int
|
||
test_api(void)
|
||
{
|
||
hid_t dcpl = -1; /* Dataset creation property list */
|
||
hid_t src_space[4] = {-1, -1, -1, -1}; /* Source dataspaces */
|
||
hid_t vspace[4] = {-1, -1, -1, -1}; /* Virtual dset dataspaces */
|
||
char *src_file[4] = {"src_file1", "src_file2.", "src_file3..", "src_file4..."}; /* Source file names (different lengths) */
|
||
char *src_dset[4] = {"src_dset1....", "src_dset2.....", "src_dset3......", "src_dset4......."}; /* Source dataset names (different lengths) */
|
||
hsize_t dims[2] = {10, 20}; /* Data space current size */
|
||
hsize_t start[2]; /* Hyperslab start */
|
||
hsize_t stride[2]; /* Hyperslab stride */
|
||
hsize_t count[2]; /* Hyperslab count */
|
||
hsize_t block[2]; /* Hyperslab block */
|
||
size_t size_out;
|
||
ssize_t ssize_out;
|
||
hid_t space_out = -1;
|
||
char name_out[32];
|
||
unsigned i;
|
||
|
||
TESTING("virtual dataset API functions");
|
||
|
||
/* Create DCPL */
|
||
if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
|
||
TEST_ERROR
|
||
|
||
/*
|
||
* Test 1: All - all selection
|
||
*/
|
||
/* Create source dataspace */
|
||
if((src_space[0] = H5Screate_simple(2, dims, NULL)) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Create virtual dataspace */
|
||
if((vspace[0] = H5Screate_simple(2, dims, NULL)) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Select all (should not be necessary, but just to be sure) */
|
||
if(H5Sselect_all(src_space[0]) < 0)
|
||
TEST_ERROR
|
||
if(H5Sselect_all(vspace[0]) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Add virtual layout mapping */
|
||
if(H5Pset_virtual(dcpl, vspace[0], src_file[0], src_dset[0], src_space[0]) < 0)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_count */
|
||
if(H5Pget_virtual_count(dcpl, &size_out) < 0)
|
||
TEST_ERROR
|
||
if(size_out != 1)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_vspace */
|
||
if((space_out = H5Pget_virtual_vspace(dcpl, 0)) < 0)
|
||
TEST_ERROR
|
||
if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
|
||
TEST_ERROR
|
||
if(H5Sclose(space_out) < 0)
|
||
TEST_ERROR
|
||
space_out = -1;
|
||
|
||
/* Test H5Pget_virtual_srcspace */
|
||
if((space_out = H5Pget_virtual_srcspace(dcpl, 0)) < 0)
|
||
TEST_ERROR
|
||
if(H5Sget_select_type(space_out) != H5S_SEL_ALL)
|
||
TEST_ERROR
|
||
if(H5Sclose(space_out) < 0)
|
||
TEST_ERROR
|
||
space_out = -1;
|
||
|
||
/* Test H5Pget_virtual_filename */
|
||
if((ssize_out = H5Pget_virtual_filename(dcpl, 0, NULL, 0)) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_file[0]))
|
||
TEST_ERROR
|
||
HDassert((size_t)ssize_out < sizeof(name_out));
|
||
if((ssize_out = H5Pget_virtual_filename(dcpl, 0, name_out, sizeof(name_out))) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_file[0]))
|
||
TEST_ERROR
|
||
if(HDstrncmp(name_out, src_file[0], (size_t)ssize_out + 1) != 0)
|
||
TEST_ERROR
|
||
|
||
/* Test H5Pget_virtual_dsetname */
|
||
if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, NULL, 0)) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_dset[0]))
|
||
TEST_ERROR
|
||
HDassert((size_t)ssize_out < sizeof(name_out));
|
||
if((ssize_out = H5Pget_virtual_dsetname(dcpl, 0, name_out, sizeof(name_out))) < 0)
|
||
TEST_ERROR
|
||
if((size_t)ssize_out != HDstrlen(src_dset[0]))
|
||
TEST_ERROR
|
||
if(HDstrncmp(name_out, src_dset[0], (size_t)ssize_out + 1) != 0)
|
||
TEST_ERROR
|
||
|
||
/* Close */
|
||
if(H5Sclose(src_space[0]) < 0)
|
||
TEST_ERROR
|
||
src_space[0] = -1;
|
||
if(H5Sclose(vspace[0]) < 0)
|
||
TEST_ERROR
|
||
vspace[0] = -1;
|
||
|
||
|
||
/* Close */
|
||
if(H5Pclose(dcpl) < 0)
|
||
TEST_ERROR
|
||
dcpl = -1;
|
||
|
||
PASSED();
|
||
return 0;
|
||
|
||
error:
|
||
H5E_BEGIN_TRY {
|
||
for(i = 0; i < (sizeof(src_space) / sizeof(src_space[0])); i++) {
|
||
if(src_space[i] >= 0)
|
||
(void)H5Sclose(src_space[i]);
|
||
if(vspace[i] >= 0)
|
||
(void)H5Sclose(vspace[i]);
|
||
} /* end for */
|
||
if(space_out >= 0)
|
||
(void)H5Sclose(space_out);
|
||
if(dcpl >= 0)
|
||
(void)H5Pclose(dcpl);
|
||
} H5E_END_TRY;
|
||
|
||
return 1;
|
||
} /* end test_api() */
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Tests datasets with virtual layout
|
||
*
|
||
* Return: Success: exit(0)
|
||
*
|
||
* Failure: exit(1)
|
||
*
|
||
* Programmer: Neil Fortner
|
||
* Tuesday, February 17, 2015
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
char filename[FILENAME_BUF_SIZE];
|
||
hid_t file, grp, fapl;
|
||
int nerrors = 0;
|
||
|
||
/* Testing setup */
|
||
h5_reset();
|
||
fapl = h5_fileaccess();
|
||
|
||
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
||
|
||
nerrors += test_api();
|
||
|
||
/* Verify symbol table messages are cached */
|
||
//nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0); VDSINC
|
||
|
||
if(nerrors)
|
||
goto error;
|
||
printf("All virtual dataset tests passed.\n");
|
||
//h5_cleanup(FILENAME, fapl); VDSINC
|
||
|
||
return 0;
|
||
|
||
error:
|
||
nerrors = MAX(1, nerrors);
|
||
printf("***** %d VIRTUAL DATASET TEST%s FAILED! *****\n",
|
||
nerrors, 1 == nerrors ? "" : "S");
|
||
return 1;
|
||
}
|
||
|