timeline-0.1.0.0: src/Data/Timeline/Hedgehog.hs
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE NamedFieldPuns #-}
-- | Hedgehog generators for the timeline library.
module Data.Timeline.Hedgehog
( -- * Timeline Generators
gen,
genRecord,
)
where
import Data.Timeline
import Hedgehog (MonadGen)
import Hedgehog.Gen qualified as Gen
import Hedgehog.Range qualified as Range
-- | Generator for @'Timeline' a@
gen ::
(MonadGen m, Ord t) =>
m t ->
-- | Generator for values
m a ->
m (Timeline t a)
gen genTime genValue = do
initialValue <- genValue
values <- Gen.map (Range.linear 0 20) $ (,) <$> genTime <*> genValue
pure Timeline {initialValue, values}
-- | Generator for @'Record' a@
genRecord ::
(MonadGen m, Ord t) =>
m t ->
-- | Generator for the value
m a ->
m (Record t a)
genRecord genTime genValue =
Gen.justT $ do
t1 <- genTime
t2 <- Gen.maybe $ Gen.filterT (/= t1) genTime
makeRecord t1 t2 <$> genValue