Files
hdf5/test/dtypes.c
1998-04-23 17:24:52 -05:00

248 lines
5.8 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 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 <H5Iprivate.h>
#include <H5Tprivate.h>
#ifndef HAVE_FUNCTION
#undef __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)
{
printf("%-70s", "Testing H5Tget_class()");
if (H5T_INTEGER != 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 != 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;
herr_t status;
herr_t (*func)(void*) = NULL;
void *client_data = NULL;
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;
}
/* Temporarily turn off error reporting. */
H5Eget_auto (&func, &client_data);
H5Eset_auto (NULL, NULL);
status = H5Tclose (H5T_NATIVE_CHAR);
H5Eset_auto (func, client_data);
if (status >= 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 couple fields */
status = H5Tinsert(complex_id, "real", HOFFSET(complex_t, 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(complex_t, 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(H5I_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");
return 0;
}