diff --git a/src/Data/Date/Gen.purs b/src/Data/Date/Gen.purs index 6709a40..1608782 100644 --- a/src/Data/Date/Gen.purs +++ b/src/Data/Date/Gen.purs @@ -4,11 +4,21 @@ module Data.Date.Gen ) where import Prelude -import Control.Monad.Gen (class MonadGen) -import Data.Date (Date, canonicalDate) +import Control.Monad.Gen (class MonadGen, chooseInt) +import Data.Date (Date, adjust, exactDate, isLeapYear) import Data.Date.Component.Gen (genDay, genMonth, genWeekday, genYear) +import Data.Int (toNumber) +import Data.Maybe (fromJust) +import Data.Time.Duration (Days(..)) +import Partial.Unsafe (unsafePartial) -- | Generates a random `Date` between 1st Jan 1900 and 31st Dec 2100, -- | inclusive. genDate :: forall m. MonadGen m => m Date -genDate = canonicalDate <$> genYear <*> genMonth <*> genDay +genDate = do + year <- genYear + let maxDays = if isLeapYear year then 365 else 364 + days <- Days <<< toNumber <$> chooseInt 0 maxDays + pure $ unsafePartial $ fromJust do + janFirst <- exactDate year bottom bottom + adjust days janFirst