/************************************************************************ * * testdefs.h - common testsuite definitions * * $Id: testdefs.h 580483 2007-09-28 20:55:52Z sebor $ * *************************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * Copyright 2005-2006 The Apache Software Foundation or its licensors, * as applicable. * * Copyright 2003-2007 Rogue Wave Software, Inc. * **************************************************************************/ #ifndef RW_TESTDEFS_H_INCLUDED #define RW_TESTDEFS_H_INCLUDED #include #ifdef _RWSTD_TEST_SRC // #undef-ine the Compaq C++ macro #defined in response to // the -std strict_ansi_errors compiler option in order to // allow C++ extensions (such POSIX names) to be declared // by C++ libc headers when building the test driver # undef __PURE_CNAME #endif // _RWSTD_TEST_SRC #if (defined (_WIN32) || defined (_WIN64)) \ && (defined (RWDLL) || defined (_RWSHARED)) # ifndef _RWSTD_TEST_SRC // using a shared lib, import names # define _TEST_EXPORT __declspec (dllimport) # else // building a shared (test) lib, export names # define _TEST_EXPORT __declspec (dllexport) # endif // _RWSTD_LIB_SRC #else # define _TEST_EXPORT #endif // archive/shared library #if defined (_RWSTD_NO_NAMESPACE) && !defined std # define std /* empty */ #endif // _RWSTD_NO_NAMESPACE && !std #if defined (_RWSTD_NO_TYPENAME) && !defined (typename) # define typename /* ignore */ #endif // _RWSTD_NO_TYPENAME && !typename #if defined (_RWSTD_NO_EXCEPTIONS) # ifndef try # define try if (0); else # endif // try # ifdef catch # define catch void foo; while (0) # endif # define RW_CATCH_ALL(ignore) while (0) #else // if !defined (_RWSTD_NO_EXCEPTIONS) # define RW_CATCH_ALL(dot_dot_dot) catch (dot_dot_dot) #endif // _RWSTD_NO_EXCEPTIONS // give the for-init-variable a local scope #ifdef _RWSTD_NO_FOR_LOCAL_SCOPE # define for if (0); else for #endif // _RWSTD_NO_FOR_LOCAL_SCOPE // convenience macro for exception specification on function pointers #ifndef _RWSTD_NO_PTR_EXCEPTION_SPEC #define _PTR_THROWS(spec) _THROWS (spec) #else // if defined (_RWSTD_NO_PTR_EXCEPTION_SPEC) // throw specs on pointers to functions not implemented... #define _PTR_THROWS(ignore) #endif // _RWSTD_NO_PTR_EXCEPTION_SPEC // _RWSTD_PRI{d,i,o,u,x}MAX: macros corresponding to those described // in 7.8.1 of C99; each of them expands to a character string literal // containing a conversion specifier, possibly modified by a length // modifier, suitable for use within the format argument of a formatted // input/output function when converting the corresponding integer type #if _RWSTD_LONG_SIZE < _RWSTD_LLONG_SIZE // using LLONG_SIZE instead of ULLONG_MAX in the preprocessor // conditional above to work around a gcc 3.2 bug (PR #28595) # define _RWSTD_PRIdMAX _RWSTD_LLONG_PRINTF_PREFIX "d" # define _RWSTD_PRIiMAX _RWSTD_LLONG_PRINTF_PREFIX "i" # define _RWSTD_PRIoMAX _RWSTD_LLONG_PRINTF_PREFIX "o" # define _RWSTD_PRIuMAX _RWSTD_LLONG_PRINTF_PREFIX "u" # define _RWSTD_PRIxMAX _RWSTD_LLONG_PRINTF_PREFIX "x" #elif _RWSTD_INT_SIZE < _RWSTD_LONG_SIZE # define _RWSTD_PRIdMAX "ld" # define _RWSTD_PRIiMAX "li" # define _RWSTD_PRIoMAX "lo" # define _RWSTD_PRIuMAX "lu" # define _RWSTD_PRIxMAX "lx" #else # define _RWSTD_PRIdMAX "d" # define _RWSTD_PRIiMAX "i" # define _RWSTD_PRIoMAX "o" # define _RWSTD_PRIuMAX "u" # define _RWSTD_PRIxMAX "x" #endif // _RWSTD_PRIz: expands to a conversion specifier corresponding // to "%z" (i.e., C99 size_t specifier) #if _RWSTD_SIZE_MAX == _RWSTD_UINT_MAX // sizeof (size_t) == sizeof (unsigned int) # define _RWSTD_PRIz "" #elif _RWSTD_SIZE_MAX == _RWSTD_ULONG_MAX // sizeof (size_t) == sizeof (unsigned long) # define _RWSTD_PRIz "l" #elif _RWSTD_SIZE_MAX == _RWSTD_ULLONG_MAX // sizeof (size_t) == sizeof (unsigned long long) # define _RWSTD_PRIz _RWSTD_LLONG_PRINTF_PREFIX "" #else // assume sizeof (size_t) == sizeof (unsigned) # define _RWSTD_PRIz "" #endif // test assertion #ifndef _RWSTD_NO_PRETTY_FUNCTION // gcc, HP aCC, and Intel C++ all support __PRETTY_FUNCTION__ # define RW_ASSERT(expr) \ ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \ __PRETTY_FUNCTION__)) #elif !defined (_RWSTD_NO_FUNC) // C99 specifies the __func__ special identifier # define RW_ASSERT(expr) \ ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \ __func__)) #elif defined (__FUNCSIG__) // MSVC macro # define RW_ASSERT(expr) \ ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, \ __FUNCSIG__)) #else // if _RWSTD_NO_PRETTY_FUNCTION && _RWSTD_NO_FUNC # define RW_ASSERT(expr) \ ((expr) ? (void)0 : _RW::__rw_assert_fail (#expr, __FILE__, __LINE__, 0)) #endif // _RWSTD_NO_PRETTY_FUNCTION, _RWSTD_NO_FUNC // convenience macro to get number of elements in a c style array #define RW_COUNT_OF(x) (sizeof(x) / sizeof(*x)) #if defined (__INTEL_COMPILER) && __INTEL_COMPILER <= 1000 // disable warning #279: controlling expression is constant // issued for the commonly used RW_ASSERT(!"not implemented") # pragma warning (disable: 279) #endif // Intel C++ 10.0 and prior #endif // RW_TESTDEFS_H_INCLUDED