Как быстро проверить все возможные случаи для типа, который является как Enum, так и Bounded?

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

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

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

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

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


person mherzl    schedule 19.02.2019    source источник
comment
Пробовали использовать оба модификатора вместе?   -  person Lorenzo    schedule 19.02.2019


Ответы (1)


Как насчет того, чтобы просто не использовать 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].

person Daniel Wagner    schedule 19.02.2019