問題タブ [test.check]

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 に答える
480 参照

clojure - test.check による構造化マップの生成

私はtest.checkをいじっていて、マップを引数として取る関数をテストしています。これらのマップには、次のような定義済みの構造があります。

重要な点は、期待されるキーのセットがあり、その値には異なる明確に定義されたジェネレーターがあります。

を調べましたgen/mapが、より構造化されたキーと値のペアに使用する方法は明らかではありません。

これは単純なシナリオのようですが、例が見つかりませ ん。

ここで説明されているような構造化マップを test.check を使用して生成するにはどうすればよいですか?

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

clojure - 制約された順序で一連のアクションの test.check ジェネレータを作成するにはどうすればよいですか?

2 つのジェネレーターの例:

ACTIONSキーがアクションの名前で、値がそのアクションの (OR ベースの) 依存関係であるマップです。:create-new-user例として、何かを行う前にまず、する必要があります。:create-new-boardできるようにする前に:edit-board、少なくとも 1 つ必要です。:create-new-*-comment:edit-comment-text

上記のコードは機能しているように見えますが、醜いです。filter-actions-into-logical-order1)コードに特定の例外が必要な方法が好きではありません:create-new-user。2) 基本的にランダムなアクションのリストを取得し、アクションが順序付けされた意味を成すまでフィルタリングするのが好きではありません。

test.check を使用して、他の人がこのような一連のアクションをどのように生成するのか疑問に思っています。確かに、ジェネレーターのみを使用してそうする方法があるに違いありませんか?

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

clojure - Clojure の test.check で動作する UUID を生成する方法

生成テストは興味深いようですが、テストの一環としてランダムな UUID を生成する必要がありました。java.util.UUID/newRandom は、test.check の縮小ではうまく機能しません。

Java コードは次のようになります。

これを Clojure に変換するのは、思ったよりも難しいことです。

Clojure で正常に縮小できるランダム UUID 関数を作成するにはどうすればよいですか?

0 投票する
0 に答える
50 参照

unit-testing - test.check を使用して特定のプロパティ (stddev など) を持つコレクションを生成する方法

私は clojure のtest.checkライブラリを使用して、平均、標準偏差、信頼区間などの計算など、いくつかの簡単な統計を実行できるコレクションを生成したいと考えています。

これらのプロパティに対して事前に決定された値を持つようにコレクションを生成するにはどうすればよいですか?

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

clojure - test.check: 'properties/for-all' での let スタイルの動作

この質問とそこで参照されているブログ投稿prop/for-allに続いて、この種の機能を直接導入しない理由はありますか? 例:

基本的に、あるジェネレーターによって生成された値を別のジェネレーターで再利用し、実際のテスト コード内で生成された両方の値を参照したいと考えています。for-allこれは本質的に、以下の式ブロック内で機能するため、マクロによって提供される let のようなブロック内で生成された値への参照を許可するように砂糖/魔法を拡張します。

これを可能にする何かが他にない場合、または何らかの理由で実装する意味がない場合はお知らせください。

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

clojure - test.check 特定の長さの文字列を生成する

test.check を使用するには、特定の長さの文字列のジェネレーターが必要です。電話番号、郵便番号、社会保障番号はすべて、この種のデータの例です。例は数字だけのように見えますが、私の質問は一般的な文字列です。

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

clojure - test.check でのループと状態管理

Spec の導入により、すべての関数に対して test.check ジェネレーターを作成しようとしています。これは単純なデータ構造では問題ありませんが、相互に依存する部分を持つデータ構造では困難になる傾向があります。つまり、ジェネレーター内で何らかの状態管理が必要になります。

Clojure の loop/recur または reduce に相当するジェネレーターを用意することは、すでに非常に役立ちます。これにより、1 つの反復で生成された値を、後続の反復でアクセスできる集計値に格納できます。

これが必要となる簡単な例の 1 つは、コレクションを正確に X 個のパーティションに分割するジェネレータを作成することです。各パーティションは 0 から Y 個の要素を持ち、要素は任意のパーティションにランダムに割り当てられます。test.chuck(のpartition関数では、X または Y を指定できないことに注意してください)。

コレクションをループしてこのジェネレーターを作成する場合、Y を超えないようにするために、前の反復中にいっぱいになったパーティションにアクセスする必要があります。

誰にもアイデアはありますか?私が見つけた部分的な解決策:

  • test.checkletbind使用すると、値を生成して後でその値を再利用できますが、反復は許可されません。

  • tupleと関数を組み合わせて、以前に生成された値のコレクションを反復処理できますbindが、これらの反復では、以前の反復中に生成された値にアクセスできません。

    (defn bind-each [k coll] (apply tcg/tuple (map (fn [x] (tcg/bind (tcg/return x) k)) coll))

  • アトム (または揮発性) を使用して、前の反復中に生成された値を保存およびアクセスできます。reset!これは機能しますが、特に、ジェネレーターが返される前にアトム/揮発性が必要なため、ジェネレーターの次の呼び出しでそれらの内容が再利用されるのを避けるために、Clojure とはまったく異なります。

  • bindジェネレーターは、そのand関数によりモナドに似てreturnいます。これは、Cats などのモナド ライブラリーを State モナドと組み合わせて使用​​することを示唆しています。ただし、State モナドは Cats 2.0 で削除されました (Clojure に適していないと言われているため)。一方、私が知っている他のサポート ライブラリでは、Clojurescript が正式にサポートされていません。さらに、Clojure のモナド専門家の 1 人である Jim Duey は、自身のライブラリに State モナドを実装する際に、State モナドの使用は test.check の縮小と互換性がないと警告しているようです ( http://www.これは、 test.checkを使用するメリットを大幅に減らします。

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

clojure - test.check の関数発生器

関数のジェネレーターを作りたいです。

実際に値のジェネレーターがあることに気付きましたがIFn、関数ドメインが無限の場合 (そして値が厳密であるため)、それらを関数のジェネレーターとして使用することは一般的に実用的ではありません。

この機能は存在しますか、それとも自分で実装する必要がありますか?