代码之家  ›  专栏  ›  技术社区  ›  Jason C

自定义STL兼容容器和迭代器的单元测试

  •  0
  • Jason C  · 技术社区  · 3 年前

    我刚刚实现了一个自定义容器的自定义迭代器类型。容器模型C++ 17 ReversibleContainer ,及其迭代器(常量和非常量)模型 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 */ ;
    

    0 回复  |  直到 3 年前
        1
  •  3
  •   Yakk - Adam Nevraumont    3 年前

    不,那不是我们。

    事实上,证明一个类型满足了所有的迭代器的要求,不能在C++中静态地完成。

    我发现大多数需求在实践中很容易检查(如果没有自动化那么容易的话)。我发现的最常见的问题是,比输入迭代器更强的“遗留”迭代器必须具有它们返回的引用和指针所指向的实际持久性数据;这些数据不能存在于迭代器中,或者是临时的/生成的。