From Doctest's readme, one can use doctest with QuickCheck, like this:
-- |
-- prop> sort xs == (sort . sort) (xs :: [Int])
I would like to describe this property using multiple lines, probably like
-- |
-- prop> sort xs ==
-- (sort . sort) (xs :: [Int])
Doctest itself supports multi-line input (again from readme)
-- |
-- >>> :{
-- let
-- x = 1
-- y = 2
-- in x + y + multiline
-- :}
-- 6
and I tried several similar syntaxes I came up with, such as
-- |
-- prop> :{ sort xs ==
-- (sort . sort) (xs :: [Int])
-- }:
without any success. (In the example above, the error message is parse error on input '{'
.)
How can I use multi-line input with Quickcheck in doctest?
As of September 2017, doctest does not allow multi-line properties. However, you can use quickCheck
as usual in a doctest:
-- >>> import Test.QuickCheck
-- >>> import Data.List (sort)
-- >>> :{
-- quickCheck $ \xs ->
-- sort xs ==
-- (sort . sort) (xs :: [Int])
-- :}
-- +++ OK, passed 100 tests.
That's verbose, but will enable you to write arbitrary long checks. Note that you can always create a prop_*
function and use that in your doctest.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With