浮動小数点計算を含むCプログラムのランダム生成器を知っている人はいますか?浮動小数点計算を含むCプログラムのランダム生成
Csmithのようなものを探していますが、Csmithは浮動小数点式を生成せず、他にもたくさんの構造体が生成されるため、変更が少し難しくなります。逐次計算を生成することは、いくつかの浮動小数点演算を含む限り、私の目的にとっては良いスタートになります。条件式はさらに優れていますが、ループ、ポインタ、または配列を必要としません。
非常に多くの言語がCのような構文を使用しているので、そのようなジェネレータはC固有のものでなくてもかまいません。別のC言語に特有のものでも、生成されたプログラムをテキスト処理できます。その言語をCプログラムに組み込みます。
EDIT:私が探しているものを明確にするために、Csmithが生成したプログラムのスニペットです。
...
int64_t *l_374 = &g_189;
int32_t l_375 = (-1L);
int i, j, k;
l_375 &= ((g_106 == ((*l_374) = (&g_324[4] == l_373[0][0][5]))) < 0x80C8L);
return (*g_207);
...
私もCsmithプログラムを取り、float
とint64_t
が構文的に正しいCプログラムを与える可能性があり、たとえば、置き換えながら、それはほぼ確実に定義されたプログラムを与えないことを明確にすべきです。置換プログラムに未定義のビヘイビアが含まれているかどうかをテストできますが、これは安価ではありません。置換されたプログラムの99%を未定義にする必要がある場合、処理が遅すぎて便利になりません。
を掲載していませんかランダムにCプログラムを生成したいですか?遠くまで!よかったね!どうして? :P – TheIronKnuckle
@ TheIronKnuckle "differential testing"の場合:ランダムに生成された*定義された* Cプログラムを2つの異なるコンパイラでコンパイルし、プログラムが異なる結果を出す場合、コンパイラの1つにバグが見つかりました。 http://www.linux-mips.org/pub/linux/mips/people/macro/DEC/DTJ/DTJT08/DTJT08PF.PDF –
@ TheIronKnuckle浮動小数点では少し複雑です-pointはC99で規定されておらず、2つのコンパイラは両方とも正しく、浮動小数点の存在で異なる結果を与えるでしょう。このため、この機能はCsmithには含まれていませんでした。しかし、私はまだ私の目的のためにランダムな浮動小数点プログラムを使用できると思う。 –