Можно ли изменить формат вывода unsigned char
на BOOST_CHECK_EQUAL_COLLECTIONS
?
Я использую Boost.Test 1.37.0 для проверки значений в массиве без знака:
// result.Message is a fixed-size unsigned char array
// result.Length is the length of the data inside result.Message
const unsigned expected_message[] = { 3, 60, 43, 17 };
BOOST_CHECK_EQUAL_COLLECTIONS(
result.Message,
result.Message + result.Length,
expected_message,
expected_message + sizeof(expected_message) / sizeof(*expected_message) );
и я получаю непечатаемые символы при несовпадении:
test_foo.cpp(117): error in "test_bar": check { result.Message, result.Message + result.Length } == { expected_message, expected_message + sizeof(expected_message) / sizeof(*expected_message) } failed.
Mismatch in a position 1: != 60
Mismatch in a position 2: < != 43
Mismatch in a position 3: != 17
Я временно изменил expected_message
на массив unsigned
, чтобы он печатал числа, а не символы - аналогично, я мог бы скопировать result.Message
в новый vector<unsigned>
и сравнить с ним:
vector<unsigned> result_message(result.Message, result.Message + result.Length);
что не страшно, но я бы предпочел сравнить с оригиналом, если это возможно.
Внутренне, BOOST_CHECK_EQUAL_COLLECTIONS
использует временный stringstream
, к которому я не могу получить доступ, но меня удивило форматирование ostream
.
У меня нет большого опыта работы с фасетами и локалями, но мне интересно, смогу ли я как-нибудь использовать их для печати отдельных unsigned char
в виде чисел вместо ASCII?