time-compat-1.9.2.1: test/main/Test/Calendar/ConvertBack.hs
module Test.Calendar.ConvertBack(convertBack) where
import Data.Time.Calendar.OrdinalDate.Compat
import Data.Time.Calendar.Julian.Compat
import Data.Time.Calendar.WeekDate.Compat
import Data.Time.Calendar.Compat
import Test.Tasty
import Test.Tasty.HUnit
checkDay :: (Show t) => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> String
checkDay encodeDay decodeDay decodeDayValid day = let
st = encodeDay day
day' = decodeDay st
mday' = decodeDayValid st
a = if day /= day'
then unwords [ show day, "-> "
, show st, "-> "
, show day'
, "(diff", show (diffDays day' day) ++ ")" ]
else ""
b = if Just day /= mday'
then unwords [show day, "->", show st, "->", show mday']
else ""
in a ++ b
checkers :: [Day -> String]
checkers
= [ checkDay toOrdinalDate (\(y,d) -> fromOrdinalDate y d) (\(y,d) -> fromOrdinalDateValid y d)
, checkDay toWeekDate (\(y,w,d) -> fromWeekDate y w d) (\(y,w,d) -> fromWeekDateValid y w d)
, checkDay toGregorian (\(y,m,d) -> fromGregorian y m d) (\(y,m,d) -> fromGregorianValid y m d)
, checkDay toJulian (\(y,m,d) -> fromJulian y m d) (\(y,m,d) -> fromJulianValid y m d) ]
days :: [Day]
days = [ModifiedJulianDay 50000 .. ModifiedJulianDay 50200] ++
(fmap (\year -> (fromGregorian year 1 4)) [1980..2000])
convertBack :: TestTree
convertBack = testCase "convertBack" $
assertEqual "" "" $ concatMap (\ch -> concatMap ch days) checkers