packages feed

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