on ea2d85b help sign in
72 lines 2.2 kB history raw
1module Main (main) where
3import Streamly.Test.Common (listEquals, chooseInt)
4import Test.Hspec (hspec, describe)
5import Test.Hspec.QuickCheck
6import Test.QuickCheck (forAll, Property, vectorOf, Gen)
7import Test.QuickCheck.Monadic (monadicIO, run)
9import qualified Streamly.Internal.Data.Array.Foreign as Array
10import qualified Streamly.Internal.Data.Array.Stream.Foreign as ArrayStream
11import qualified Streamly.Internal.Data.Fold as Fold
12import qualified Streamly.Internal.Data.Parser.ParserD as ParserD
13import qualified Streamly.Internal.Data.Stream.IsStream as Stream
14import qualified Test.Hspec as Hspec
16import Prelude hiding (sequence)
18#if MIN_VERSION_QuickCheck(2,14,0)
20import Test.QuickCheck (chooseAny)
22#else
24import System.Random (Random(random))
25import Test.QuickCheck.Gen (Gen(MkGen))
27-- | Generates a random element over the natural range of `a`.
28chooseAny :: Random a => Gen a
29chooseAny = MkGen (\r _ -> let (x,_) = random r in x)
31#endif
33maxTestCount :: Int
34maxTestCount = 100
36parse :: Property
37parse = do
38 let len = 200
39 -- ls = input list (stream)
40 -- clen = chunk size
41 -- tlen = parser take size
42 forAll
43 ((,,)
44 <$> vectorOf len (chooseAny :: Gen Int)
45 <*> chooseInt (1, len)
46 <*> chooseInt (0, len))
47 $ \(ls, clen, tlen) ->
48 monadicIO $ do
49 (ls1, str) <-
50 let input =
51 Stream.chunksOf
52 clen (Array.writeN clen) (Stream.fromList ls)
53 parser = ParserD.fromFold (Fold.take tlen Fold.toList)
54 in run $ ArrayStream.parse parser input
55 ls2 <- run $ Stream.toList $ ArrayStream.concat str
56 listEquals (==) (ls1 ++ ls2) ls
58-------------------------------------------------------------------------------
59-- Main
60-------------------------------------------------------------------------------
62moduleName :: String
63moduleName = "Data.Array.Stream.Foreign"
65main :: IO ()
66main =
67 hspec $
68 Hspec.parallel $
69 modifyMaxSuccess (const maxTestCount) $ do
70 describe moduleName $ do
71 describe "Stream parsing" $ do
72 prop "parse" parse