Почему стратегия. Перестановки не предоставляют наименьший набор перестановок? - PullRequest
1 голос
/ 02 июля 2019

Я написал тест для проверки правильности поведения заданной функции для любой заданной перестановки списка, указанного в качестве входного.

Используя пакет hypothesis python, я попытался создать этот тестовый пример. Тем не менее, список генерируемых перестановок содержит много повторяющихся тестовых случаев.

Например, используя список из 3 элементов (['a', 'b', 'c']), я бы ожидал 6 записей в списке перестановок (abc, acb, bac, bca, cab, cba), но это не так.

Вот MWE, если у вас есть пакет гипотез:

from hypothesis import given
from hypothesis.strategies import permutations

@given(permutations(['a', 'b', 'c']))
def test(permutation):
    print(permutation)

test()

Кроме того, код доступен на repl.it .

Документация, к сожалению, не просветила меня, но, возможно, я не смотрю в нужном месте.

Есть идеи, что я делаю не так?

1 Ответ

1 голос
/ 03 июля 2019

Вы не делаете ничего плохого, просто так работает Гипотеза.Это не гарантирует (и не может гарантировать), что оно не генерирует повторяющиеся элементы.Он делает все возможное, чтобы уменьшить их частоту, но в целом это невозможно, и проблема редко встречается с более сложными стратегиями, поэтому не стоит специально рассматривать несколько случаев, когда это возможно.

Если набор возможных примеров достаточно мал, чтобы вы могли его полностью перечислить, и для вас действительно важно избегать дубликатов, вы можете найти что-то вроде pytest.mark.parametrize для лучшего соответствия.

...