問題タブ [quickcheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
573 参照

haskell - クイックチェックでのテストは等しくありませんか?

私は初めてでQuickCheck、使い方に頭を悩ませることはできません。

Set誤って(ではなくList)を使用してデータ型を実装したとしましょう。

その後、このバグに遭遇しました。2つのオブジェクトは、そうではない場合でも同じです。

QuickCheckこのケースをテストするためのテストケースを作成するにはどうすればよいですか?擬似コードでは、これは次のようになります。

プロジェクトのgithubで例を見てみましたが、そのような些細なケースはカバーされていないようです。

ヒントは大歓迎です!

0 投票する
2 に答える
936 参照

testing - Test.QuickCheck:同じタイプの複数のプロパティのテストを高速化

自分のタイプのインスタンスを生成するランダムジェネレーターをテストしています。そのために、私は次のカスタムインスタンスを持っていますArbitrary

これは、生成された値が特定のプロパティを保持していることをテストするためTest.QuickCheckに(実際には)とうまく機能します。Test.Frameworkただし、確認したいプロパティはかなりあります。追加するほど、すべてのプロパティを確認するのに時間がかかります。

毎回新しく生成するのではなく、すべてのプロパティをテストするために同じ生成値を使用する方法はありますか?私は明らかに、失敗時にどのプロパティが保持されなかったかを確認したいので、1つの巨大なプロパティを作成することandは最適ではありません。

0 投票する
1 に答える
687 参照

haskell - haskell-QuickCheckを使用した平均浮動小数点エラー

QuickCheck-2.5.1.1を使用してQAを行っています。私は2つの純粋関数gold :: a -> Float とをテストf :: a -> Floatしていaます。インスタンスは任意です。

goldこれが参考計算であり、私fが最適化しているバリエーションです。

これまで、クイックチェックを使用した私のテストのほとんどは、のようなテストを使用してき\a -> abs (gold a - f a) < 0.0001ました。

ただし、平均誤差と標準偏差を知ることは私の設計を導くのに役立つので、しきい値を確認しながら統計を収集したいと思います。

QuickCheckを使用してこのような統計を収集する方法はありますか?


具体例

私が探している種類のものの具体的な例を与えるために、平方根を近似するための次の2つの関数があると仮定します。

これのテストは次のようになります。

したがって、テストの副作用として知りたいのは、統計abs (heron x - maclaurin x)(平均や標準偏差など)です。

0 投票する
1 に答える
438 参照

haskell - DocTest の QuickTest で ByteStrings を使用するには?

doctest とquickcheckArbitraryを使用する場合、インスタンスを定義するにはどうすればよいですか?

Doctest と Cabal は、ここで説明されているようにセットアップされ、テスト用に別のディレクトリが作成されます。

doctest の行は次のようになります。

Arbitrarydoctest が見つけられるように、どこでどのようにインスタンスを定義すればよいですか? テストプロジェクトで定義したいことに注意してください。

0 投票する
3 に答える
4696 参照

testing - QuickCheck: バランスの取れた標本を生成するネストされたデータ構造の任意のインスタンス

tl;dr:Arbitraryデータ型で入れ子が多すぎる場合、爆発しないインスタンスをどのように記述しますか? そして、これらのインスタンスがデータ構造の真にランダムな標本を生成することをどのように保証しますか?

ランダムなツリー構造を生成し、ライブラリ コードで構造を壊した後、これらの構造の特定のプロパティをテストしたいと考えています。(NB: サブタイピング アルゴリズムの実装を書いています。つまり、型の階層が与えられた場合、型 A は型 B のサブタイプです。これは、複数の継承と初期化後の更新を階層に含めることで、任意に複雑にすることができます。これらのどちらもサポートしない古典的な方法は Schubert Numbering であり、私が知っている最新の結果は Alavi et al. 2008 です。)

次のバラの木の例を見てみましょうData.Tree

Arbitray の非常に単純な (そして自宅で試してはいけない) インスタンスは次のようになります。

型制約に従ってa既にインスタンスがあり、これもインスタンスであるため、インスタンスがあるため、これは簡単に思えます。非常に明白な理由で (通常は) 終了しません: 生成するリストが任意に長いため、構造が大きくなりすぎて、メモリに収まらない可能性が高くなります。さらに保守的なアプローチ:ArbitraryForest[]

同じ理由で、再び機能しません。リストの長さを抑えるために size パラメーターを微調整することもできますが、それでも終了を保証するものではありませんこれは、まだ複数の連続したサイコロが振られているためです。子供。)

つまり、ツリー全体のサイズを制限する必要があります。それはそれほど簡単ではありません。unordered-containers簡単です: を使用するだけfromListです。これはここではそれほど簡単ではありません: どのようにしてリストをランダムにツリーに変換し、いずれにせよ偏りを招くことはありません (つまり、左枝や非常に左寄りのツリーを好まない)。

リストからある種の幅優先の構築 (によって提供される関数Data.Treeはすべて事前注文されています) は素晴らしいものであり、それを書くことはできると思いますが、それは自明ではありません。私は現在ツリーを使用していますが、後でさらに複雑なものを使用するため、より一般的で複雑でない解決策を見つけようとするかもしれないと考えました。それとも自明ではない独自のArbitraryジェネレーターを作成する必要がありますか? 後者の場合、これは手間がかかりすぎるように見えるので、実際には単体テストに頼るかもしれません。

0 投票する
3 に答える
2076 参照

haskell - クイックチェックの使用

foldl の実装を書き、それが機能するかどうかを確認したかったので、いくつかのケースを試してみましたが、うまく機能しているようですが、確認したいと思います。

私はquickCheckについて読んで試してみましたが、うまくいかないようです。これがコードです

実行するquickCheck testと、次のエラーがスローされます。

0 投票する
2 に答える
11702 参照

haskell - クイックチェック用に単純型の任意のインスタンスを生成する方法

私は単純な型定義を持っています:

Cellおそらくクイックチェックがセル値を生成する方法を知らないため、クイックチェックプロパティへの入力として使用できません。

私の理解では、Cell を型クラスのインスタンスにする必要がありますArbitrary

たとえば、x と y のランダムな正の値で Cell を生成したい場合、どうすればよいでしょうか?

0 投票する
2 に答える
385 参照

haskell - QuickCheck2 を使用する簡単なテスト フレームワークの例を提供してください

この基本的なテスト フレームワークの例を QuickCheck2 で動作させるのに少し苦労しています。サンプルで QuickCheck 1 を使用しているため、上記のページに記載されている次のエラーが発生します。QuickCheck2 の使用が一般的に好まれると思いますが、test-framework でどのように使用すればよいですか?

エラー:

前もって感謝します。


Test.Framework.Providers.QuickCheck2 をインポートすると、次のエラーが発生します。

0 投票する
2 に答える
5505 参照

haskell - Haskell の QuickCheck に関して、シュリンクとは何ですか?

QuickCheck >= 2.6 のロープを学んでいますが、シュリンクとは何かを理解していません。タイプ シグネチャを見ると、shrink は expand のように見えます。私を照らしてください:)