問題タブ [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 を使用して高階関数をテストするにはどうすればよいですか?
テストしたい高階関数があり、テストしたいプロパティの 1 つは、渡された関数で何をするかです。説明のために、以下に不自然な例を示します。
大まかに言うと、これはジェネレーターの例です。単一の から始めて、a
のシングルトン リストを作成し、述語で停止するように指示されるまで、 の[a]
新しいリストを作成します。[a]
呼び出しは次のようになります。
どこ
テストしたいプロパティは次のとおりです。
への呼び出しでは、空のリストを に渡さないことを約束し
gen init next stop
ます。gen
next
QuickCheck を使用してこのプロパティをテストできますか?
haskell - シンプルな乱数生成
私はイライラする調査をしばらく行った後にこれを書いています。ここの誰かがこのトピックについて私を啓発してくれることを願っています.
Haskell関数で単純な乱数を生成したいのですが、残念ながら、モナド、「do」での代入、ジェネレーターの作成など、あらゆる種類の重要な要素なしではこれを行うことは不可能のようです.
理想的には、C の「rand()」に相当するものを探していました。しかし、よく調べた結果、言語がどのように設計されているかを考えると、そのようなことはないと確信しています。(もしあれば、誰か教えてください)。それは現実的ではないように思われるので、特定の問題に対して乱数を取得する方法と、乱数を取得する方法に関する一般的な説明を見つけたいと思います。
私は QuickCheck を理解しようとしていますが、乱数を使用できないために難しくなっています。私はこのようなことを試しました( RANDOMNUMBERHEREの代わりにdrawInt 0(長さxs2)を配置することにより)が、テイクにはIntが必要であり、そのメソッドにはIO Intが残っているという事実に行き詰まります。thisによると Int 。
haskell - DiffArray から Data.Vector に移動するときのメモリ リーク
データ構造をdiffarrayからvectorに変更した後、QuickCheck テストのいずれかでメモリが爆発 (無限に増加) します。
コードはGitHubでホストされています。開発ブランチには問題のあるコードが含まれており、マスター ブランチは正常に動作します。マイナーな変更を除けば、それに影響を与える可能性がある唯一のコミットは this oneです。QuickCheck ルーチンを実行するには、実行可能なテスターを実行する必要があります。小さい長さのベクトルはプログラムをクラッシュさせないようですが、長くなるとプログラムの速度が低下し、最終的にメモリが爆発します。私が興味をそそられるもう 1 つのことは、XML ファイルのレンダリング中に、他のライブラリで同様の問題が発生しているという事実です。小さなファイル (<400k) の場合、実行速度は遅くなりますがクラッシュはなく、大きなファイルの場合はメモリが爆発します。Data.Vector もそのライブラリに含まれています。私はこれらの問題が関連しているという直感を持っています。
編集:メモリ リークを再現するコードの一部を最終的に分離し、ここにある 1 つのファイルにまとめました。現在、DiffArray と同様に動作する IArray を使用しています。IArray と Vector を切り替えるには、49、93、101 行目を変更する必要があります。
testing - QuickCheckで使用するArbitraryのモナディックバージョンはありますか?
を使用して純粋なコードをテストしたい場合、インスタンスQuickCheck
を作成する必要があります。Arbitrary
モナディックコードをテストするTest.QuickCheck.Monadic
には、この記事で説明されているように使用できます。
私の質問は:モナディックコンテキストに依存するデータを生成するための標準的な方法はありますか?特に、Arbitraryのモナディックバージョンはありますか?モナディックコンテキストを必要とするデータをどのように生成しますか?
haskell - QuickCheckでのテストデータの生成方法の制御
Haskellの部分和問題の解を見つけるためのアルゴリズムを書きました。署名は
QuickCheckはそれをテストするのに適しているようです。たとえば、私はここで私がチェックできるプロパティの1つです:
問題は、アルゴリズムが非常に計算集約的であり、大きな入力リストを使用して100個のテストを実行すると、実行に時間がかかることです。
QuickCheck 1を試してみたところ、すぐに実行されましたが、テストに使用されたデータセットは非常に小さかったです。QuickCheck 2に移行した後は、逆の問題のようです。QCのマニュアルはありますが、古くなっているようで(日付情報がありません)、QC2にどれだけ当てはまるのかわかりません。チュートリアルはHaskellWikiで入手できますが、詳細はあまりなく、インスタンス化に関するいくつかの単語がありますArbitrary
。
だから私は2つの質問があります:
- QuickCheck 2のどのような変更により、QuickCheckよりも大幅に遅くなりますか?
- データセットの作成を制御して、特定のテストに役立つようにするための最良の方法は何ですか?
編集:より具体的には、-10000から10000までの整数を含む、0から100までのリストサイズでソリューションをテストしたいと思います。
haskell - すべてのクイックチェックを自動的に収集
私はquickCheckのファンなので、たくさん持っています
私のプログラムを通して。
便宜上、それらすべてを簡単に実行するために、定義します
しかし、生成する良い方法はありrunchecks
ますか?
TL;DR: ファイル内のすべてのクイック チェックを簡単に実行したいと考えています。1 つの方法は、実行可能なテストに test_ などのプレフィックスを付けることだと思いますが、それはハックすぎるかもしれません。
haskell - Data.List.Vector を Arbitrary のメンバーに簡単にするには?
プログラムで Data.List.Vector を使用していますが、quickCheck を使用したいと考えています。ただし、その例はありません。[Double] の任意がすでにあるので、次のようなことができると思いました
残念ながら、GHC はこれをまったく好まない:
[Double] を取り込んで V.fromList を使用する一連のプロパティを作成することもできると思いますが、それは面倒です。
haskell - QuickCheck を使用した Haskell 行列のテスト
Haskell で Matrix モジュールを作成しており、QuickCheck を使用してコードのいくつかのプロパティをテストしたいと考えています。具体的には、関連する逆行列を持つランダム行列を生成したいと考えています。以下は、そのような行列を生成する QuickCheck ジェネレーターを作成する試みです。
このコードは、最初に 2 ~ 10 のサイズを作成し、次にこのサイズのベクトルのベクトルを作成します。行列式がゼロの場合、行列は可逆ではないため、invertibleMatrix を再帰的に呼び出します。それ以外の場合は、新しい行列を返します。
問題は、このコードをプロパティに入れてテストしても終了しないことです。(明らかに逆行列を持たないゼロ要素の同じ sxs 行列を常に作成しているため、無限ループに入ると思います)。私は何を間違っていますか?これを修正するにはどうすればよいですか? ありがとう。
マーク
haskell - Arbitrary のインスタンスを使用してトリプル (Network.HTTP.ResponseCode) を生成します
Network.HTTP から ResponseCode を受け取る関数があります。QuickCheck でテストするために、ResponseCode の Arbitrary のインスタンスを書きたいと思いました。(ご存じない場合は、ResponseCode は、そのライブラリ内の int のトリプルにすぎません: type ResponseCode = (Int, Int, Int))。
だから私はこのようなものを書きました:
まず第一に、GHC は、私が型を使用している方法が標準的な Haskell ではないので、いくつかのコンパイラ フラグを使用する必要があると文句を言っています (これは、この単純な問題に対して、フラグ)。
次に、任意の関数の型が間違っています。これは明らかです。しかし、その後、1 から 6 の範囲のランダムな Int を持つトリプルを返す関数の書き方が本当にわかりませんでした。
誰かがここで私を助けてくれれば幸いです。
ありがとうございました。
haskell - QuickCheck1 から QuickCheck2 に変換するための「クックブック」?
QuickCheck1 から QuickCheck2 に変換できるクックブックはありますか?
いくつかの例として、defaultConfig
(に置き換えArgs
) とtrivial
が削除され、CoArbitrary
導入されました。
私はQuickCheck 2の新機能を読みました(単一の回答で...) 。