bool equal_and_continue_impl( c_string_literal left, c_string_literal right, wrap_stringstream& message, c_string_literal file_name, int line_num, unit_test_framework::log_level loglevel ) { bool predicate = (left && right) ? std::strcmp( left, right ) == 0 : (left == right); left = left ? left : "null string"; right = right ? right : "null string"; if( !predicate ) { return test_and_continue_impl( false, wrap_stringstream().ref() << "test " << message.str() << " failed [" << left << " != " << right << "]", file_name, line_num, false, loglevel ); } return test_and_continue_impl( true, message, file_name, line_num, true, loglevel ); }
inline void bitwise_equal_and_continue_impl( Left const& left_, Right const& right_, wrap_stringstream& message_, const_string file_name_, std::size_t line_num_, unit_test::log_level log_level_ = unit_test::log_all_errors ) { std::size_t left_bit_size = sizeof(Left)*CHAR_BIT; std::size_t right_bit_size = sizeof(Right)*CHAR_BIT; static Left const L1( 1 ); static Right const R1( 1 ); if( left_bit_size != right_bit_size ) warn_and_continue_impl( false, wrap_stringstream().ref() << message_ << ": operands bit sizes does not coinside", file_name_, line_num_, false ); std::size_t total_bits = left_bit_size < right_bit_size ? left_bit_size : right_bit_size; for( std::size_t counter = 0; counter < total_bits; ++counter ) { bool predicate = ( left_ & ( L1 << counter ) ) == ( right_ & ( R1 << counter ) ); test_and_continue_impl( predicate, wrap_stringstream().ref() << message_.str() << " in the position " << counter, file_name_, line_num_, true, log_level_ ); } }