$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: gennadiy.rozental_at_[hidden]
Date: 2008-07-09 01:05:43
Author: rogeeff
Date: 2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
New Revision: 47258
URL: http://svn.boost.org/trac/boost/changeset/47258
Log:
Moves some config macros around
Introduces lazy_ostream - should speed u ptesting tools by avoiding output operation is many cases. Thanks to Jiri Palecek for an idea.
Removes misguided attempt at testing tools returning values. 
Added:
   trunk/boost/test/utils/lazy_ostream.hpp   (contents, props changed)
Text files modified: 
   trunk/boost/test/detail/config.hpp                        |    33 ++++++-----                             
   trunk/boost/test/detail/fwd_decl.hpp                      |     1                                         
   trunk/boost/test/impl/compiler_log_formatter.ipp          |     9 +++                                     
   trunk/boost/test/impl/debug.ipp                           |    18 ++---                                   
   trunk/boost/test/impl/exception_safety.ipp                |     5 -                                       
   trunk/boost/test/impl/interaction_based.ipp               |     5 -                                       
   trunk/boost/test/impl/logged_expectations.ipp             |     5 -                                       
   trunk/boost/test/impl/test_tools.ipp                      |    19 ++---                                   
   trunk/boost/test/impl/unit_test_log.ipp                   |   119 ++++++++++++++++++++++++++------------- 
   trunk/boost/test/output/compiler_log_formatter.hpp        |     1                                         
   trunk/boost/test/test_tools.hpp                           |    44 +++-----------                          
   trunk/boost/test/unit_test_log.hpp                        |    31 ++++++----                              
   trunk/boost/test/unit_test_log_formatter.hpp              |     1                                         
   trunk/boost/test/utils/basic_cstring/compare.hpp          |     2                                         
   trunk/boost/test/utils/foreach.hpp                        |    24 --------                                
   trunk/boost/test/utils/iterator/istream_line_iterator.hpp |     4 -                                       
   trunk/boost/test/utils/wrap_stringstream.hpp              |     4 -                                       
   trunk/boost/test/utils/xml_printer.hpp                    |    12 ++--                                    
   18 files changed, 163 insertions(+), 174 deletions(-)
Modified: trunk/boost/test/detail/config.hpp
==============================================================================
--- trunk/boost/test/detail/config.hpp	(original)
+++ trunk/boost/test/detail/config.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -19,12 +19,6 @@
 #include <boost/config.hpp> // compilers workarounds
 #include <boost/detail/workaround.hpp>
 
-#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
-#  define BOOST_CLASSIC_IOSTREAMS
-#else
-#  define BOOST_STANDARD_IOSTREAMS
-#endif
-
 //____________________________________________________________________________//
 
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)) || \
@@ -43,19 +37,20 @@
 
 //____________________________________________________________________________//
 
-#if defined(BOOST_HAS_SIGACTION)
-#  define BOOST_TEST_SUPPORT_TIMEOUT
+#if !defined(BOOST_NO_STD_LOCALE) &&            \
+    !BOOST_WORKAROUND(BOOST_MSVC, < 1310)  &&   \
+    !defined(__MWERKS__) 
+#  define BOOST_TEST_USE_STD_LOCALE 1
 #endif
 
 //____________________________________________________________________________//
 
-#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570)           || \
-    BOOST_WORKAROUND( __COMO__, <= 0x433 )             || \
-    BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 )       || \
-    BOOST_WORKAROUND(__GNUC__, < 3)                    || \
-    defined(__sgi) && _COMPILER_VERSION <= 730         || \
-    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) || \
-    defined(__DECCXX) || \
+#if BOOST_WORKAROUND(__BORLANDC__, <= 0x570)            || \
+    BOOST_WORKAROUND( __COMO__, <= 0x433 )              || \
+    BOOST_WORKAROUND( __INTEL_COMPILER, <= 800 )        || \
+    defined(__sgi) && _COMPILER_VERSION <= 730          || \
+    BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))  || \
+    defined(__DECCXX)                                   || \
     defined(__DMC__)
 #  define BOOST_TEST_NO_PROTECTED_USING
 #endif
