1997-12-11 06:41:56 +08:00
|
|
|
|
/*
|
|
|
|
|
* Copyright (C) 1997 NCSA
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Robb Matzke <matzke@llnl.gov>
|
|
|
|
|
* Tuesday, December 9, 1997
|
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Purpose: Tests the data type interface (H5T)
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*/
|
|
|
|
|
#include <hdf5.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
1998-01-23 00:41:32 +08:00
|
|
|
|
#include <H5Aprivate.h>
|
1998-01-10 01:49:23 +08:00
|
|
|
|
#include <H5Tprivate.h>
|
|
|
|
|
|
1997-12-17 05:08:59 +08:00
|
|
|
|
#ifndef HAVE_FUNCTION
|
|
|
|
|
#define __FUNCTION__ ""
|
|
|
|
|
#endif
|
1998-01-17 06:23:43 +08:00
|
|
|
|
#define AT() printf (" at %s:%d in %s()...\n", \
|
|
|
|
|
__FILE__, __LINE__, __FUNCTION__);
|
1997-12-11 06:41:56 +08:00
|
|
|
|
|
1998-01-10 01:49:23 +08:00
|
|
|
|
typedef struct complex_t {
|
1998-01-17 06:23:43 +08:00
|
|
|
|
double re;
|
|
|
|
|
double im;
|
1998-01-10 01:49:23 +08:00
|
|
|
|
} complex_t;
|
1997-12-11 06:41:56 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Function: test_classes
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Purpose: Test type classes
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Return: Success: SUCCEED
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Failure: FAIL
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Programmer: Robb Matzke
|
1997-12-11 06:41:56 +08:00
|
|
|
|
* Tuesday, December 9, 1997
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static herr_t
|
1998-01-17 06:23:43 +08:00
|
|
|
|
test_classes(void)
|
1997-12-11 06:41:56 +08:00
|
|
|
|
{
|
1998-01-17 06:23:43 +08:00
|
|
|
|
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;
|
1997-12-11 06:41:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Function: test_copy
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Purpose: Are we able to copy a data type?
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Return: Success: SUCCEED
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Failure: FAIL
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Programmer: Robb Matzke
|
1997-12-11 06:41:56 +08:00
|
|
|
|
* Tuesday, December 9, 1997
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static herr_t
|
1998-01-17 06:23:43 +08:00
|
|
|
|
test_copy(void)
|
1997-12-11 06:41:56 +08:00
|
|
|
|
{
|
1998-01-17 06:23:43 +08:00
|
|
|
|
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;
|
1997-12-11 06:41:56 +08:00
|
|
|
|
}
|
1998-01-10 01:49:23 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Function: test_compound
|
1998-01-10 01:49:23 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Purpose: Tests various things about compound data types.
|
1998-01-10 01:49:23 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Return: Success: SUCCEED
|
1998-01-10 01:49:23 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Failure: FAIL
|
1998-01-10 01:49:23 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Programmer: Robb Matzke
|
1998-01-10 01:49:23 +08:00
|
|
|
|
* Wednesday, January 7, 1998
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static herr_t
|
1998-01-17 06:23:43 +08:00
|
|
|
|
test_compound(void)
|
1998-01-10 01:49:23 +08:00
|
|
|
|
{
|
1998-01-17 06:23:43 +08:00
|
|
|
|
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... */
|
1998-01-23 00:41:32 +08:00
|
|
|
|
H5T_debug(H5A_object(complex_id), stdout);
|
1998-01-17 06:23:43 +08:00
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
|
|
return SUCCEED;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
return FAIL;
|
1998-01-10 01:49:23 +08:00
|
|
|
|
}
|
1997-12-11 06:41:56 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Function: main
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Purpose: Test the data type interface.
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Return: Success:
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Failure:
|
1997-12-11 06:41:56 +08:00
|
|
|
|
*
|
1998-01-17 06:23:43 +08:00
|
|
|
|
* Programmer: Robb Matzke
|
1997-12-11 06:41:56 +08:00
|
|
|
|
* Tuesday, December 9, 1997
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
int
|
1998-01-17 06:23:43 +08:00
|
|
|
|
main(void)
|
1997-12-11 06:41:56 +08:00
|
|
|
|
{
|
1998-01-17 06:23:43 +08:00
|
|
|
|
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);
|
1997-12-11 06:41:56 +08:00
|
|
|
|
}
|