annotate DEPENDENCIES/generic/include/boost/test/minimal.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Gennadiy Rozental 2002-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 : simple minimal testing definitions and implementation
Chris@16 13 // ***************************************************************************
Chris@16 14
Chris@16 15 #ifndef BOOST_TEST_MINIMAL_HPP_071894GER
Chris@16 16 #define BOOST_TEST_MINIMAL_HPP_071894GER
Chris@16 17
Chris@16 18 #define BOOST_CHECK(exp) \
Chris@16 19 ( (exp) \
Chris@16 20 ? static_cast<void>(0) \
Chris@16 21 : boost::minimal_test::report_error(#exp,__FILE__,__LINE__, BOOST_CURRENT_FUNCTION) )
Chris@16 22
Chris@16 23 #define BOOST_REQUIRE(exp) \
Chris@16 24 ( (exp) \
Chris@16 25 ? static_cast<void>(0) \
Chris@16 26 : boost::minimal_test::report_critical_error(#exp,__FILE__,__LINE__,BOOST_CURRENT_FUNCTION))
Chris@16 27
Chris@16 28 #define BOOST_ERROR( msg_ ) \
Chris@16 29 boost::minimal_test::report_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
Chris@16 30 #define BOOST_FAIL( msg_ ) \
Chris@16 31 boost::minimal_test::report_critical_error( (msg_),__FILE__,__LINE__, BOOST_CURRENT_FUNCTION, true )
Chris@16 32
Chris@16 33 //____________________________________________________________________________//
Chris@16 34
Chris@16 35 // Boost.Test
Chris@16 36 #include <boost/test/detail/global_typedef.hpp>
Chris@16 37 #include <boost/test/impl/execution_monitor.ipp>
Chris@16 38 #include <boost/test/impl/debug.ipp>
Chris@16 39 #include <boost/test/utils/class_properties.hpp>
Chris@16 40 #include <boost/test/utils/basic_cstring/io.hpp>
Chris@16 41
Chris@16 42 // Boost
Chris@16 43 #include <boost/cstdlib.hpp> // for exit codes#include <boost/cstdlib.hpp> // for exit codes
Chris@16 44 #include <boost/current_function.hpp> // for BOOST_CURRENT_FUNCTION
Chris@16 45
Chris@16 46 // STL
Chris@16 47 #include <iostream> // std::cerr, std::endl
Chris@16 48 #include <string> // std::string
Chris@16 49
Chris@16 50 #include <boost/test/detail/suppress_warnings.hpp>
Chris@16 51
Chris@16 52 //____________________________________________________________________________//
Chris@16 53
Chris@16 54 int test_main( int argc, char* argv[] ); // prototype for users test_main()
Chris@16 55
Chris@16 56 namespace boost {
Chris@16 57 namespace minimal_test {
Chris@16 58
Chris@16 59 typedef boost::unit_test::const_string const_string;
Chris@16 60
Chris@16 61 inline unit_test::counter_t& errors_counter() { static unit_test::counter_t ec = 0; return ec; }
Chris@16 62
Chris@16 63 inline void
Chris@16 64 report_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
Chris@16 65 {
Chris@16 66 ++errors_counter();
Chris@16 67 std::cerr << file << "(" << line << "): ";
Chris@16 68
Chris@16 69 if( is_msg )
Chris@16 70 std::cerr << msg;
Chris@16 71 else
Chris@16 72 std::cerr << "test " << msg << " failed";
Chris@16 73
Chris@16 74 if( func_name != "(unknown)" )
Chris@16 75 std::cerr << " in function: '" << func_name << "'";
Chris@16 76
Chris@16 77 std::cerr << std::endl;
Chris@16 78 }
Chris@16 79
Chris@16 80 inline void
Chris@16 81 report_critical_error( const char* msg, const char* file, int line, const_string func_name, bool is_msg = false )
Chris@16 82 {
Chris@16 83 report_error( msg, file, line, func_name, is_msg );
Chris@16 84
Chris@16 85 throw boost::execution_aborted();
Chris@16 86 }
Chris@16 87
Chris@16 88 class caller {
Chris@16 89 public:
Chris@16 90 // constructor
Chris@16 91 caller( int argc, char** argv )
Chris@16 92 : m_argc( argc ), m_argv( argv ) {}
Chris@16 93
Chris@16 94 // execution monitor hook implementation
Chris@16 95 int operator()() { return test_main( m_argc, m_argv ); }
Chris@16 96
Chris@16 97 private:
Chris@16 98 // Data members
Chris@16 99 int m_argc;
Chris@16 100 char** m_argv;
Chris@16 101 }; // monitor
Chris@16 102
Chris@16 103 } // namespace minimal_test
Chris@16 104
Chris@16 105 } // namespace boost
Chris@16 106
Chris@16 107 //____________________________________________________________________________//
Chris@16 108
Chris@16 109 int BOOST_TEST_CALL_DECL main( int argc, char* argv[] )
Chris@16 110 {
Chris@16 111 using namespace boost::minimal_test;
Chris@16 112
Chris@16 113 try {
Chris@16 114 ::boost::execution_monitor ex_mon;
Chris@16 115 int run_result = ex_mon.execute( caller( argc, argv ) );
Chris@16 116
Chris@16 117 BOOST_CHECK( run_result == 0 || run_result == boost::exit_success );
Chris@16 118 }
Chris@16 119 catch( boost::execution_exception const& exex ) {
Chris@16 120 if( exex.code() != boost::execution_exception::no_error )
Chris@16 121 BOOST_ERROR( (std::string( "exception \"" ).
Chris@16 122 append( exex.what().begin(), exex.what().end() ).
Chris@16 123 append( "\" caught" ) ).c_str() );
Chris@16 124 std::cerr << "\n**** Testing aborted.";
Chris@16 125 }
Chris@16 126
Chris@16 127 if( boost::minimal_test::errors_counter() != 0 ) {
Chris@16 128 std::cerr << "\n**** " << errors_counter()
Chris@16 129 << " error" << (errors_counter() > 1 ? "s" : "" ) << " detected\n";
Chris@16 130
Chris@16 131 return boost::exit_test_failure;
Chris@16 132 }
Chris@16 133
Chris@16 134 std::cout << "\n**** no errors detected\n";
Chris@16 135
Chris@16 136 return boost::exit_success;
Chris@16 137 }
Chris@16 138
Chris@16 139 //____________________________________________________________________________//
Chris@16 140
Chris@16 141 #include <boost/test/detail/enable_warnings.hpp>
Chris@16 142
Chris@16 143 #endif // BOOST_TEST_MINIMAL_HPP_071894GER