time-1.7: test/Test/TestTAI.hs
module Test.TestTAI(testTAI) where
import Data.Time
import Data.Time.Clock.TAI
import Test.TestUtil
sampleLeapSecondMap :: LeapSecondMap
sampleLeapSecondMap d | d < fromGregorian 1972 1 1 = Nothing
sampleLeapSecondMap d | d < fromGregorian 1972 7 1 = Just 10
sampleLeapSecondMap d | d < fromGregorian 1975 1 1 = Just 11
sampleLeapSecondMap _ = Nothing
testTAI :: TestTree;
testTAI = testGroup "leap second transition" $ let
dayA = fromGregorian 1972 6 30
dayB = fromGregorian 1972 7 1
utcTime1 = UTCTime dayA 86399
utcTime2 = UTCTime dayA 86400
utcTime3 = UTCTime dayB 0
mAbsTime1 = utcToTAITime sampleLeapSecondMap utcTime1
mAbsTime2 = utcToTAITime sampleLeapSecondMap utcTime2
mAbsTime3 = utcToTAITime sampleLeapSecondMap utcTime3
in
[
testCase "mapping" $ do
assertEqual "dayA" (Just 10) $ sampleLeapSecondMap dayA
assertEqual "dayB" (Just 11) $ sampleLeapSecondMap dayB
,
testCase "day length" $ do
assertEqual "dayA" (Just 86401) $ utcDayLength sampleLeapSecondMap dayA
assertEqual "dayB" (Just 86400) $ utcDayLength sampleLeapSecondMap dayB
,
testCase "differences" $ do
absTime1 <- assertJust mAbsTime1
absTime2 <- assertJust mAbsTime2
absTime3 <- assertJust mAbsTime3
assertEqual "absTime2 - absTime1" 1 $ diffAbsoluteTime absTime2 absTime1
assertEqual "absTime3 - absTime2" 1 $ diffAbsoluteTime absTime3 absTime2
,
testGroup "round-trip"
[
testCase "1" $ do
absTime <- assertJust mAbsTime1
utcTime <- assertJust $ taiToUTCTime sampleLeapSecondMap absTime
assertEqual "round-trip" utcTime1 utcTime
,
testCase "2" $ do
absTime <- assertJust mAbsTime2
utcTime <- assertJust $ taiToUTCTime sampleLeapSecondMap absTime
assertEqual "round-trip" utcTime2 utcTime
,
testCase "3" $ do
absTime <- assertJust mAbsTime3
utcTime <- assertJust $ taiToUTCTime sampleLeapSecondMap absTime
assertEqual "round-trip" utcTime3 utcTime
]
]