Как QuickCheck может проверить все свойства для каждого образца

... вместо создания 100 новых случайных выборок для каждого свойства?

Мой набор тестов содержит описанный здесь метод TemplateHaskell [1] для тестирования всех функций с именем prop_ *. Запуск тестовой программы распечатывает

=== prop_foo from tests/lala.lhs:20 ===
+++ OK, passed 100 tests.

=== prop_bar from tests/lala.lhs:28 ===
+++ OK, passed 100 tests.

и это похоже на прохождение 100 случайных выборок для каждого из свойств.

Проблема: создание образцов довольно дорогое, проверка свойств - нет. Поэтому я хотел бы иметь средство для передачи каждой случайной выборки каждой из функций prop_ * вместо создания новых (#properties * 100) множества выборок.

Есть ли что-нибудь подобное встроено? На самом деле, думаю, мне понадобится замена сращивания

$(forAllProperties)

in

main :: IO ()
main
  = do args <- parseArgs <$> getArgs
       s <- $(forAllProperties) $ quickCheckWithResult args
       s ? return () $ exitFailure
  where
    parseArgs as
      = null as ? stdArgs $ stdArgs{ maxSuccess = read $ head as }

[1] Простое модульное тестирование haskell и Статус выхода QuickCheck при сбоях и интеграция с кликой


person stefan    schedule 06.07.2016    source источник
comment
@DanielWagner: Если вы на самом деле имели в виду ($x), то я этого не понимаю (вспомните: Template Haskell!). Если вы имели в виду ($ x), тогда нет, у этого есть несколько недостатков: свойства не собираются автоматически, и если одно не удается, я не вижу, какой именно, QuickCheck сообщает только prop_AllOfThem.   -  person stefan    schedule 07.07.2016


Ответы (1)


В этом посте вы можете увидеть, как группировать тесты

Сообщение Stackoverflow

Этот пользователь приводит очень простой пример использования Test.Tasty.QuickCheck.

Используя testProperty и testGroup, вы можете передать каждую случайную выборку каждому свойству.

По следующей ссылке вы можете проверить взлом этого пакета.

Test.Tasty.QuickCheck

person eduardogr    schedule 06.07.2016
comment
Не решает мою проблему, см. Комментарий к @DanielWagner выше. - person stefan; 07.07.2016