2015-06-15 9 views
10

Od Doctest's readme, można użyć doctest z QuickCheck, tak:Jak mogę użyć wejścia wielowierszowego z QuickCheck w doctest?

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

Chciałbym opisać tę właściwość przy użyciu wielu linii, prawdopodobnie jak

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

Doctest sobie wspiera wejście wielo-liniowy (ponownie z readme)

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

i próbowałem kilka podobnych składnie wymyśliłem, jak

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

bez powodzenia. (W powyższym przykładzie komunikat o błędzie to parse error on input '{'.)

Jak mogę użyć wielowierszowego wejścia z Quickcheck w doctest?

+0

Wierzę, że podobnie jak ghci, wieloliniowa składnia wymaga, aby symbole otwierające i zamykające znajdowały się na osobnej linii. Twój przykład nie zadziała, ponieważ ': {' nie znajduje się w osobnej linii. – user2407038

+0

@ user2407038 Uważam, że masz rację w tej sprawie. Nie mogę uniknąć błędu analizy i mieć 'prop>' rozpoznać wiele linii jako dane wejściowe. – Yosh

Odpowiedz

1

Stan na wrzesień 2017 r., doctest does not allow multi-line properties. Jednakże, można użyć quickCheck jak zwykle w doctest:

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

to gadatliwy, ale pozwoli Ci napisać dowolne długie kontrole. Zauważ, że zawsze możesz utworzyć funkcję prop_* i użyć jej w swoim doctest.