問題タブ [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 投票する
1 に答える
3106 参照

haskell - 条件付き QuickCheck プロパティ

並べ替えられた 2 つの入力を並べ替えられた出力にマージする関数の QuickCheck プロパティを作成しました。

つまり、入力がソートされると、出力もソートされます。次のように書くこともできます。

しかし、私はどちらのバージョンもあまり好きではありません。QuickCheck の「条件付きプロパティ」のより適切な構文はありますか?

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

haskell - Haskell-QuickCheckを使用したParsecテスト

Parsecパーサーのテストを作成したいと思います。パーサーとデータ構造の例を次に示します。

物件を確認する必要があることは承知していparse = parse . pretty . parseます。しかし、どのようにして正しいテストケースと間違ったテストケースを生成する必要がありますか?一般に、特定のBNFのテストケースをどのように生成する必要がありますか?私は知っていますが、これからinstance Arbitraryはあまり助けにはなりません。

この単純なパーサーのジェネレーターのよくコメントされた例を提供していただければ幸いです。

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

haskell - Gen (Maybe Int) から Maybe Int への変換

Gen (Maybe Int)を に変換したいMaybe Int。1 から 9 までのランダムな Just Int を生成する関数があります。セル関数を使用したいのですが、その型シグネチャを変更できません。助言がありますか?

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

haskell - QuickCheck でのカスタム ジェネレーターと任意のインスタンスの使用

ここに簡単な関数があります。これは入力を取り、ペアIntの (場合によっては空の) リストを返します(Int, Int)。ここで、入力Intは任意のペアの 3 乗要素の合計です。

上記が真であるというプロパティをテストしたい。各要素を 3 乗し、返されたタプルのいずれかを合計すると、入力が返されます。

Int実行時の考慮事項として、 QuickCheck でこれをテストするときに入力 s を特定のサイズに制限したいと思います。適切なタイプとArbitraryインスタンスを定義できます。

SmallIntそして、次の代わりに使用する関数とプロパティのバージョンを定義する必要があると思いますInt

これは正常に機能し、標準の 100 テストは期待どおりにパスします。しかし、本当に必要なのはカスタム ジェネレーターだけである場合、新しい型、インスタンス、および関数を定義する必要はないように思われます。だから私はこれを試しました:

さて、これを最初に数回実行したところ、すべてが正常に機能し、すべてのテストに合格しました。しかし、その後の実行では、失敗が観察されました。テストサイズを大きくすると、次のものが確実に見つかります。

QuickCheck から返された 0 と 8205379の2 つの縮小された入力が存在するため、ここでは少し混乱しています。また、これらの入力は予測どおりに機能します (少なくとも私の show-able プロパティでは):

Gen明らかに、私が定義したカスタムを使用するプロパティに問題があるようです。

私は何を間違えましたか?

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

haskell - QuickCheck 2 バッチ処理

QuickCheckのBatchモジュールはバージョン 2で削除されました( 1.2.0.1 にはまだあります)。このため、私はいつも、mapM_複数のテストを一緒に行うのはハックのようなものだと感じています。QuickCheck 2 の後継機能を見落としていませんか? 独立したテストをグループ化する標準的な方法はありますか?

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

haskell - QuickCheckプロパティが失敗した理由を表示し、テストされた関数で例外を処理します

関数をテストするQuickCheckプロパティがありますffプロパティは、関数をいくつかのリストにマップしxs、結果の要素ごとのプロパティをチェックします。xs失敗した場合は、この失敗に関連する要素を表示したいと思います。次のプロパティを検討してください。

これは実装には問題なく機能します

およびquickcheck prop出力

ただし、f例外をスローした場合、つまり

その後、quickcheck prop出力

前の例のように、この2番目の例外をキャッチして「Just0」を返すプロパティを作成するにはどうすればよいですか?whenFailおそらく、これを使用することもできますwhenFail'が、QuickCheckの内部をまだ理解していません。

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

list - Haskellが「あいまいな型変数」エラーを出すのはなぜですか?

過去の紙の問題が私に尋ねました。リスト内の2つのアイテムごとに交換する関数p::[a]->[a]を定義します。関数は、最初の項目を2番目の項目と交換し、3番目の項目を4番目の項目と交換する必要があります。リスト内包表記によって1つを定義し、再帰によってもう1つを定義します。

さて、これは私が思いついたものです:

関数は正常に動作しますが、2つが同一であるかどうかを確認したかったので、以下にquickCheckを配置しました。しかし、これは何らかの理由で「prop_2の使用から生じる曖昧な型変数[a0]」というエラーを私に与えます

私はここで何が悪いのか理解していません、私は私には完全に賢明に見えます... Haskellは正確に何を不平を言っていますか?

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

haskell - QuickCheck でレコードを縮小する慣用的な方法

レコードタイプがあるとします:

Arbitrary インスタンスを適切に記述するには、次のように Control.Applicative を使用します。

したがって、Foo のシュリンクのリストは、そのメンバーのすべてのシュリンクのデカルト積です。

しかし、これらの縮小の 1 つが [ ] を返す場合、Foo 全体の縮小はありません。したがって、これは機能しません。

縮小リストに元の値を含めることで、保存してみることができます。

しかし今は、shrink (Foo 0 0 0) は [Foo 0 0 0] を返します。これは、縮小が決して終了しないことを意味します。だからそれもうまくいきません。

ここで使用されている <*> 以外の何かがあるはずですが、何がわかりません。

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

haskell - QuickCheck を使用してランダムな引数で関数を評価する

私は、quickcheck を使用して、指定された関数のランダムな引数を生成しようとしています (そのすべての型に Arbitrary インスタンスと Show インスタンスがあると仮定します)。これらの引数での関数の評価も行います。引数の値と評価された答えを後で出力するだけです。だから私は次のタイプの関数を期待しています

ここでのタイプについてはまだわかりませんが、そうすると思いTestable aます。私はまだ必要なものを実際に手に入れることができません。Roseクイックチェックのデータ型などの混乱に混乱していますResult

アップデート

関数があるとします

次に、次のような動作を想定します

ここで、1 と 3 は に対して生成されたランダムな値でInt、4 はf 1 3です。