如何在doctest中使用QuickCheck的多行输入?

时间:2015-06-15 03:21:00

标签: haskell doctest quickcheck

Doctest's readme开始,可以使用doctest和QuickCheck,如下所示:

-- |
-- prop> sort xs == (sort . sort) (xs :: [Int])

我想用多行来描述这个属性,可能就像

-- |
-- prop> sort xs ==
--            (sort . sort) (xs :: [Int])

Doctest本身支持多行输入(同样来自自述文件)

-- |
-- >>> :{
--  let
--    x = 1
--    y = 2
--  in x + y + multiline
-- :}
-- 6

我尝试了几种类似的语法,例如

-- |
-- prop> :{ sort xs ==
--           (sort . sort) (xs :: [Int])
-- }:

没有任何成功。 (在上面的示例中,错误消息为parse error on input '{'。)

如何在doctest中使用Quickcheck进行多行输入?

1 个答案:

答案 0 :(得分:2)

截至2017年9月,doctest does not allow multi-line properties。但是,您可以像往常一样在doctest中使用quickCheck

-- >>> import Test.QuickCheck
-- >>> import Data.List (sort)
-- >>> :{
--  quickCheck $ \xs -> 
--      sort xs ==
--            (sort . sort) (xs :: [Int])
-- :}
-- +++ OK, passed 100 tests.

这很冗长,但可以让你编写任意长检查。请注意,您始终可以创建prop_*函数并在doctest中使用该函数。