diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2014-03-30 16:15:11 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2014-03-30 16:15:11 (GMT) |
commit | be38074a2fc72d6040d280777cb9772bdf6c5587 (patch) | |
tree | 8a2f30063607ad5f28552f1b3bc1554b364c019b /c++/test | |
parent | d6cd6cabc2734d6548af4139ec912814174adb84 (diff) | |
download | hdf5-be38074a2fc72d6040d280777cb9772bdf6c5587.zip hdf5-be38074a2fc72d6040d280777cb9772bdf6c5587.tar.gz hdf5-be38074a2fc72d6040d280777cb9772bdf6c5587.tar.bz2 |
[svn-r24925] Purpose: Fix HDFFV-7907
Description:
Added transform property list functions
// Constructor creates a dataset transform property list.
DSetMemXferPropList(const char* expression);
// Sets data transform expression.
void setDataTransform(const char* expression) const;
void setDataTransform(const H5std_string& expression) const;
// Gets data transform expression.
ssize_t getDataTransform(char* exp, size_t buf_size=0) const;
H5std_string getDataTransform() const;
Added test file tdspl.cpp.
Platforms tested:
Linux/ppc64 (ostrich)
Linux/32 2.6 (jam)
SunOS 5.11 (emu)
Diffstat (limited to 'c++/test')
-rw-r--r-- | c++/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | c++/test/Makefile.am | 2 | ||||
-rw-r--r-- | c++/test/Makefile.in | 11 | ||||
-rw-r--r-- | c++/test/h5cpputil.h | 2 | ||||
-rw-r--r-- | c++/test/tdspl.cpp | 144 | ||||
-rw-r--r-- | c++/test/testhdf5.cpp | 1 |
6 files changed, 155 insertions, 6 deletions
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt index 9966163..220d4b1 100644 --- a/c++/test/CMakeLists.txt +++ b/c++/test/CMakeLists.txt @@ -15,6 +15,7 @@ set (CPP_TEST_SRCS ${HDF5_CPP_TEST_SOURCE_DIR}/testhdf5.cpp ${HDF5_CPP_TEST_SOURCE_DIR}/tattr.cpp ${HDF5_CPP_TEST_SOURCE_DIR}/tcompound.cpp + ${HDF5_CPP_TEST_SOURCE_DIR}/tdspl.cpp ${HDF5_CPP_TEST_SOURCE_DIR}/tfile.cpp ${HDF5_CPP_TEST_SOURCE_DIR}/tfilter.cpp ${HDF5_CPP_TEST_SOURCE_DIR}/th5s.cpp diff --git a/c++/test/Makefile.am b/c++/test/Makefile.am index 3f62bda..74241f1 100644 --- a/c++/test/Makefile.am +++ b/c++/test/Makefile.am @@ -38,7 +38,7 @@ check_PROGRAMS=$(TEST_PROG) LDADD=$(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5) testhdf5_SOURCES=testhdf5.cpp dsets.cpp tattr.cpp tcompound.cpp \ - tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp trefer.cpp \ + tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp trefer.cpp \ ttypes.cpp tvlstr.cpp h5cpputil.cpp # Tell conclude.am that these are C++ tests. diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in index 5e88a09..edf4fbf 100644 --- a/c++/test/Makefile.in +++ b/c++/test/Makefile.in @@ -87,10 +87,10 @@ CONFIG_CLEAN_FILES = H5srcdir_str.h CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = testhdf5$(EXEEXT) am_testhdf5_OBJECTS = testhdf5.$(OBJEXT) dsets.$(OBJEXT) \ - tattr.$(OBJEXT) tcompound.$(OBJEXT) tfile.$(OBJEXT) \ - tfilter.$(OBJEXT) th5s.$(OBJEXT) tlinks.$(OBJEXT) \ - trefer.$(OBJEXT) ttypes.$(OBJEXT) tvlstr.$(OBJEXT) \ - h5cpputil.$(OBJEXT) + tattr.$(OBJEXT) tcompound.$(OBJEXT) tdspl.$(OBJEXT) \ + tfile.$(OBJEXT) tfilter.$(OBJEXT) th5s.$(OBJEXT) \ + tlinks.$(OBJEXT) trefer.$(OBJEXT) ttypes.$(OBJEXT) \ + tvlstr.$(OBJEXT) h5cpputil.$(OBJEXT) testhdf5_OBJECTS = $(am_testhdf5_OBJECTS) testhdf5_LDADD = $(LDADD) testhdf5_DEPENDENCIES = $(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5) @@ -438,7 +438,7 @@ TEST_PROG = testhdf5 # The tests depend on the hdf5 library, test library, and the c++ library LDADD = $(LIBH5TEST) $(LIBH5CPP) $(LIBHDF5) testhdf5_SOURCES = testhdf5.cpp dsets.cpp tattr.cpp tcompound.cpp \ - tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp trefer.cpp \ + tdspl.cpp tfile.cpp tfilter.cpp th5s.cpp tlinks.cpp trefer.cpp \ ttypes.cpp tvlstr.cpp h5cpputil.cpp @@ -524,6 +524,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5cpputil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tattr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcompound.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdspl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testhdf5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tfilter.Po@am__quote@ diff --git a/c++/test/h5cpputil.h b/c++/test/h5cpputil.h index b107045..cc135bd 100644 --- a/c++/test/h5cpputil.h +++ b/c++/test/h5cpputil.h @@ -121,6 +121,7 @@ extern "C" { #endif void test_attr(); void test_compound(); +void test_dsproplist(); void test_file(); void test_filters(); void test_links(); @@ -133,6 +134,7 @@ void test_dset(); /* Prototypes for the cleanup routines */ void cleanup_attr(); void cleanup_compound(); +void cleanup_dsproplist(); void cleanup_dsets(); void cleanup_file(); void cleanup_filters(); diff --git a/c++/test/tdspl.cpp b/c++/test/tdspl.cpp new file mode 100644 index 0000000..6364671 --- /dev/null +++ b/c++/test/tdspl.cpp @@ -0,0 +1,144 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * 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. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/***************************************************************************** + FILE + tdspl.cpp - HDF5 C++ testing the dataset memory and transfer property + list functionality + + ***************************************************************************/ + +#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 + using namespace H5; +#endif + +#include "h5cpputil.h" // C++ utilility header file + +const H5std_string FILENAME("tdatatransform.h5"); + +static void test_transfplist() +{ + const char* c_to_f = "(9/5.0)*x + 32"; + const char* simple = "(4/2) * ( (2 + 4)/(5 - 2.5))"; /* this equals 4.8 */ + /* inverses the utrans transform in init_test to get back original array */ + const char* utrans_inv = "(x/3)*4 - 100"; + char *c_to_f_read=NULL, *simple_read=NULL, *utrans_inv_read=NULL; + + SUBTEST("DSetMemXferPropList::set/getDataTransform()"); + try { + // Create various data set prop lists and set data transform expression. + DSetMemXferPropList dxpl_c_to_f(c_to_f); + + DSetMemXferPropList dxpl_simple; + dxpl_simple.setDataTransform(simple); + + DSetMemXferPropList dxpl_utrans_inv; + dxpl_utrans_inv.setDataTransform(utrans_inv); + + // + // Make a copy of one of those prop lists then read the data transform + // expression and verify that it's the same as the original. + // + + // Copy the prop list. + DSetMemXferPropList dxpl_c_to_f_copy; + dxpl_c_to_f_copy.copy(dxpl_c_to_f); + + // Find out the length of the transform expression, allocate the buffer + // for it, then read and verify the expression from the copied plist + ssize_t tran_len = dxpl_c_to_f_copy.getDataTransform(NULL); + c_to_f_read = (char *)HDmalloc(tran_len+1); + HDmemset(c_to_f_read, 0, tran_len+1); + dxpl_c_to_f_copy.getDataTransform(c_to_f_read, tran_len+1); + verify_val((const char*)c_to_f_read, (const char*)c_to_f, + "DSetMemXferPropList::getDataTransform", __LINE__, __FILE__); + + // + // Read the expression of each of the prop lists and verify the read + // expression + // + + // Get and verify the expression with: + // ssize_t getDataTransform(char* exp, const size_t buf_size [default=0]) + tran_len = dxpl_c_to_f.getDataTransform(NULL); + HDmemset(c_to_f_read, 0, tran_len+1); + dxpl_c_to_f.getDataTransform(c_to_f_read, tran_len+1); + verify_val((const char*)c_to_f_read, (const char*)c_to_f, + "DSetMemXferPropList::getDataTransform", __LINE__, __FILE__); + + // Get and verify the expression with: + // H5std_string DSetMemXferPropList::getDataTransform() + H5std_string simple_read = dxpl_simple.getDataTransform(); + verify_val((const char*)simple_read.c_str(), (const char*)simple, + "DSetMemXferPropList::getDataTransform", __LINE__, __FILE__); + + // Get and verify the expression with: + // ssize_t getDataTransform(char* exp, const size_t buf_size) + tran_len = dxpl_utrans_inv.getDataTransform(NULL, 0); + utrans_inv_read = (char *)HDmalloc(tran_len+1); + HDmemset(utrans_inv_read, 0, tran_len+1); + dxpl_utrans_inv.getDataTransform(utrans_inv_read, tran_len+1); + verify_val((const char*)utrans_inv_read, (const char*)utrans_inv, + "DSetMemXferPropList::getDataTransform", __LINE__, __FILE__); + + PASSED(); + } + catch (Exception E) { + issue_fail_msg("test_transfplist", __LINE__, __FILE__, E.getCDetailMsg()); + } +} + + +/**************************************************************** +** +** test_dsproplist(): Main dataset property list testing routine. +** +****************************************************************/ +#ifdef __cplusplus +extern "C" +#endif +void test_dsproplist() +{ + // Output message about test being performed + MESSAGE(5, ("Testing Generic Dataset Property Lists\n")); + + test_transfplist(); // test set/getDataTransform() + +} // test_dsproplist() + + +#ifdef __cplusplus +extern "C" +#endif +void cleanup_dsproplist() +{ + HDremove(FILENAME.c_str()); +} diff --git a/c++/test/testhdf5.cpp b/c++/test/testhdf5.cpp index fe08d6d..57210d0 100644 --- a/c++/test/testhdf5.cpp +++ b/c++/test/testhdf5.cpp @@ -84,6 +84,7 @@ main(int argc, char *argv[]) AddTest("tvlstr", test_vlstrings, cleanup_vlstrings, "Variable-Length Strings", NULL); AddTest("ttypes", test_types, cleanup_types, "Generic Data Types", NULL); AddTest("tcompound", test_compound, cleanup_compound, "Compound Data Types", NULL); + AddTest("tdspl", test_dsproplist, cleanup_dsproplist, "Dataset Property List", NULL); AddTest("tfilter", test_filters, cleanup_filters, "Various Filters", NULL); AddTest("tlinks", test_links, cleanup_links, "Various Links", NULL); /* Comment out tests that are not done yet. - BMR, Feb 2001 |