У меня есть свойство, которое принимает список строк:
myProp :: [String] -> Bool
Мне нужно ограничить входные данные, которые генерирует QuickCheck, чтобы в списке были только непустые строки.
Как я могу это сделать?
У меня есть свойство, которое принимает список строк:
myProp :: [String] -> Bool
Мне нужно ограничить входные данные, которые генерирует QuickCheck, чтобы в списке были только непустые строки.
Как я могу это сделать?
Вы используете 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
Или из первых принципов (без библиотечных функций):
quickCheck $ \ h t -> let {s :: String ; s = h : t } in length s > 0
здесь s
пробегает все непустые значения.