annotate DEPENDENCIES/generic/include/boost/test/exception_safety.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Gennadiy Rozental 2005-2008.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0.
Chris@16 3 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5
Chris@16 6 // See http://www.boost.org/libs/test for the library home page.
Chris@16 7 //
Chris@16 8 // File : $RCSfile$
Chris@16 9 //
Chris@101 10 // Version : $Revision$
Chris@16 11 //
Chris@16 12 // Description : Facilities to perform exception safety tests
Chris@16 13 // ***************************************************************************
Chris@16 14
Chris@16 15 #ifndef BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER
Chris@16 16 #define BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER
Chris@16 17
Chris@16 18 // Boost.Test
Chris@16 19 #include <boost/test/detail/config.hpp>
Chris@16 20
Chris@16 21 #include <boost/test/utils/callback.hpp>
Chris@16 22 #include <boost/test/utils/basic_cstring/basic_cstring.hpp>
Chris@16 23
Chris@16 24 // STL
Chris@16 25 #include <memory>
Chris@16 26
Chris@16 27 #include <boost/test/detail/suppress_warnings.hpp>
Chris@16 28
Chris@16 29 //____________________________________________________________________________//
Chris@16 30
Chris@16 31 // ************************************************************************** //
Chris@16 32 // ************** BOOST_TEST_EXCEPTION_SAFETY ************** //
Chris@16 33 // ************************************************************************** //
Chris@16 34
Chris@16 35 #define BOOST_TEST_EXCEPTION_SAFETY( test_name ) \
Chris@16 36 struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \
Chris@16 37 { void test_method(); }; \
Chris@16 38 \
Chris@16 39 static void BOOST_AUTO_TC_INVOKER( test_name )() \
Chris@16 40 { \
Chris@16 41 test_name t; \
Chris@16 42 ::boost::itest::exception_safety( \
Chris@16 43 boost::bind( &test_name::test_method, t ), \
Chris@16 44 BOOST_STRINGIZE(test_name) ); \
Chris@16 45 } \
Chris@16 46 \
Chris@16 47 struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
Chris@16 48 \
Chris@16 49 BOOST_AUTO_TU_REGISTRAR( test_name )( \
Chris@16 50 boost::unit_test::make_test_case( \
Chris@16 51 &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \
Chris@16 52 boost::unit_test::ut_detail::auto_tc_exp_fail< \
Chris@16 53 BOOST_AUTO_TC_UNIQUE_ID( test_name )>::instance()->value() ); \
Chris@16 54 \
Chris@16 55 void test_name::test_method() \
Chris@16 56 /**/
Chris@16 57
Chris@16 58 namespace boost {
Chris@16 59
Chris@16 60 namespace itest {
Chris@16 61
Chris@16 62 // ************************************************************************** //
Chris@16 63 // ************** exception safety test ************** //
Chris@16 64 // ************************************************************************** //
Chris@16 65
Chris@16 66 void BOOST_TEST_DECL exception_safety( unit_test::callback0<> const& F,
Chris@16 67 unit_test::const_string test_name = "" );
Chris@16 68
Chris@16 69 } // namespace itest
Chris@16 70
Chris@16 71 } // namespace boost
Chris@16 72
Chris@16 73 // ************************************************************************** //
Chris@16 74 // ************** global operator new/delete overloads ************** //
Chris@16 75 // ************************************************************************** //
Chris@16 76
Chris@16 77 #ifndef BOOST_ITEST_NO_NEW_OVERLOADS
Chris@16 78
Chris@16 79 #include <boost/test/interaction_based.hpp>
Chris@16 80
Chris@16 81 # ifdef BOOST_NO_STDC_NAMESPACE
Chris@16 82 namespace std { using ::isprint; using ::malloc; using ::free; }
Chris@16 83 # endif
Chris@16 84
Chris@16 85 inline void*
Chris@16 86 operator new( std::size_t s ) throw(std::bad_alloc)
Chris@16 87 {
Chris@16 88 void* res = std::malloc(s ? s : 1);
Chris@16 89
Chris@16 90 if( res )
Chris@16 91 ::boost::itest::manager::instance().allocated( 0, 0, res, s );
Chris@16 92 else
Chris@16 93 throw std::bad_alloc();
Chris@16 94
Chris@16 95 return res;
Chris@16 96 }
Chris@16 97
Chris@16 98 //____________________________________________________________________________//
Chris@16 99
Chris@16 100 inline void*
Chris@16 101 operator new( std::size_t s, std::nothrow_t const& ) throw()
Chris@16 102 {
Chris@16 103 void* res = std::malloc(s ? s : 1);
Chris@16 104
Chris@16 105 if( res )
Chris@16 106 ::boost::itest::manager::instance().allocated( 0, 0, res, s );
Chris@16 107
Chris@16 108 return res;
Chris@16 109 }
Chris@16 110
Chris@16 111 //____________________________________________________________________________//
Chris@16 112
Chris@16 113 inline void*
Chris@16 114 operator new[]( std::size_t s ) throw(std::bad_alloc)
Chris@16 115 {
Chris@16 116 void* res = std::malloc(s ? s : 1);
Chris@16 117
Chris@16 118 if( res )
Chris@16 119 ::boost::itest::manager::instance().allocated( 0, 0, res, s );
Chris@16 120 else
Chris@16 121 throw std::bad_alloc();
Chris@16 122
Chris@16 123 return res;
Chris@16 124 }
Chris@16 125
Chris@16 126 //____________________________________________________________________________//
Chris@16 127
Chris@16 128 inline void*
Chris@16 129 operator new[]( std::size_t s, std::nothrow_t const& ) throw()
Chris@16 130 {
Chris@16 131 void* res = std::malloc(s ? s : 1);
Chris@16 132
Chris@16 133 if( res )
Chris@16 134 ::boost::itest::manager::instance().allocated( 0, 0, res, s );
Chris@16 135
Chris@16 136 return res;
Chris@16 137 }
Chris@16 138
Chris@16 139 //____________________________________________________________________________//
Chris@16 140
Chris@16 141 inline void
Chris@16 142 operator delete( void* p ) throw()
Chris@16 143 {
Chris@16 144 ::boost::itest::manager::instance().freed( p );
Chris@16 145
Chris@16 146 std::free( p );
Chris@16 147 }
Chris@16 148
Chris@16 149 //____________________________________________________________________________//
Chris@16 150
Chris@16 151 inline void
Chris@16 152 operator delete( void* p, std::nothrow_t const& ) throw()
Chris@16 153 {
Chris@16 154 ::boost::itest::manager::instance().freed( p );
Chris@16 155
Chris@16 156 std::free( p );
Chris@16 157 }
Chris@16 158
Chris@16 159 //____________________________________________________________________________//
Chris@16 160
Chris@16 161 inline void
Chris@16 162 operator delete[]( void* p ) throw()
Chris@16 163 {
Chris@16 164 ::boost::itest::manager::instance().freed( p );
Chris@16 165
Chris@16 166 std::free( p );
Chris@16 167 }
Chris@16 168
Chris@16 169 //____________________________________________________________________________//
Chris@16 170
Chris@16 171 inline void
Chris@16 172 operator delete[]( void* p, std::nothrow_t const& ) throw()
Chris@16 173 {
Chris@16 174 ::boost::itest::manager::instance().freed( p );
Chris@16 175
Chris@16 176 std::free( p );
Chris@16 177 }
Chris@16 178
Chris@16 179 //____________________________________________________________________________//
Chris@16 180
Chris@16 181 #endif // BOOST_ITEST_NO_NEW_OVERLOADS
Chris@16 182
Chris@16 183 //____________________________________________________________________________//
Chris@16 184
Chris@16 185 #include <boost/test/detail/enable_warnings.hpp>
Chris@16 186
Chris@16 187 #endif // BOOST_TEST_EXCEPTION_SAFETY_HPP_111705GER