@@ -70,6 +65,14 @@
 
 //____________________________________________________________________________//
 
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+    !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
+    !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+#  define BOOST_TEST_SUPPORT_INTERACTION_TESTING 1
+#endif
+
+//____________________________________________________________________________//
+
 #if defined(BOOST_ALL_DYN_LINK) && !defined(BOOST_TEST_DYN_LINK)
 #  define BOOST_TEST_DYN_LINK
 #endif
Modified: trunk/boost/test/detail/fwd_decl.hpp
==============================================================================
--- trunk/boost/test/detail/fwd_decl.hpp	(original)
+++ trunk/boost/test/detail/fwd_decl.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -38,6 +38,7 @@
 struct log_entry_data;
 struct log_checkpoint_data;
 
+class lazy_ostream;
 
 } // namespace unit_test
 
Modified: trunk/boost/test/impl/compiler_log_formatter.ipp
==============================================================================
--- trunk/boost/test/impl/compiler_log_formatter.ipp	(original)
+++ trunk/boost/test/impl/compiler_log_formatter.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -20,6 +20,7 @@
 #include <boost/test/unit_test_suite_impl.hpp>
 #include <boost/test/framework.hpp>
 #include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/lazy_ostream.hpp>
 
 // Boost
 #include <boost/version.hpp>
@@ -167,6 +168,14 @@
 //____________________________________________________________________________//
 
 void
+compiler_log_formatter::log_entry_value( std::ostream& output, lazy_ostream const& value )
+{
+    output << value;
+}
+
+//____________________________________________________________________________//
+
+void
 compiler_log_formatter::log_entry_finish( std::ostream& output )
 {
     output << std::endl;
Modified: trunk/boost/test/impl/debug.ipp
==============================================================================
--- trunk/boost/test/impl/debug.ipp	(original)
+++ trunk/boost/test/impl/debug.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -724,19 +724,11 @@
 // **************            console debugger setup            ************** //
 // ************************************************************************** //
 
-#if BOOST_WORKAROUND( BOOST_MSVC, <1300)
-std::string
-set_debugger( unit_test::const_string dbg_id )
-{
-    dbg_starter s;
-#else
+#if defined(BOOST_UNIX_BASED_DEBUG) // ************************ UNIX
+
 std::string
 set_debugger( unit_test::const_string dbg_id, dbg_starter s )
 {
-#endif
-
-#if defined(BOOST_UNIX_BASED_DEBUG) // ************************ UNIX
-
     std::string old = s_info.p_dbg;
 
     assign_op( s_info.p_dbg.value, dbg_id, 0 );
@@ -745,13 +737,17 @@
         s_info.m_dbg_starter_reg[s_info.p_dbg] = s;
 
     return old;
+}
 
 #else  // ***************************************************** default
 
+std::string
+set_debugger( unit_test::const_string, dbg_starter )
+{
     return std::string();
+}
 
 #endif
-}
 
 //____________________________________________________________________________//
 
Modified: trunk/boost/test/impl/exception_safety.ipp
==============================================================================
--- trunk/boost/test/impl/exception_safety.ipp	(original)
+++ trunk/boost/test/impl/exception_safety.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -18,10 +18,7 @@
 // Boost.Test
 #include <boost/test/detail/config.hpp>
 
-#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
-    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
-    !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
-    !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+#if BOOST_TEST_SUPPORT_INTERACTION_TESTING
 
 #include <boost/test/detail/global_typedef.hpp>
 #include <boost/test/detail/unit_test_parameters.hpp>
Modified: trunk/boost/test/impl/interaction_based.ipp
==============================================================================
--- trunk/boost/test/impl/interaction_based.ipp	(original)
+++ trunk/boost/test/impl/interaction_based.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -18,10 +18,7 @@
 // Boost.Test
 #include <boost/test/detail/config.hpp>
 
-#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
-    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
-    !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
-    !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+#if BOOST_TEST_SUPPORT_INTERACTION_TESTING
 
 // Boost.Test
 #include <boost/test/detail/config.hpp>
Modified: trunk/boost/test/impl/logged_expectations.ipp
==============================================================================
--- trunk/boost/test/impl/logged_expectations.ipp	(original)
+++ trunk/boost/test/impl/logged_expectations.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -18,10 +18,7 @@
 // Boost.Test
 #include <boost/test/detail/config.hpp>
 
-#if !BOOST_WORKAROUND(__GNUC__, < 3) && \
-    !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
-    !BOOST_WORKAROUND(BOOST_MSVC, <1310) && \
-    !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x530))
+#if BOOST_TEST_SUPPORT_INTERACTION_TESTING
 
 #include <boost/test/detail/global_typedef.hpp>
 
