hopfli-0.2.2.1: test/HopfliSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module HopfliSpec (spec) where
import Test.Hspec
import Test.QuickCheck
import qualified Codec.Compression.GZip as GZip
import Codec.Compression.Hopfli
import qualified Codec.Compression.Zlib as Zlib
import qualified Codec.Compression.Zlib.Raw as ZRaw
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as BL
toStrict :: BL.ByteString -> B.ByteString
toStrict = B.concat . BL.toChunks
toLazy :: B.ByteString -> BL.ByteString
toLazy str = BL.fromChunks [str]
instance Arbitrary B.ByteString where
arbitrary = B.pack <$> arbitrary
instance CoArbitrary B.ByteString where
coarbitrary = coarbitrary . B.unpack
makeStrict :: (BL.ByteString -> BL.ByteString) -> B.ByteString -> B.ByteString
makeStrict decompressor = toStrict . decompressor . toLazy
spec :: Spec
spec =
describe "compress" $ do
it "Compresses in zlib compatible format" . property $
\payload -> (makeStrict Zlib.decompress . compress $ payload) == payload
it "Compresses in gzip compatible format" . property $
\payload -> (makeStrict GZip.decompress . compressWith defaultCompressOptions GZIP $ payload) == payload
it "Compresses in deflate compatible format" . property $
\payload -> (makeStrict ZRaw.decompress . compressWith defaultCompressOptions DEFLATE $ payload) == payload