packages feed

datetime-0.3.1: test/Data/DateTimeTest.hs

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

module Data.DateTimeTest where

import Test.Framework
import Test.Framework.Providers.QuickCheck2 (testProperty)
import Test.QuickCheck
import Data.Maybe (fromJust)

import Data.Time.Clock (UTCTime)
import Data.DateTime

instance Arbitrary UTCTime where
    arbitrary       = do
        offset <- choose (0, 20000) :: Gen Float
        return . fromMJD' $ offset + fromRational startOfTimeMJD


tests :: [Test]
tests = [ testGroup "properties"
          [ testProperty "MJD" prop_MJD
          , testProperty "Universal" prop_Universal
          , testProperty "StartOfTime" prop_StartOfTime
          , testProperty "SqlString" prop_SqlString
          -- , testProperty "SqlStartOfTime" prop_SqlStartOfTime
          ]
        ]

invariant :: Eq a => (a -> a) -> a -> Bool
invariant f x = f x == x

prop_MJD :: DateTime -> Bool
prop_MJD  = invariant $ fromMJD  . toMJD

prop_MJD' :: DateTime -> Bool
prop_MJD' = invariant $ fromMJD' . toMJD'

prop_Universal :: DateTime -> Bool
prop_Universal = invariant $ fromUniversalTime . toUniversalTime

prop_StartOfTime :: DateTime -> Bool
prop_StartOfTime _ = toSeconds startOfTime == 0

prop_SqlString :: DateTime -> Bool
prop_SqlString dt = (fromJust . fromSqlString . toSqlString $ dt') == dt'
  where
    Just dt' = fromSqlString . toSqlString $ dt

-- It doesn't seem like this test ever passed, so disabling.
-- prop_SqlStartOfTime :: DateTime -> Bool
-- prop_SqlStartOfTime _ = toSqlString startOfTime == "1970-01-01 00:00:00"