Yos*_*osh 11 doctest haskell quickcheck
从Doctest的自述文件中,可以使用带有QuickCheck的 doctest,如下所示:
-- |
-- prop> sort xs == (sort . sort) (xs :: [Int])
Run Code Online (Sandbox Code Playgroud)
我想用多行描述这个属性,可能就像
-- |
-- prop> sort xs ==
-- (sort . sort) (xs :: [Int])
Run Code Online (Sandbox Code Playgroud)
Doctest本身支持多行输入(同样来自自述文件)
-- |
-- >>> :{
-- let
-- x = 1
-- y = 2
-- in x + y + multiline
-- :}
-- 6
Run Code Online (Sandbox Code Playgroud)
我尝试了几种类似的语法,比如
-- |
-- prop> :{ sort xs ==
-- (sort . sort) (xs :: [Int])
-- }:
Run Code Online (Sandbox Code Playgroud)
没有任何成功.(在上面的示例中,错误消息是 parse error on input '{'.)
如何在doctest中使用Quickcheck进行多行输入?
截至 2017 年 9 月,doctest 不允许多行属性。但是,您可以quickCheck像往常一样在文档测试中使用:
-- >>> import Test.QuickCheck
-- >>> import Data.List (sort)
-- >>> :{
-- quickCheck $ \xs ->
-- sort xs ==
-- (sort . sort) (xs :: [Int])
-- :}
-- +++ OK, passed 100 tests.
Run Code Online (Sandbox Code Playgroud)
这很冗长,但使您能够编写任意长的检查。请注意,您始终可以创建一个prop_*函数并在文档测试中使用它。