packages feed

hnix-store-tests-0.1.0.0: src/System/Nix/Arbitrary/UTCTime.hs

{-# OPTIONS_GHC -Wno-orphans #-}
-- Stolen from quickcheck-instances (BSD-3)
-- UTCTime/DiffTime slightly modified to produce
-- values rounded to whole seconds
module System.Nix.Arbitrary.UTCTime where

import Data.Time (Day(..), DiffTime, UTCTime(..))
import Test.QuickCheck (Arbitrary(..))

instance Arbitrary Day where
    arbitrary = ModifiedJulianDay <$> (2000 +) <$> arbitrary
    shrink    = (ModifiedJulianDay <$>) . shrink . Data.Time.toModifiedJulianDay

instance Arbitrary DiffTime where
    -- without abs something weird happens, try it
    arbitrary = fromInteger . abs <$> arbitrary

instance Arbitrary UTCTime where
    arbitrary =
        UTCTime
        <$> arbitrary
        <*> arbitrary
    shrink ut@(UTCTime day dayTime) =
         [ ut { Data.Time.utctDay     = d' } | d' <- shrink day     ]
      ++ [ ut { Data.Time.utctDayTime = t' } | t' <- shrink dayTime ]