lzma-conduit 1.0.8 → 1.1.0
raw patch · 2 files changed
+46/−26 lines, 2 filesdep +HUnitdep +QuickCheckdep +lzma-conduitdep ~bytestringdep ~conduitdep ~resourcet
Dependencies added: HUnit, QuickCheck, lzma-conduit, test-framework, test-framework-hunit, test-framework-quickcheck2
Dependency ranges changed: bytestring, conduit, resourcet
Files
- lzma-conduit.cabal +26/−3
- tests/Main.hs +20/−23
lzma-conduit.cabal view
@@ -1,5 +1,5 @@ name: lzma-conduit-version: 1.0.8+version: 1.1.0 synopsis: Conduit interface for lzma/xz compression. description: High level bindings to xz-utils.@@ -30,8 +30,8 @@ base >= 3 && < 5, bindings-DSL >= 1.0 && < 1.1, bytestring >= 0.9.1 && < 0.11,- conduit >= 0.4 && < 1.1,- resourcet >= 0.3 && < 0.5,+ conduit >= 0.4 && < 1.2,+ resourcet >= 0.3 && < 1.2, transformers >= 0.2 && < 0.4 ghc-options: -Wall@@ -39,6 +39,29 @@ lzma.h extra-libraries: lzma++test-suite lzma-test+ default-language:+ Haskell2010+ hs-source-dirs:+ tests+ type:+ exitcode-stdio-1.0+ main-is:+ Main.hs+ ghc-options:+ -threaded+ build-depends:+ lzma-conduit,+ base >= 3 && < 5,+ bytestring,+ conduit,+ resourcet,+ test-framework,+ test-framework-hunit,+ test-framework-quickcheck2,+ HUnit,+ QuickCheck source-repository head type: git
tests/Main.hs view
@@ -3,13 +3,14 @@ import Test.Framework.Providers.QuickCheck2 (testProperty) import Test.QuickCheck import Test.QuickCheck.Monadic+import Control.Monad.Trans.Resource import qualified Data.ByteString as B-import qualified Data.Enumerator as E-import qualified Data.Enumerator.List as EL+import qualified Data.Conduit as C+import qualified Data.Conduit.List as Cl import Data.List import Data.Word-import Codec.Compression.Lzma.Enumerator+import Data.Conduit.Lzma main = defaultMain tests @@ -36,52 +37,48 @@ someString :: Gen B.ByteString someString = do- val <- listOf $ elements [0..255::Word8] + val <- listOf $ elements [0..255::Word8] return $ B.pack val someBigString :: Gen B.ByteString someBigString = resize (8*1024) someString -dropAll :: Monad m => E.Iteratee a m ()-dropAll = EL.dropWhile (const True)- prop_compressAndDiscard :: Property-prop_compressAndDiscard = monadicIO $ forAllM someBigString $ \ str -> do- run $ E.run_ $ E.enumList 2 [str] E.$$ E.joinI (compress Nothing E.$$ dropAll)+prop_compressAndDiscard = monadicIO . forAllM someBigString $ \ str -> do+ run . runResourceT $ Cl.sourceList [str] C.$$ compress Nothing C.=$= Cl.sinkNull prop_compressAndCheckLength :: Property-prop_compressAndCheckLength = monadicIO $ forAllM someBigString $ \ str -> do- len <- run $ E.run_ $ E.enumList 2 [str] E.$$ E.joinI (compress Nothing E.$$ EL.fold (\ acc el -> acc + B.length el) 0)+prop_compressAndCheckLength = monadicIO . forAllM someBigString $ \ str -> do+ len <- run . runResourceT $ Cl.sourceList [str] C.$$ compress Nothing C.=$= Cl.fold (\ acc el -> acc + B.length el) 0 assert (len - 32 > B.length str `div` 2) -- random strings don't compress very well prop_chain :: Property-prop_chain = monadicIO $ forAllM someBigString $ \ str -> do- str' <- run $ E.run_ $ E.enumList 2 [str] E.$$ E.joinI (compress Nothing E.$$ E.joinI (decompress Nothing E.$$ EL.consume))+prop_chain = monadicIO . forAllM someBigString $ \ str -> do+ str' <- run . runResourceT $ Cl.sourceList [str] C.$$ compress Nothing C.=$= decompress Nothing C.=$= Cl.consume return $ str == B.concat str' prop_compressThenDecompress :: Property-prop_compressThenDecompress = monadicIO $ forAllM someBigString $ \ str -> do- blob <- run $ E.run_ $ E.enumList 2 [str] E.$$ E.joinI (compress Nothing E.$$ EL.consume)+prop_compressThenDecompress = monadicIO . forAllM someBigString $ \ str -> do+ blob <- run . runResourceT $ Cl.sourceList [str] C.$$ compress Nothing C.=$= Cl.consume let blob' = B.concat blob randIdx <- pick $ elements [0..B.length blob'-1] let resplit = let (x,y) = B.splitAt randIdx blob' in [x,y]- str' <- run $ E.run_ $ E.enumList 2 resplit E.$$ E.joinI (decompress Nothing E.$$ EL.consume)+ str' <- run . runResourceT $ Cl.sourceList resplit C.$$ decompress Nothing C.=$= Cl.consume return $ str == B.concat str' prop_decompressRandom :: Property-prop_decompressRandom = monadicIO $ forAllM someBigString $ \ str -> do- header <- run $ E.run_ $ E.enumList 2 [] E.$$ E.joinI (compress Nothing E.$$ EL.consume)+prop_decompressRandom = expectFailure . monadicIO . forAllM someBigString $ \ str -> do+ header <- run . runResourceT $ Cl.sourceList [] C.$$ compress Nothing C.=$= Cl.consume let blob = header ++ [str]- run $ E.run_ $ E.enumList 2 blob E.$$ E.joinI (decompress Nothing E.$$ dropAll)+ run $ runResourceT $ Cl.sourceList blob C.$$ decompress Nothing C.=$= Cl.sinkNull prop_decompressCorrupt :: Property-prop_decompressCorrupt = expectFailure $ monadicIO $ forAllM someBigString $ \ str -> do- header <- run $ E.run_ $ E.enumList 2 [] E.$$ E.joinI (compress Nothing E.$$ EL.consume)+prop_decompressCorrupt = expectFailure . monadicIO . forAllM someBigString $ \ str -> do+ header <- run . runResourceT $ Cl.sourceList [] C.$$ compress Nothing C.=$= Cl.consume let header' = B.concat header randVal <- pick $ elements [0..255::Word8] randIdx <- pick $ elements [0..B.length header'-1] let (left, right) = B.splitAt randIdx header' updated = left `B.append` (randVal `B.cons` B.tail right) blob = [updated, str]- run $ E.run_ $ E.enumList 2 blob E.$$ E.joinI (decompress Nothing E.$$ dropAll)-+ run $ runResourceT $ Cl.sourceList blob C.$$ decompress Nothing C.=$= Cl.sinkNull