2013-04-09 5 views
1

doctest 및 quickcheck을 사용할 때 인스턴스 (here)를 정의하려면 어떻게해야합니까?DocTest에서 QuickTest와 함께 ByteString을 사용하는 방법은 무엇입니까?

Doctest 및 Cabal은 테스트 용으로 별도의 디렉토리가있는 here으로 설명한대로 설정됩니다.

doctest가 라인은 다음과 같습니다

-- prop> (\s -> (decode . encode $ s == s)) :: ByteString -> Bool 
decode :: ByteString -> ByteString 
encode :: ByteString -> ByteString 

어떻게 내가 Arbitrary 인스턴스를 정의합니까, 그 doctest가 그것을 찾을 수 있도록? 테스트 프로젝트에서 정의하고 싶습니다.

답변

3

-- $setup 
-- >>> import Control.Applicative 
-- >>> import qualified Data.ByteString as ByteString 
-- >>> import Test.QuickCheck 
-- >>> instance Arbitrary ByteString where arbitrary = ByteString.pack <$> arbitrary 
-- >>> instance CoArbitrary ByteString where coarbitrary = coarbitrary . ByteString.unpack 

-- | 
-- prop> \ s -> (decode . encode) s == s 
decode:: ByteString -> ByteString 
encode :: ByteString -> ByteString 

명명 된 덩어리는 정의를 사용할 수 있습니다보십시오. 그러나 각각의 완전한 정의는 한 줄에 있어야하며 doctest는 성공 또는 실패로 >>>의 각 사용을보고합니다. 따라서이 중 하나만 실제로 테스트가 되더라도 6 번의 시도가보고됩니다.

+0

문제는 필자가 주 프로젝트에 대한 빠른 검사 종속성을 반드시 원하지 않는다는 것입니다. – fho

+1

'QuickCheck' 의존성은 테스트 스위트에만 있어야합니다. – ScootyPuff

+0

아 ... 나는 정상에서'$ setup'을 간과했습니다. 감사합니다. – fho

관련 문제