1

使用 doctest 和 quickcheck 时如何定义Arbitrary实例(如此处所述)?

Doctest 和 Cabal 的设置如此处所述并带有一个单独的测试目录。

doctest 行如下所示:

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

我在哪里以及如何定义Arbitrary实例,以便 doctest 可以找到它?请注意,我想在测试项目中定义它。

4

1 回答 1

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 次尝试,即使其中只有 1 次实际上是测试。

于 2013-04-09T14:00:05.443 回答