module Main (main) where import Codec.Lz4 import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import Test.Tasty import Test.Tasty.HUnit testCompression :: FilePath -> TestTree testCompression fp = testCase ("Highly compressed frames " ++ fp) $ do contents <- BSL.readFile "cbits/lz4.c" let sz0 = BSL.length (compressSz 0 contents) sz1 = BSL.length (compressSz 6 contents) assertBool "higher compression means smaller frames" $ sz1 < sz0 testRoundtripBlocks :: FilePath -> TestTree testRoundtripBlocks fp = testCase ("Roundtrip " ++ fp) $ do contents <- BS.readFile fp let sz = BS.length contents actual = decompressBlockSzSingleThreaded (compressBlockSingleThreaded contents) sz actual @?= contents testRoundtripFrames :: FilePath -> TestTree testRoundtripFrames fp = testCase ("Roundtrip " ++ fp) $ do contents <- BSL.readFile fp let actual = decompressBufSz (32 * 1024) (compress contents) actual @?= contents main :: IO () main = defaultMain $ testGroup "lz4" [testBlocks, testFrames, testHC] where testBlocks = testGroup "Block compression" [ testRoundtripBlocks "lz4-hs.cabal" , testRoundtripBlocks "LICENSE" ] testFrames = testGroup "Frame compression" [ testRoundtripFrames "cbits/lz4.c" ] testHC = testGroup "Compression levels" [ testCompression "cbits/lz4frame.c" ]