packages feed

genvalidity-time-1.0.0.0: src/Data/GenValidity/Time/Clock.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.GenValidity.Time.Clock where

import Data.GenValidity
import Data.GenValidity.Time.Calendar ()
import Data.Time.Clock
import Data.Validity.Time.Clock ()
import Test.QuickCheck

instance GenValid UniversalTime where
  genValid = ModJulianDate <$> genValid
  shrinkValid = fmap ModJulianDate . shrinkValid . getModJulianDate

instance GenValid DiffTime where
  genValid = picosecondsToDiffTime <$> genValid
  shrinkValid = fmap picosecondsToDiffTime . shrinkValid . diffTimeToPicoseconds

instance GenValid UTCTime where
  genValid =
    UTCTime <$> genValid <*> (fromIntegral <$> choose (0 :: Int, 86400))
  shrinkValid (UTCTime d dt) =
    [UTCTime d' dt' | (d', dt') <- shrinkValid (d, dt)]

instance GenValid NominalDiffTime where
  genValid = secondsToNominalDiffTime <$> genValid
  shrinkValid = fmap secondsToNominalDiffTime . shrinkValid . nominalDiffTimeToSeconds