QuickCheck++ データの特徴にタグを付ける

前回のisTrivial()では、テストデータが自明かどうかの真偽値のみを返しましたが、
QuickCheck++には、これをさらに強力にしたものが用意されています。


quickcheck::Propertyを継承したクラスでclassify()関数を定義することにより
どういったデータなのかを表すタグを付けることができます。

#include <vector>
#include <algorithm>
#include <quickcheck/quickcheck.hh>

typedef std::vector<int> Vector;

struct prop_reverse : public quickcheck::Property<Vector> {
    bool holdsFor(const Vector& xs)
    {
        Vector ys = xs;
        std::reverse(ys.begin(), ys.end());
        std::reverse(ys.begin(), ys.end());
        return xs == ys;
    }

    const std::string classify(const Vector& xs)
    {
        if (xs.empty())
            return "empty";

        if (xs.size() < 2)
            return "1 element";

        return "correct";
    }
};

int main()
{
    prop_reverse().check();
}

このテストを実行すると以下のように出力され
テストデータのうち、2%が空のvector、2%が1要素のvectorであったことが確認できます。

OK, passed 100 tests.
  96% correct
   2% empty
   2% 1 element