1997-07-31 05:17:56 +08:00
|
|
|
/****************************************************************************
|
|
|
|
* NCSA HDF *
|
|
|
|
* Software Development Group *
|
|
|
|
* National Center for Supercomputing Applications *
|
|
|
|
* University of Illinois at Urbana-Champaign *
|
|
|
|
* 605 E. Springfield, Champaign IL 61820 *
|
|
|
|
* *
|
|
|
|
* For conditions of distribution and use, see the accompanying *
|
|
|
|
* hdf/COPYING file. *
|
|
|
|
* *
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
#ifdef RCSID
|
|
|
|
static char RcsId[] = "$Revision$";
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* $Id$ */
|
|
|
|
|
|
|
|
/***********************************************************
|
|
|
|
*
|
|
|
|
* Test program: tfile
|
|
|
|
*
|
|
|
|
* Test the low-level file I/O features.
|
|
|
|
*
|
|
|
|
*************************************************************/
|
|
|
|
|
|
|
|
#include "testhdf5.h"
|
1997-08-13 23:37:09 +08:00
|
|
|
#include "H5Bprivate.h"
|
1997-07-31 05:17:56 +08:00
|
|
|
|
|
|
|
#define F1_USERBLOCK_SIZE HDF5_USERBLOCK_DEFAULT
|
|
|
|
#define F1_OFFSET_SIZE HDF5_OFFSETSIZE_DEFAULT
|
|
|
|
#define F1_LENGTH_SIZE HDF5_LENGTHSIZE_DEFAULT
|
1997-08-13 23:37:09 +08:00
|
|
|
#define F1_SYM_LEAF_K HDF5_SYM_LEAF_K_DEFAULT
|
|
|
|
#define F1_SYM_INTERN_K (btree_k_default_g[H5B_SNODE_ID])
|
1997-07-31 05:17:56 +08:00
|
|
|
#define FILE1 "tfile1.h5"
|
|
|
|
|
|
|
|
#define F2_USERBLOCK_SIZE 512
|
1997-08-13 23:37:09 +08:00
|
|
|
#define F2_OFFSET_SIZE 8
|
|
|
|
#define F2_LENGTH_SIZE 8
|
|
|
|
#define F2_SYM_LEAF_K 8
|
|
|
|
#define F2_SYM_INTERN_K 32
|
1997-07-31 05:17:56 +08:00
|
|
|
#define FILE2 "tfile2.h5"
|
|
|
|
|
|
|
|
#define F3_USERBLOCK_SIZE HDF5_USERBLOCK_DEFAULT
|
|
|
|
#define F3_OFFSET_SIZE F2_OFFSET_SIZE
|
|
|
|
#define F3_LENGTH_SIZE F2_LENGTH_SIZE
|
1997-08-13 23:37:09 +08:00
|
|
|
#define F3_SYM_LEAF_K F2_SYM_LEAF_K
|
|
|
|
#define F3_SYM_INTERN_K F2_SYM_INTERN_K
|
1997-07-31 05:17:56 +08:00
|
|
|
#define FILE3 "tfile3.h5"
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
static const uintn btree_k_default_g[] = HDF5_BTREE_K_DEFAULT;
|
|
|
|
|
1997-07-31 05:17:56 +08:00
|
|
|
/****************************************************************
|
|
|
|
**
|
|
|
|
** test_file_create(): Low-level file creation I/O test routine.
|
|
|
|
**
|
|
|
|
****************************************************************/
|
|
|
|
static void test_file_create(void)
|
|
|
|
{
|
|
|
|
hatom_t fid1,fid2,fid3; /* HDF5 File IDs */
|
|
|
|
hatom_t tmpl1,tmpl2; /* File creation templates */
|
|
|
|
uintn parm; /* File-creation parameters */
|
|
|
|
herr_t ret; /* Generic return value */
|
|
|
|
|
|
|
|
/* Output message about test being performed */
|
|
|
|
MESSAGE(5, print_func("Testing Low-Level File Creation I/O\n"););
|
|
|
|
|
|
|
|
/* Create first file */
|
|
|
|
fid1=H5Fcreate(FILE1,H5ACC_OVERWRITE,0,0);
|
|
|
|
CHECK(fid1,FAIL,"H5Fcreate");
|
|
|
|
|
|
|
|
/* Try to create first file again (should fail) */
|
|
|
|
fid2=H5Fcreate(FILE1,H5ACC_OVERWRITE,0,0);
|
|
|
|
VERIFY(fid2,FAIL,"H5Fcreate");
|
|
|
|
|
|
|
|
/* Get the file-creation template */
|
|
|
|
tmpl1=H5Fget_create_template(fid1);
|
|
|
|
CHECK(tmpl1,FAIL,"H5Fget_create_template");
|
|
|
|
|
|
|
|
/* Get the file-creation parameters */
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
printf("USERBLOCK_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F1_USERBLOCK_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_OFFSET_SIZE,&parm);
|
|
|
|
printf("OFFSET_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F1_OFFSET_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_LENGTH_SIZE,&parm);
|
|
|
|
printf("LENGTH_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F1_LENGTH_SIZE,"H5Cgetparm");
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_LEAF_K,&parm);
|
|
|
|
printf("SYM_LEAF_K=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F1_SYM_LEAF_K,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_INTERN_K,&parm);
|
|
|
|
printf("SYM_INTERN_K=%u\n",parm);
|
1997-07-31 05:17:56 +08:00
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
1997-08-13 23:37:09 +08:00
|
|
|
VERIFY(parm,F1_SYM_INTERN_K,"H5Cgetparm");
|
1997-07-31 05:17:56 +08:00
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Double-check that the atom has been vaporized */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
VERIFY(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Create a new file with a non-standard file-creation template */
|
|
|
|
tmpl1=H5Mcreate(fid1,H5_TEMPLATE,NULL);
|
|
|
|
CHECK(tmpl1,FAIL,"H5Mcreate");
|
|
|
|
|
|
|
|
/* Set the new file-creation parameters */
|
|
|
|
parm=F2_USERBLOCK_SIZE;
|
|
|
|
ret=H5Csetparm(tmpl1,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
|
|
|
parm=F2_OFFSET_SIZE;
|
|
|
|
ret=H5Csetparm(tmpl1,H5_OFFSET_SIZE,&parm);
|
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
|
|
|
parm=F2_LENGTH_SIZE;
|
|
|
|
ret=H5Csetparm(tmpl1,H5_LENGTH_SIZE,&parm);
|
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
parm=F2_SYM_LEAF_K;
|
|
|
|
ret=H5Csetparm(tmpl1,H5_SYM_LEAF_K,&parm);
|
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
|
|
|
parm=F2_SYM_INTERN_K;
|
|
|
|
ret=H5Csetparm(tmpl1,H5_SYM_INTERN_K,&parm);
|
1997-07-31 05:17:56 +08:00
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
|
|
|
/* Try to create second file, with non-standard file-creation template params */
|
|
|
|
fid2=H5Fcreate(FILE2,H5ACC_OVERWRITE,tmpl1,0);
|
|
|
|
CHECK(fid2,FAIL,"H5Fcreate");
|
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Get the file-creation template */
|
|
|
|
tmpl1=H5Fget_create_template(fid2);
|
|
|
|
CHECK(tmpl1,FAIL,"H5Fget_create_template");
|
|
|
|
|
|
|
|
/* Get the file-creation parameters */
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
printf("USERBLOCK_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_USERBLOCK_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_OFFSET_SIZE,&parm);
|
|
|
|
printf("OFFSET_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_LENGTH_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_LENGTH_SIZE,&parm);
|
|
|
|
printf("LENGTH_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_OFFSET_SIZE,"H5Cgetparm");
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_LEAF_K,&parm);
|
|
|
|
printf("SYM_LEAF_K=%u\n",parm);
|
1997-07-31 05:17:56 +08:00
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
1997-08-13 23:37:09 +08:00
|
|
|
VERIFY(parm,F2_SYM_LEAF_K,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_INTERN_K,&parm);
|
|
|
|
printf("SYM_INTERN_K=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_SYM_INTERN_K,"H5Cgetparm");
|
1997-07-31 05:17:56 +08:00
|
|
|
|
|
|
|
/* Clone the file-creation template */
|
|
|
|
tmpl2=H5Mcopy(tmpl1);
|
|
|
|
CHECK(tmpl2,FAIL,"H5Mcopy");
|
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Set the new file-creation parameter */
|
|
|
|
parm=F3_USERBLOCK_SIZE;
|
|
|
|
ret=H5Csetparm(tmpl2,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
CHECK(ret,FAIL,"H5Csetparm");
|
|
|
|
|
|
|
|
/* Try to create second file, with non-standard file-creation template params */
|
|
|
|
fid3=H5Fcreate(FILE3,H5ACC_OVERWRITE,tmpl2,0);
|
|
|
|
CHECK(fid3,FAIL,"H5Fcreate");
|
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl2);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Get the file-creation template */
|
|
|
|
tmpl1=H5Fget_create_template(fid3);
|
|
|
|
CHECK(tmpl1,FAIL,"H5Fget_create_template");
|
|
|
|
|
|
|
|
/* Get the file-creation parameters */
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
printf("USERBLOCK_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F3_USERBLOCK_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_OFFSET_SIZE,&parm);
|
|
|
|
printf("OFFSET_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F3_LENGTH_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_LENGTH_SIZE,&parm);
|
|
|
|
printf("LENGTH_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F3_OFFSET_SIZE,"H5Cgetparm");
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_LEAF_K,&parm);
|
|
|
|
printf("SYM_LEAF_K=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F3_SYM_LEAF_K,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_INTERN_K,&parm);
|
|
|
|
printf("SYM_INTERN_K=%u\n",parm);
|
1997-07-31 05:17:56 +08:00
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
1997-08-13 23:37:09 +08:00
|
|
|
VERIFY(parm,F3_SYM_INTERN_K,"H5Cgetparm");
|
1997-07-31 05:17:56 +08:00
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Close first file */
|
|
|
|
ret=H5Fclose(fid1);
|
|
|
|
CHECK(ret,FAIL,"H5Fclose");
|
|
|
|
|
|
|
|
/* Close second file */
|
|
|
|
ret=H5Fclose(fid2);
|
|
|
|
CHECK(ret,FAIL,"H5Fclose");
|
|
|
|
|
|
|
|
/* Close third file */
|
|
|
|
ret=H5Fclose(fid3);
|
|
|
|
CHECK(ret,FAIL,"H5Fclose");
|
|
|
|
} /* test_file_create() */
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
**
|
|
|
|
** test_file_open(): Low-level file open I/O test routine.
|
|
|
|
**
|
|
|
|
****************************************************************/
|
|
|
|
static void test_file_open(void)
|
|
|
|
{
|
1997-08-13 06:46:07 +08:00
|
|
|
hatom_t fid1; /* HDF5 File IDs */
|
|
|
|
hatom_t tmpl1; /* File creation templates */
|
1997-07-31 05:17:56 +08:00
|
|
|
uintn parm; /* File-creation parameters */
|
|
|
|
herr_t ret; /* Generic return value */
|
|
|
|
|
|
|
|
/* Output message about test being performed */
|
|
|
|
MESSAGE(5, print_func("Testing Low-Level File Opening I/O\n"););
|
|
|
|
|
|
|
|
/* Open second file */
|
|
|
|
fid1=H5Fopen(FILE2,H5ACC_WRITE,0);
|
|
|
|
CHECK(fid1,FAIL,"H5Fooen");
|
|
|
|
|
|
|
|
/* Get the file-creation template */
|
|
|
|
tmpl1=H5Fget_create_template(fid1);
|
|
|
|
CHECK(tmpl1,FAIL,"H5Fget_create_template");
|
|
|
|
|
|
|
|
/* Get the file-creation parameters */
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_USERBLOCK_SIZE,&parm);
|
|
|
|
printf("USERBLOCK_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_USERBLOCK_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_OFFSET_SIZE,&parm);
|
|
|
|
printf("OFFSET_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_OFFSET_SIZE,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_LENGTH_SIZE,&parm);
|
|
|
|
printf("LENGTH_SIZE=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_LENGTH_SIZE,"H5Cgetparm");
|
|
|
|
|
1997-08-13 23:37:09 +08:00
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_LEAF_K,&parm);
|
|
|
|
printf("SYM_LEAF_K=%u\n",parm);
|
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
|
|
|
VERIFY(parm,F2_SYM_LEAF_K,"H5Cgetparm");
|
|
|
|
|
|
|
|
ret=H5Cgetparm(tmpl1,H5_SYM_INTERN_K,&parm);
|
|
|
|
printf("SYM_INTERN_K=%u\n",parm);
|
1997-07-31 05:17:56 +08:00
|
|
|
CHECK(ret,FAIL,"H5Cgetparm");
|
1997-08-13 23:37:09 +08:00
|
|
|
VERIFY(parm,F2_SYM_INTERN_K,"H5Cgetparm");
|
1997-07-31 05:17:56 +08:00
|
|
|
|
|
|
|
/* Release file-creation template */
|
|
|
|
ret=H5Mrelease(tmpl1);
|
|
|
|
CHECK(ret,FAIL,"H5Mrelease");
|
|
|
|
|
|
|
|
/* Close first file */
|
|
|
|
ret=H5Fclose(fid1);
|
|
|
|
CHECK(ret,FAIL,"H5Fclose");
|
|
|
|
} /* test_file_open() */
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
**
|
|
|
|
** test_file(): Main low-level file I/O test routine.
|
|
|
|
**
|
|
|
|
****************************************************************/
|
|
|
|
void test_file(void)
|
|
|
|
{
|
|
|
|
/* Output message about test being performed */
|
|
|
|
MESSAGE(5, print_func("Testing Low-Level File I/O\n"););
|
|
|
|
|
|
|
|
test_file_create(); /* Test file creation (also creation templates) */
|
|
|
|
test_file_open(); /* Test file opening */
|
|
|
|
} /* test_file() */
|
|
|
|
|