packages feed

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 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