如何将 QuickCheck 参数限制为非空字符串列表?
How can I constrain a QuickCheck parameter to a list of non-empty Strings?
我有一个 属性 接受字符串列表:
myProp :: [String] -> Bool
我需要限制 QuickCheck 生成的输入,以便列表中只有非空字符串。
我该怎么做?
您使用 forAll
together with listOf
(which generates lists) and 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
遍历所有非空值。
import Test.QuickCheck.Modifiers (NonEmptyList (..))
myProp :: [NonEmptyList Char] -> Bool
myProp xs0 =
let xs = map getNonEmpty xs0
in ...
我有一个 属性 接受字符串列表:
myProp :: [String] -> Bool
我需要限制 QuickCheck 生成的输入,以便列表中只有非空字符串。
我该怎么做?
您使用 forAll
together with listOf
(which generates lists) and 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
遍历所有非空值。
import Test.QuickCheck.Modifiers (NonEmptyList (..))
myProp :: [NonEmptyList Char] -> Bool
myProp xs0 =
let xs = map getNonEmpty xs0
in ...