問題タブ [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 に答える
188 参照

quickcheck - scalacheck は quickcheck にどのような機能を追加しますか?

すべてのscalacheckのものは言う:

Haskell QuickCheck にはない機能で進化し、拡張されています。

それで、それらの機能は何ですか?

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

testing - QuickCheck がすべての例外をキャッチしないようにするにはどうすればよいですか?

QuickCheck ライブラリは、プロパティのテスト時にスローされるすべての例外をキャッチするようです。特に、この動作により、QuickCheck の計算全体に時間制限を設けることができなくなります。例えば:

QuickCheck はすべての例外をキャッチするため、timeoutブレークします: 実際に計算を中止するわけではありません! 代わりに、QuickCheck はプロパティが失敗したものとして扱い、失敗の原因となった入力を縮小しようとします。この縮小プロセスは時間制限付きで実行されないため、計算に使用される合計時間が規定の時間制限を超えます。

withinQuickCheck のコンビネータを使用して計算時間を制限できると考える人もいるかもしれません。(within指定された制限時間内に終了しない場合、プロパティは失敗したものとして扱います。)ただし、withinQuickCheckは失敗の原因となった入力を縮小しようとするため、プロセスに時間がかかる可能性があるため、私が望むことはできません。長すぎる。(代わりに機能するwithinのは、指定された制限時間内に終了しなかったために失敗したプロパティへの入力を QuickCheck が縮小しようとするのを防ぐバージョンです。)

QuickCheck がすべての例外をキャッチしないようにするにはどうすればよいですか?

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

haskell - QuickCheck を使用して高階関数をテストするにはどうすればよいですか?

テストしたい高階関数があり、テストしたいプロパティの 1 つは、渡された関数で何をするかです。説明のために、以下に不自然な例を示します。

大まかに言うと、これはジェネレーターの例です。単一の から始めて、aのシングルトン リストを作成し、述語で停止するように指示されるまで、 の[a]新しいリストを作成します。[a]呼び出しは次のようになります。

どこ

テストしたいプロパティは次のとおりです。

への呼び出しでは、空のリストを に渡さないことを約束しgen init next stopます。gennext

QuickCheck を使用してこのプロパティをテストできますか?

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

haskell - シンプルな乱数生成

私はイライラする調査をしばらく行った後にこれを書いています。ここの誰かがこのトピックについて私を啓発してくれることを願っています.

Haskell関数で単純な乱数を生成したいのですが、残念ながら、モナド、「do」での代入、ジェネレーターの作成など、あらゆる種類の重要な要素なしではこれを行うことは不可能のようです.

理想的には、C の「rand()」に相当するものを探していました。しかし、よく調べた結果、言語がどのように設計されているかを考えると、そのようなことはないと確信しています。(もしあれば、誰か教えてください)。それは現実的ではないように思われるので、特定の問題に対して乱数を取得する方法と、乱数を取得する方法に関する一般的な説明を見つけたいと思います。

私は QuickCheck を理解しようとしていますが、乱数を使用できないために難しくなっています。私はこのようなことを試しました RANDOMNUMBERHEREの代わりにdrawInt 0(長さxs2)を配置することにより)が、テイクにはIntが必要であり、そのメソッドにはIO Intが残っているという事実に行き詰まります。thisによると Int 。

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

haskell - DiffArray から Data.Vector に移動するときのメモリ リーク

データ構造をdiffarrayからvectorに変更した後、QuickCheck テストのいずれかでメモリが爆発 (無限に増加) します。

コードはGitHubでホストされています。開発ブランチには問題のあるコードが含まれており、マスター ブランチは正常に動作します。マイナーな変更を除けば、それに影響を与える可能性がある唯一のコミットは this oneです。QuickCheck ルーチンを実行するには、実行可能なテスターを実行する必要があります。小さい長さのベクトルはプログラムをクラッシュさせないようですが、長くなるとプログラムの速度が低下し、最終的にメモリが爆発します。私が興味をそそられるもう 1 つのことは、XML ファイルのレンダリング中に、他のライブラリで同様の問題が発生しているという事実です。小さなファイル (<400k) の場合、実行速度は遅くなりますがクラッシュはなく、大きなファイルの場合はメモリが爆発します。Data.Vector もそのライブラリに含まれています。私はこれらの問題が関連しているという直感を持っています。

