2006-10-22 16:24:24 +08:00
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
2007-02-07 22:56:24 +08:00
|
|
|
|
* Copyright by The HDF Group. *
|
|
|
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
2006-10-22 16:24:24 +08:00
|
|
|
|
* 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 *
|
2007-02-07 22:56:24 +08:00
|
|
|
|
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
2006-10-22 16:24:24 +08:00
|
|
|
|
* access to either file, you may request a copy from help@hdfgroup.org. *
|
2007-03-06 06:56:44 +08:00
|
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
2007-01-26 13:40:17 +08:00
|
|
|
|
/*****************************************************************************
|
|
|
|
|
FILE
|
|
|
|
|
trefer.cpp - HDF5 C++ testing the functionalities associated with the C
|
|
|
|
|
Reference interface (H5R)
|
|
|
|
|
|
|
|
|
|
***************************************************************************/
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
#ifdef OLD_HEADER_FILENAME
|
|
|
|
|
#include <iostream.h>
|
|
|
|
|
#else
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#endif
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
#ifndef H5_NO_NAMESPACE
|
|
|
|
|
#ifndef H5_NO_STD
|
|
|
|
|
using std::cerr;
|
|
|
|
|
using std::endl;
|
|
|
|
|
#endif // H5_NO_STD
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "H5Cpp.h" // C++ API header file
|
|
|
|
|
|
|
|
|
|
#ifndef H5_NO_NAMESPACE
|
2007-01-26 13:40:17 +08:00
|
|
|
|
using namespace H5;
|
2006-10-22 16:24:24 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "h5cpputil.h" // C++ utilility header file
|
|
|
|
|
|
|
|
|
|
const H5std_string FILE1("trefer1.h5");
|
|
|
|
|
const H5std_string FILE2("trefer2.h5");
|
|
|
|
|
const H5std_string FILE3("trefer3.h5");
|
|
|
|
|
const H5std_string DSET_DEFAULT_NAME("default");
|
|
|
|
|
|
2010-05-02 22:25:42 +08:00
|
|
|
|
// Dataset 1
|
|
|
|
|
const H5std_string DSET1_NAME("Dataset1");
|
|
|
|
|
const int DSET1_LEN = 8;
|
|
|
|
|
|
2006-10-22 16:24:24 +08:00
|
|
|
|
const H5std_string MEMBER1( "a_name" );
|
|
|
|
|
const H5std_string MEMBER2( "b_name" );
|
|
|
|
|
const H5std_string MEMBER3( "c_name" );
|
|
|
|
|
|
|
|
|
|
// 1-D dataset with fixed dimensions
|
|
|
|
|
const H5std_string SPACE1_NAME("Space1");
|
|
|
|
|
const int SPACE1_RANK = 1;
|
|
|
|
|
const int SPACE1_DIM1 = 4;
|
|
|
|
|
|
|
|
|
|
// 2-D dataset with fixed dimensions
|
|
|
|
|
const H5std_string SPACE2_NAME("Space2");
|
|
|
|
|
|
|
|
|
|
// Larger 1-D dataset with fixed dimensions
|
|
|
|
|
const H5std_string SPACE3_NAME("Space3");
|
|
|
|
|
|
|
|
|
|
// Compound datatype
|
|
|
|
|
typedef struct s1_t {
|
|
|
|
|
unsigned int a;
|
|
|
|
|
unsigned int b;
|
|
|
|
|
float c;
|
|
|
|
|
} s1_t;
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
|
**
|
|
|
|
|
** test_reference_obj(): Test basic object reference functionality.
|
|
|
|
|
** Tests references to various kinds of objects
|
|
|
|
|
**
|
|
|
|
|
****************************************************************/
|
2008-10-27 20:59:12 +08:00
|
|
|
|
static void test_reference_obj(void)
|
2006-10-22 16:24:24 +08:00
|
|
|
|
{
|
|
|
|
|
int i; // counting variables
|
|
|
|
|
const H5std_string write_comment="Foo!"; // Comments for group
|
|
|
|
|
|
|
|
|
|
// Output message about test being performed
|
2010-02-27 00:55:49 +08:00
|
|
|
|
SUBTEST("Object Reference Functions");
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
H5File* file1 = NULL;
|
|
|
|
|
try {
|
|
|
|
|
hobj_ref_t *wbuf, // buffer to write to disk
|
|
|
|
|
*rbuf, // buffer read from disk
|
|
|
|
|
*tbuf; // temp. buffer read from disk
|
|
|
|
|
|
|
|
|
|
// Allocate write & read buffers
|
|
|
|
|
int temp_size = MAX(sizeof(unsigned),sizeof(hobj_ref_t));
|
2008-10-27 20:59:12 +08:00
|
|
|
|
wbuf=(hobj_ref_t*)HDmalloc(temp_size*SPACE1_DIM1);
|
|
|
|
|
rbuf=(hobj_ref_t*)HDmalloc(temp_size*SPACE1_DIM1);
|
|
|
|
|
tbuf=(hobj_ref_t*)HDmalloc(temp_size*SPACE1_DIM1);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Create file FILE1
|
|
|
|
|
file1 = new H5File (FILE1, H5F_ACC_TRUNC);
|
|
|
|
|
|
|
|
|
|
// Create dataspace for datasets
|
|
|
|
|
hsize_t dims1[] = {SPACE1_DIM1};
|
|
|
|
|
DataSpace sid1(SPACE1_RANK, dims1);
|
|
|
|
|
|
|
|
|
|
// Create a group
|
|
|
|
|
Group group = file1->createGroup("Group1", (size_t)-1);
|
|
|
|
|
|
|
|
|
|
// Set group's comment
|
|
|
|
|
group.setComment(".", write_comment);
|
|
|
|
|
|
|
|
|
|
// Create a dataset (inside /Group1)
|
2010-05-02 22:25:42 +08:00
|
|
|
|
DataSet dataset = group.createDataSet(DSET1_NAME, PredType::NATIVE_UINT, sid1);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
unsigned *tu32; // Temporary pointer to uint32 data
|
|
|
|
|
for (tu32=(unsigned *)wbuf, i=0; i<SPACE1_DIM1; i++)
|
|
|
|
|
*tu32++=i*3; // from C test
|
|
|
|
|
|
|
|
|
|
// Write selection to disk
|
|
|
|
|
dataset.write(wbuf, PredType::NATIVE_UINT);
|
|
|
|
|
|
|
|
|
|
// Close Dataset
|
|
|
|
|
dataset.close();
|
|
|
|
|
|
|
|
|
|
// Create another dataset (inside /Group1)
|
|
|
|
|
dataset = group.createDataSet("Dataset2", PredType::NATIVE_UCHAR, sid1);
|
|
|
|
|
|
|
|
|
|
// Close Dataset
|
|
|
|
|
dataset.close();
|
|
|
|
|
|
|
|
|
|
// Create a datatype to refer to
|
|
|
|
|
CompType dtype1(sizeof(s1_t));
|
|
|
|
|
|
|
|
|
|
// Insert fields
|
|
|
|
|
dtype1.insertMember(MEMBER1, HOFFSET(s1_t, a), PredType::NATIVE_INT);
|
|
|
|
|
dtype1.insertMember(MEMBER2, HOFFSET(s1_t, b), PredType::NATIVE_INT);
|
|
|
|
|
dtype1.insertMember(MEMBER3, HOFFSET(s1_t, c), PredType::NATIVE_FLOAT);
|
|
|
|
|
|
|
|
|
|
// Save datatype for later
|
|
|
|
|
dtype1.commit(group, "Datatype1");
|
|
|
|
|
|
|
|
|
|
// Close datatype and group
|
|
|
|
|
dtype1.close();
|
|
|
|
|
group.close();
|
|
|
|
|
|
|
|
|
|
// Create a dataset
|
|
|
|
|
dataset = file1->createDataSet("Dataset3", PredType::STD_REF_OBJ, sid1);
|
|
|
|
|
|
2012-09-28 07:26:16 +08:00
|
|
|
|
// Create reference to dataset and test getRefObjType
|
2006-10-22 16:24:24 +08:00
|
|
|
|
file1->reference(&wbuf[0], "/Group1/Dataset1");
|
2012-09-28 07:26:16 +08:00
|
|
|
|
H5O_type_t refobj_type = dataset.getRefObjType(&wbuf[0], H5R_OBJECT);
|
|
|
|
|
verify_val(refobj_type, H5O_TYPE_DATASET, "DataSet::getRefObjType", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
2012-09-28 07:26:16 +08:00
|
|
|
|
// Create reference to dataset and test getRefObjType
|
2006-10-22 16:24:24 +08:00
|
|
|
|
file1->reference(&wbuf[1], "/Group1/Dataset2");
|
2012-09-28 07:26:16 +08:00
|
|
|
|
refobj_type = dataset.getRefObjType(&wbuf[1], H5R_OBJECT);
|
|
|
|
|
verify_val(refobj_type, H5O_TYPE_DATASET, "DataSet::getRefObjType", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Create reference to group
|
|
|
|
|
file1->reference(&wbuf[2], "/Group1");
|
2012-09-28 07:26:16 +08:00
|
|
|
|
refobj_type = dataset.getRefObjType(&wbuf[2], H5R_OBJECT);
|
|
|
|
|
verify_val(refobj_type, H5O_TYPE_GROUP, "DataSet::getRefObjType", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Create reference to named datatype
|
|
|
|
|
file1->reference(&wbuf[3], "/Group1/Datatype1");
|
2012-09-28 07:26:16 +08:00
|
|
|
|
refobj_type = dataset.getRefObjType(&wbuf[3], H5R_OBJECT);
|
|
|
|
|
verify_val(refobj_type, H5O_TYPE_NAMED_DATATYPE, "DataSet::getRefObjType", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Write selection to disk
|
|
|
|
|
dataset.write(wbuf, PredType::STD_REF_OBJ);
|
|
|
|
|
|
|
|
|
|
// Close disk dataspace, dataset, and file
|
|
|
|
|
sid1.close();
|
|
|
|
|
dataset.close();
|
|
|
|
|
delete file1;
|
2008-09-16 23:52:51 +08:00
|
|
|
|
|
2006-10-22 16:24:24 +08:00
|
|
|
|
// Re-open the file
|
|
|
|
|
file1 = new H5File(FILE1, H5F_ACC_RDWR);
|
|
|
|
|
|
|
|
|
|
// Open the dataset
|
|
|
|
|
dataset = file1->openDataSet("/Dataset3");
|
|
|
|
|
|
|
|
|
|
// Read selection from disk
|
2008-09-16 23:52:51 +08:00
|
|
|
|
dataset.read(rbuf, PredType::STD_REF_OBJ);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
2008-09-16 23:52:51 +08:00
|
|
|
|
// Dereference dataset object by ctor, from the location where
|
2006-10-22 16:24:24 +08:00
|
|
|
|
// 'dataset' is located
|
|
|
|
|
DataSet dset2(dataset, &rbuf[0]);
|
|
|
|
|
|
|
|
|
|
// Check information in the referenced dataset
|
|
|
|
|
sid1 = dset2.getSpace();
|
|
|
|
|
hssize_t n_elements = sid1.getSimpleExtentNpoints();
|
2008-10-27 20:59:12 +08:00
|
|
|
|
verify_val((long)n_elements, 4, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Read from disk
|
|
|
|
|
dset2.read(tbuf, PredType::NATIVE_UINT);
|
|
|
|
|
|
|
|
|
|
for(tu32=(unsigned *)tbuf,i=0; i<SPACE1_DIM1; i++,tu32++)
|
2010-02-27 00:55:49 +08:00
|
|
|
|
verify_val(*tu32, (uint32_t)(i*3), "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
// Close dereferenced dataset
|
|
|
|
|
dset2.close();
|
|
|
|
|
|
|
|
|
|
// Dereference group object from the location where 'dataset' is located
|
|
|
|
|
group.dereference(dataset, &rbuf[2]);
|
|
|
|
|
|
|
|
|
|
// Get group's comment
|
|
|
|
|
H5std_string read_comment1 = group.getComment(".", 10);
|
|
|
|
|
verify_val(read_comment1, write_comment, "Group::getComment", __LINE__, __FILE__);
|
|
|
|
|
|
2010-04-28 04:19:20 +08:00
|
|
|
|
// Test that getComment handles failures gracefully
|
|
|
|
|
try {
|
|
|
|
|
H5std_string read_comment_tmp = group.getComment(NULL);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception E) {} // We expect this to fail
|
|
|
|
|
|
|
|
|
|
// Test reading the name of an item in the group
|
2010-05-02 22:25:42 +08:00
|
|
|
|
|
|
|
|
|
// Test getObjnameByIdx(idx)
|
2010-04-28 04:19:20 +08:00
|
|
|
|
H5std_string name;
|
|
|
|
|
name = group.getObjnameByIdx(0);
|
2010-05-02 22:25:42 +08:00
|
|
|
|
verify_val(name, DSET1_NAME, "Group::getObjnameByIdx", __LINE__, __FILE__);
|
|
|
|
|
// Test getObjnameByIdx(hsize_t idx, H5std_string& name, size_t size)
|
2010-04-28 04:19:20 +08:00
|
|
|
|
name.clear();
|
|
|
|
|
ssize_t name_size = group.getObjnameByIdx(0, name, 5);
|
2010-05-02 22:25:42 +08:00
|
|
|
|
verify_val(name, "Data", "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__);
|
|
|
|
|
verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
name.clear();
|
|
|
|
|
name_size = group.getObjnameByIdx(0, name, name_size+1);
|
|
|
|
|
verify_val(name, DSET1_NAME, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__);
|
|
|
|
|
verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
// Test getObjnameByIdx(hsize_t idx, char* name, size_t size)
|
|
|
|
|
char name_C[DSET1_LEN+1];
|
|
|
|
|
group.getObjnameByIdx(0, name, name_size+1);
|
|
|
|
|
verify_val(name, DSET1_NAME, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__);
|
|
|
|
|
verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__);
|
[svn-r17953] Description:
Bring Coverity changes into the trunk:
r17877:
Error 266: Uninitialized memspace set to -1. Changed malloc and free to HDmalloc and HDfree. Removed unused dtype var.
r17878:
Error 265: Uninitialized mem_space set to -1. Changed malloc and free to HDmalloc and HDfree.
Error 267: Uninitialized smspace set to -1. Changed malloc and free to HDmalloc and HDfree.
r17879:
Error 242: Uninitialized aid set to -1.
Error 243: Uninitialized sid set to -1.
Uninitialized tid set to -1 for consistency
r17880:
Error 242: reinitialized aid to -1 after close to be ready for reuse.
Error 243: reinitialized sid to -1 after close to be ready for reuse.
reinitialized tid to -1 for consistency after close to be ready for reuse.
r17881:
use valgrind to check there is a memory leak. The fix is to free ptrstr in line 5838 at xml_dump_group() of h5dump.c after it is used. run the valgrind after the fix, no memory leak for that part of the code.
r17882:
Fix Coverity items 256 and 269.
r17883:
Error 222-230: initialized hid_t vars to -1 after close to be ready for reuse.
Also added H5Tclose for tid in gent_bigdims
r17884:
Bug fix (Coverity run2, view 23, dead code)
(this is pair-program done by Albert, Elena and Larry).
Confirmed and fixed the deadcode in hyperslab read branch of function
diff_datasetid.
(Discovered other bad code that diff_datasetid() should be recoded.
Bug 1693 is entered for this.)
r17906:
Fix Coverity item 260.
r17907:
262: Initialized hid_t's dtype, dtype_tmp and file to -1. Initialized H5T_t * dt to NULL.
r17908:
Fix Coverity item 261.
r17909:
Fix Coverity item 248.
r17910:
Revise fix for Coverity item 248.
r17911:
Resolved coverity issues #s 263, 162, 163, 164. All issues in dsets.c. Initialized fid and did hid_t's. filter_corrupt function was returning in the middle of an if statement, bypassing free calls. Updated error handling to free buffers and hid_t's appropriately.
r17912:
(done by Larry and Albert)
Cleanup Coverity view warnings (#231-241) about
using uninitialized variables. Initialized all
of them.
r17913:
Resolved issue 251 and 264. Initialized tid2 to -1 and initialized buffers that were freed in case of an error.
r17914:
Resolved coverity issues 66, 220, and 221:
66: Negative Return assignment ignored
220,221: Initialized hid_t's.
r17915:
Fix Coverity item 247.
r17916:
Fix Coverity item 246.
r17917:
Fix Coverity item 245.
r17918:
Fix Coverity item 244.
r17919:
Coverity Issue #84: Moved asserts in H5T_cmp to the top of the function, and converted them to HDassert. Coverity complaining about using potentially NULL pointer without checking it. Want to see if Coverity will accept Assertions as acceptable checking before using the value.
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
w/C++ & FORTRAN, w/threadsafe, in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers, w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Mac OS X/32 10.6.2 (amazon) in debug mode
Mac OS X/32 10.6.2 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
2009-12-04 03:11:29 +08:00
|
|
|
|
|
2010-05-04 00:04:45 +08:00
|
|
|
|
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
2010-05-03 03:15:43 +08:00
|
|
|
|
// Test getting the type of objects
|
|
|
|
|
|
|
|
|
|
// Test getObjTypeByIdx(hsize_t idx)
|
2012-09-28 07:26:16 +08:00
|
|
|
|
H5G_obj_t obj_type = group.getObjTypeByIdx(0);
|
2010-05-03 03:15:43 +08:00
|
|
|
|
verify_val(obj_type, H5G_DATASET, "Group::getObjTypeByIdx(index)", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
// Test getObjTypeByIdx(hsize_t idx, char* type_name)
|
|
|
|
|
obj_type = H5G_UNKNOWN;
|
|
|
|
|
char type_name_C[256];
|
|
|
|
|
obj_type = group.getObjTypeByIdx(0, type_name_C);
|
|
|
|
|
verify_val(obj_type, H5G_DATASET, "Group::getObjTypeByIdx(index, (char*)name)", __LINE__, __FILE__);
|
|
|
|
|
verify_val((const char*)type_name_C, (const char*)"dataset", "Group::getObjTypeByIdx(index, (char*)name)", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
// Test getObjTypeByIdx(hsize_t idx, H5std_string& type_name)
|
|
|
|
|
obj_type = H5G_UNKNOWN;
|
|
|
|
|
H5std_string type_name;
|
|
|
|
|
obj_type = group.getObjTypeByIdx(0, type_name);
|
|
|
|
|
verify_val(obj_type, H5G_DATASET, "Group::getObjTypeByIdx(index, (char*)name)", __LINE__, __FILE__);
|
|
|
|
|
verify_val(type_name, "dataset", "Group::getObjTypeByIdx(index, (char*)name)", __LINE__, __FILE__);
|
|
|
|
|
|
2010-05-04 00:04:45 +08:00
|
|
|
|
#endif // ifndef H5_NO_DEPRECATED_SYMBOLS
|
|
|
|
|
|
2006-10-22 16:24:24 +08:00
|
|
|
|
// Close group
|
|
|
|
|
group.close();
|
|
|
|
|
|
|
|
|
|
// Dereference group object using file to specify location
|
|
|
|
|
group.dereference(*file1, &rbuf[2]);
|
|
|
|
|
H5std_string read_comment2 = group.getComment(".", 10);
|
|
|
|
|
verify_val(read_comment2, write_comment, "Group::getComment", __LINE__, __FILE__);
|
|
|
|
|
group.close();
|
|
|
|
|
|
2008-09-16 23:52:51 +08:00
|
|
|
|
// Dereference group object by ctor and using dataset to specify
|
2006-10-22 16:24:24 +08:00
|
|
|
|
// location
|
|
|
|
|
Group new_group(dataset, &rbuf[2]);
|
2007-01-26 13:40:17 +08:00
|
|
|
|
H5std_string read_comment3 = new_group.getComment(".", 10);
|
2006-10-22 16:24:24 +08:00
|
|
|
|
verify_val(read_comment3, write_comment, "Group::getComment", __LINE__, __FILE__);
|
2008-10-27 20:59:12 +08:00
|
|
|
|
new_group.close();
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
2008-09-16 23:52:51 +08:00
|
|
|
|
// Dereference datatype object from the location where 'dataset'
|
2006-10-22 16:24:24 +08:00
|
|
|
|
// is located
|
|
|
|
|
dtype1.dereference(dataset, &rbuf[3]);
|
|
|
|
|
|
|
|
|
|
// Verify correct datatype
|
|
|
|
|
H5T_class_t tclass = dtype1.getClass();
|
|
|
|
|
verify_val(tclass, H5T_COMPOUND, "DataType::getClass", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
int n_members = dtype1.getNmembers();
|
|
|
|
|
verify_val(n_members, 3, "DataType::getNmembers", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
// Close datatype
|
|
|
|
|
dtype1.close();
|
|
|
|
|
|
|
|
|
|
// Dereference datatype object by ctor, using file to specify location
|
|
|
|
|
DataType dtype2(*file1, &rbuf[3]);
|
|
|
|
|
|
|
|
|
|
// Verify correct datatype
|
|
|
|
|
H5T_class_t tclass2 = dtype2.getClass();
|
|
|
|
|
verify_val(tclass2, H5T_COMPOUND, "DataType::getClass", __LINE__, __FILE__);
|
|
|
|
|
|
|
|
|
|
// Close datatype
|
|
|
|
|
dtype2.close();
|
|
|
|
|
|
|
|
|
|
// Close dataset and file
|
|
|
|
|
dataset.close();
|
|
|
|
|
file1->close();
|
|
|
|
|
|
|
|
|
|
// Free memory buffers
|
2008-10-27 20:59:12 +08:00
|
|
|
|
HDfree(wbuf);
|
|
|
|
|
HDfree(rbuf);
|
|
|
|
|
HDfree(tbuf);
|
2007-03-18 00:26:53 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
2006-10-22 16:24:24 +08:00
|
|
|
|
} // end try
|
|
|
|
|
catch (Exception E) {
|
2007-03-18 00:26:53 +08:00
|
|
|
|
issue_fail_msg("test_reference_obj()", __LINE__, __FILE__, E.getCDetailMsg());
|
2006-10-22 16:24:24 +08:00
|
|
|
|
}
|
2011-02-06 11:24:42 +08:00
|
|
|
|
|
|
|
|
|
if(file1)
|
|
|
|
|
delete file1;
|
2006-10-22 16:24:24 +08:00
|
|
|
|
} // test_reference_obj()
|
|
|
|
|
|
2012-09-28 07:26:16 +08:00
|
|
|
|
/****************************************************************
|
|
|
|
|
**
|
|
|
|
|
** test_reference_compat(): Test basic object reference functionality.
|
|
|
|
|
** Tests references to various kinds of objects using deprecated API.
|
|
|
|
|
**
|
|
|
|
|
****************************************************************/
|
|
|
|
|
static void test_reference_compat(void)
|
|
|
|
|
{
|
|
|
|
|
// Not yet
|
|
|
|
|
} // test_reference_compat()
|
|
|
|
|
|
|
|
|
|
|
2006-10-22 16:24:24 +08:00
|
|
|
|
/****************************************************************
|
|
|
|
|
**
|
|
|
|
|
** test_reference(): Main reference testing routine.
|
|
|
|
|
**
|
|
|
|
|
****************************************************************/
|
2007-03-08 17:50:55 +08:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C"
|
|
|
|
|
#endif
|
2008-10-27 20:59:12 +08:00
|
|
|
|
void test_reference(void)
|
2006-10-22 16:24:24 +08:00
|
|
|
|
{
|
|
|
|
|
// Output message about test being performed
|
2010-02-27 00:55:49 +08:00
|
|
|
|
//MESSAGE("Testing References\n");
|
2006-10-22 16:24:24 +08:00
|
|
|
|
MESSAGE(5, ("Testing References\n"));
|
|
|
|
|
|
|
|
|
|
test_reference_obj(); // Test basic object reference functionality
|
2012-09-28 07:26:16 +08:00
|
|
|
|
test_reference_compat(); // Tests deprecated reference routines (not yet)
|
2006-10-22 16:24:24 +08:00
|
|
|
|
|
|
|
|
|
} // test_reference()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
|
** Function: cleanup_reference
|
|
|
|
|
** Purpose: Cleanup temporary test files
|
|
|
|
|
** Return: none
|
|
|
|
|
****************************************************************/
|
2007-03-18 00:26:53 +08:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C"
|
|
|
|
|
#endif
|
2008-10-27 20:59:12 +08:00
|
|
|
|
void cleanup_reference(void)
|
2006-10-22 16:24:24 +08:00
|
|
|
|
{
|
2007-03-18 00:26:53 +08:00
|
|
|
|
HDremove(FILE1.c_str());
|
2006-10-22 16:24:24 +08:00
|
|
|
|
}
|
|
|
|
|
|