⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_tools_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//  (C) Copyright Gennadiy Rozental 2001-2008.//  Distributed under 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/libs/test for the library home page.////  File        : $RCSfile$////  Version     : $Revision: 49313 $////  Description : tests all Test Tools but output_test_stream// ***************************************************************************// Boost.Test#define BOOST_TEST_MAIN#include <boost/test/unit_test.hpp>#include <boost/test/unit_test_log.hpp>#include <boost/test/output_test_stream.hpp>#include <boost/test/execution_monitor.hpp>#include <boost/test/detail/unit_test_parameters.hpp>#include <boost/test/output/compiler_log_formatter.hpp>#include <boost/test/framework.hpp>#include <boost/test/detail/suppress_warnings.hpp>// Boost#include <boost/bind.hpp>// STL#include <iostream>#include <iomanip>using namespace boost::unit_test;using namespace boost::test_tools;//____________________________________________________________________________//#define CHECK_CRITICAL_TOOL_USAGE( tool_usage )     \{                                                   \    bool throw_ = false;                            \    try {                                           \        tool_usage;                                 \    } catch( boost::execution_aborted const& ) {    \        throw_ = true;                              \    }                                               \                                                    \    BOOST_CHECK_MESSAGE( throw_, "not aborted" );   \}                                                   \/**///____________________________________________________________________________//class bool_convertible{    struct Tester {};public:    operator Tester*() const { return static_cast<Tester*>( 0 ) + 1; }};//____________________________________________________________________________//struct shorten_lf : public boost::unit_test::output::compiler_log_formatter{    void    print_prefix( std::ostream& output, boost::unit_test::const_string, std::size_t line )    {        output << line << ": ";    }};//____________________________________________________________________________//std::string match_file_name( "./test_files/test_tools_test.pattern" );std::string save_file_name( "test_tools_test.pattern" );output_test_stream& ots(){    static boost::shared_ptr<output_test_stream> inst;    if( !inst ) {        inst.reset(             framework::master_test_suite().argc <= 1                ? new output_test_stream( runtime_config::save_pattern() ? save_file_name : match_file_name, !runtime_config::save_pattern() )                : new output_test_stream( framework::master_test_suite().argv[1], !runtime_config::save_pattern() ) );    }    return *inst;}//____________________________________________________________________________//#define TEST_CASE( name )                                   \void name ## _impl();                                       \void name ## _impl_defer();                                 \                                                            \BOOST_AUTO_TEST_CASE( name )                                \{                                                           \    test_case* impl = make_test_case( &name ## _impl, #name ); \                                                            \    unit_test_log.set_stream( ots() );                      \    unit_test_log.set_threshold_level( log_nothing );       \    unit_test_log.set_formatter( new shorten_lf );          \    framework::run( impl );                                 \                                                            \    unit_test_log.set_threshold_level(                      \        runtime_config::log_level() != invalid_log_level    \            ? runtime_config::log_level()                   \            : log_all_errors );                             \    unit_test_log.set_format( runtime_config::log_format());\    unit_test_log.set_stream( std::cout );                  \    BOOST_CHECK( ots().match_pattern() );                   \}                                                           \                                                            \void name ## _impl()                                        \{                                                           \    unit_test_log.set_threshold_level( log_all_errors );    \                                                            \    name ## _impl_defer();                                  \                                                            \    unit_test_log.set_threshold_level( log_nothing );       \}                                                           \                                                            \void name ## _impl_defer()                                  \/**///____________________________________________________________________________//TEST_CASE( test_BOOST_WARN ){    unit_test_log.set_threshold_level( log_warnings );    BOOST_WARN( sizeof(int) == sizeof(short) );    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_WARN( sizeof(unsigned char) == sizeof(char) );}//____________________________________________________________________________//TEST_CASE( test_BOOST_CHECK ){    // check correct behavior in if clause    if( true )        BOOST_CHECK( true );    // check correct behavior in else clause    if( false )    {}    else        BOOST_CHECK( true );    bool_convertible bc;    BOOST_CHECK( bc );    int i=2;    BOOST_CHECK( false );    BOOST_CHECK( 1==2 );    BOOST_CHECK( i==1 );    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_CHECK( i==2 );}//____________________________________________________________________________//TEST_CASE( test_BOOST_REQUIRE ){    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE( true ) );    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE( false ) );    int j = 3;    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE( j > 5 ) );    unit_test_log.set_threshold_level( log_successful_tests );    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE( j < 5 ) );}//____________________________________________________________________________//TEST_CASE( test_BOOST_WARN_MESSAGE ){    BOOST_WARN_MESSAGE( sizeof(int) == sizeof(short), "memory won't be used efficiently" );    int obj_size = 33;    BOOST_WARN_MESSAGE( obj_size <= 8,                         "object size " << obj_size << " is too big to be efficiently passed by value" );    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_WARN_MESSAGE( obj_size > 8, "object size " << obj_size << " is too small" );}//____________________________________________________________________________//boost::test_tools::predicate_resulttest_pred1(){    boost::test_tools::predicate_result res( false );    res.message() << "Some explanation";    return res;}TEST_CASE( test_BOOST_CHECK_MESSAGE ){    BOOST_CHECK_MESSAGE( 2+2 == 5, "Well, may be that what I believe in" );    BOOST_CHECK_MESSAGE( test_pred1(), "Checking predicate failed" );    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_CHECK_MESSAGE( 2+2 == 4, "Could it fail?" );    int i = 1;    int j = 2;    std::string msg = "some explanation";    BOOST_CHECK_MESSAGE( i > j, "Comparing " << i << " and " << j << ": " << msg );}//____________________________________________________________________________//TEST_CASE( test_BOOST_REQUIRE_MESSAGE ){    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE_MESSAGE( false, "Here we should stop" ) );    unit_test_log.set_threshold_level( log_successful_tests );    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE_MESSAGE( true, "That's OK" ) );}//____________________________________________________________________________//TEST_CASE( test_BOOST_ERROR ){    BOOST_ERROR( "Fail to miss an error" );}//____________________________________________________________________________//TEST_CASE( test_BOOST_FAIL ){    CHECK_CRITICAL_TOOL_USAGE( BOOST_FAIL( "No! No! Show must go on." ) );}//____________________________________________________________________________//struct my_exception {    explicit my_exception( int ec = 0 ) : m_error_code( ec ) {}    int m_error_code;};bool is_critical( my_exception const& ex ) { return ex.m_error_code < 0; }TEST_CASE( test_BOOST_CHECK_THROW ){    int i=0;    BOOST_CHECK_THROW( i++, my_exception );    unit_test_log.set_threshold_level( log_warnings );    BOOST_WARN_THROW( i++, my_exception );    unit_test_log.set_threshold_level( log_all_errors );    CHECK_CRITICAL_TOOL_USAGE( BOOST_REQUIRE_THROW( i++, my_exception ) );    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_CHECK_THROW( throw my_exception(), my_exception ); // unreachable code warning is expected}//____________________________________________________________________________//TEST_CASE( test_BOOST_CHECK_EXCEPTION ){    BOOST_CHECK_EXCEPTION( throw my_exception( 1 ), my_exception, is_critical ); // unreachable code warning is expected    unit_test_log.set_threshold_level( log_successful_tests );    BOOST_CHECK_EXCEPTION( throw my_exception( -1 ), my_exception, is_critical ); // unreachable code warning is expected}//____________________________________________________________________________//TEST_CASE( test_BOOST_CHECK_NO_THROW ){    int i=0;

⌨️ 快捷键说明

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