mediabus-0.2.0.0: specs/Data/MediaBus/SequenceSpec.hs
module Data.MediaBus.SequenceSpec ( spec ) where
import Conduit as C
import Data.Conduit.List ( consume, sourceList )
import Data.Word
import Test.Hspec
import Test.QuickCheck
import Data.MediaBus
-- -----------------------------------------------------------------------------
-- * Tests/Specs
-- -----------------------------------------------------------------------------
spec :: Spec
spec =
describe "synchronizeToSeqNum" $
it "produces dense, strictly monotonic output" $
property synchronizeToSeqNumIsMonotone
synchronizeToSeqNumIsMonotone :: NonEmptyList (SeqNum ())
-> Word64
-> Expectation
synchronizeToSeqNumIsMonotone (NonEmpty xs) startVal = do
let inEvents = sourceList xs :: Producer Identity (SeqNum ())
(e0 : rest) = runConduitPure (inEvents .|
synchronizeToSeqNum startVal .|
consume)
e0 `shouldBe` MkSeqNum startVal
(rest `zip` drop 1 rest) `shouldSatisfy`
all (not .
uncurry succeeds)