Есть ли способ изменить форматирование вывода BOOST_CHECK_EQUAL_COLLECTIONS
?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
s print как цифры вместо ASCII?
Приятная мысль, но грани и локали переполнены. – mskfisher