lz4 0.2 → 0.2.1
raw patch · 4 files changed
+25/−11 lines, 4 filesdep +HUnitdep ~hspecPVP ok
version bump matches the API change (PVP)
Dependencies added: HUnit
Dependency ranges changed: hspec
API changes (from Hackage documentation)
Files
- README.md +1/−0
- lz4.cabal +3/−2
- src/Codec/Compression/LZ4.hsc +9/−7
- tests/Properties.hs +12/−2
README.md view
@@ -31,6 +31,7 @@ [lz4]: http://code.google.com/p/lz4 [issue tracker]: https://github.com/mwotton/lz4hs/issues+[continuous integration]: https://travis-ci.org/mwotton/lz4hs [gh]: https://github.com/mwotton/lz4hs [bb]: http://bitbucket.org/mwotton/lz4hs [Hackage]: http://hackage.haskell.org/package/lz4c
lz4.cabal view
@@ -1,5 +1,5 @@ name: lz4-version: 0.2+version: 0.2.1 synopsis: LZ4 compression for ByteStrings description: High level bindings to the LZ4 compression library.@@ -49,7 +49,8 @@ build-depends: base >= 3 && < 5, bytestring,- hspec, QuickCheck,+ hspec >= 1.3, QuickCheck,+ HUnit, lz4 ghc-options: -fno-cse -fwarn-tabs
src/Codec/Compression/LZ4.hsc view
@@ -1,4 +1,6 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE ScopedTypeVariables #-}+ -- | -- Module : Codec.Compression.LZ4 -- Copyright : (c) Mark Wotton, Austin Seipp 2012@@ -122,8 +124,10 @@ where go (l, str) = U.unsafeUseAsCString str $ \cstr -> do out <- SI.createAndTrim l $ \p -> do- r <- fromIntegral <$> c_LZ4_uncompress cstr p (fromIntegral l)- return $! if (r <= 0) then 0 else r+ r :: Int <- fromIntegral <$> c_LZ4_uncompress cstr p (fromIntegral l)+ --- NOTE: r is the count of bytes c_LZ4_uncompress read from input buffer,+ --- and NOT the count of bytes used in result buffer+ return $! if (r <= 0) then 0 else l return $! if (S.null out) then Nothing else (Just out) {-# INLINEABLE decompress #-} @@ -167,11 +171,9 @@ -- Gets a ByteString and it's length from the compressed format. unformat :: Get (Int, S.ByteString)-unformat = do- c <- fromIntegral <$> getWord32le- l <- fromIntegral <$> getWord32le- bs <- getByteString l- return (c, bs)+unformat = (,) <$> (fromIntegral <$> getWord32le)+ <*> (fromIntegral <$> getWord32le >>= getByteString)+ --------------------------------------------------------------------------------
tests/Properties.hs view
@@ -1,10 +1,13 @@-{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE ViewPatterns, OverloadedStrings #-} module Main (main) where import Test.Hspec import Test.Hspec.QuickCheck+import Test.Hspec.HUnit+import Test.HUnit import Test.QuickCheck+import Control.Applicative -import qualified Data.ByteString as S+import qualified Data.ByteString.Char8 as S import Codec.Compression.LZ4 main :: IO ()@@ -22,6 +25,13 @@ prop "is pure (normal)" $ prop_decompress_pure compress decompress prop "is pure (high)" $ prop_decompress_pure compressHC decompress prop "is pure (ultra)" $ prop_decompress_pure compressPlusHC decompressPlusHC+ describe "regression test" $ do+ let input = "\STXd\STX\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\vexample.com\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ETX\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SI\NUL\NUL\NUL\NUL\NUL\NUL\NUL\tWhirlpool\NUL\NUL\NUL\NUL\NUL\NUL\NUL\vexample.com\NUL\STXf\SOH\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ffacebook.com\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\b\NUL\NUL\NUL\NUL\NUL\NUL\NUL\EOTSHA1\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ffacebook.com\NUL\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\tgmail.com\SOH\NUL\NUL\NUL\NUL\NUL\NUL"+ it "can compress an oddly full-of-NULLs string"+ (TestCase $ assertEqual "odd string" (Just input) (return input >>=+ compress >>= + decompress))+ prop_compress_pure comp decomp (S.pack -> xs) = (comp xs) == (comp xs)