問題タブ [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.
haskell - 条件付き QuickCheck プロパティ
並べ替えられた 2 つの入力を並べ替えられた出力にマージする関数の QuickCheck プロパティを作成しました。
つまり、入力がソートされると、出力もソートされます。次のように書くこともできます。
しかし、私はどちらのバージョンもあまり好きではありません。QuickCheck の「条件付きプロパティ」のより適切な構文はありますか?
haskell - Haskell-QuickCheckを使用したParsecテスト
Parsecパーサーのテストを作成したいと思います。パーサーとデータ構造の例を次に示します。
物件を確認する必要があることは承知していparse = parse . pretty . parse
ます。しかし、どのようにして正しいテストケースと間違ったテストケースを生成する必要がありますか?一般に、特定のBNFのテストケースをどのように生成する必要がありますか?私は知っていますが、これからinstance Arbitrary
はあまり助けにはなりません。
この単純なパーサーのジェネレーターのよくコメントされた例を提供していただければ幸いです。
haskell - Gen (Maybe Int) から Maybe Int への変換
Gen (Maybe Int)
を に変換したいMaybe Int
。1 から 9 までのランダムな Just Int を生成する関数があります。セル関数を使用したいのですが、その型シグネチャを変更できません。助言がありますか?
haskell - QuickCheck でのカスタム ジェネレーターと任意のインスタンスの使用
ここに簡単な関数があります。これは入力を取り、ペアInt
の (場合によっては空の) リストを返します(Int, Int)
。ここで、入力Int
は任意のペアの 3 乗要素の合計です。
上記が真であるというプロパティをテストしたい。各要素を 3 乗し、返されたタプルのいずれかを合計すると、入力が返されます。
Int
実行時の考慮事項として、 QuickCheck でこれをテストするときに入力 s を特定のサイズに制限したいと思います。適切なタイプとArbitrary
インスタンスを定義できます。
SmallInt
そして、次の代わりに使用する関数とプロパティのバージョンを定義する必要があると思いますInt
。
これは正常に機能し、標準の 100 テストは期待どおりにパスします。しかし、本当に必要なのはカスタム ジェネレーターだけである場合、新しい型、インスタンス、および関数を定義する必要はないように思われます。だから私はこれを試しました:
さて、これを最初に数回実行したところ、すべてが正常に機能し、すべてのテストに合格しました。しかし、その後の実行では、失敗が観察されました。テストサイズを大きくすると、次のものが確実に見つかります。
QuickCheck から返された 0 と 8205379の2 つの縮小された入力が存在するため、ここでは少し混乱しています。また、これらの入力は予測どおりに機能します (少なくとも私の show-able プロパティでは):
Gen
明らかに、私が定義したカスタムを使用するプロパティに問題があるようです。
私は何を間違えましたか?
haskell - QuickCheck 2 バッチ処理
QuickCheckのBatch
モジュールはバージョン 2で削除されました( 1.2.0.1 にはまだあります)。このため、私はいつも、mapM_
複数のテストを一緒に行うのはハックのようなものだと感じています。QuickCheck 2 の後継機能を見落としていませんか? 独立したテストをグループ化する標準的な方法はありますか?
haskell - QuickCheckプロパティが失敗した理由を表示し、テストされた関数で例外を処理します
関数をテストするQuickCheckプロパティがありますf
。f
プロパティは、関数をいくつかのリストにマップしxs
、結果の要素ごとのプロパティをチェックします。xs
失敗した場合は、この失敗に関連する要素を表示したいと思います。次のプロパティを検討してください。
これは実装には問題なく機能します
およびquickcheck prop
出力
ただし、f
例外をスローした場合、つまり
その後、quickcheck prop
出力
前の例のように、この2番目の例外をキャッチして「Just0」を返すプロパティを作成するにはどうすればよいですか?whenFail
おそらく、これを使用することもできますwhenFail'
が、QuickCheckの内部をまだ理解していません。
list - Haskellが「あいまいな型変数」エラーを出すのはなぜですか?
過去の紙の問題が私に尋ねました。リスト内の2つのアイテムごとに交換する関数p::[a]->[a]を定義します。関数は、最初の項目を2番目の項目と交換し、3番目の項目を4番目の項目と交換する必要があります。リスト内包表記によって1つを定義し、再帰によってもう1つを定義します。
さて、これは私が思いついたものです:
関数は正常に動作しますが、2つが同一であるかどうかを確認したかったので、以下にquickCheckを配置しました。しかし、これは何らかの理由で「prop_2の使用から生じる曖昧な型変数[a0]」というエラーを私に与えます
私はここで何が悪いのか理解していません、私は私には完全に賢明に見えます... Haskellは正確に何を不平を言っていますか?
haskell - QuickCheck でレコードを縮小する慣用的な方法
レコードタイプがあるとします:
Arbitrary インスタンスを適切に記述するには、次のように Control.Applicative を使用します。
したがって、Foo のシュリンクのリストは、そのメンバーのすべてのシュリンクのデカルト積です。
しかし、これらの縮小の 1 つが [ ] を返す場合、Foo 全体の縮小はありません。したがって、これは機能しません。
縮小リストに元の値を含めることで、保存してみることができます。
しかし今は、shrink (Foo 0 0 0) は [Foo 0 0 0] を返します。これは、縮小が決して終了しないことを意味します。だからそれもうまくいきません。
ここで使用されている <*> 以外の何かがあるはずですが、何がわかりません。
haskell - QuickCheck を使用してランダムな引数で関数を評価する
私は、quickcheck を使用して、指定された関数のランダムな引数を生成しようとしています (そのすべての型に Arbitrary インスタンスと Show インスタンスがあると仮定します)。これらの引数での関数の評価も行います。引数の値と評価された答えを後で出力するだけです。だから私は次のタイプの関数を期待しています
ここでのタイプについてはまだわかりませんが、そうすると思いTestable a
ます。私はまだ必要なものを実際に手に入れることができません。Rose
クイックチェックのデータ型などの混乱に混乱していますResult
。
アップデート
関数があるとします
次に、次のような動作を想定します
ここで、1 と 3 は に対して生成されたランダムな値でInt
、4 はf 1 3
です。