lzlib-0.3.3.0: test/Spec.hs
module Main ( main ) where
import Codec.Lzip
import Control.Monad (filterM)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Foldable (traverse_)
import System.Directory (doesFileExist)
import Test.Hspec
nonstandardRead :: FilePath -> IO BSL.ByteString
nonstandardRead fp = do
bStrict <- BS.readFile fp
let (h, t) = BS.splitAt (64 * 1024) bStrict
pure $ BSL.fromChunks [h, t]
compressFileGeneral :: (FilePath -> IO BSL.ByteString) -> FilePath -> Spec
compressFileGeneral f fp = parallel $
it ("decompress . compress should be identity (" ++ fp ++ ")") $ do
str <- f fp
decompress (compressBest str) `shouldBe` str
compressFileFreaky :: FilePath -> Spec
compressFileFreaky = compressFileGeneral nonstandardRead
compressFile :: FilePath -> Spec
compressFile = compressFileGeneral BSL.readFile
decompressFileGeneral :: (FilePath -> IO BSL.ByteString) -> FilePath -> Spec
decompressFileGeneral f fp = parallel $
it ("compress . decompress should be identity (" ++ fp ++ ")") $ do
str <- f fp
compressBest (decompress str) `shouldBe` str
decompressFileFreaky :: FilePath -> Spec
decompressFileFreaky = decompressFileGeneral nonstandardRead
decompressFile :: FilePath -> Spec
decompressFile = decompressFileGeneral BSL.readFile
main :: IO ()
main = do
ex' <- filterM doesFileExist ["gmp-6.1.2.tar.lz", "lzlib-1.10.tar.lz"]
ex <- filterM doesFileExist ["gmp-6.1.2.tar", "lzlib-1.10.tar"]
hspec $ do
describe "roundtrip" $
traverse_ compressFile ex
describe "roundtrip (sketchy)" $
traverse_ compressFileFreaky ex
describe "roundtrip" $
traverse_ decompressFile ex'
describe "roundtrip (sketchy)" $
traverse_ decompressFileFreaky ex'