mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-21 07:51:46 +08:00
beb04ae817
"make check-vfd" will now run all tests in the test directory with different file drivers (at least, all of those tests that use the testing framework's FAPL). Tests that fail will be skipped. This is not a perfect fix, but is better than nothing. Along with this change, check-vfd should be added to the Daily Tests.
214 lines
6.3 KiB
C
214 lines
6.3 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
* 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||
|
||
/*
|
||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||
* Friday, January 30, 1998
|
||
*
|
||
* Purpose: Tests extendible datasets.
|
||
*/
|
||
|
||
#include "h5test.h"
|
||
|
||
const char *FILENAME[] = {
|
||
"extend",
|
||
NULL
|
||
};
|
||
|
||
#define NX 100 /* USE AN EVEN NUMBER!*/
|
||
#define NY 100 /* USE AN EVEN NUMBER!*/
|
||
|
||
/* Data buffers */
|
||
static int buf1[NY][NX], buf2[NX/2][NY/2];
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: write_data
|
||
*
|
||
* Purpose: Create extendible dataset and test extend/write/read
|
||
*
|
||
* Return: Success: 0
|
||
* Failure: -1
|
||
*
|
||
* Programmer: Quincey Koziol
|
||
* Tuesday, June 10, 2003
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static int
|
||
write_data(const char *msg, hid_t file, const char *name, hid_t cparms, hid_t mem_space)
|
||
{
|
||
hid_t dataset, file_space, half_space;
|
||
static const hsize_t dims[2] = {NX, NY};
|
||
static const hsize_t half_dims[2] = {NX/2, NY/2};
|
||
static hsize_t size[2];
|
||
hsize_t offset[2];
|
||
int i, j, k, m;
|
||
|
||
TESTING(msg);
|
||
|
||
if ((dataset = H5Dcreate (file, name, H5T_NATIVE_INT, mem_space,
|
||
cparms))<0) TEST_ERROR;
|
||
/* Write the data */
|
||
for (i=0; i<5; i++) {
|
||
for (j=0; j<5; j++) {
|
||
|
||
/* Extend the dataset */
|
||
offset[0] = i * NX;
|
||
offset[1] = j * NY;
|
||
size[0] = offset[0] + NX;
|
||
size[1] = offset[1] + NY;
|
||
if (H5Dextend (dataset, size)<0) TEST_ERROR;
|
||
|
||
/* Select a hyperslab */
|
||
if ((file_space = H5Dget_space (dataset))<0) TEST_ERROR;
|
||
if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset,
|
||
NULL, dims, NULL)<0) TEST_ERROR;
|
||
|
||
/* Write to the hyperslab */
|
||
if (H5Dwrite (dataset, H5T_NATIVE_INT, mem_space, file_space,
|
||
H5P_DEFAULT, buf1)<0) TEST_ERROR;
|
||
if (H5Sclose (file_space)<0) TEST_ERROR;
|
||
}
|
||
}
|
||
|
||
/* Read the data */
|
||
if ((half_space = H5Screate_simple (2, half_dims, NULL))<0) TEST_ERROR;
|
||
if ((file_space = H5Dget_space (dataset))<0) TEST_ERROR;
|
||
for (i=0; i<10; i++) {
|
||
for (j=0; j<10; j++) {
|
||
|
||
/* Select a hyperslab */
|
||
offset[0] = i * NX/2;
|
||
offset[1] = j * NY/2;
|
||
if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset,
|
||
NULL, half_dims, NULL)<0) TEST_ERROR;
|
||
|
||
/* Read */
|
||
if (H5Dread (dataset, H5T_NATIVE_INT, half_space, file_space,
|
||
H5P_DEFAULT, buf2)<0) TEST_ERROR;
|
||
|
||
/* Compare */
|
||
for (k=0; k<NX/2; k++) {
|
||
for (m=0; m<NY/2; m++) {
|
||
if (buf2[k][m]!=buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]) {
|
||
printf(" i=%d, j=%d, k=%d, m=%d\n", i, j, k, m);
|
||
printf(" buf2[%d][%d]=%d\n",k,m,buf2[k][m]);
|
||
printf(" buf1[%d][%d]=%d\n",(i%2)*NX/2+k,(j%2)*NY/2+m,buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]);
|
||
TEST_ERROR;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/* Cleanup */
|
||
if (H5Dclose (dataset)<0) TEST_ERROR;
|
||
if (H5Sclose (file_space)<0) TEST_ERROR;
|
||
if (H5Sclose (half_space)<0) TEST_ERROR;
|
||
|
||
PASSED();
|
||
return 0;
|
||
|
||
error:
|
||
return -1;
|
||
}
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Tests extendible datasets
|
||
*
|
||
* Return: Success: exit(0)
|
||
*
|
||
* Failure: exit(non-zero)
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Friday, January 30, 1998
|
||
*
|
||
* Modifications:
|
||
* Took main data code out into write_data() routine, to allow
|
||
* different dataset creation property list settings to be tested.
|
||
* Quincey Koziol
|
||
* Tuesday, June 10, 2003
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main (void)
|
||
{
|
||
hid_t file, mem_space, cparms;
|
||
hid_t fapl;
|
||
int nerrors = 0;
|
||
static const hsize_t dims[2] = {NX, NY};
|
||
static const hsize_t chunk_dims[2] = {NX/2, NY/2};
|
||
static hsize_t maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
|
||
char filename[1024];
|
||
int i, j;
|
||
const char *envval = NULL;
|
||
|
||
envval = HDgetenv("HDF5_DRIVER");
|
||
if (envval == NULL)
|
||
envval = "nomatch";
|
||
if (HDstrcmp(envval, "split")) {
|
||
h5_reset();
|
||
fapl = h5_fileaccess();
|
||
|
||
/* Initialize buffer and space */
|
||
for (i=0; i<NX; i++) {
|
||
for (j=0; j<NY; j++) {
|
||
buf1[i][j] = i*NY+j;
|
||
}
|
||
}
|
||
if ((mem_space = H5Screate_simple (2, dims, maxdims))<0) TEST_ERROR;
|
||
|
||
/* Create the file */
|
||
h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
|
||
if ((file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
|
||
|
||
/* Create the dataset which is originally NX by NY */
|
||
if((cparms = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
|
||
if (H5Pset_chunk (cparms, 2, chunk_dims)<0) TEST_ERROR;
|
||
nerrors += write_data("extendible dataset with incremental allocation",file,"dataset1",cparms,mem_space)<0 ?1:0;
|
||
if(H5Pset_alloc_time(cparms, H5D_ALLOC_TIME_EARLY)<0) TEST_ERROR;
|
||
nerrors += write_data("extendible dataset with early allocation",file,"dataset2",cparms,mem_space)<0 ?1:0;
|
||
|
||
if (H5Pclose (cparms)<0) TEST_ERROR;
|
||
if (H5Sclose (mem_space)<0) TEST_ERROR;
|
||
|
||
if (H5Fclose (file)<0) TEST_ERROR;
|
||
if (nerrors) {
|
||
printf("***** %d FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S");
|
||
exit(1);
|
||
}
|
||
printf("All extend tests passed.\n");
|
||
h5_cleanup(FILENAME, fapl);
|
||
}
|
||
else
|
||
{
|
||
puts("All extend tests skipped - Incompatible with current Virtual File Driver");
|
||
}
|
||
return 0;
|
||
|
||
error:
|
||
printf("*** One or more extend tests failed ***\n");
|
||
return 1;
|
||
|
||
}
|
||
|