Modified: trunk/boost/test/impl/test_tools.ipp
==============================================================================
--- trunk/boost/test/impl/test_tools.ipp	(original)
+++ trunk/boost/test/impl/test_tools.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -33,9 +33,7 @@
 #include <cctype>
 #include <cwchar>
 #include <stdexcept>
-#ifdef BOOST_STANDARD_IOSTREAMS
 #include <ios>
-#endif
 
 // !! should we use #include <cstdarg>
 #include <stdarg.h>
@@ -62,7 +60,7 @@
 // ************************************************************************** //
 
 bool
-check_impl( predicate_result const& pr, wrap_stringstream& check_descr,
+check_impl( predicate_result const& pr, ::boost::unit_test::lazy_ostream const& check_descr,
             const_string file_name, std::size_t line_num,
             tool_level tl, check_type ct,
             std::size_t num_of_args, ... )
@@ -107,7 +105,7 @@
     switch( ct ) {
     case CHECK_PRED:
         unit_test_log << unit_test::log::begin( file_name, line_num ) 
-                      << ll << prefix << check_descr.str() << suffix;
+                      << ll << prefix << check_descr << suffix;
         
         if( !pr.has_empty_message() )
             unit_test_log << ". " << pr.message();
@@ -119,9 +117,9 @@
         unit_test_log << unit_test::log::begin( file_name, line_num ) << ll;
         
         if( tl == PASS )
-            unit_test_log << prefix << "'" << check_descr.str() << "'" << suffix;
+            unit_test_log << prefix << "'" << check_descr << "'" << suffix;
         else
-            unit_test_log << check_descr.str();
+            unit_test_log << check_descr;
         
         if( !pr.has_empty_message() )
             unit_test_log << ". " << pr.message();
@@ -216,7 +214,7 @@
 
     case CHECK_PRED_WITH_ARGS: {
         unit_test_log << unit_test::log::begin( file_name, line_num ) 
-                      << ll << prefix << check_descr.str();
+                      << ll << prefix << check_descr;
 
         // print predicate call description
         {
@@ -367,8 +365,7 @@
         ostr << '\'' << t << '\'';
     else
         ostr << std::hex
-        // showbase is only available for new style streams:
-#ifndef BOOST_NO_STD_LOCALE
+#if BOOST_TEST_USE_STD_LOCALE
         << std::showbase
 #else
         << "0x"
@@ -383,12 +380,12 @@
 {
     ostr << std::hex
         // showbase is only available for new style streams:
-#ifndef BOOST_NO_STD_LOCALE
+#if BOOST_TEST_USE_STD_LOCALE
         << std::showbase
 #else
         << "0x"
 #endif
-       << (int)t;
+        << (int)t;
 }
 
 //____________________________________________________________________________//
Modified: trunk/boost/test/impl/unit_test_log.ipp
==============================================================================
--- trunk/boost/test/impl/unit_test_log.ipp	(original)
+++ trunk/boost/test/impl/unit_test_log.ipp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -50,15 +50,22 @@
 
 namespace ut_detail {
 
-entry_value_collector
-entry_value_collector::operator<<( const_string v )
+entry_value_collector const&
+entry_value_collector::operator<<( lazy_ostream const& v ) const
 {
     unit_test_log << v;
 
-    m_last = false;
+    return *this;
+}
 
-    entry_value_collector res;
-    return res;
+//____________________________________________________________________________//
+
+entry_value_collector const& 
+entry_value_collector::operator<<( const_string v ) const
+{
+    unit_test_log << v;
+
+    return *this;
 }
 
 //____________________________________________________________________________//
@@ -303,8 +310,49 @@
 {
     *this << l;
 
-    ut_detail::entry_value_collector res;
-    return res;
+    return ut_detail::entry_value_collector();
+}
+
+//____________________________________________________________________________//
+
+bool
+unit_test_log_t::log_entry_start()
+{
+    if( s_log_impl().m_entry_in_progress ) 
+        return true;
+
+    switch( s_log_impl().m_entry_data.m_level ) {
+    case log_successful_tests:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_INFO );
+        break;
+    case log_messages:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_MESSAGE );
+        break;
+    case log_warnings:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_WARNING );
+        break;
+    case log_all_errors:
+    case log_cpp_exception_errors:
+    case log_system_errors:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_ERROR );
+        break;
+    case log_fatal_errors:
+        s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
+                                                       unit_test_log_formatter::BOOST_UTL_ET_FATAL_ERROR );
+        break;
+    case log_nothing:
+    case log_test_units:
+    case invalid_log_level:
+        return false;
+    }
+
+    s_log_impl().m_entry_in_progress = true;
+
+    return true;
 }
 
 //____________________________________________________________________________//
