inline void test_cstr_ne_impl( char const * expr1, char const * expr2, char const * file, int line, char const * function, char const * const t, char const * const u ) { if( std::strcmp(t, u) != 0 ) { report_errors_remind(); } else { BOOST_LIGHTWEIGHT_TEST_OSTREAM << file << "(" << line << "): test '" << expr1 << " == " << expr2 << "' failed in function '" << function << "': " << "'" << t << "' == '" << u << "'" << std::endl; ++test_errors(); } }
template<class T, class U> inline void test_ne_impl( char const * expr1, char const * expr2, char const * file, int line, char const * function, T const & t, U const & u ) { if( t != u ) { report_errors_remind(); } else { BOOST_LIGHTWEIGHT_TEST_OSTREAM << file << "(" << line << "): test '" << expr1 << " != " << expr2 << "' failed in function '" << function << "': " << "'" << test_output_impl(t) << "' == '" << test_output_impl(u) << "'" << std::endl; ++test_errors(); } }
template< class T > inline void test_trait_impl( char const * trait, void (*)( T ), bool expected, char const * file, int line, char const * function ) { if( T::value == expected ) { report_errors_remind(); } else { BOOST_LIGHTWEIGHT_TEST_OSTREAM << file << "(" << line << "): predicate '" << trait << "' [" << boost::core::demangled_name( BOOST_CORE_TYPEID(T) ) << "]" << " test failed in function '" << function << "' (should have been " << ( expected? "true": "false" ) << ")" << std::endl; ++test_errors(); } }
inline int & test_errors() { static int x = 0; report_errors_remind(); return x; }
void test_all_with_impl(FormattedOutputFunction& output, char const * file, int line, char const * function, InputIterator1 first_begin, InputIterator1 first_end, InputIterator2 second_begin, InputIterator2 second_end, BinaryPredicate predicate) { InputIterator1 first_it = first_begin; InputIterator2 second_it = second_begin; typename std::iterator_traits<InputIterator1>::difference_type first_index = 0; typename std::iterator_traits<InputIterator2>::difference_type second_index = 0; std::size_t error_count = 0; const std::size_t max_count = 8; do { while ((first_it != first_end) && (second_it != second_end) && predicate(*first_it, *second_it)) { ++first_it; ++second_it; ++first_index; ++second_index; } if ((first_it == first_end) || (second_it == second_end)) { break; // do-while } if (error_count == 0) { output << file << "(" << line << "): Container contents differ in function '" << function << "':"; } else if (error_count >= max_count) { output << " ..."; break; } output << " [" << first_index << "]"; ++first_it; ++second_it; ++first_index; ++second_index; ++error_count; } while (first_it != first_end); first_index += std::distance(first_it, first_end); second_index += std::distance(second_it, second_end); if (first_index != second_index) { if (error_count == 0) { output << file << "(" << line << "): Container sizes differ in function '" << function << "': size(" << first_index << ") != size(" << second_index << ")"; } else { output << " [*] size(" << first_index << ") != size(" << second_index << ")"; } ++error_count; } if (error_count == 0) { report_errors_remind(); } else { output << std::endl; ++test_errors(); } }