packages feed

conduit 1.0.17 → 1.0.17.1

raw patch · 3 files changed

+100/−1 lines, 3 files

Files

conduit.cabal view
@@ -1,5 +1,5 @@ Name:                conduit-Version:             1.0.17+Version:             1.0.17.1 Synopsis:            Streaming data processing library. Description:     @conduit@ is a solution to the streaming data problem, allowing for production, transformation, and consumption of streams of data in constant memory. It is an alternative to lazy I\/O which guarantees deterministic resource handling, and fits in the same general solution space as @enumerator@\/@iteratee@ and @pipes@. For a tutorial, please visit <https://haskell.fpcomplete.com/user/snoyberg/library-documentation/conduit-overview>.@@ -68,6 +68,8 @@ test-suite test     hs-source-dirs: test     main-is: main.hs+    other-modules: Data.Conduit.Extra.ZipConduitSpec+                   Data.Conduit.ExtraSpec     type: exitcode-stdio-1.0     cpp-options:   -DTEST     build-depends:   conduit
+ test/Data/Conduit/Extra/ZipConduitSpec.hs view
@@ -0,0 +1,26 @@+module Data.Conduit.Extra.ZipConduitSpec (spec) where+import Test.Hspec+import Data.Conduit+import qualified Data.Conduit.List as CL+import Control.Applicative ((<*))++spec :: Spec+spec = describe "Data.Conduit.Extra.ZipConduit" $ do+    it "ZipConduit" $ do+        let src = mapM_ yield [1..3 :: Int]+            conduit1 = CL.map (+1)+            conduit2 = CL.concatMap (replicate 2)+            conduit = getZipConduit $ ZipConduit conduit1 <* ZipConduit conduit2+            sink = CL.consume+        res <- src $$ conduit =$ sink+        res `shouldBe` [2, 1, 1, 3, 2, 2, 4, 3, 3]+    it "sequenceConduits" $ do+        let src = mapM_ yield [1..3 :: Int]+            conduit1 = CL.map (+1)+            conduit2 = CL.concatMap (replicate 2)+            conduit = do+                x <- sequenceConduits [conduit1, conduit2]+                yield $ length x + 10+            sink = CL.consume+        res <- src $$ conduit =$ sink+        res `shouldBe` [2, 1, 1, 3, 2, 2, 4, 3, 3, 12]
+ test/Data/Conduit/ExtraSpec.hs view
@@ -0,0 +1,71 @@+module Data.Conduit.ExtraSpec where++import Data.Conduit+import Test.Hspec+import Test.Hspec.QuickCheck+import Data.Conduit.List (isolate, peek, consume)+import qualified Data.Conduit.List as CL+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.ByteString as S+import qualified Data.Conduit.Text as CT++spec :: Spec+spec = describe "Data.Conduit.Extra" $ do+    it "basic test" $ do+        let sink2 :: Sink a IO (Maybe a, Maybe a)+            sink2 = do+                ma1 <- fuseLeftovers id (isolate 10) peek+                ma2 <- peek+                return (ma1, ma2)++            source = yield 1 >> yield 2+        res <- source $$ sink2+        res `shouldBe` (Just 1, Just 1)++    it "get leftovers" $ do+        let sink2 :: Sink a IO ([a], [a], [a])+            sink2 = do+                (x, y) <- fuseReturnLeftovers (isolate 2) peek3+                z <- CL.consume+                return (x, y, z)++            peek3 = do+                x <- CL.take 3+                mapM_ leftover $ reverse x+                return x++            source = mapM_ yield [1..5]+        res <- source $$ sink2+        res `shouldBe` ([1..2], [1..2], [3..5])++    it "multiple values" $ do+        let sink2 :: Sink a IO ([a], Maybe a)+            sink2 = do+                ma1 <- fuseLeftovers id (isolate 10) peek3+                ma2 <- peek+                return (ma1, ma2)++            peek3 = do+                x <- CL.take 3+                mapM_ leftover $ reverse x+                return x++            source = mapM_ yield [1..5]+        res <- source $$ sink2+        res `shouldBe` ([1..3], Just 1)++    prop "more complex" $ \ss cnt -> do+        let ts = map T.pack ss+            src = mapM_ (yield . T.encodeUtf8) ts+            conduit = CL.map T.decodeUtf8+            sink = CT.take cnt =$ consume+            undo = return . T.encodeUtf8 . T.concat+        res <- src $$ do+            x <- fuseLeftovers undo conduit sink+            y <- consume+            return (T.concat x, T.decodeUtf8 $ S.concat y)+        res `shouldBe` T.splitAt cnt (T.concat ts)++main :: IO ()+main = hspec spec