test_tools.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 235 行

HPP
235
字号
#ifndef BOOST_SERIALIZATION_TEST_TOOLS_HPP#define BOOST_SERIALIZATION_TEST_TOOLS_HPP// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8// test_tools.hpp//// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//  See http://www.boost.org for updates, documentation, and revision history.#include <cstdio> // remove, tmpnam#ifndef BOOST_NO_EXCEPTION_STD_NAMESPACE    #include <exception>#endif#include <boost/config.hpp>#include <boost/detail/no_exceptions_support.hpp>#if defined(UNDER_CE)// Windows CE does not supply the tmpnam function in its CRT. // Substitute a primitive implementation here.namespace boost {namespace archive {    char * tmpnam(char * buffer){        static char ibuffer [512];        if(NULL == buffer)            buffer = ibuffer;        static unsigned short index = 0;        std::sprintf(buffer, "\\tmpfile%05X.tmp", index++);        return buffer;    }} // archive} // boost#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)// win32 has a brain-dead tmpnam implementation.// which leaves temp files in root directory // regardless of environmental settings#include <cstdlib>#include <cstring>#if defined(BOOST_NO_STDC_NAMESPACE)namespace std{     using ::remove;    using ::strcpy;    using ::strcat;    using ::tmpnam;}#endif // defined(BOOST_NO_STDC_NAMESPACE)#include <direct.h>#include <boost/archive/tmpdir.hpp>#if defined(__COMO__)    #define chdir _chdir#endif#if defined(NDEBUG) && defined(__BORLANDC__)    #define STRCPY strcpy#else    #define STRCPY std::strcpy#endifnamespace boost {namespace archive {    char * test_filename(char * dir = NULL, char *fname = NULL){        static char ibuffer [512];        int i;        ibuffer[0] = '\0';        if(NULL == dir){            dir = boost::archive::tmpdir();        }        STRCPY(ibuffer, dir);        std::strcat(ibuffer, "/");        i = std::strlen(ibuffer);        if(NULL == fname){            char old_dir[256];            _getcwd(old_dir, sizeof(old_dir) - 1);            chdir(dir);            std::tmpnam(ibuffer + i);            chdir(old_dir);        }        else{            std::strcat(ibuffer, fname);        }        return ibuffer;    }    char * tmpnam(char * buffer){        char * name = test_filename(NULL, NULL);        if(NULL != buffer){            STRCPY(buffer, name);        }        return name;    }} // archive} // boost#else // defined(_WIN32) || defined(__WIN32__) || defined(WIN32)#if defined(__hpux)// (C) Copyright 2006 Boris Gubenko.// HP-UX has a restriction that for multi-thread applications, (i.e.// the ones compiled -mt) if argument to tmpnam is a NULL pointer, then,// citing the tmpnam(3S) manpage, "the operation is not performed and a// NULL pointer is returned". tempnam does not have this restriction, so,// let's use tempnam instead. #define tmpnam(X) tempnam(NULL,X) namespace boost {namespace archive {    using ::tempnam;} // archive} // boost#else // defined(__hpux)namespace boost {namespace archive {    using std::tmpnam;} // archive} // boost#endif // defined(__hpux)#endif // defined(_WIN32) || defined(__WIN32__) || defined(WIN32)//#include <boost/test/test_tools.hpp>#include <boost/detail/lightweight_test.hpp>#define BOOST_CHECK( P ) \    BOOST_TEST( (P) )#define BOOST_REQUIRE( P )  \    BOOST_TEST( (P) )#define BOOST_CHECK_MESSAGE( P, M )  \    ((P)? (void)0 : ::boost::detail::error_impl( (M) , __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))#define BOOST_REQUIRE_MESSAGE( P, M ) \    BOOST_CHECK_MESSAGE( (P), (M) )#define BOOST_CHECK_EQUAL( A , B ) \    BOOST_TEST( (A) == (B) )namespace boost { namespace detail {inline void msg_impl(char const * msg, char const * file, int line, char const * function){    std::cerr << file << "(" << line << "): " << msg << " in function '" << function << "'" << std::endl;}} } // boost::detail#define BOOST_WARN_MESSAGE( P, M )  \    ((P)? (void)0 : ::boost::detail::msg_impl( (M) , __FILE__, __LINE__, BOOST_CURRENT_FUNCTION))#define BOOST_MESSAGE( M ) \    BOOST_WARN_MESSAGE( true , (M) )#define BOOST_CHECKPOINT( M ) \    BOOST_WARN_MESSAGE( true , (M) )//#define BOOST_TEST_DONT_PRINT_LOG_VALUE( T ) #define BOOST_FAIL( M ) BOOST_REQUIRE_MESSAGE( false, (M) )#define EXIT_SUCCESS 0int test_main(int argc, char * argv[]);#include <boost/serialization/singleton.hpp>intmain(int argc, char * argv[]){        boost::serialization::singleton_module::lock();    BOOST_TRY{        test_main(argc, argv);    }    #ifndef BOOST_NO_EXCEPTION_STD_NAMESPACE        BOOST_CATCH(const std::exception & e){            BOOST_ERROR(e.what());        }    #endif    BOOST_CATCH(...){        BOOST_ERROR("failed with uncaught exception:");    }    BOOST_CATCH_END    boost::serialization::singleton_module::unlock();    return boost::report_errors();}// the following is to ensure that when one of the libraries changes// BJAM rebuilds and relinks the test./*#include "text_archive.hpp"#include "text_warchive.hpp"#include "binary_archive.hpp"#include "xml_archive.hpp"#include "xml_warchive.hpp"*//////////////////////////////////////////////// invoke header for a custom archive test./////////////////////////////////////////////// invoke header for a custom archive test.#if ! defined(BOOST_ARCHIVE_TEST)#define BOOST_ARCHIVE_TEST text_archive.hpp#endif#include <boost/preprocessor/stringize.hpp>#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)#ifndef TEST_STREAM_FLAGS    #define TEST_STREAM_FLAGS (std::ios_base::openmode)0#endif#ifndef TEST_ARCHIVE_FLAGS    #define TEST_ARCHIVE_FLAGS 0#endif#ifndef TEST_DIRECTORY#define TEST_DIRECTORY#else#define __x__ TEST_DIRECTORY#undef TEST_DIRECTORY#define TEST_DIRECTORY BOOST_PP_STRINGIZE(__x__)#endif#endif // BOOST_SERIALIZATION_TEST_TOOLS_HPP

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?