Как быстро проверить все возможные варианты для типа Enum и Bounded? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть свойство quickCheck , которое включает генерацию элементов для типа суммы, который имеет только два элемента.

Очевидно, что число тестовых случаев по умолчанию, 100, слишком много для этого случаяи поэтому я использовал withMaxSuccess, чтобы уменьшить количество дел до 3. Это выполняется быстро, но не идеально по двум причинам.Во-первых, три тестовых случая - это больше, чем требуется два.А во-вторых, эти три случая не являются исчерпывающими из-за вероятности 1-в-4, что все три включают один и тот же элемент, за исключением другого.

Я попробовал модификатор QuickCheck forAll, которыйказалось, что он может делать то, что я ищу, но количество выполненных тестов было все еще 100.

Если у меня есть тип с конечным числом элементов, который будет генератором для теста QuickCheck, есть лиспособ настроить QuickCheck для комплексного тестирования свойства над типом, запустив его с каждым элементом один раз?

Чтобы определить, имеет ли тип конечное число элементов, возможно, он может быть квалифицирован обоими Enumи Bounded классы типов.

1 Ответ

0 голосов
/ 19 февраля 2019

Как насчет того, чтобы просто не использовать quickcheck?

> myNeatProperty x = (x == GT) || (x <= EQ)
> all myNeatProperty [minBound .. maxBound]
True
> lessNeatProperty x = x <= EQ
> all lessNeatProperty [minBound .. maxBound]
False
> -- Oh no! Can we have some counterexamples, please?
> filter (not . lessNeatProperty) [minBound .. maxBound]
[GT]

Для тех ситуаций, когда ваше пространство ограничено, но не Enum и Bounded, рассмотрите возможность использования universeF на месте[minBound .. maxBound].

...