裏話
QuickCheckユニットテストフレームワークをCに移植しています( GitHubの作業コードを参照してください)。構文は次のようになります。
for_all(property, gen1, gen2, gen3 ...);
propertyたとえば、テストする関数はどこにありますかbool is_odd(int)。gen1、gen2などは、の入力値を生成する関数ですproperty。整数を生成するもの、文字を生成するもの、文字列を生成するものなどがあります。
for_all任意の入力(任意の数の引数、任意のタイプの引数)を持つ関数を受け入れます。for_allジェネレーターを実行し、プロパティ関数に渡すテスト値を作成します。たとえば、プロパティis_oddはタイプが。の関数bool f(int)です。for_all生成物を使用して100個のテストケースを作成します。プロパティがそれらのいずれかに対してfalseを返す場合for_all、問題のあるテストケース値を出力します。それ以外の場合は、for_allを出力します"SUCCESS"。
したがって、ジェネレータにアクセスするにfor_allはを使用する必要があります。va_listジェネレーター関数を呼び出したら、それらをプロパティ関数に渡すにはどうすればよいですか?
例
is_oddタイプがの場合、次の構文を持つbool f(int)関数をどのように実装しますか?apply()
apply(is_odd, generated_values);
二次問題
SOを参照してください。
失敗したテストケースの任意の値をインテリジェントに印刷するにはどうすればよいですか?テストケースは、単一の整数、2文字、文字列、または上記の組み合わせの場合がありますか?使用するかどうかは事前にわかりません。
printf("%d %d %d\n", some_int, some_int, some_int);printf("%c\n" a_character);printf("%s%s\n", a_string, a_struct_requiring_its_own_printf_function);