Воспроизвести:
In [1]: from hypothesis import strategies as st
In [2]: bool_st = st.booleans()
In [3]: all(bool_st.example() for _ in range(1000))
Out[3]: True
Почему st.booleans().example()
всегда возвращает True
? Насколько я понимаю, метод example
должен возвращать примеры того, что может быть выведено стратегией, и делает это несколько случайным образом.
Соответственно, st.sampled_from(...)
, похоже, никогда не возвращает первый элемент в итерируемом:
In [1]: from hypothesis import strategies as st
In [2]: from collections import Counter
In [3]: samp_st = st.sampled_from(list(range(10)))
In [4]: examples = [samp_st.example() for _ in range(1000)]
In [5]: cnt = Counter(examples)
In [6]: cnt.most_common()
Out[6]: [(1, 512), (2, 282), (3, 119), (4, 55), (5, 22), (6, 5), (7, 4), (8, 1)]
Так что здесь происходит?
Мне известно, что в документации по методу example
говорится, что метод "не следует воспринимать слишком серьезно" (см. здесь ). Но это мало что дает для объяснения, и было бы неплохо лучше понять, почему это происходит.