pipes-zlib-0.4.4.2: test/Main.hs
{-# LANGUAGE OverloadedStrings #-}
import Control.Arrow
import qualified Data.ByteString.Char8 as B8
import Data.List
import Data.Ord
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Test.QuickCheck.Instances ()
import Test.Tasty.HUnit
import qualified Pipes as P
import qualified Pipes.Prelude as P
import qualified Pipes.Zlib as PZ
import qualified Pipes.GZip as PGZ
main = defaultMain tests
--------------------------------------------------------------------------------
tests :: TestTree
tests = testGroup "Tests" [properties, unitTests]
properties :: TestTree
properties = testGroup "Properties" [qcProps]
qcProps = testGroup "(checked by QuickCheck)"
[ QC.testProperty "id == decompress . compress" $ \bs -> QC.ioProperty $ do
let pc = PZ.compress PZ.defaultCompression PZ.defaultWindowBits (P.yield bs)
pd = PZ.decompress PZ.defaultWindowBits pc
bs' <- B8.concat <$> P.toListM pd
return (bs QC.=== bs')
, QC.testProperty "id == decompress' . compress" $ \bs bsl -> QC.ioProperty $ do
let pc = PZ.compress PZ.defaultCompression PZ.defaultWindowBits (P.yield bs)
pd = PZ.decompress' PZ.defaultWindowBits (pc >> P.yield bsl)
(bs', elr) <- first B8.concat <$> P.toListM' pd
case elr of
Left pl -> do
bsl' <- B8.concat <$> P.toListM pl
return $ (bs QC.=== bs') QC..&&. (bsl QC.=== bsl')
Right () -> do
return $ (bs QC.=== bs') QC..&&. (bsl QC.=== B8.empty)
]
unitTests = testGroup "Unit tests"
[ testCase "Zlib compression default" $ do
let pc = PZ.compress PZ.defaultCompression PZ.defaultWindowBits
(P.yield bsUncompressed)
bs <- B8.concat <$> P.toListM pc
bs @?= bsCompressedZlibDefault
, testCase "Zlib decompression default" $ do
let pd = PZ.decompress PZ.defaultWindowBits
(P.yield bsCompressedZlibDefault)
bs <- B8.concat <$> P.toListM pd
bs @?= bsUncompressed
, testCase "GZip compression default" $ do
let pd = PGZ.compress PGZ.defaultCompression (P.yield bsUncompressed)
bs <- B8.concat <$> P.toListM pd
bs @?= bsCompressedGZipDefault
, testCase "GZip decompression default" $ do
let pd = PGZ.decompress (P.yield bsCompressedGZipDefault)
bs <- B8.concat <$> P.toListM pd
bs @?= bsUncompressed
]
bsUncompressed :: B8.ByteString
bsUncompressed = "foo"
bsCompressedZlibDefault :: B8.ByteString
bsCompressedZlibDefault = "x\156K\203\207\a\NUL\STX\130\SOHE"
bsCompressedGZipDefault :: B8.ByteString
bsCompressedGZipDefault =
"\US\139\b\NUL\NUL\NUL\NUL\NUL\NUL\ETXK\203\207\a\NUL!es\140\ETX\NUL\NUL\NUL"