File: test.hs

package info (click to toggle)
haskell-bzlib-conduit 0.3.0.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,796 kB
  • sloc: haskell: 222; makefile: 3
file content (42 lines) | stat: -rw-r--r-- 1,294 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{-# LANGUAGE ViewPatterns #-}
import Control.Applicative
import Control.Monad (replicateM, forM_)
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Lazy.Char8 as L
import Conduit
import Data.Conduit.BZlib
import System.Random

import Test.Hspec
import Test.Hspec.QuickCheck

import Prelude as P

main :: IO ()
main = hspec $ do
  describe "decompress" $ do
    forM_ [1..5] $ \n -> do
      let file = "sample"++show n
      it ("correctly " ++ file ++ ".bz2") $ do
        dec <- runConduitRes
             $ sourceFile ("test/" ++ file ++ ".bz2")
            .| bunzip2
            .| takeCE 1000000000
            .| sinkLazy
        ref <- L.readFile ("test/" ++ file ++ ".ref")
        dec `shouldBe` ref

  describe "compress" $ do
    prop ". decompress == id" $ \((`mod` (2^(16 :: Int))) . abs -> n) -> do
        let bsize = 8192
        ss <- P.takeWhile (not. null)
              . P.map (P.take bsize)
              . P.iterate (P.drop bsize)
              <$> replicateM (abs n) randomIO
        dest <- runConduitRes
              $ yieldMany (P.map S.pack ss)
             .| bzip2
             .| bunzip2
             .| takeCE 1000000000
             .| sinkLazy
        dest `shouldBe` L.pack (P.concat ss)