streaming-commons-0.1.9: test/Data/Streaming/ByteString/BuilderSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Data.Streaming.ByteString.BuilderSpec (spec) where
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Unsafe as S
import qualified Data.ByteString.Builder as B
import qualified Data.ByteString.Lazy.Char8 as L
import Data.IORef
import Data.Monoid
import Test.Hspec
import Test.Hspec.QuickCheck (prop)
import Data.Streaming.ByteString.Builder
spec :: Spec
spec =
describe "Data.Streaming.ByteString.Builder" $ do
prop "toByteStringIO idempotent to toLazyByteString" $ \bss' -> do
let bss = mconcat (map (B.byteString . S.pack) bss')
ior <- newIORef []
toByteStringIOWith 16
(\s -> do s' <- S.useAsCStringLen s S.unsafePackCStringLen
modifyIORef ior (s' :))
bss
chunks <- readIORef ior
L.fromChunks (reverse chunks) `shouldBe` B.toLazyByteString bss