Имам свойство, което приема списък от низове:
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
преминава през всички непразни стойности.