裏話
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);