module Data.Conduit.ContainerSpec where
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.QuickCheck.Arbitrary
import Data.Conduit.Classy
import qualified Data.Conduit.Container as C
import Data.Functor.Identity (Identity, runIdentity)
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
spec :: Spec
spec = do
describe "Singleton" $ do
prop "consumes" $ \x ->
runIdentity ((C.toSource x :: Source Identity (C.Singleton Int)) $$ C.consume) == x
prop "takes" $ \str i' ->
let x = (C.toSource str :: Source Identity (C.Singleton Char)) $$ C.take i
i = abs i'
in runIdentity x == take i str
describe "ByteString" $ do
prop "consumes" $ \(ArbLByteString x) ->
runIdentity ((C.toSource x :: Source Identity S.ByteString) $$ C.consume) == x
prop "takes" $ \(ArbLByteString str) i' ->
let x = (C.toSource str :: Source Identity S.ByteString) $$ C.take i
i = abs i'
in runIdentity x == L.take (fromIntegral i) str
newtype ArbByteString = ArbByteString { unArbByteString :: S.ByteString }
deriving Show
instance Arbitrary ArbByteString where
arbitrary = fmap (ArbByteString . S.pack) arbitrary
newtype ArbLByteString = ArbLByteString L.ByteString
deriving Show
instance Arbitrary ArbLByteString where
arbitrary = fmap (ArbLByteString . L.fromChunks . map unArbByteString) arbitrary