で使用できますBOOST_REQUIRE_EQUAL_COLLECTIONS
が、ベクトルのベクトルまたは値がベクトルであるマップがある場合にstd::vector<T>
、Boost.Testを印刷する方法を教える必要があります。std::vector
マップがある場合、Boost.Testに印刷方法を教える必要がありますstd::pair
。std::vector
またはの定義を変更することはできないため、定義std::pair
したストリーム挿入演算子が、のクラス定義の一部でなくてもBoost.Testによって使用されるように変更する必要がありstd::vector
ます。また、この手法は、Boost.Testを満足させるためだけに、テスト対象のシステムにストリーム挿入演算子を追加したくない場合に役立ちます。
これがすべてのレシピですstd::vector
:
namespace boost
{
// teach Boost.Test how to print std::vector
template <typename T>
inline wrap_stringstream&
operator<<(wrap_stringstream& wrapped, std::vector<T> const& item)
{
wrapped << '[';
bool first = true;
for (auto const& element : item) {
wrapped << (!first ? "," : "") << element;
first = false;
}
return wrapped << ']';
}
}
[e1,e2,e3,...,eN]
これにより、要素を含むベクトルのようにベクトルがフォーマットさN
れ、ネストされた任意の数のベクトルに対して機能します。たとえば、ベクトルの要素もベクトルの場合です。
これが同様のレシピですstd::pair
:
namespace boost
{
// teach Boost.Test how to print std::pair
template <typename K, typename V>
inline wrap_stringstream&
operator<<(wrap_stringstream& wrapped, std::pair<const K, V> const& item)
{
return wrapped << '<' << item.first << ',' << item.second << '>';
}
}
BOOST_REQUIRE_EQUAL_COLLECTIONS
2つのコレクションが同じサイズであると仮定すると、不一致のアイテムのインデックスと2つのコレクションの内容が表示されます。サイズが異なる場合、それは不一致と見なされ、異なるサイズが印刷されます。