@@ -312,42 +360,19 @@
 unit_test_log_t&
 unit_test_log_t::operator<<( const_string value )
 {
-    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() ) {
-        if( !s_log_impl().m_entry_in_progress ) {
-            s_log_impl().m_entry_in_progress = true;
-
-            switch( s_log_impl().m_entry_data.m_level ) {
-            case log_successful_tests:
-                s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
-                                                               unit_test_log_formatter::BOOST_UTL_ET_INFO );
-                break;
-            case log_messages:
-                s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
-                                                               unit_test_log_formatter::BOOST_UTL_ET_MESSAGE );
-                break;
-            case log_warnings:
-                s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
-                                                               unit_test_log_formatter::BOOST_UTL_ET_WARNING );
-                break;
-            case log_all_errors:
-            case log_cpp_exception_errors:
-            case log_system_errors:
-                s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
-                                                               unit_test_log_formatter::BOOST_UTL_ET_ERROR );
-                break;
-            case log_fatal_errors:
-                s_log_impl().m_log_formatter->log_entry_start( s_log_impl().stream(), s_log_impl().m_entry_data,
-                                                               unit_test_log_formatter::BOOST_UTL_ET_FATAL_ERROR );
-                break;
-            case log_nothing:
-            case log_test_units:
-            case invalid_log_level:
-                return *this;
-            }
-        }
+    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )
+        s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );
 
+    return *this;
+}
+
+//____________________________________________________________________________//
+
+unit_test_log_t&
+unit_test_log_t::operator<<( lazy_ostream const& value )
+{
+    if( s_log_impl().m_entry_data.m_level >= s_log_impl().m_threshold_level && !value.empty() && log_entry_start() )
         s_log_impl().m_log_formatter->log_entry_value( s_log_impl().stream(), value );
-    }
 
     return *this;
 }
@@ -399,6 +424,18 @@
 
 //____________________________________________________________________________//
 
+// ************************************************************************** //
+// **************            unit_test_log_formatter           ************** //
+// ************************************************************************** //
+
+void
+unit_test_log_formatter::log_entry_value( std::ostream& ostr, lazy_ostream const& value )
+{
+    log_entry_value( ostr, (wrap_stringstream().ref() << value).str() );
+}
+
+//____________________________________________________________________________//
+
 } // namespace unit_test
 
 } // namespace boost
Modified: trunk/boost/test/output/compiler_log_formatter.hpp
==============================================================================
--- trunk/boost/test/output/compiler_log_formatter.hpp	(original)
+++ trunk/boost/test/output/compiler_log_formatter.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -48,6 +48,7 @@
 
     void    log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let );
     void    log_entry_value( std::ostream&, const_string value );
+    void    log_entry_value( std::ostream&, lazy_ostream const& value );
     void    log_entry_finish( std::ostream& );
 
 protected:
Modified: trunk/boost/test/test_tools.hpp
==============================================================================
--- trunk/boost/test/test_tools.hpp	(original)
+++ trunk/boost/test/test_tools.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -25,6 +25,7 @@
 
 #include <boost/test/utils/wrap_stringstream.hpp>
 #include <boost/test/utils/basic_cstring/io.hpp>
+#include <boost/test/utils/lazy_ostream.hpp>
 
 // Boost
 #include <boost/preprocessor/seq/for_each.hpp>
@@ -70,51 +71,29 @@
 // CT - check type
 // ARGS - arguments list
 
