Как я могу использовать многострочный ввод с QuickCheck в doctest?
Из Doctest readme можно использовать doctest с QuickCheck, например:
-- |
-- prop> sort xs == (sort . sort) (xs :: [Int])
Я хотел бы описать это свойство, используя несколько строк, возможно, как
-- |
-- prop> sort xs ==
-- (sort . sort) (xs :: [Int])
Сам Doctest поддерживает многострочный ввод (снова из readme)
-- |
-- >>> :{
-- let
-- x = 1
-- y = 2
-- in x + y + multiline
-- :}
-- 6
и я попробовал несколько похожих синтаксисов, с которыми я столкнулся, например
-- |
-- prop> :{ sort xs ==
-- (sort . sort) (xs :: [Int])
-- }:
без каких-либо успехов. (В приведенном выше примере сообщение об ошибке parse error on input '{'
.)
Как я могу использовать многострочный ввод с Quickcheck в doctest?
Ответы
Ответ 1
По состоянию на сентябрь 2017 года doctest не разрешает многострочные свойства. Тем не менее, вы можете использовать quickCheck
, как обычно, в доктрине:
-- >>> import Test.QuickCheck
-- >>> import Data.List (sort)
-- >>> :{
-- quickCheck $ \xs ->
-- sort xs ==
-- (sort . sort) (xs :: [Int])
-- :}
-- +++ OK, passed 100 tests.
Это подробный, но позволит вам написать произвольные длительные проверки. Обратите внимание: вы всегда можете создать функцию prop_*
и использовать ее в своем учении.