Allow to build zlib and lzma statically
This should fix issues on Darwin.
This commit is contained in:
98
3rdparty/lzma/src-tests/lzma-tests.hs
vendored
Normal file
98
3rdparty/lzma/src-tests/lzma-tests.hs
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
module Main (main) where
|
||||
|
||||
import Control.Applicative
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Lazy as BL
|
||||
import qualified Data.ByteString.Lazy.Char8 as BL8
|
||||
import Data.List
|
||||
import Data.Monoid
|
||||
import Prelude
|
||||
|
||||
import Test.Tasty
|
||||
import Test.Tasty.QuickCheck as QC
|
||||
import Test.Tasty.HUnit
|
||||
|
||||
import Codec.Compression.Lzma as Lzma
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain tests
|
||||
|
||||
-- this is supposed to be equivalent to 'id'
|
||||
codecompress :: BL.ByteString -> BL.ByteString
|
||||
codecompress = decompress . compress
|
||||
|
||||
newtype ZeroBS = ZeroBS BL.ByteString
|
||||
|
||||
instance Show ZeroBS where
|
||||
show (ZeroBS s) | BL.length s > 0 = "ZeroBS (replicate " ++ show (BL.length s) ++ " " ++ show (BL.head s) ++ ")"
|
||||
| otherwise = "ZeroBS (empty)"
|
||||
|
||||
instance Arbitrary ZeroBS where
|
||||
arbitrary = do
|
||||
len <- choose (0, 1*1024*1024) -- up to 1MiB
|
||||
return $ (ZeroBS $ BL.replicate len 0)
|
||||
|
||||
-- shrink (ABS bs) = map ABS $ shrinks bs
|
||||
|
||||
randBS :: Int -> Gen BS.ByteString
|
||||
randBS n = BS.pack `fmap` vectorOf n (choose (0, 255))
|
||||
|
||||
randBL :: Gen BL.ByteString
|
||||
randBL = do
|
||||
ns <- arbitrary
|
||||
chunks <- mapM (randBS . (`mod` 10240)) ns
|
||||
return $ BL.fromChunks chunks
|
||||
|
||||
newtype RandBLSm = RandBLSm BL.ByteString
|
||||
deriving Show
|
||||
|
||||
newtype RandBL = RandBL BL.ByteString
|
||||
deriving Show
|
||||
|
||||
instance Arbitrary RandBL where
|
||||
arbitrary = RandBL <$> randBL
|
||||
|
||||
instance Arbitrary RandBLSm where
|
||||
arbitrary = do
|
||||
n <- choose (0,1024)
|
||||
RandBLSm . BL.fromChunks . (:[]) <$> randBS n
|
||||
|
||||
tests :: TestTree
|
||||
tests = testGroup "ByteString API" [unitTests, properties]
|
||||
where
|
||||
unitTests = testGroup "testcases"
|
||||
[ testCase "decode-empty" $ decompress nullxz @?= BL.empty
|
||||
, testCase "encode-empty" $ codecompress BL.empty @?= BL.empty
|
||||
, testCase "encode-hello" $ codecompress (BL8.pack "hello") @?= BL8.pack "hello"
|
||||
, testCase "encode-hello2" $ codecompress (singletonChunked $ BL8.pack "hello") @?= BL8.pack "hello"
|
||||
, testCase "decode-sample" $ decompress samplexz @?= sampleref
|
||||
, testCase "decode-sample2" $ decompress (singletonChunked samplexz) @?= sampleref
|
||||
, testCase "encode-sample" $ codecompress sampleref @?= sampleref
|
||||
, testCase "encode-empty^50" $ (iterate decompress (iterate (compressWith lowProf) (BL8.pack "") !! 50) !! 50) @?= BL8.pack ""
|
||||
, testCase "encode-10MiB-zeros" $ let z = BL.replicate (10*1024*1024) 0 in codecompress z @?= z
|
||||
]
|
||||
|
||||
properties = testGroup "properties"
|
||||
[ QC.testProperty "decompress . compress === id (zeros)" $
|
||||
\(ZeroBS bs) -> codecompress bs == bs
|
||||
|
||||
, QC.testProperty "decompress . compress === id (chunked)" $
|
||||
\(RandBL bs) -> codecompress bs == bs
|
||||
|
||||
, QC.testProperty "decompress . (compress a <> compress b) === a <> b" $
|
||||
\(RandBLSm a) (RandBLSm b) -> decompress (compress a `mappend` compress b) == a `mappend` b
|
||||
]
|
||||
|
||||
lowProf = defaultCompressParams { compressLevel = CompressionLevel0 }
|
||||
|
||||
nullxz :: BL.ByteString
|
||||
nullxz = BL.pack [253,55,122,88,90,0,0,4,230,214,180,70,0,0,0,0,28,223,68,33,31,182,243,125,1,0,0,0,0,4,89,90]
|
||||
|
||||
samplexz :: BL.ByteString
|
||||
samplexz = BL.pack [253,55,122,88,90,0,0,4,230,214,180,70,2,0,33,1,16,0,0,0,168,112,142,134,224,1,149,0,44,93,0,42,26,9,39,100,25,234,181,131,189,58,102,36,15,228,64,252,88,41,53,203,78,255,4,93,168,153,174,39,186,76,120,56,49,148,191,144,96,136,20,247,240,0,0,0,157,204,158,16,53,174,37,20,0,1,72,150,3,0,0,0,130,33,173,108,177,196,103,251,2,0,0,0,0,4,89,90]
|
||||
|
||||
singletonChunked :: BL.ByteString -> BL.ByteString
|
||||
singletonChunked = BL.fromChunks . map BS.singleton . BL.unpack
|
||||
|
||||
sampleref :: BL.ByteString
|
||||
sampleref = BL.concat (intersperse (BL8.pack " ") $ replicate 11 $ BL8.pack "This sentence occurs multiple times.")
|
||||
Reference in New Issue
Block a user