-#define BOOST_TEST_TOOL_IMPL( func, P, check_descr, TL, CT ) \
-    ::boost::test_tools::tt_detail::func(                    \
-        P,                                                   \
-        ::boost::wrap_stringstream().ref() << check_descr,   \
-        BOOST_TEST_L(__FILE__),                              \
-        (std::size_t)__LINE__,                               \
-        ::boost::test_tools::tt_detail::TL,                  \
-        ::boost::test_tools::tt_detail::CT                   \
+#define BOOST_TEST_TOOL_IMPL( func, P, check_descr, TL, CT )            \
+    ::boost::test_tools::tt_detail::func(                               \
+        P,                                                              \
+        ::boost::unit_test::lazy_ostream::instance() << check_descr,    \
+        BOOST_TEST_L(__FILE__),                                         \
+        (std::size_t)__LINE__,                                          \
+        ::boost::test_tools::tt_detail::TL,                             \
+        ::boost::test_tools::tt_detail::CT                              \
 /**/
 
 //____________________________________________________________________________//
 
-#if defined(__GNUC__)
-#  define BOOST_TEST_TOOLS_RETURN_VALUE
-#endif
-
-#ifdef BOOST_TEST_TOOLS_RETURN_VALUE
-#define BOOST_CHECK_IMPL( P, check_descr, TL, CT )                  \
-({                                                                  \
-    BOOST_TEST_PASSPOINT();                                         \
-    BOOST_TEST_TOOL_IMPL( check_impl, P, check_descr, TL, CT ), 0 );\
-})                                                                  \
-/**/
-#else
 #define BOOST_CHECK_IMPL( P, check_descr, TL, CT )                  \
 do {                                                                \
     BOOST_TEST_PASSPOINT();                                         \
     BOOST_TEST_TOOL_IMPL( check_impl, P, check_descr, TL, CT ), 0 );\
 } while( ::boost::test_tools::dummy_cond )                          \
 /**/
-#endif
 
 //____________________________________________________________________________//
 
 #define BOOST_TEST_PASS_ARG_INFO( r, data, arg ) , arg, BOOST_STRINGIZE( arg )
 
-#ifdef BOOST_TEST_TOOLS_RETURN_VALUE
-#define BOOST_CHECK_WITH_ARGS_IMPL( P, check_descr, TL, CT, ARGS )  \
-({                                                                  \
-    BOOST_TEST_PASSPOINT();                                         \
-    BOOST_TEST_TOOL_IMPL( check_frwd, P, check_descr, TL, CT )      \
-    BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_PASS_ARG_INFO, '_', ARGS ) ); \
-})                                                                  \
-/**/
-#else
 #define BOOST_CHECK_WITH_ARGS_IMPL( P, check_descr, TL, CT, ARGS )  \
 do {                                                                \
     BOOST_TEST_PASSPOINT();                                         \
@@ -122,7 +101,6 @@
     BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_PASS_ARG_INFO, '_', ARGS ) ); \
 } while( ::boost::test_tools::dummy_cond )                          \
 /**/
-#endif
 
 //____________________________________________________________________________//
 
@@ -490,7 +468,7 @@
 // ************************************************************************** //
 
 BOOST_TEST_DECL 
-bool check_impl( predicate_result const& pr, wrap_stringstream& check_descr,
+bool check_impl( predicate_result const& pr, ::boost::unit_test::lazy_ostream const& check_descr,
                  const_string file_name, std::size_t line_num,
                  tool_level tl, check_type ct,
                  std::size_t num_args, ... );
@@ -516,7 +494,7 @@
 template<typename Pred                                                              \
          BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), TEMPL_PARAMS, _ )>            \
 inline bool                                                                         \
