unsigned char
の出力書式をBOOST_CHECK_EQUAL_COLLECTIONS
に変更する方法はありますか?符号なしの文字を含むBOOST_CHECK_EQUAL_COLLECTIONSは、不一致で印刷不可能な文字を出力します
私はunsigned char型の配列内の値を検証するために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));
と私は不一致で印刷できない文字を取得します:私は一時的に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
unsigned
の配列で、文字ではなく数字を出力するようにしました。同様に、私はresult.Message
を新しいvector<unsigned>
にコピーし、これと比較することができます:
vector<unsigned> result_message(result.Message, result.Message + result.Length);
これはひどいわけではありませんが、可能であればオリジナルと比較したいと思います。
内部では、BOOST_CHECK_EQUAL_COLLECTIONS
は、私がアクセスできない一時的なstringstream
を使用していますが、ostream
の書式設定について不思議です。
私はファセットとロケールを扱う経験はあまりありませんが、どういう形で使ってもかまいませんか?unsigned char
ASCIIの代わりに数値として印刷しますか?
をいい考えですが、ファセットやロケールは過度のものです。 – mskfisher