問題タブ [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.
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-order
1)コードに特定の例外が必要な方法が好きではありません:create-new-user
。2) 基本的にランダムなアクションのリストを取得し、アクションが順序付けされた意味を成すまでフィルタリングするのが好きではありません。
test.check を使用して、他の人がこのような一連のアクションをどのように生成するのか疑問に思っています。確かに、ジェネレーターのみを使用してそうする方法があるに違いありませんか?
clojure - Clojure の test.check で動作する UUID を生成する方法
生成テストは興味深いようですが、テストの一環としてランダムな UUID を生成する必要がありました。java.util.UUID/newRandom は、test.check の縮小ではうまく機能しません。
Java コードは次のようになります。
これを Clojure に変換するのは、思ったよりも難しいことです。
Clojure で正常に縮小できるランダム UUID 関数を作成するにはどうすればよいですか?
unit-testing - test.check を使用して特定のプロパティ (stddev など) を持つコレクションを生成する方法
私は clojure のtest.check
ライブラリを使用して、平均、標準偏差、信頼区間などの計算など、いくつかの簡単な統計を実行できるコレクションを生成したいと考えています。
これらのプロパティに対して事前に決定された値を持つようにコレクションを生成するにはどうすればよいですか?
clojure - test.check 特定の長さの文字列を生成する
test.check を使用するには、特定の長さの文字列のジェネレーターが必要です。電話番号、郵便番号、社会保障番号はすべて、この種のデータの例です。例は数字だけのように見えますが、私の質問は一般的な文字列です。
clojure - test.check でのループと状態管理
Spec の導入により、すべての関数に対して test.check ジェネレーターを作成しようとしています。これは単純なデータ構造では問題ありませんが、相互に依存する部分を持つデータ構造では困難になる傾向があります。つまり、ジェネレーター内で何らかの状態管理が必要になります。
Clojure の loop/recur または reduce に相当するジェネレーターを用意することは、すでに非常に役立ちます。これにより、1 つの反復で生成された値を、後続の反復でアクセスできる集計値に格納できます。
これが必要となる簡単な例の 1 つは、コレクションを正確に X 個のパーティションに分割するジェネレータを作成することです。各パーティションは 0 から Y 個の要素を持ち、要素は任意のパーティションにランダムに割り当てられます。
test.chuck
(のpartition
関数では、X または Y を指定できないことに注意してください)。コレクションをループしてこのジェネレーターを作成する場合、Y を超えないようにするために、前の反復中にいっぱいになったパーティションにアクセスする必要があります。
誰にもアイデアはありますか?私が見つけた部分的な解決策:
test.check
let
をbind
使用すると、値を生成して後でその値を再利用できますが、反復は許可されません。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を使用するメリットを大幅に減らします。
clojure - test.check の関数発生器
関数のジェネレーターを作りたいです。
実際に値のジェネレーターがあることに気付きましたがIFn
、関数ドメインが無限の場合 (そして値が厳密であるため)、それらを関数のジェネレーターとして使用することは一般的に実用的ではありません。
この機能は存在しますか、それとも自分で実装する必要がありますか?