編集:メモリ リークを再現するコードの一部を最終的に分離し、ここにある 1 つのファイルにまとめました。現在、DiffArray と同様に動作する IArray を使用しています。IArray と Vector を切り替えるには、49、93、101 行目を変更する必要があります。

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

testing - QuickCheckで使用するArbitraryのモナディックバージョンはありますか?

を使用して純粋なコードをテストしたい場合、インスタンスQuickCheckを作成する必要があります。ArbitraryモナディックコードをテストするTest.QuickCheck.Monadicには、この記事で説明されているように使用できます。

私の質問は:モナディックコンテキストに依存するデータを生成するための標準的な方法はありますか?特に、Arbitraryのモナディックバージョンはありますか?モナディックコンテキストを必要とするデータをどのように生成しますか?

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

haskell - QuickCheckでのテストデータの生成方法の制御

Haskellの部分和問題の解を見つけるためのアルゴリズムを書きました。署名は

QuickCheckはそれをテストするのに適しているようです。たとえば、私はここで私がチェックできるプロパティの1つです:

問題は、アルゴリズムが非常に計算集約的であり、大きな入力リストを使用して100個のテストを実行すると、実行に時間がかかることです。

QuickCheck 1を試してみたところ、すぐに実行されましたが、テストに使用されたデータセットは非常に小さかったです。QuickCheck 2に移行した後は、逆の問題のようです。QCのマニュアルはありますが、古くなっているようで(日付情報がありません)、QC2にどれだけ当てはまるのかわかりません。チュートリアルはHaskellWikiで入手できますが、詳細はあまりなく、インスタンス化に関するいくつかの単語がありますArbitrary

だから私は2つの質問があります:

  • QuickCheck 2のどのような変更により、QuickCheckよりも大幅に遅くなりますか?
  • データセットの作成を制御して、特定のテストに役立つようにするための最良の方法は何ですか?

編集:より具体的には、-10000から10000までの整数を含む、0から100までのリストサイズでソリューションをテストしたいと思います。

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

haskell - すべてのクイックチェックを自動的に収集

私はquickCheckのファンなので、たくさん持っています

私のプログラムを通して。

便宜上、それらすべてを簡単に実行するために、定義します

しかし、生成する良い方法はありrunchecksますか?

TL;DR: ファイル内のすべてのクイック チェックを簡単に実行したいと考えています。1 つの方法は、実行可能なテストに test_ などのプレフィックスを付けることだと思いますが、それはハックすぎるかもしれません。

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

haskell - Data.List.Vector を Arbitrary のメンバーに簡単にするには?

プログラムで Data.List.Vector を使用していますが、quickCheck を使用したいと考えています。ただし、その例はありません。[Double] の任意がすでにあるので、次のようなことができると思いました

残念ながら、GHC はこれをまったく好まない:

[Double] を取り込んで V.fromList を使用する一連のプロパティを作成することもできると思いますが、それは面倒です。

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

haskell - QuickCheck を使用した Haskell 行列のテスト

Haskell で Matrix モジュールを作成しており、QuickCheck を使用してコードのいくつかのプロパティをテストしたいと考えています。具体的には、関連する逆行列を持つランダム行列を生成したいと考えています。以下は、そのような行列を生成する QuickCheck ジェネレーターを作成する試みです。

このコードは、最初に 2 ~ 10 のサイズを作成し、次にこのサイズのベクトルのベクトルを作成します。行列式がゼロの場合、行列は可逆ではないため、invertibleMatrix を再帰的に呼び出します。それ以外の場合は、新しい行列を返します。

問題は、このコードをプロパティに入れてテストしても終了しないことです。(明らかに逆行列を持たないゼロ要素の同じ sxs 行列を常に作成しているため、無限ループに入ると思います)。私は何を間違っていますか?これを修正するにはどうすればよいですか? ありがとう。

マーク