on master help sign in
Refactor ZipAsync ops into a separate test suite.
cfb9535Pranay Sashank
streamly.cabal+8
@@ -608,6 +608,14 @@ test-suite Prelude.ZipSerial
608 other-modules: Streamly.Test.Common
608 other-modules: Streamly.Test.Common
609 , Streamly.Test.Prelude
609 , Streamly.Test.Prelude
610
610
611+test-suite Prelude.ZipAsync
612+ import: test-options, prelude-test-options
613+ type: exitcode-stdio-1.0
614+ main-is: Streamly/Test/Prelude/ZipAsync.hs
615+ ghc-options: -main-is Streamly.Test.Prelude.ZipAsync.main
616+ other-modules: Streamly.Test.Common
617+ , Streamly.Test.Prelude
618+
611test-suite array-test
619test-suite array-test
612 import: test-options
620 import: test-options
613 type: exitcode-stdio-1.0
621 type: exitcode-stdio-1.0
test/Prop.hs−22
@@ -285,11 +285,6 @@ main = hspec
285 parallelConcurrentAppOps spec =
285 parallelConcurrentAppOps spec =
286 mapOps spec $ makeConcurrentAppOps parallely <> parallelCommonOps
286 mapOps spec $ makeConcurrentAppOps parallely <> parallelCommonOps
287
287
288− -- Note, the "pure" of applicative Zip streams generates and infinite
289− -- stream and therefore maxBuffer (-1) must not be used for that case.
290− let zipAsyncOps :: IsStream t => ((ZipAsyncM IO a -> t IO a) -> Spec) -> Spec
291− zipAsyncOps spec = mapOps spec $ makeOps zipAsyncly
292−
293 describe "Construction" $ do
288 describe "Construction" $ do
294 aheadOps $ prop "aheadly replicateM" . constructWithReplicateM
289 aheadOps $ prop "aheadly replicateM" . constructWithReplicateM
295 asyncOps $ prop "asyncly replicateM" . constructWithReplicateM
290 asyncOps $ prop "asyncly replicateM" . constructWithReplicateM
@@ -314,15 +309,12 @@ main = hspec
314 wAsyncOps $ functorOps folded "wAsyncly folded" sortEq
309 wAsyncOps $ functorOps folded "wAsyncly folded" sortEq
315 parallelOps $ functorOps S.fromFoldable "parallely" sortEq
310 parallelOps $ functorOps S.fromFoldable "parallely" sortEq
316 parallelOps $ functorOps folded "parallely folded" sortEq
311 parallelOps $ functorOps folded "parallely folded" sortEq
317− zipAsyncOps $ functorOps S.fromFoldable "zipAsyncly" (==)
318− zipAsyncOps $ functorOps folded "zipAsyncly folded" (==)
319
312
320 describe "Semigroup operations" $ do
313 describe "Semigroup operations" $ do
321 aheadOps $ semigroupOps "aheadly" (==)
314 aheadOps $ semigroupOps "aheadly" (==)
322 asyncOps $ semigroupOps "asyncly" sortEq
315 asyncOps $ semigroupOps "asyncly" sortEq
323 wAsyncOps $ semigroupOps "wAsyncly" sortEq
316 wAsyncOps $ semigroupOps "wAsyncly" sortEq
324 parallelOps $ semigroupOps "parallely" sortEq
317 parallelOps $ semigroupOps "parallely" sortEq
325− zipAsyncOps $ semigroupOps "zipAsyncly" (==)
326
318
327 describe "Applicative operations" $ do
319 describe "Applicative operations" $ do
328 aheadOps $ prop "aheadly applicative" . applicativeOps S.fromFoldable (==)
320 aheadOps $ prop "aheadly applicative" . applicativeOps S.fromFoldable (==)
@@ -335,9 +327,6 @@ main = hspec
335
327
336 -- XXX add tests for indexed/indexedR
328 -- XXX add tests for indexed/indexedR
337 describe "Zip operations" $ do
329 describe "Zip operations" $ do
338− zipAsyncOps $ prop "zipAsyncly applicative" . zipApplicative S.fromFoldable (==)
339− zipAsyncOps $ prop "zipAsyncly applicative folded" . zipApplicative folded (==)
340−
341 -- We test only the serial zip with serial streams and the parallel
330 -- We test only the serial zip with serial streams and the parallel
342 -- stream, because the rate setting in these streams can slow down
331 -- stream, because the rate setting in these streams can slow down
343 -- zipAsync.
332 -- zipAsync.
@@ -418,50 +407,39 @@ main = hspec
418 asyncOps $ transformCombineOpsCommon S.fromFoldable "asyncly" sortEq
407 asyncOps $ transformCombineOpsCommon S.fromFoldable "asyncly" sortEq
419 wAsyncOps $ transformCombineOpsCommon S.fromFoldable "wAsyncly" sortEq
408 wAsyncOps $ transformCombineOpsCommon S.fromFoldable "wAsyncly" sortEq
420 parallelOps $ transformCombineOpsCommon S.fromFoldable "parallely" sortEq
409 parallelOps $ transformCombineOpsCommon S.fromFoldable "parallely" sortEq
421− zipAsyncOps $ transformCombineOpsCommon S.fromFoldable "zipAsyncly" (==)
422
410
423 aheadOps $ transformCombineOpsCommon folded "aheadly" (==)
411 aheadOps $ transformCombineOpsCommon folded "aheadly" (==)
424 asyncOps $ transformCombineOpsCommon folded "asyncly" sortEq
412 asyncOps $ transformCombineOpsCommon folded "asyncly" sortEq
425 wAsyncOps $ transformCombineOpsCommon folded "wAsyncly" sortEq
413 wAsyncOps $ transformCombineOpsCommon folded "wAsyncly" sortEq
426 parallelOps $ transformCombineOpsCommon folded "parallely" sortEq
414 parallelOps $ transformCombineOpsCommon folded "parallely" sortEq
427− zipAsyncOps $ transformCombineOpsCommon folded "zipAsyncly" (==)
428
415
429 aheadOps $ transformCombineOpsOrdered S.fromFoldable "aheadly" (==)
416 aheadOps $ transformCombineOpsOrdered S.fromFoldable "aheadly" (==)
430− zipAsyncOps $ transformCombineOpsOrdered S.fromFoldable "zipAsyncly" (==)
431
417
432 aheadOps $ transformCombineOpsOrdered folded "aheadly" (==)
418 aheadOps $ transformCombineOpsOrdered folded "aheadly" (==)
433− zipAsyncOps $ transformCombineOpsOrdered folded "zipAsyncly" (==)
434
419
435 describe "Stream elimination operations" $ do
420 describe "Stream elimination operations" $ do
436 aheadOps $ eliminationOps S.fromFoldable "aheadly"
421 aheadOps $ eliminationOps S.fromFoldable "aheadly"
437 asyncOps $ eliminationOps S.fromFoldable "asyncly"
422 asyncOps $ eliminationOps S.fromFoldable "asyncly"
438 wAsyncOps $ eliminationOps S.fromFoldable "wAsyncly"
423 wAsyncOps $ eliminationOps S.fromFoldable "wAsyncly"
439 parallelOps $ eliminationOps S.fromFoldable "parallely"
424 parallelOps $ eliminationOps S.fromFoldable "parallely"
440− zipAsyncOps $ eliminationOps S.fromFoldable "zipAsyncly"
441
425
442 aheadOps $ eliminationOps folded "aheadly folded"
426 aheadOps $ eliminationOps folded "aheadly folded"
443 asyncOps $ eliminationOps folded "asyncly folded"
427 asyncOps $ eliminationOps folded "asyncly folded"
444 wAsyncOps $ eliminationOps folded "wAsyncly folded"
428 wAsyncOps $ eliminationOps folded "wAsyncly folded"
445 parallelOps $ eliminationOps folded "parallely folded"
429 parallelOps $ eliminationOps folded "parallely folded"
446− zipAsyncOps $ eliminationOps folded "zipAsyncly folded"
447
430
448 aheadOps $ eliminationOpsWord8 S.fromFoldable "aheadly"
431 aheadOps $ eliminationOpsWord8 S.fromFoldable "aheadly"
449 asyncOps $ eliminationOpsWord8 S.fromFoldable "asyncly"
432 asyncOps $ eliminationOpsWord8 S.fromFoldable "asyncly"
450 wAsyncOps $ eliminationOpsWord8 S.fromFoldable "wAsyncly"
433 wAsyncOps $ eliminationOpsWord8 S.fromFoldable "wAsyncly"
451 parallelOps $ eliminationOpsWord8 S.fromFoldable "parallely"
434 parallelOps $ eliminationOpsWord8 S.fromFoldable "parallely"
452− zipAsyncOps $ eliminationOpsWord8 S.fromFoldable "zipAsyncly"
453
435
454 aheadOps $ eliminationOpsWord8 folded "aheadly folded"
436 aheadOps $ eliminationOpsWord8 folded "aheadly folded"
455 asyncOps $ eliminationOpsWord8 folded "asyncly folded"
437 asyncOps $ eliminationOpsWord8 folded "asyncly folded"
456 wAsyncOps $ eliminationOpsWord8 folded "wAsyncly folded"
438 wAsyncOps $ eliminationOpsWord8 folded "wAsyncly folded"
457 parallelOps $ eliminationOpsWord8 folded "parallely folded"
439 parallelOps $ eliminationOpsWord8 folded "parallely folded"
458− zipAsyncOps $ eliminationOpsWord8 folded "zipAsyncly folded"
459
440
460 -- XXX Add a test where we chain all transformation APIs and make sure that
441 -- XXX Add a test where we chain all transformation APIs and make sure that
461 -- the state is being passed through all of them.
442 -- the state is being passed through all of them.
462 describe "Stream serial elimination operations" $ do
443 describe "Stream serial elimination operations" $ do
463 aheadOps $ eliminationOpsOrdered S.fromFoldable "aheadly"
444 aheadOps $ eliminationOpsOrdered S.fromFoldable "aheadly"
464− zipAsyncOps $ eliminationOpsOrdered S.fromFoldable "zipAsyncly"
465−
466 aheadOps $ eliminationOpsOrdered folded "aheadly folded"
445 aheadOps $ eliminationOpsOrdered folded "aheadly folded"
467− zipAsyncOps $ eliminationOpsOrdered folded "zipAsyncly folded"
test/Streamly/Test/Prelude/ZipAsync.hsnew file+62
@@ -0,0 +1,62 @@
1+-- |
2+-- Module : Streamly.Test.Prelude.ZipAsync
3+-- Copyright : (c) 2020 Composewell Technologies
4+--
5+-- License : BSD-3-Clause
6+-- Maintainer : streamly@composewell.com
7+-- Stability : experimental
8+-- Portability : GHC
9+
10+module Streamly.Test.Prelude.ZipAsync where
11+
12+import Test.Hspec.QuickCheck
13+import Test.Hspec as H
14+
15+import Streamly
16+import qualified Streamly.Prelude as S
17+
18+import Streamly.Test.Prelude
19+
20+main :: IO ()
21+main = hspec
22+ $ H.parallel
23+#ifdef COVERAGE_BUILD
24+ $ modifyMaxSuccess (const 10)
25+#endif
26+ $ do
27+ -- Note, the "pure" of applicative Zip streams generates and infinite
28+ -- stream and therefore maxBuffer (-1) must not be used for that case.
29+ let zipAsyncOps :: IsStream t => ((ZipAsyncM IO a -> t IO a) -> Spec) -> Spec
30+ zipAsyncOps spec = mapOps spec $ makeOps zipAsyncly
31+
32+ describe "Functor operations" $ do
33+ zipAsyncOps $ functorOps S.fromFoldable "zipAsyncly" (==)
34+ zipAsyncOps $ functorOps folded "zipAsyncly folded" (==)
35+
36+ describe "Semigroup operations" $ do
37+ zipAsyncOps $ semigroupOps "zipAsyncly" (==)
38+
39+ -- XXX add tests for indexed/indexedR
40+ describe "Zip operations" $ do
41+ zipAsyncOps $
42+ prop "zipAsyncly applicative" . zipApplicative S.fromFoldable (==)
43+ zipAsyncOps $
44+ prop "zipAsyncly applicative folded" . zipApplicative folded (==)
45+
46+ describe "Stream transform and combine operations" $ do
47+ zipAsyncOps $ transformCombineOpsCommon S.fromFoldable "zipAsyncly" (==)
48+ zipAsyncOps $ transformCombineOpsCommon folded "zipAsyncly" (==)
49+ zipAsyncOps $ transformCombineOpsOrdered S.fromFoldable "zipAsyncly" (==)
50+ zipAsyncOps $ transformCombineOpsOrdered folded "zipAsyncly" (==)
51+
52+ describe "Stream elimination operations" $ do
53+ zipAsyncOps $ eliminationOps S.fromFoldable "zipAsyncly"
54+ zipAsyncOps $ eliminationOps folded "zipAsyncly folded"
55+ zipAsyncOps $ eliminationOpsWord8 S.fromFoldable "zipAsyncly"
56+ zipAsyncOps $ eliminationOpsWord8 folded "zipAsyncly folded"
57+
58+ -- XXX Add a test where we chain all transformation APIs and make sure that
59+ -- the state is being passed through all of them.
60+ describe "Stream serial elimination operations" $ do
61+ zipAsyncOps $ eliminationOpsOrdered S.fromFoldable "zipAsyncly"
62+ zipAsyncOps $ eliminationOpsOrdered folded "zipAsyncly folded"