streamly/test/Streamly/Test/Prelude/ZipSerial.hs

74 lines
2.6 KiB
Haskell

{-# OPTIONS_GHC -Wno-deprecations #-}
-- |
-- Module : Streamly.Test.Prelude.ZipSerial
-- Copyright : (c) 2020 Composewell Technologies
--
-- License : BSD-3-Clause
-- Maintainer : streamly@composewell.com
-- Stability : experimental
-- Portability : GHC
module Streamly.Test.Prelude.ZipSerial (main) where
import Test.Hspec.QuickCheck
import Test.Hspec as H
import Streamly.Prelude
import qualified Streamly.Prelude as S
import Streamly.Test.Prelude.Common
moduleName :: String
moduleName = "Prelude.ZipSerial"
main :: IO ()
main = hspec
$ H.parallel
#ifdef COVERAGE_BUILD
$ modifyMaxSuccess (const 10)
#endif
$ describe moduleName $ do
let zipSerialOps :: IsStream t
=> ((ZipSerialM IO a -> t IO a) -> Spec) -> Spec
zipSerialOps spec = mapOps spec $ makeOps fromZipSerial
#ifndef COVERAGE_BUILD
<> [("rate AvgRate 0.00000001", fromZipSerial . avgRate 0.00000001)]
<> [("maxBuffer (-1)", fromZipSerial . maxBuffer (-1))]
#endif
describe "Functor operations" $ do
zipSerialOps $ functorOps S.fromFoldable "zipSerially" (==)
zipSerialOps $ functorOps folded "zipSerially folded" (==)
describe "Monoid operations" $ do
zipSerialOps $ monoidOps "zipSerially" mempty (==)
describe "Semigroup operations" $ do
zipSerialOps $ semigroupOps "zipSerially" (==)
-- XXX add tests for indexed/indexedR
describe "Zip operations" $ do
zipSerialOps $
prop "zipSerially applicative" . zipApplicative S.fromFoldable (==)
zipSerialOps $
prop "zipSerially applicative folded" . zipApplicative folded (==)
describe "Stream transform and combine operations" $ do
zipSerialOps $ transformCombineOpsCommon S.fromFoldable "zipSerially" (==)
zipSerialOps $ transformCombineOpsCommon folded "zipSerially" (==)
zipSerialOps $ transformCombineOpsOrdered S.fromFoldable "zipSerially" (==)
zipSerialOps $ transformCombineOpsOrdered folded "zipSerially" (==)
describe "Stream elimination operations" $ do
zipSerialOps $ eliminationOps S.fromFoldable "zipSerially"
zipSerialOps $ eliminationOps folded "zipSerially folded"
zipSerialOps $ eliminationOpsWord8 S.fromFoldable "zipSerially"
zipSerialOps $ eliminationOpsWord8 folded "zipSerially folded"
-- XXX Add a test where we chain all transformation APIs and make sure that
-- the state is being passed through all of them.
describe "Stream serial elimination operations" $ do
zipSerialOps $ eliminationOpsOrdered S.fromFoldable "zipSerially"
zipSerialOps $ eliminationOpsOrdered folded "zipSerially folded"