ストーリー:生成リスト
:現在、私は整数のリストを以下のルールでのリストを期待する関数、被試験を持っています
- サブリストの数(のは
N
それを呼び出すせて)1から50 - にすることができるサブリスト内の値の数は、全てのサブリスト(矩形形状)についても同様であり、> = 0と< = 5であるべきです
- サブリスト内の値は、サブリストの合計数以下にすることはできません。
[[0]] [[2, 1], [2, 0], [3, 1], [1, 0]] [[1], [0]]
サンプル無効な入力:
[[2]] # 2 is more than N=1 (total number of sublists) [[0, 1], [2, 0]] # 2 is equal to N=2 (total number of sublists)
私がしようとしている言い換えれば、サブリスト内の各値は、整数> = 0と<
N
サンプル有効な入力でありますプロパティベースのテストでそれに接近し、hypothesis
libraryと異なる有効な入力を生成し、私の頭をのまわりで包み込みたいとintegers()
、しかしそれを動作させることはできません。
- 条件#1は、条件#2が条件#3がある
Chaining strategies together
- の下で覆われている
lists()
とmin_size
とmax_size
引数 - にアプローチするのは簡単です上記の例の
rectangle_lists
を使用した場合、「親」リストの長さの参照が内部にありませんintegers()
質問:
どのように私はサブリスト内の整数値は、サブリストの合計数よりも小さくなるように制限することができますか?
私の試みのいくつか:
from hypothesis import given
from hypothesis.strategies import lists, integers
@given(lists(lists(integers(min_value=0, max_value=5), min_size=1, max_size=5), min_size=1, max_size=50))
def test(l):
# ...
この1つは非常に遠くの要件を満たしてからだった - リストは厳密に矩形状のものではなく、生成された整数値は、リストの生成サイズの上に行くことができます。ここ
from hypothesis import given
from hypothesis.strategies import lists, integers
@given(integers(min_value=0, max_value=5).flatmap(lambda n: lists(lists(integers(min_value=1, max_value=5), min_size=n, max_size=n), min_size=1, max_size=50)))
def test(l):
# ...
、#1及び#2は、要件満たされたが、整数値がリストのサイズよりも大きい行くことができている - 要件#3が満たされていません。
偉大な、私は考えを得た!この素晴らしいライブラリの著者がSOを手伝ってくれてうれしいです。答えと仮説そのものに感謝します。それは傑作です! – alecxe
大歓迎です。あなたが図書館を楽しんでいるとうれしいです。 :-) – DRMacIver