hdf5/test/tconfig.c
Albert Cheng 7d1bf17b3d [svn-r9419] Bug fix.
tconfig.c:
    Verified only the unsigned int types and did not detect inconsistencies
    on signed type such as int_fast16_t.
    Changed code to verify both signed and unsigned int types wherever
    applicable.  It also depends on signed and unsigned forms of an
    int type must be of the same sizes.

testhdf5.c:
    Shorten the configure test name to 'config'--easier to type.

Tested on LLNL Frost and Snow.  Will test in Copper after commit.
2004-10-14 14:12:44 -05:00

199 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 by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/***********************************************************
*
* Test program: tconfig
*
* Test the definitions in the H5config.h as much as possible
*
*************************************************************/
#include "hdf5.h"
#include "testhdf5.h"
/* macros definitions */
/* verify C int type: verify the size of signed and unsigned int type
* with the macro size.
*/
#define vrfy_cint_type(ctype, uctype, ctype_macro) \
/* check signed type size */ \
vrfy_macrosize(ctype, ctype_macro, #ctype_macro);\
/* check unsigned type size */ \
vrfy_macrosize(uctype, ctype_macro, #ctype_macro);
/* verify C type sizes: verify the sizeof type with the macro size. */
#define vrfy_ctype(type, macro) \
vrfy_macrosize(type, macro, #macro);
/* verify if the sizeof(type) matches size defined in macro. */
/* Needs this extra step so that we can print the macro name. */
#define vrfy_macrosize(type, macro, macroname) \
if (sizeof(type) != macro) \
TestErrPrintf("Error: sizeof(%s) is %d but %s is %d\n", \
#type, sizeof(type), macroname, macro);
/* local routine prototypes */
void test_config_ctypes(void);
/*-------------------------------------------------------------------------
* Function: test_configure
*
* Purpose: Main configure definitions testing routine
*
* Return: none (error is fed back via global variable num_errs)
*
* Programmer: Albert Cheng
* September 25, 2001
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
void
test_configure(void)
{
/* Output message about test being performed */
MESSAGE(5, ("Testing configure definitions\n"));
test_config_ctypes();
}
/*-------------------------------------------------------------------------
* Function: cleanup_configure
*
* Purpose: Cleanup temporary test files
*
* Return: none
*
* Programmer: Albert Cheng
* September 25, 2001
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
void
cleanup_configure(void)
{
/* no file to clean */
}
/*-------------------------------------------------------------------------
* Function: test_config_ctypes
*
* Purpose: test C language data type sizes
*
* Return: none (error is fed back via global variable num_errs)
*
* Programmer: Albert Cheng
* September 25, 2001
*
* Modifications:
* Albert Cheng, 2004/10/14
* Verified both signed and unsigned int types.
*
*-------------------------------------------------------------------------
*/
void
test_config_ctypes(void)
{
/* standard C89 basic types */
/* char, signed char, unsigned char are three distinct types. */
vrfy_ctype(char, H5_SIZEOF_CHAR);
vrfy_cint_type(signed char, unsigned char, H5_SIZEOF_CHAR);
vrfy_cint_type(int, unsigned int, H5_SIZEOF_INT);
vrfy_cint_type(short, unsigned short, H5_SIZEOF_SHORT);
vrfy_cint_type(long, unsigned long, H5_SIZEOF_LONG);
vrfy_ctype(float, H5_SIZEOF_FLOAT);
vrfy_ctype(double, H5_SIZEOF_DOUBLE);
/* standard C99 basic types */
#if H5_SIZEOF_LONG_DOUBLE > 0
vrfy_ctype(long double, H5_SIZEOF_LONG_DOUBLE);
#endif
#if H5_SIZEOF_LONG_LONG > 0
vrfy_cint_type(long_long, unsigned long_long, H5_SIZEOF_LONG_LONG);
#endif
#if H5_SIZEOF_INT8_T > 0
vrfy_cint_type(int8_t, uint8_t, H5_SIZEOF_INT8_T);
#endif
#if H5_SIZEOF_INT16_T > 0
vrfy_cint_type(int16_t, uint16_t, H5_SIZEOF_INT16_T);
#endif
#if H5_SIZEOF_INT32_T > 0
vrfy_cint_type(int32_t, uint32_t, H5_SIZEOF_INT32_T);
#endif
#if H5_SIZEOF_INT64_T > 0
vrfy_cint_type(int64_t, uint64_t, H5_SIZEOF_INT64_T);
#endif
#if H5_SIZEOF_INT_FAST8_T > 0
vrfy_cint_type(int_fast8_t, uint_fast8_t, H5_SIZEOF_INT_FAST8_T);
#endif
#if H5_SIZEOF_INT_FAST16_T > 0
vrfy_cint_type(int_fast16_t, int_fast16_t, H5_SIZEOF_INT_FAST16_T);
#endif
#if H5_SIZEOF_INT_FAST32_T > 0
vrfy_cint_type(int_fast32_t, uint_fast32_t, H5_SIZEOF_INT_FAST32_T);
#endif
#if H5_SIZEOF_INT_FAST64_T > 0
vrfy_cint_type(int_fast64_t, uint_fast64_t, H5_SIZEOF_INT_FAST64_T);
#endif
#if H5_SIZEOF_INT_LEAST8_T > 0
vrfy_cint_type(int_least8_t, uint_least8_t, H5_SIZEOF_INT_LEAST8_T);
#endif
#if H5_SIZEOF_INT_LEAST16_T > 0
vrfy_cint_type(int_least16_t, uint_least16_t, H5_SIZEOF_INT_LEAST16_T);
#endif
#if H5_SIZEOF_INT_LEAST32_T > 0
vrfy_cint_type(int_least32_t, uint_least32_t, H5_SIZEOF_INT_LEAST32_T);
#endif
#if H5_SIZEOF_INT_LEAST64_T > 0
vrfy_cint_type(int_least64_t, uint_least64_t, H5_SIZEOF_INT_LEAST64_T);
#endif
/* pseudo standard basic types */
#if H5_SIZEOF___INT64 > 0
vrfy_cint_type(__int64, unsigned __int64, H5_SIZEOF___INT64);
#endif
#if H5_SIZEOF_OFF_T > 0
vrfy_ctype(off_t, H5_SIZEOF_OFF_T);
#endif
#if H5_SIZEOF_SIZE_T > 0
vrfy_ctype(size_t, H5_SIZEOF_SIZE_T);
#endif
#if H5_SIZEOF_SSIZE_T > 0
vrfy_ctype(ssize_t, H5_SIZEOF_SSIZE_T);
#endif
}