packages feed

time-1.10: test/main/Test/Calendar/AddDays.hs

module Test.Calendar.AddDays
    ( addDaysTest
    ) where

import Data.Time.Calendar
import Test.Calendar.AddDaysRef
import Test.Tasty
import Test.Tasty.HUnit

days :: [Day]
days =
    [ fromGregorian 2005 2 28
    , fromGregorian 2004 2 29
    , fromGregorian 2004 1 31
    , fromGregorian 2004 12 31
    , fromGregorian 2005 7 1
    , fromGregorian 2005 4 21
    , fromGregorian 2005 6 30
    ]

increments :: [Integer]
increments = [-10, -4, -1, 0, 1, 7, 83]

adders :: [(String, Integer -> Day -> Day)]
adders =
    [ ("day", addDays)
    , ("month (clip)", addGregorianMonthsClip)
    , ("month (roll over)", addGregorianMonthsRollOver)
    , ("year (clip)", addGregorianYearsClip)
    , ("year (roll over)", addGregorianYearsRollOver)
    ]

resultDays :: [String]
resultDays = do
    (aname, adder) <- adders
    increment <- increments
    day <- days
    return
        ((showGregorian day) ++
         " + " ++ (show increment) ++ " * " ++ aname ++ " = " ++ showGregorian (adder increment day))

addDaysTest :: TestTree
addDaysTest = testCase "addDays" $ assertEqual "" addDaysRef $ unlines resultDays