packages feed

stream-0.1.0.0: test/Spec.hs

import Test.Hspec
import Test.Hspec.QuickCheck
import Stream
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import System.IO.Temp
import System.IO (hClose)

main :: IO ()
main = hspec $ do
    it "enum/map/sum sanity" $
        runIdentity (sumS $ mapS (+ 1) $ enumFromToS 1 (1000 :: Int))
        `shouldBe` sum (map (+ 1) [1..1000])
    prop "file copy" $ \octets ->
        withSystemTempFile "src" $ \srcFP srcH ->
        withSystemTempFile "dst" $ \dstFP dstH -> do
            let bsOrig = S.pack octets
            S.hPut srcH bsOrig
            hClose srcH
            hClose dstH
            writeFileS dstFP $ readFileS srcFP
            actual <- S.readFile dstFP
            actual `shouldBe` bsOrig
    prop "lines" $ \octetss ->
        let ls = map S.pack octetss
            bs = S8.unlines ls
            src = yieldS [bs]
            sink = linesAsciiS (const go) ()
            go = error "go"
            res = runIdentity $ sinkListS $ sink src
         in res `shouldBe` S8.lines bs