【发布时间】:2021-03-28 16:53:33
【问题描述】:
我刚刚为自定义容器实现了自定义迭代器类型。容器为 C++17 ReversibleContainer 建模,其迭代器(const 和 non-const)模型 LegacyRandomAccessIterator。
我的问题是; std 中是否有某种内置的东西,我可以用它来测试容器及其迭代器是否符合指定的命名要求,或者我必须自己编写所有测试(这对我来说大部分是可行的但我宁愿不重新发明轮子;而且我不确定我是否有足够的模板向导来真正彻底地证明例如类型等是正确的)?
诸如(我知道这是其中之一)之类的东西,例如这来自operator <的操作语义:
custom_container::iterator a = ...;
custom_container::iterator b = ...;
assert((a < b) == (b - a > 0));
而且返回类型是正确的等等等等。
我已经设法找到 一些 功能,例如
if (!std::is_copy_constructible<custom_container::iterator>::value)
/* fail test */ ;
这至少对一些基本的命名需求有好处。
【问题讨论】:
-
没有真正回答您的问题,但请注意
assert((it -= n) == (it += -n))实际上不会起作用。意思是,如果迭代器被正确实现,测试将失败,因为它正在比较it - n和it - 2*n -
@IgorTandetnik 哎呀;让我清理一下。谢谢。
-
@IgorTandetnik 什么?该测试是虚假的,但出于不同的原因:两个复合赋值都返回对
it的引用,并且迭代器应该是自相等的。 -
@Deduplicator True。出于某种原因,我认为它会返回一个值。
-
但是如果您在没有咖啡的情况下进行测试,那么您就没有正确模拟真实世界的条件。
标签: c++ unit-testing testing stl c++17