on master help sign in
Create another test group for generation & add multiple gen unfolds

Unfolds added: fromStreamK fromStreamD unfoldrM iterateM fromIndicesM enumerateFromStepNum enumerateFromToFractional

commit8f0b863c8ad8425729d7391520639729d872773d authoradithyaov <adithya@composewell.com> dateTue 20 Oct 2020, 06:13 (6 years ago) parentc4f90b5
1 file changed+106−27
test/Streamly/Test/Data/Unfold.hs+106−27
test/Streamly/Test/Data/Unfold.hs+106−27
@@ -13,6 +13,8 @@ import Streamly.Internal.Data.Unfold (Unfold)
1313
1414import qualified Streamly.Internal.Data.Unfold as UF
1515import qualified Streamly.Internal.Data.Stream.IsStream as S
16+import qualified Streamly.Internal.Data.Stream.StreamD as D
17+import qualified Streamly.Internal.Data.Stream.StreamK as K
1618import qualified Prelude
1719import qualified Data.List as List
1820
@@ -106,6 +108,16 @@ fromStream =
106108 $ \n ->
107109 testUnfoldD UF.fromStream (S.fromList n :: SerialT Identity Int) n
108110
111+fromStreamD :: Property
112+fromStreamD =
113+ property
114+ $ \list -> testUnfoldD UF.fromStreamD (D.fromList list) (list :: [Int])
115+
116+fromStreamK :: Property
117+fromStreamK =
118+ property
119+ $ \list -> testUnfoldD UF.fromStreamK (K.fromList list) (list :: [Int])
120+
109121nilM :: Bool
110122nilM =
111123 let unf = UF.nilM put
@@ -132,6 +144,18 @@ const =
132144 let unf = UF.take 10 $ UF.const (modify (+ 1) >> get)
133145 in testUnfoldAD unf 0 10 (0 :: Int) [1 .. 10]
134146
147+unfoldrM :: Property
148+unfoldrM =
149+ property
150+ $ \gen ->
151+ let genA = apply gen :: Int -> Maybe (Int, Int)
152+ genM x = modify (+ 1) >> return (genA x)
153+ list = Prelude.take 100 $ List.unfoldr genA 1
154+ unf = UF.take 100 $ UF.unfoldrM genM
155+ ll = length list
156+ fs = if ll < 100 then ll + 1 else 100
157+ in testUnfoldAD unf 0 fs 1 list
158+
135159fromListM :: Property
136160fromListM =
137161 property
@@ -143,7 +167,7 @@ replicateM :: Property
143167replicateM =
144168 property
145169 $ \i ->
146− let ns = max 0 i + 1
170+ let ns = max 0 i
147171 seed = modify (+ 1) >> get
148172 in testUnfoldAD (UF.replicateM i) 0 ns seed [1 .. i]
149173
@@ -151,6 +175,56 @@ repeatM :: Bool
151175repeatM =
152176 testUnfoldAD (UF.take 10 UF.repeatM) 0 10 (modify (+ 1) >> get) [1 .. 10]
153177
178+iterateM :: Property
179+iterateM =
180+ property
181+ $ \next ->
182+ let nextA = apply next :: Int -> Int
183+ nextM x = modify (+ 1) >> return (nextA x)
184+ list = Prelude.take 100 $ List.iterate nextA 1
185+ unf = UF.take 100 $ UF.iterateM nextM
186+ in testUnfoldAD unf 0 110 (modify (+ 10) >> return 1) list
187+
188+fromIndicesM :: Property
189+fromIndicesM =
190+ property
191+ $ \indF ->
192+ let indFA = apply indF :: Int -> Int
193+ indFM x = modify (+ 1) >> return (indFA x)
194+ list = Prelude.take 100 $ Prelude.map indFA [1 ..]
195+ unf = UF.take 100 $ UF.fromIndicesM indFM
196+ in testUnfoldAD unf 0 (length list) 1 list
197+
198+enumerateFromStepNum :: Property
199+enumerateFromStepNum =
200+ property
201+ $ \f s ->
202+ let unf = UF.take 10 $ UF.enumerateFromStepNum s
203+ lst = Prelude.take 10 $ List.unfoldr (\x -> Just (x, x + s)) f
204+ in testUnfoldD unf f lst
205+
206+enumerateFromToFractional :: Property
207+enumerateFromToFractional =
208+ property
209+ $ \f t ->
210+ let unf = UF.enumerateFromToFractional (t :: Double)
211+ in testUnfold unf (f :: Double) [f .. t]
212+
213+enumerateFromStepIntegral :: Property
214+enumerateFromStepIntegral =
215+ property
216+ $ \f s ->
217+ let unf = UF.take 10 UF.enumerateFromStepIntegral
218+ lst = Prelude.take 10 $ List.unfoldr (\x -> Just (x, x + s)) f
219+ in testUnfoldD unf (f, s) lst
220+
221+enumerateFromToIntegral :: Property
222+enumerateFromToIntegral =
223+ property
224+ $ \f t ->
225+ let unf = UF.enumerateFromToIntegral t
226+ in testUnfoldD unf f [f .. t]
227+
154228take :: Property
155229take =
156230 property
@@ -207,21 +281,6 @@ dropWhileM =
207281 fS = Prelude.length n - Prelude.length fL
208282 in testUnfoldAD unf 0 fS n fL
209283
210−enumerateFromStepIntegral :: Property
211−enumerateFromStepIntegral =
212− property
213− $ \f s ->
214− let unf = UF.take 10 UF.enumerateFromStepIntegral
215− lst = Prelude.take 10 $ List.unfoldr (\x -> Just (x, x + s)) f
216− in testUnfoldD unf (f, s) lst
217−
218−enumerateFromToIntegral :: Property
219−enumerateFromToIntegral =
220− property
221− $ \f t ->
222− let unf = UF.enumerateFromToIntegral t
223− in testUnfoldD unf f [f .. t]
224−
225284zipWithM :: Property
226285zipWithM =
227286 property
@@ -267,6 +326,36 @@ testInputOps =
267326 prop "discardSecond" discardSecond
268327 prop "swap" swap
269328
329+testGeneration :: Spec
330+testGeneration =
331+ describe "Generation"
332+ $ do
333+ prop "fromStream" fromStream
334+ prop "fromStreamK" fromStreamK
335+ prop "fromStreamD" fromStreamD
336+ prop "nilM" nilM
337+ prop "consM" consM
338+ prop "effect" effect
339+ prop "singletonM" singletonM
340+ -- prop "singleton" singleton
341+ -- prop "identity" identity
342+ prop "const" const
343+ prop "unfoldrM" unfoldrM
344+ -- prop "fromList" fromList
345+ prop "fromListM" fromListM
346+ -- prop "fromSVar" fromSVar
347+ -- prop "fromProducer" fromProducer
348+ prop "replicateM" replicateM
349+ prop "repeatM" repeatM
350+ prop "iterateM" iterateM
351+ prop "fromIndicesM" fromIndicesM
352+ prop "enumerateFromStepIntegral" enumerateFromStepIntegral
353+ prop "enumerateFromToIntegral" enumerateFromToIntegral
354+ -- prop "enumerateFromIntegral" enumerateFromIntegral
355+ prop "enumerateFromStepNum" enumerateFromStepNum
356+ -- prop "numFrom" numFrom
357+ prop "enumerateFromToFractional" enumerateFromToFractional
358+
270359-------------------------------------------------------------------------------
271360-- Main
272361-------------------------------------------------------------------------------
@@ -274,23 +363,13 @@ testInputOps =
274363main :: IO ()
275364main = hspec $ do
276365 testInputOps
366+ testGeneration
277367 describe "Unfold tests" $ do
278− prop "fromStream" fromStream
279− prop "nilM" nilM
280− prop "consM" consM
281− prop "effect" effect
282− prop "singletonM" singletonM
283− prop "const" const
284− prop "fromListM" fromListM
285− prop "replicateM" replicateM
286− prop "repeatM" repeatM
287368 prop "take" take
288369 prop "takeWhileM" takeWhileM
289370 prop "filterM" filterM
290371 prop "drop" drop
291372 prop "dropWhileM" dropWhileM
292− prop "enumerateFromStepIntegral" enumerateFromStepIntegral
293− prop "enumerateFromToIntegral" enumerateFromToIntegral
294373 prop "zipWithM" zipWithM
295374 prop "concat" concat
296375 prop "outerProduct" outerProduct