mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-23 16:20:57 +08:00
---------------------- ./RELEASE Added Library functions that I missed the first time. ./html/Datasets.html Added an example for Elena's question about how to read a single member of a compound data type so it becomes an array of that member in memory. ./src/H5Pprivate.h Fixed the prototype for H5P_get_hyperslab() to match the definition. ./src/H5Psimp.c Oops, added the kludge back in for the offset argument, which is still an `intn' instead of a `size_t'. ./src/H5.c ./src/H5public.h ./src/H5F.c ./src/H5T.c ./src/H5Tpublic.h Changed H5init() to H5open() and added an H5close() to fit our create/open/close paradigm. The H5open() happens automatically on the first call to the HDF5 library. The H5close() happens automatically on exit() (unless the app turns off that feature). H5close() closes all datasets and files and releases all resources used by the library. ./test/dsets.c Added calls to H5open() and H5close() to test them. ./test/dtypes.c Removed call to H5init() since we no longer need it there. ./src/H5Fstdio.c Changed the PABLO_MASK to the right value. Thanks Kim.
239 lines
5.5 KiB
C
239 lines
5.5 KiB
C
/*
|
||
* Copyright (C) 1997 NCSA
|
||
* All rights reserved.
|
||
*
|
||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||
* Tuesday, December 9, 1997
|
||
*
|
||
* Purpose: Tests the data type interface (H5T)
|
||
*/
|
||
#include <hdf5.h>
|
||
#include <stdio.h>
|
||
#include <unistd.h>
|
||
|
||
#include <H5Aprivate.h>
|
||
#include <H5Tprivate.h>
|
||
|
||
#ifndef HAVE_FUNCTION
|
||
#define __FUNCTION__ ""
|
||
#endif
|
||
#define AT() printf (" at %s:%d in %s()...\n", \
|
||
__FILE__, __LINE__, __FUNCTION__);
|
||
|
||
typedef struct complex_t {
|
||
double re;
|
||
double im;
|
||
} complex_t;
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: test_classes
|
||
*
|
||
* Purpose: Test type classes
|
||
*
|
||
* Return: Success: SUCCEED
|
||
*
|
||
* Failure: FAIL
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Tuesday, December 9, 1997
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static herr_t
|
||
test_classes(void)
|
||
{
|
||
H5T_class_t type_class;
|
||
|
||
printf("%-70s", "Testing H5Tget_class()");
|
||
|
||
if (H5T_INTEGER != (type_class = H5Tget_class(H5T_NATIVE_INT))) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Invalid type class for H5T_NATIVE_INT\n");
|
||
}
|
||
goto error;
|
||
}
|
||
if (H5T_FLOAT != (type_class = H5Tget_class(H5T_NATIVE_DOUBLE))) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Invalid type class for H5T_NATIVE_DOUBLE\n");
|
||
}
|
||
goto error;
|
||
}
|
||
puts(" PASSED");
|
||
return SUCCEED;
|
||
|
||
error:
|
||
return FAIL;
|
||
}
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: test_copy
|
||
*
|
||
* Purpose: Are we able to copy a data type?
|
||
*
|
||
* Return: Success: SUCCEED
|
||
*
|
||
* Failure: FAIL
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Tuesday, December 9, 1997
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static herr_t
|
||
test_copy(void)
|
||
{
|
||
hid_t a_copy;
|
||
|
||
printf("%-70s", "Testing H5Tcopy()");
|
||
|
||
if ((a_copy = H5Tcopy(H5T_NATIVE_SHORT)) < 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Cannot copy a builtin type.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
if (H5Tclose(a_copy) < 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Cannot close the copied type.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
if (H5Tclose(H5T_NATIVE_CHAR) >= 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Was able to free a built-in type.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
puts(" PASSED");
|
||
return SUCCEED;
|
||
|
||
error:
|
||
return FAIL;
|
||
}
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: test_compound
|
||
*
|
||
* Purpose: Tests various things about compound data types.
|
||
*
|
||
* Return: Success: SUCCEED
|
||
*
|
||
* Failure: FAIL
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Wednesday, January 7, 1998
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static herr_t
|
||
test_compound(void)
|
||
{
|
||
complex_t tmp;
|
||
hid_t complex_id;
|
||
herr_t status;
|
||
|
||
printf("%-70s", "Testing compound data types");
|
||
|
||
/* Create the empty type */
|
||
complex_id = H5Tcreate(H5T_COMPOUND, sizeof tmp);
|
||
if (complex_id < 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Cannot create empty compound data type.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
/* Add a coupld fields */
|
||
status = H5Tinsert(complex_id, "real", HOFFSET(tmp, re),
|
||
H5T_NATIVE_DOUBLE);
|
||
if (status < 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Cannot insert real component.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
status = H5Tinsert(complex_id, "imaginary", HOFFSET(tmp, im),
|
||
H5T_NATIVE_DOUBLE);
|
||
if (status < 0) {
|
||
puts("*FAILED*");
|
||
if (!isatty(1)) {
|
||
AT();
|
||
printf(" Cannot insert imaginary component.\n");
|
||
}
|
||
goto error;
|
||
}
|
||
puts(" PASSED");
|
||
|
||
/* Just for debugging... */
|
||
H5T_debug(H5A_object(complex_id), stdout);
|
||
printf("\n");
|
||
|
||
return SUCCEED;
|
||
|
||
error:
|
||
return FAIL;
|
||
}
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Test the data type interface.
|
||
*
|
||
* Return: Success:
|
||
*
|
||
* Failure:
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Tuesday, December 9, 1997
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
herr_t status;
|
||
intn nerrors = 0;
|
||
|
||
status = test_classes();
|
||
nerrors += status < 0 ? 1 : 0;
|
||
|
||
status = test_copy();
|
||
nerrors += status < 0 ? 1 : 0;
|
||
|
||
status = test_compound();
|
||
nerrors += status < 0 ? 1 : 0;
|
||
|
||
if (nerrors) {
|
||
printf("***** %d DATA TYPE TEST%s FAILED! *****\n",
|
||
nerrors, 1 == nerrors ? "" : "S");
|
||
if (isatty(1)) {
|
||
printf("(Redirect output to a pager or a file to see debug "
|
||
"output)\n");
|
||
}
|
||
exit(1);
|
||
}
|
||
printf("All data type tests passed.\n");
|
||
exit(0);
|
||
}
|