Как мога да огранича параметър 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