hdf5/test/dtypes.c
Albert Cheng 7e8e3eec42 [svn-r230] Changes were actually made by Robb. I am commiting them for him
while he is visiting LLNL.  I changed the default creation template
offset and length to 4.  Will fix the problem later.

Changes since 19980205
----------------------

./src/H5H.c
./src/H5Hprivate.h
./src/H5O.c
./src/H5Ocont.c
./src/H5Odtype.c
./src/H5Oefl.c
./src/H5Olayout.c
./src/H5Oname.c
./src/H5Onull.c
./src/H5Oprivate.h
./src/H5Odspace.c
./src/H5Ostab.c
./src/debug.c
./html/H5.format.html
        Added an extra 4-byte field after the heap magic number for
        alignment on the DEC alpha. Changed object header message
        alignment to 8-bytes.

./src/H5F.c
./src/H5Farray.c
./src/H5Ffamily.c
./src/H5Fistore.c
./src/H5Flow.c
./src/H5Fprivate.h
./src/H5Fsec2.c
./src/H5Fstdio.c
./src/H5Gnode.c
./src/H5O.c
./src/H5Odtype.c
./src/H5P.c
./src/H5Pprivate.h
./src/H5T.c
./src/H5Tconv.c
./src/H5Tpkg.h
./src/H5Tpublic.h
./src/H5V.c
./src/H5detect.c
./test/cmpd_dset.c
./test/dsets.c
./test/dtypes.c
./test/extend.c
./test/hyperslab.c
./test/istore.c
./test/th5p.c
./test/theap.c
        Fixed a few irix64 warnings regarding size_t vs. int,
        variables set but not used, printf formats

./config/irix64
        Added `-woff 1196' to get rid of errors about __vfork() being
        implicitly defined in a system header file.

./src/H5B.c
        Fixed a stack alignment problem.
1998-02-09 14:37:40 -05:00

238 lines
5.5 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
#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;
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");
return 0;
}