hdf5/test/dtypes.c
Robb Matzke a0ee2c57e9 [svn-r164] Changes since 19980122
----------------------

./src/*.h
	Fixed indentation where indent(1) screwed up.  This isn't by
	any means the final say, but it's better than it was.

./src/H5A.c
./src/H5Aprivate.h
./src/H5Apublic.h
./src/H5C.c
./src/H5D.c
./src/H5E.c
./src/H5F.c
./src/H5G.c
./src/H5M.c
./src/H5P.c
./src/H5T.c
./src/H5Tconv.c
./src/debug.c
./test/dtypes.c
./test/istore.c
./test/theap.c
./test/tohdr.c
./test/tstab.c
	Removed some atom functions from the API and made them
	library-scope. Also changed some names by removing the
	redundant `atom' from the name and by adding a `_' after the
	`H5A'.
1998-01-22 11:41:32 -05:00

241 lines
5.6 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 <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;
H5init();
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);
}