前回の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