-check_frwd( Pred P, wrap_stringstream& check_descr,                                 \
+check_frwd( Pred P, unit_test::lazy_ostream const& check_descr,                     \
             const_string file_name, std::size_t line_num,                           \
             tool_level tl, check_type ct                                            \
             BOOST_PP_REPEAT_ ## z( BOOST_PP_ADD( n, 1 ), FUNC_PARAMS, _ )           \
Modified: trunk/boost/test/unit_test_log.hpp
==============================================================================
--- trunk/boost/test/unit_test_log.hpp	(original)
+++ trunk/boost/test/unit_test_log.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -26,6 +26,7 @@
 
 #include <boost/test/utils/wrap_stringstream.hpp>
 #include <boost/test/utils/trivial_singleton.hpp>
+#include <boost/test/utils/lazy_ostream.hpp>
 
 // Boost
 #include <boost/utility.hpp>
@@ -71,15 +72,16 @@
 public:
     // Constructors
     entry_value_collector() : m_last( true ) {}
-    entry_value_collector( entry_value_collector& rhs ) : m_last( true ) { rhs.m_last = false; }
+    entry_value_collector( entry_value_collector const& rhs ) : m_last( true ) { rhs.m_last = false; }
     ~entry_value_collector();
 
     // collection interface
-    entry_value_collector operator<<( const_string );
+    entry_value_collector const& operator<<( lazy_ostream const& ) const;
+    entry_value_collector const& operator<<( const_string ) const;
 
 private:
     // Data members
-    bool    m_last;
+    mutable bool    m_last;
 };
 
 } // namespace ut_detail
@@ -119,10 +121,13 @@
     unit_test_log_t&    operator<<( log::end const& );          // end entry
     unit_test_log_t&    operator<<( log_level );                // set entry level
     unit_test_log_t&    operator<<( const_string );             // log entry value
+    unit_test_log_t&    operator<<( lazy_ostream const& );      // log entry value
 
     ut_detail::entry_value_collector operator()( log_level );   // initiate entry collection
 
 private:
+    bool            log_entry_start();
+
     BOOST_TEST_SINGLETON_CONS( unit_test_log_t );
 }; // unit_test_log_t
 
@@ -144,24 +149,24 @@
 
 #define BOOST_TEST_MESSAGE( M )                                 \
     BOOST_TEST_LOG_ENTRY( ::boost::unit_test::log_messages )    \
-    << (boost::wrap_stringstream().ref() << M).str()            \
+    << (::boost::unit_test::lazy_ostream::instance() << M)      \
 /**/
 
 //____________________________________________________________________________//
 
-#define BOOST_TEST_PASSPOINT()                          \
-    ::boost::unit_test::unit_test_log.set_checkpoint(   \
-        BOOST_TEST_L(__FILE__),                         \
-        (std::size_t)__LINE__ )                         \
+#define BOOST_TEST_PASSPOINT()                                  \
+    ::boost::unit_test::unit_test_log.set_checkpoint(           \
+        BOOST_TEST_L(__FILE__),                                 \
+        (std::size_t)__LINE__ )                                 \
 /**/
 
 //____________________________________________________________________________//
 
-#define BOOST_TEST_CHECKPOINT( M )                      \
-    ::boost::unit_test::unit_test_log.set_checkpoint(   \
-        BOOST_TEST_L(__FILE__),                         \
-        (std::size_t)__LINE__,                          \
-        (boost::wrap_stringstream().ref() << M).str() ) \
+#define BOOST_TEST_CHECKPOINT( M )                              \
+    ::boost::unit_test::unit_test_log.set_checkpoint(           \
+        BOOST_TEST_L(__FILE__),                                 \
+        (std::size_t)__LINE__,                                  \
+        (::boost::wrap_stringstream().ref() << M).str() )       \
 /**/
 
 //____________________________________________________________________________//
Modified: trunk/boost/test/unit_test_log_formatter.hpp
==============================================================================
--- trunk/boost/test/unit_test_log_formatter.hpp	(original)
+++ trunk/boost/test/unit_test_log_formatter.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -100,6 +100,7 @@
 
     virtual void        log_entry_start( std::ostream&, log_entry_data const&, log_entry_types let ) = 0;
     virtual void        log_entry_value( std::ostream&, const_string value ) = 0;
+    virtual void        log_entry_value( std::ostream&, lazy_ostream const& value ); // there is a default impl
     virtual void        log_entry_finish( std::ostream& ) = 0;
 };
 
Modified: trunk/boost/test/utils/basic_cstring/compare.hpp
==============================================================================
--- trunk/boost/test/utils/basic_cstring/compare.hpp	(original)
+++ trunk/boost/test/utils/basic_cstring/compare.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -26,7 +26,7 @@
 
 //____________________________________________________________________________//
 
-# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570) && !BOOST_WORKAROUND(__GNUC__, < 3)
+# if defined(BOOST_NO_STDC_NAMESPACE) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x570)
 namespace std { using ::toupper; }
 # endif
 
Modified: trunk/boost/test/utils/foreach.hpp
==============================================================================
--- trunk/boost/test/utils/foreach.hpp	(original)
+++ trunk/boost/test/utils/foreach.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -203,10 +203,6 @@
 // **************              BOOST_TEST_FOREACH              ************** //
 // ************************************************************************** //
 
-#if BOOST_WORKAROUND(__GNUC__, < 3)
-#define BOOST_TEST_FE_MULTISTATEMENT
-#endif
-
 #define BOOST_TEST_FE_ANY                   ::boost::unit_test::for_each::static_any_t
 #define BOOST_TEST_FE_IS_CONST( COL )       ::boost::unit_test::for_each::is_const_coll( COL )
 
@@ -258,8 +254,6 @@
 #define BOOST_TEST_FE_END_VAR   BOOST_JOIN( _fe_end_, BOOST_TEST_LINE_NUM )
 #define BOOST_TEST_FE_CON_VAR   BOOST_JOIN( _fe_con_, BOOST_TEST_LINE_NUM )
 
-#ifndef BOOST_TEST_FE_MULTISTATEMENT
-
 #define BOOST_TEST_FOREACH( RefType, var, COL )                                             \
 if( BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ) ) {} else            \
 if( BOOST_TEST_FE_ANY BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL ) ) {} else            \
@@ -272,24 +266,6 @@
          !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true )                             \
 /**/
 
-#else
-
-#define BOOST_TEST_FOREACH( RefType, var, COL )                                     \
-BOOST_TEST_FE_ANY BOOST_TEST_FE_CUR_VAR = BOOST_TEST_FE_BEG( COL ),                 \
-                  BOOST_TEST_FE_END_VAR = BOOST_TEST_FE_END( COL );                 \
-                                                                                    \
-for( bool BOOST_TEST_FE_CON_VAR = true; BOOST_TEST_FE_CON_VAR; )                    \
-for( ;                                                                              \
-     BOOST_TEST_FE_CON_VAR && (BOOST_TEST_FE_CON_VAR = !BOOST_TEST_FE_DONE( COL )); \
-     BOOST_TEST_FE_CON_VAR ? BOOST_TEST_FE_NEXT( COL ) : BOOST_FOREACH_NOOP( COL )) \
-                                                                                    \
-    if( (BOOST_TEST_FE_CON_VAR = false, false) ) {} else                            \
-    for( RefType var = BOOST_TEST_FE_DEREF( COL, RefType );                         \
-         !BOOST_TEST_FE_CON_VAR; BOOST_TEST_FE_CON_VAR = true )                     \
-/**/
-
-#endif
-
 //____________________________________________________________________________//
 
 } // namespace for_each
Modified: trunk/boost/test/utils/iterator/istream_line_iterator.hpp
==============================================================================
--- trunk/boost/test/utils/iterator/istream_line_iterator.hpp	(original)
+++ trunk/boost/test/utils/iterator/istream_line_iterator.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -59,11 +59,7 @@
     }
     explicit basic_istream_line_iterator( istream_type& input )
     : m_input_stream( &input ) 
-#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
-    , m_delimeter( '\n' )
-#else
     , m_delimeter( input.widen( '\n' ) )
-#endif
     {
         this->init();
     }
