2014-03-31 00:15:11 +08:00
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
|
|
|
* 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 *
|
2017-04-15 00:54:16 +08:00
|
|
|
|
* the COPYING file, which can be found at the root of the source code *
|
|
|
|
|
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
|
|
|
|
* If you do not have access to either file, you may request a copy from *
|
|
|
|
|
* help@hdfgroup.org. *
|
2014-03-31 00:15:11 +08:00
|
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
FILE
|
|
|
|
|
tdspl.cpp - HDF5 C++ testing the dataset memory and transfer property
|
2017-03-03 22:45:57 +08:00
|
|
|
|
list functionality
|
2014-03-31 00:15:11 +08:00
|
|
|
|
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
#ifdef OLD_HEADER_FILENAME
|
|
|
|
|
#include <iostream.h>
|
|
|
|
|
#else
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#endif
|
2016-10-20 04:50:17 +08:00
|
|
|
|
using std::cerr;
|
|
|
|
|
using std::endl;
|
2014-03-31 00:15:11 +08:00
|
|
|
|
|
2016-10-20 04:50:17 +08:00
|
|
|
|
#include <string>
|
2014-03-31 00:15:11 +08:00
|
|
|
|
#include "H5Cpp.h" // C++ API header file
|
2016-10-20 04:50:17 +08:00
|
|
|
|
using namespace H5;
|
2014-03-31 00:15:11 +08:00
|
|
|
|
|
2016-10-20 04:50:17 +08:00
|
|
|
|
#include "h5test.h"
|
2014-03-31 00:15:11 +08:00
|
|
|
|
#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";
|
|
|
|
|
|
|
|
|
|
SUBTEST("DSetMemXferPropList::set/getDataTransform()");
|
|
|
|
|
try {
|
2017-03-03 22:45:57 +08:00
|
|
|
|
// 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);
|
|
|
|
|
char *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__);
|
|
|
|
|
HDfree(c_to_f_read);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// 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);
|
|
|
|
|
c_to_f_read = (char *)HDmalloc(tran_len+1);
|
|
|
|
|
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__);
|
|
|
|
|
HDfree(c_to_f_read);
|
|
|
|
|
|
|
|
|
|
// 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);
|
|
|
|
|
char *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__);
|
|
|
|
|
HDfree(utrans_inv_read);
|
|
|
|
|
|
|
|
|
|
PASSED();
|
2014-03-31 00:15:11 +08:00
|
|
|
|
}
|
2016-04-22 19:22:34 +08:00
|
|
|
|
catch (Exception& E)
|
|
|
|
|
{
|
2017-03-03 22:45:57 +08:00
|
|
|
|
issue_fail_msg("test_transfplist", __LINE__, __FILE__, E.getCDetailMsg());
|
2014-03-31 00:15:11 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
|
**
|
|
|
|
|
** test_dsproplist(): Main dataset property list testing routine.
|
|
|
|
|
**
|
|
|
|
|
****************************************************************/
|
|
|
|
|
extern "C"
|
|
|
|
|
void test_dsproplist()
|
|
|
|
|
{
|
|
|
|
|
// Output message about test being performed
|
|
|
|
|
MESSAGE(5, ("Testing Generic Dataset Property Lists\n"));
|
|
|
|
|
|
|
|
|
|
test_transfplist(); // test set/getDataTransform()
|
|
|
|
|
|
|
|
|
|
} // test_dsproplist()
|
|
|
|
|
|
|
|
|
|
extern "C"
|
|
|
|
|
void cleanup_dsproplist()
|
|
|
|
|
{
|
|
|
|
|
HDremove(FILENAME.c_str());
|
|
|
|
|
}
|