Как я могу ограничить параметр QuickCheck списком непустых строк?

У меня есть свойство, которое принимает список строк:

myProp :: [String] -> Bool

Мне нужно ограничить входные данные, которые генерирует QuickCheck, чтобы в списке были только непустые строки.

Как я могу это сделать?


person Colin McEnearney    schedule 04.02.2015    source источник


Ответы (3)


Вы используете forAll вместе с listOf (который создает списки ) и listOf1 (который генерирует непустые списки).

Примеры

quickCheck $ forAll (listOf $ listOf1 arbitrary) $ myProp
-- more verbose alternative to make things clear
nonEmptyString :: Gen String
nonEmptyString = listOf1 arbitrary

quickCheck $ forAll (listOf nonEmptyString) $ myProp
person Zeta    schedule 04.02.2015
comment
Спасибо! Моя проблема раньше была фактически в моей собственности - person Colin McEnearney; 04.02.2015

Или из первых принципов (без библиотечных функций):

quickCheck $ \ h t -> let {s :: String ; s = h : t } in length s > 0

здесь s пробегает все непустые значения.

person d8d0d65b3f7cf42    schedule 04.02.2015

person    schedule
comment
Извините ... Я должен был объяснить свое редактирование. Мне просто очень понравился ваш подход, и я решил, что код должен быть исправлен, чтобы выполнять то, что запрашивал OP. - person dfeuer; 20.08.2016
comment
@dfeuer Нет проблем. Я не очень внимательно прочитал вопрос OP и сначала не понял вашего редактирования. Спасибо за исправление. - person bwroga; 20.08.2016