summaryrefslogtreecommitdiffstats
path: root/c++/test
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2012-09-27 23:26:16 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2012-09-27 23:26:16 (GMT)
commit5fcec401bd019aa0928e11c3d4cff62ea064c1ef (patch)
treeebd883ef4019a33ef8e5b4b34bf53e815067a7cb /c++/test
parente488529430ae2f90f9d327959a4610d5786a3350 (diff)
downloadhdf5-5fcec401bd019aa0928e11c3d4cff62ea064c1ef.zip
hdf5-5fcec401bd019aa0928e11c3d4cff62ea064c1ef.tar.gz
hdf5-5fcec401bd019aa0928e11c3d4cff62ea064c1ef.tar.bz2
[svn-r22836] Purpose: Fix bug HDFFV-533 and add other missing functions
Description: In this bug, H5File doesn't have the ability to create attribute. The following changes will provide that functionality and several others that were also missing: - Added an abstract class H5Location in between IdComponent and H5Object. - New class structure of IdComponent, H5Location, H5Object, H5File IdComponent | H5Location / \ H5Object H5File - Wrappers in H5Object were moved to H5Location because the related C functions take either file, group, dataset, or named datatype ID. - Added wrapper for H5Rget_obj_type2 - Added tests for file attributes and H5Rget_obj_type2 wrapper Platforms tested: Linux/32 2.6 (jam) Linux/64 2.6 (koala) SunOS 5.10 (linew)
Diffstat (limited to 'c++/test')
-rw-r--r--c++/test/h5cpputil.cpp1
-rw-r--r--c++/test/tattr.cpp135
-rw-r--r--c++/test/tfile.cpp137
-rw-r--r--c++/test/trefer.cpp44
4 files changed, 250 insertions, 67 deletions
diff --git a/c++/test/h5cpputil.cpp b/c++/test/h5cpputil.cpp
index 4485808..c6a7a2a 100644
--- a/c++/test/h5cpputil.cpp
+++ b/c++/test/h5cpputil.cpp
@@ -100,6 +100,7 @@ void issue_fail_msg(const char* where, int line, const char* file_name,
{
//if (GetTestVerbosity()>=VERBO_HI)
{
+ cerr << endl;
cerr << ">>> FAILED in " << where << " at line " << line
<< " in " << file_name << " - " << message << endl << endl;
}
diff --git a/c++/test/tattr.cpp b/c++/test/tattr.cpp
index 6bb9ca0..6f7674d 100644
--- a/c++/test/tattr.cpp
+++ b/c++/test/tattr.cpp
@@ -42,8 +42,13 @@
#include "h5cpputil.h" // C++ utilility header file
-const H5std_string FILENAME("tattr.h5");
-const H5std_string ATTR_TMP_NAME("temp_name");
+const H5std_string FILE_BASIC("tattr_basic.h5");
+const H5std_string FILE_COMPOUND("tattr_compound.h5");
+const H5std_string FILE_SCALAR("tattr_scalar.h5");
+const H5std_string FILE_MULTI("tattr_multi.h5");
+const H5std_string FILE_DTYPE("tattr_dtype.h5");
+const H5std_string ATTR_TMP_NAME("temp_attr_name");
+const H5std_string FATTR_TMP_NAME("temp_fattr_name");
const size_t ATTR_MAX_DIMS = 7;
/* 3-D dataset with fixed dimensions */
@@ -63,6 +68,10 @@ const int ATTR1_RANK = 1;
const int ATTR1_DIM1 = 3;
int attr_data1[ATTR1_DIM1]={512,-234,98123}; /* Test data for 1st attribute */
+// File attribute, using the same rank and dimensions as ATTR1_NAME's
+const H5std_string FATTR1_NAME("File Attr1");
+const H5std_string FATTR2_NAME("File Attr2");
+
const H5std_string ATTR2_NAME("Attr2");
const int ATTR2_RANK = 2;
const int ATTR2_DIM1 = 2;
@@ -121,7 +130,7 @@ static void test_attr_basic_write()
try {
// Create file
- H5File fid1 (FILENAME, H5F_ACC_TRUNC);
+ H5File fid1 (FILE_BASIC, H5F_ACC_TRUNC);
// Create dataspace for dataset
DataSpace ds_space (SPACE1_RANK, dims1);
@@ -136,6 +145,12 @@ static void test_attr_basic_write()
// Create dataspace for attribute
DataSpace att_space (ATTR1_RANK, dims2);
+ // Create a file attribute
+ Attribute file_attr2 = fid1.createAttribute (FATTR1_NAME, PredType::NATIVE_INT, att_space);
+
+ // Create a file attribute
+ Attribute file_attr1 = fid1.createAttribute (FATTR2_NAME, PredType::NATIVE_INT, att_space);
+
// Create an attribute for the dataset
Attribute ds_attr1 = dataset.createAttribute (ATTR1_NAME, PredType::NATIVE_INT, att_space);
@@ -163,8 +178,9 @@ static void test_attr_basic_write()
if(attr_data1[i]!=read_data1[i])
TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d,read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
- // Create another attribute for this dataset
- Attribute ds_attr2 = dataset.createAttribute (ATTR1A_NAME, PredType::NATIVE_INT, att_space);
+ // Create two more attributes for this dataset, but only write to one.
+ Attribute ds_attr2 = dataset.createAttribute (ATTR2_NAME, PredType::NATIVE_INT, att_space);
+ Attribute ds_attr3 = dataset.createAttribute (ATTR3_NAME, PredType::NATIVE_INT, att_space);
// Write attribute information
ds_attr2.write (PredType::NATIVE_INT, attr_data1a);
@@ -180,6 +196,7 @@ static void test_attr_basic_write()
// Close both attributes
ds_attr1.close();
ds_attr2.close();
+ ds_attr3.close();
/*
* Test attribute with group
@@ -240,14 +257,32 @@ static void test_attr_rename()
try {
// Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_BASIC, H5F_ACC_RDWR);
+
+ // Check rename of attribute belonging to a file
+
+ // Change attribute name
+ fid1.renameAttr(FATTR1_NAME, FATTR_TMP_NAME);
+
+ // Open attribute again
+ Attribute fattr1(fid1.openAttribute(FATTR_TMP_NAME));
+
+ // Verify new attribute name
+ H5std_string fattr_name = fattr1.getName();
+ verify_val(fattr_name, FATTR_TMP_NAME, "Attribute::getName", __LINE__, __FILE__);
+
+ int num_attrs = fid1.getNumAttrs();
+ verify_val(num_attrs, 2, "Attribute::getNumAttrs", __LINE__, __FILE__);
+
+ // Change first file attribute back to the original name
+ fid1.renameAttr(FATTR_TMP_NAME, FATTR1_NAME);
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
- // Check rename
+ // Check rename of attribute belonging to a dataset
- // change attribute name
+ // Change attribute name
dataset.renameAttr(ATTR1_NAME, ATTR_TMP_NAME);
// Open attribute again
@@ -269,11 +304,11 @@ static void test_attr_rename()
attr1.close();
// Open the second attribute
- Attribute attr2(dataset.openAttribute(ATTR1A_NAME));
+ Attribute attr2(dataset.openAttribute(ATTR2_NAME));
// Verify second attribute name
H5std_string attr2_name = attr2.getName();
- verify_val(attr2_name, ATTR1A_NAME, "Attribute::getName", __LINE__, __FILE__);
+ verify_val(attr2_name, ATTR2_NAME, "Attribute::getName", __LINE__, __FILE__);
// Read attribute information immediately, without closing attribute
attr2.read (PredType::NATIVE_INT, read_data1);
@@ -311,14 +346,14 @@ static void test_attr_basic_read()
try {
// Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_BASIC, H5F_ACC_RDWR);
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
// Verify the correct number of attributes
int num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 2, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 3, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Open an attribute for the dataset
Attribute ds_attr=dataset.openAttribute(ATTR1_NAME);
@@ -378,7 +413,7 @@ static void test_attr_compound_write()
try {
// Create file
- H5File fid1(FILENAME.c_str(), H5F_ACC_TRUNC);
+ H5File fid1(FILE_COMPOUND.c_str(), H5F_ACC_TRUNC);
// Create dataspace for dataset
hsize_t dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
@@ -442,14 +477,14 @@ static void test_attr_compound_read()
try {
// Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_COMPOUND, H5F_ACC_RDWR);
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
// Verify the correct number of attributes
int num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 1, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 1, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Open 1st attribute for the dataset
Attribute attr = dataset.openAttribute((unsigned)0);
@@ -571,7 +606,7 @@ static void test_attr_scalar_write()
try {
// Create file
- H5File fid1(FILENAME, H5F_ACC_TRUNC);
+ H5File fid1(FILE_SCALAR, H5F_ACC_TRUNC);
// Create dataspace for dataset
hsize_t dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
@@ -625,14 +660,14 @@ static void test_attr_scalar_read()
try {
// Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_SCALAR, H5F_ACC_RDWR);
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
// Verify the correct number of attributes
int num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 1, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 1, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Open an attribute for the dataset
Attribute ds_attr=dataset.openAttribute(ATTR5_NAME);
@@ -669,7 +704,7 @@ static void test_attr_mult_write()
try {
// Create file
- H5File fid1 (FILENAME, H5F_ACC_TRUNC);
+ H5File fid1 (FILE_MULTI, H5F_ACC_TRUNC);
// Create dataspace for dataset
hsize_t dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
@@ -746,14 +781,14 @@ static void test_attr_mult_read()
try {
// Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_MULTI, H5F_ACC_RDWR);
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
// Verify the correct number of attributes
int num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 3, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 3, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Open 1st attribute for the dataset
Attribute attr = dataset.openAttribute((unsigned)0);
@@ -929,22 +964,42 @@ static void test_attr_mult_read()
static void test_attr_delete()
{
H5std_string attr_name; // Buffer for attribute names
+ int ii;
- // Output message about test being performed
+ // Output message about test being performed
SUBTEST("Removing Attribute Function");
try {
- // Open file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ // Open file.
+ H5File fid1(FILE_BASIC, H5F_ACC_RDWR);
+
+ // Get the number of file attributes
+ int num_attrs = fid1.getNumAttrs();
+ verify_val(num_attrs, 2, "H5File::getNumAttrs", __LINE__, __FILE__);
+
+ // Delete the second file attribute
+ fid1.removeAttr(FATTR2_NAME);
+
+ // Get the number of file attributes
+ num_attrs = fid1.getNumAttrs();
+ verify_val(num_attrs, 1, "H5File::getNumAttrs", __LINE__, __FILE__);
+
+ // Verify the name of the only file attribute left
+ Attribute fattr = fid1.openAttribute((uint)0);
+ H5std_string attr_name = fattr.getName();
+ verify_val(attr_name, FATTR1_NAME, "Attribute::getName", __LINE__, __FILE__);
+ fattr.close();
+
+ // Test deleting non-existing attribute
// Open the dataset
DataSet dataset = fid1.openDataSet(DSET1_NAME);
// Verify the correct number of attributes
- int num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 3, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ num_attrs = dataset.getNumAttrs();
+ verify_val(num_attrs, 3, "DataSet::getNumAttrs", __LINE__, __FILE__);
- // Try to delete bogus attribute, should fail.
+ // Try to delete bogus attribute, should fail
try {
dataset.removeAttr("Bogus");
@@ -954,16 +1009,18 @@ static void test_attr_delete()
catch (AttributeIException E) // catching invalid removing attribute
{} // do nothing, exception expected
+ // Test deleting dataset's attributes
+
// Verify the correct number of attributes
num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 3, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 3, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Delete middle (2nd) attribute
dataset.removeAttr(ATTR2_NAME);
// Verify the correct number of attributes
num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 2, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 2, "DataSet::getNumAttrs", __LINE__, __FILE__);
// Open 1st attribute for the dataset
Attribute attr = dataset.openAttribute((unsigned)0);
@@ -989,9 +1046,9 @@ static void test_attr_delete()
// Verify the correct number of attributes
num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 1, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 1, "DataSet::getNumAttrs", __LINE__, __FILE__);
- // Open last (formally 3rd) attribute for the dataset
+ // Open the only attribute for the dataset (formally 3rd)
attr = dataset.openAttribute((unsigned)0);
// Verify Name
@@ -1005,7 +1062,7 @@ static void test_attr_delete()
// Verify the correct number of attributes
num_attrs = dataset.getNumAttrs();
- verify_val(num_attrs, 0, "H5Object::getNumAttrs", __LINE__, __FILE__);
+ verify_val(num_attrs, 0, "DataSet::getNumAttrs", __LINE__, __FILE__);
PASSED();
} // end try block
@@ -1035,19 +1092,19 @@ static void test_attr_dtype_shared()
try {
// Create a file
- H5File fid1(FILENAME, H5F_ACC_TRUNC);
+ H5File fid1(FILE_DTYPE, H5F_ACC_TRUNC);
// Close file
fid1.close();
// Get size of file
h5_stat_size_t empty_filesize; // Size of empty file
- empty_filesize = h5_get_file_size(FILENAME.c_str(), H5P_DEFAULT);
+ empty_filesize = h5_get_file_size(FILE_DTYPE.c_str(), H5P_DEFAULT);
if (empty_filesize < 0)
TestErrPrintf("Line %d: file size wrong!\n", __LINE__);
// Open the file again
- fid1.openFile(FILENAME, H5F_ACC_RDWR);
+ fid1.openFile(FILE_DTYPE, H5F_ACC_RDWR);
// Enclosing to work around the issue of unused variables and/or
// objects created by copy constructors stay around until end of
@@ -1120,7 +1177,7 @@ static void test_attr_dtype_shared()
fid1.close();
// Open the file again
- fid1.openFile(FILENAME, H5F_ACC_RDWR);
+ fid1.openFile(FILE_DTYPE, H5F_ACC_RDWR);
{ // Second enclosed block...
@@ -1161,7 +1218,7 @@ static void test_attr_dtype_shared()
fid1.close();
// Check size of file
- filesize = h5_get_file_size(FILENAME.c_str(), H5P_DEFAULT);
+ filesize = h5_get_file_size(FILE_DTYPE.c_str(), H5P_DEFAULT);
verify_val((long)filesize, (long)empty_filesize, "Checking file size", __LINE__, __FILE__);
PASSED();
@@ -1192,7 +1249,7 @@ static void test_string_attr()
try {
// Create file
- H5File fid1(FILENAME, H5F_ACC_RDWR);
+ H5File fid1(FILE_BASIC, H5F_ACC_RDWR);
//
// Fixed-lenth string attributes
@@ -1349,6 +1406,6 @@ extern "C"
#endif
void cleanup_attr()
{
- HDremove(FILENAME.c_str());
+ //HDremove(FILENAME.c_str());
}
diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp
index df01752..ba38d7a 100644
--- a/c++/test/tfile.cpp
+++ b/c++/test/tfile.cpp
@@ -333,6 +333,7 @@ static void test_file_open()
tmpl1.getSymk( iparm1, iparm2);
verify_val(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
verify_val(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+
PASSED();
} // end of try block
@@ -381,8 +382,16 @@ static void test_file_size()
hsize_t file_size = file4.getFileSize();
// Check if file size is reasonable. It's supposed to be 2KB now.
- if(file_size<1*KB || file_size>4*KB)
- issue_fail_msg("test_file_size()", __LINE__, __FILE__);
+ if (file_size < 1*KB || file_size > 4*KB)
+ issue_fail_msg("test_file_size()", __LINE__, __FILE__, "getFileSize() returned unreasonable value");
+
+ // Get the amount of free space in the file
+ hssize_t free_space = file4.getFreeSpace();
+
+ // Check if it's reasonable. It's 0 now.
+ if (free_space < 0 || free_space > 4*KB)
+ issue_fail_msg("test_file_size()", __LINE__, __FILE__, "getFreeSpace returned unreasonable value");
+
PASSED();
} // end of try block
@@ -415,7 +424,8 @@ const int NX = 4;
const int NY = 5;
const H5std_string GROUPNAME ("group");
const H5std_string DSETNAME ("dataset");
-const H5std_string ATTRNAME ("attribute");
+const H5std_string DATTRNAME ("dataset attribute");
+const H5std_string FATTRNAME ("file attribute");
const H5std_string DTYPENAME ("compound");
// Compound datatype
@@ -431,17 +441,17 @@ static void test_file_name()
H5std_string file_name;
try {
- // Create a file using default properties.
+ // Create a file using default properties
H5File file4(FILE4, H5F_ACC_TRUNC);
- // Get file name from the file instance.
+ // Get file name from the file instance
file_name = file4.getFileName();
verify_val(file_name, FILE4, "H5File::getFileName", __LINE__, __FILE__);
// Create a group in the root group
Group group(file4.createGroup(GROUPNAME, 0));
- // Get and verify file name
+ // Get and verify file name via a group
file_name = group.getFileName();
verify_val(file_name, FILE4, "Group::getFileName", __LINE__, __FILE__);
@@ -452,12 +462,12 @@ static void test_file_name()
// Create a new dataset
DataSet dataset(file4.createDataSet (DSETNAME, PredType::NATIVE_INT, space));
- // Get and verify file name
+ // Get and verify file name via a dataset
file_name = dataset.getFileName();
verify_val(file_name, FILE4, "DataSet::getFileName", __LINE__, __FILE__);
// Create an attribute for the dataset
- Attribute attr(dataset.createAttribute(ATTRNAME, PredType::NATIVE_INT, space));
+ Attribute attr(dataset.createAttribute(DATTRNAME, PredType::NATIVE_INT, space));
// Get and verify file name
file_name = attr.getFileName();
@@ -486,6 +496,116 @@ static void test_file_name()
} // test_file_name()
+#define NUM_OBJS 4
+#define NUM_ATTRS 3
+const int RANK1 = 1;
+const int ATTR1_DIM1 = 3;
+const H5std_string FILE5("tfattrs.h5");
+const H5std_string FATTR1_NAME ("file attribute 1");
+const H5std_string FATTR2_NAME ("file attribute 2");
+int fattr_data[ATTR1_DIM1]={512,-234,98123}; /* Test data for file attribute */
+int dattr_data[ATTR1_DIM1]={256,-123,1000}; /* Test data for dataset attribute */
+static void test_file_attribute()
+{
+ int rdata[ATTR1_DIM1];
+ int i;
+
+ // Output message about test being performed
+ SUBTEST("File Attribute");
+
+ H5std_string file_name;
+ try {
+ // Create a file using default properties.
+ H5File file5(FILE5, H5F_ACC_TRUNC);
+
+ // Create the data space
+ hsize_t dims[RANK1] = {ATTR1_DIM1};
+ DataSpace space(RANK1, dims);
+
+ // Create two attributes for the file
+ Attribute fattr1(file5.createAttribute(FATTR1_NAME, PredType::NATIVE_FLOAT, space));
+ Attribute fattr2(file5.createAttribute(FATTR2_NAME, PredType::NATIVE_INT, space));
+
+ fattr2.write(PredType::NATIVE_INT, fattr_data);
+
+ try {
+ // Try to create the same attribute again (should fail)
+ Attribute fattr_dup(file5.createAttribute(FATTR2_NAME, PredType::NATIVE_INT, space));
+ // Should FAIL but didn't, so throw an invalid action exception
+ throw InvalidActionException("H5File createAttribute", "Attempted to create an existing attribute.");
+ }
+ catch( AttributeIException E ) // catch creating existing attribute
+ {} // do nothing, FAIL expected
+
+ // Create a new dataset
+ DataSet dataset(file5.createDataSet (DSETNAME, PredType::NATIVE_INT, space));
+
+ // Create an attribute for the dataset
+ Attribute dattr(dataset.createAttribute(DATTRNAME, PredType::NATIVE_INT, space));
+
+ // Write data to the second file attribute
+ dattr.write(PredType::NATIVE_INT, dattr_data);
+
+ // Test flushing out the data from the attribute object
+ dattr.flush(H5F_SCOPE_GLOBAL);
+
+ // Get and verify the number of all objects in the file
+ // Current: 1 file, 2 file attr, 1 ds, and 1 ds attr.
+ ssize_t num_objs = file5.getObjCount(H5F_OBJ_ALL);
+ verify_val(num_objs, 5, "H5File::getObjCount", __LINE__, __FILE__);
+
+ num_objs = file5.getObjCount(H5F_OBJ_GROUP);
+ verify_val(num_objs, 0, "H5File::getObjCount(H5F_OBJ_GROUP)", __LINE__, __FILE__);
+ num_objs = file5.getObjCount(H5F_OBJ_DATASET);
+ verify_val(num_objs, 1, "H5File::getObjCount(H5F_OBJ_DATASET)", __LINE__, __FILE__);
+ num_objs = file5.getObjCount(H5F_OBJ_ATTR);
+ verify_val(num_objs, 3, "H5File::getObjCount(H5F_OBJ_ATTR)", __LINE__, __FILE__);
+ num_objs = file5.getObjCount(H5F_OBJ_DATATYPE);
+ verify_val(num_objs, 0, "H5File::getObjCount(H5F_OBJ_DATATYPE)", __LINE__, __FILE__);
+ num_objs = file5.getObjCount(H5F_OBJ_FILE);
+ verify_val(num_objs, 1, "H5File::getObjCount(H5F_OBJ_FILE)", __LINE__, __FILE__);
+
+ // Get the file name using the attributes
+ H5std_string fname = fattr1.getFileName();
+ verify_val(fname, FILE5, "H5File::getFileName()", __LINE__, __FILE__);
+
+ fname.clear();
+ fname = dattr.getFileName();
+ verify_val(fname, FILE5, "H5File::getFileName()", __LINE__, __FILE__);
+
+ // Get the class of a file attribute's datatype
+ H5T_class_t atclass = fattr1.getTypeClass();
+ verify_val(atclass, H5T_FLOAT, "Attribute::getTypeClass()", __LINE__, __FILE__);
+
+ // Get and verify the number of attributes attached to a file
+ int n_attrs = file5.getNumAttrs();
+ verify_val(n_attrs, 2, "H5File::getNumAttrs()", __LINE__, __FILE__);
+
+ // Get and verify the number of attributes attached to a dataset
+ n_attrs = 0;
+ n_attrs = dataset.getNumAttrs();
+ verify_val(n_attrs, 1, "DataSet::getNumAttrs()", __LINE__, __FILE__);
+
+ // Read back attribute's data
+ HDmemset(rdata, 0, sizeof(rdata));
+ dattr.read(PredType::NATIVE_INT, rdata);
+ /* Check results */
+ for (i = 0; i < ATTR1_DIM1; i++) {
+ if (rdata[i] != dattr_data[i]) {
+ H5_FAILED();
+ cerr << endl;
+ cerr << "element [" << i << "] is " << rdata[i] <<
+ "but should have been " << dattr_data[i] << endl;
+ }
+ }
+ PASSED();
+ } // end of try block
+
+ catch (Exception E) {
+ issue_fail_msg("test_file_name()", __LINE__, __FILE__, E.getCDetailMsg());
+ }
+} // test_file_attribute()
+
/*-------------------------------------------------------------------------
* Function: test_file
*
@@ -513,6 +633,7 @@ void test_file()
test_file_open(); // Test file opening
test_file_size(); // Test file size
test_file_name(); // Test getting file's name
+ test_file_attribute(); // Test file attribute feature
} // test_file()
diff --git a/c++/test/trefer.cpp b/c++/test/trefer.cpp
index 7f63d33..4eb5b21 100644
--- a/c++/test/trefer.cpp
+++ b/c++/test/trefer.cpp
@@ -149,34 +149,25 @@ static void test_reference_obj(void)
// Create a dataset
dataset = file1->createDataSet("Dataset3", PredType::STD_REF_OBJ, sid1);
- // Create reference to dataset
+ // Create reference to dataset and test getRefObjType
file1->reference(&wbuf[0], "/Group1/Dataset1");
+ H5O_type_t refobj_type = dataset.getRefObjType(&wbuf[0], H5R_OBJECT);
+ verify_val(refobj_type, H5O_TYPE_DATASET, "DataSet::getRefObjType", __LINE__, __FILE__);
-#ifndef H5_NO_DEPRECATED_SYMBOLS
- H5G_obj_t obj_type = dataset.getObjType(&wbuf[0], H5R_OBJECT);
- verify_val(obj_type, H5G_DATASET, "DataSet::getObjType", __LINE__, __FILE__);
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
-
- // Create reference to dataset
+ // Create reference to dataset and test getRefObjType
file1->reference(&wbuf[1], "/Group1/Dataset2");
-#ifndef H5_NO_DEPRECATED_SYMBOLS
- obj_type = dataset.getObjType(&wbuf[1], H5R_OBJECT);
- verify_val(obj_type, H5G_DATASET, "DataSet::getObjType", __LINE__, __FILE__);
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
+ refobj_type = dataset.getRefObjType(&wbuf[1], H5R_OBJECT);
+ verify_val(refobj_type, H5O_TYPE_DATASET, "DataSet::getRefObjType", __LINE__, __FILE__);
// Create reference to group
file1->reference(&wbuf[2], "/Group1");
-#ifndef H5_NO_DEPRECATED_SYMBOLS
- obj_type = dataset.getObjType(&wbuf[2], H5R_OBJECT);
- verify_val(obj_type, H5G_GROUP, "DataSet::getObjType", __LINE__, __FILE__);
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
+ refobj_type = dataset.getRefObjType(&wbuf[2], H5R_OBJECT);
+ verify_val(refobj_type, H5O_TYPE_GROUP, "DataSet::getRefObjType", __LINE__, __FILE__);
// Create reference to named datatype
file1->reference(&wbuf[3], "/Group1/Datatype1");
-#ifndef H5_NO_DEPRECATED_SYMBOLS
- obj_type = dataset.getObjType(&wbuf[3], H5R_OBJECT);
- verify_val(obj_type, H5G_TYPE, "DataSet::getObjType", __LINE__, __FILE__);
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
+ refobj_type = dataset.getRefObjType(&wbuf[3], H5R_OBJECT);
+ verify_val(refobj_type, H5O_TYPE_NAMED_DATATYPE, "DataSet::getRefObjType", __LINE__, __FILE__);
// Write selection to disk
dataset.write(wbuf, PredType::STD_REF_OBJ);
@@ -253,7 +244,7 @@ static void test_reference_obj(void)
// Test getting the type of objects
// Test getObjTypeByIdx(hsize_t idx)
- obj_type = group.getObjTypeByIdx(0);
+ H5G_obj_t obj_type = group.getObjTypeByIdx(0);
verify_val(obj_type, H5G_DATASET, "Group::getObjTypeByIdx(index)", __LINE__, __FILE__);
// Test getObjTypeByIdx(hsize_t idx, char* type_name)
@@ -333,6 +324,18 @@ static void test_reference_obj(void)
/****************************************************************
**
+** 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()
+
+
+/****************************************************************
+**
** test_reference(): Main reference testing routine.
**
****************************************************************/
@@ -346,6 +349,7 @@ void test_reference(void)
MESSAGE(5, ("Testing References\n"));
test_reference_obj(); // Test basic object reference functionality
+ test_reference_compat(); // Tests deprecated reference routines (not yet)
} // test_reference()