Added: trunk/boost/test/utils/lazy_ostream.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/test/utils/lazy_ostream.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -0,0 +1,114 @@
+//  (C) Copyright Gennadiy Rozental 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$
+//
+//  Description : contains definition for all test tools in test toolbox
+// ***************************************************************************
+
+#ifndef BOOST_TEST_LAZY_OSTREAM_HPP_070708GER
+#define BOOST_TEST_LAZY_OSTREAM_HPP_070708GER
+
+// Boost.Test
+#include <boost/test/detail/config.hpp>
+
+// STL
+#include <iosfwd>
+
+#include <boost/test/detail/suppress_warnings.hpp>
+
+//____________________________________________________________________________//
+
+// ************************************************************************** //
+// **************                  lazy_ostream                ************** //
+// ************************************************************************** //
+
+namespace boost {
+
+namespace unit_test {
+
+class lazy_ostream {
+public:
+    static lazy_ostream&    instance()                                              { static lazy_ostream inst; return inst; }
+
+    friend std::ostream&    operator<<( std::ostream& ostr, lazy_ostream const& o ) { return o( ostr ); }
+
+    // access method
+    bool                    empty() const                                           { return m_empty; }
+
+    // actual printing interface; to be accessed only by this class and children
+    virtual std::ostream&   operator()( std::ostream& ostr ) const                  { return ostr; }
+protected:
+    explicit                lazy_ostream( bool empty = true ) : m_empty( empty )    {}
+
+    // protected destructor to make sure right one is called
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+public:
+#endif
+    BOOST_TEST_PROTECTED_VIRTUAL ~lazy_ostream()                                    {}
+
+private:
+    // Data members
+    bool                    m_empty;
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+class lazy_ostream_impl : public lazy_ostream {
+public:
+    lazy_ostream_impl( lazy_ostream const& prev, T value )
+    : lazy_ostream( false )
+    , m_prev( prev )
+    , m_value( value )
+    {}
+private:
+    virtual std::ostream&   operator()( std::ostream& ostr ) const
+    {
+        return m_prev(ostr) << m_value;
+    }
+
+    // Data members
+    lazy_ostream const&     m_prev;
+    T                       m_value;
+};
+
+//____________________________________________________________________________//
+
+template<typename T>
+inline lazy_ostream_impl<T const&>
+operator<<( lazy_ostream const& prev, T const& v )
+{
+    return lazy_ostream_impl<T const&>( prev, v );
+}
+
+//____________________________________________________________________________//
+
+#if BOOST_TEST_USE_STD_LOCALE
+
+template<typename R,typename S>
+inline lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>
+operator<<( lazy_ostream const& prev, R& (BOOST_TEST_CALL_DECL *man)(S&) )
+{
+    return lazy_ostream_impl<R& (BOOST_TEST_CALL_DECL *)(S&)>( prev, man );
+}
+
+//____________________________________________________________________________//
+
+#endif
+
+} // namespace unit_test
+
+} // namespace boost
+
+//____________________________________________________________________________//
+
+#include <boost/test/detail/enable_warnings.hpp>
+
+#endif // BOOST_TEST_LAZY_OSTREAM_HPP_070708GER
Modified: trunk/boost/test/utils/wrap_stringstream.hpp
==============================================================================
--- trunk/boost/test/utils/wrap_stringstream.hpp	(original)
+++ trunk/boost/test/utils/wrap_stringstream.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -114,9 +114,7 @@
 
 //____________________________________________________________________________//
 
-#if !defined(BOOST_NO_STD_LOCALE) &&                                    \
-    (!defined(BOOST_MSVC) || BOOST_WORKAROUND(BOOST_MSVC, >= 1310))  && \
-    !defined(__MWERKS__) && !BOOST_WORKAROUND(__GNUC__, < 3)
+#if BOOST_TEST_USE_STD_LOCALE 
 
 template <typename CharT>
 inline basic_wrap_stringstream<CharT>&
Modified: trunk/boost/test/utils/xml_printer.hpp
==============================================================================
--- trunk/boost/test/utils/xml_printer.hpp	(original)
+++ trunk/boost/test/utils/xml_printer.hpp	2008-07-09 01:05:40 EDT (Wed, 09 Jul 2008)
@@ -67,7 +67,7 @@
 inline void
 print_escaped( std::ostream& where_to, std::string const& value )
 {
-        print_escaped( where_to, const_string( value ) );
+    print_escaped( where_to, const_string( value ) );
 }
 
 //____________________________________________________________________________//
@@ -76,7 +76,7 @@
 inline void
 print_escaped( std::ostream& where_to, T const& value )
 {
-        where_to << value;
+    where_to << value;
 }
 
 //____________________________________________________________________________//
@@ -87,11 +87,11 @@
 inline std::ostream&
 operator<<( custom_printer<attr_value> const& p, T const& value )
 {
-        *p << "=\"";
-        print_escaped( *p, value );
-        *p << '"';
+    *p << "=\"";
+    print_escaped( *p, value );
+    *p << '"';
 
-        return *p;
+    return *p;
 }
 
 //____________________________________________________________________________//