on acc37cf 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 as Parser
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
36parseBreak :: Property
37parseBreak = 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 = Parser.fromFold (Fold.take tlen Fold.toList)
54 in run $ ArrayStream.parseBreak 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 "parseBreak" parseBreak